/// <summary> /// Gets an auth server list for a specific username. /// </summary> /// <param name="userName">The username.</param> /// <returns>A list of servers on success; otherwise, <c>null</c>.</returns> public IPEndPoint[] GetAuthServerList(string userName) { userName = userName.ToLower(); byte[] userHash = CryptoHelper.JenkinsHash(Encoding.ASCII.GetBytes(userName)); uint userData = BitConverter.ToUInt32(userHash, 0) & 1; TcpPacket packet = base.GetRawServerList(ESteam2ServerType.ProxyASClientAuthentication, NetHelpers.EndianSwap(userData)); if (packet == null) { return(null); } DataStream ds = new DataStream(packet.GetPayload(), true); ushort numAddrs = ds.ReadUInt16(); IPEndPoint[] serverList = new IPEndPoint[numAddrs]; for (int x = 0; x < numAddrs; ++x) { IPAddrPort ipAddr = IPAddrPort.Deserialize(ds.ReadBytes(6)); serverList[x] = ipAddr; } return(serverList); }
/// <summary> /// Gets a list of all currently active content servers. /// </summary> /// <returns>A list of servers on success; otherwise, <c>null</c>.</returns> public IPEndPoint[] GetContentServerList() { TcpPacket packet = base.GetRawServerList(3); // command 3 if (packet == null) { return(null); } DataStream ds = new DataStream(packet.GetPayload(), true); ushort numAddrs = ds.ReadUInt16(); IPEndPoint[] serverList = new IPEndPoint[numAddrs]; for (int x = 0; x < numAddrs; ++x) { IPAddrPort ipAddr = IPAddrPort.Deserialize(ds.ReadBytes(6)); serverList[x] = ipAddr; } return(serverList); }
/// <summary> /// Gets the server list for a specific server type. /// </summary> /// <param name="type">The server type.</param> /// <returns>A list of servers on success; otherwise, <c>null</c>.</returns> public IPEndPoint[] GetServerList(ESteam2ServerType type) { TcpPacket packet = this.GetRawServerList(( byte )type); if (packet == null) { return(null); } DataStream ds = new DataStream(packet.GetPayload(), true); ushort numAddrs = ds.ReadUInt16(); IPEndPoint[] serverList = new IPEndPoint[numAddrs]; for (int x = 0; x < numAddrs; ++x) { IPAddrPort ipAddr = IPAddrPort.Deserialize(ds.ReadBytes(6)); serverList[x] = ipAddr; } return(serverList); }
static ContentServer[] GetServersFromPacket(TcpPacket packet) { DataStream ds = new DataStream(packet.GetPayload(), true); ushort numAddrs = ds.ReadUInt16(); ContentServer[] serverList = new ContentServer[numAddrs]; for (int x = 0; x < numAddrs; ++x) { uint weighedLoad = ds.ReadUInt32(); IPAddrPort ipAddr = IPAddrPort.Deserialize(ds.ReadBytes(6)); IPAddrPort ipAddr2 = IPAddrPort.Deserialize(ds.ReadBytes(6)); serverList[x] = new ContentServer() { Load = weighedLoad, PackageServer = ipAddr, StorageServer = ipAddr2, }; } return(serverList); }