Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        public static IPAddrPort Deserialize( byte[] data )
        {
            using ( var ms = new MemoryStream( data ) )
            using ( var br = new BinaryReader( ms ) )
            {
                IPAddrPort ipAddr = new IPAddrPort();

                ipAddr.IPAddress = br.ReadUInt32();
                ipAddr.Port = br.ReadUInt16();

                return ipAddr;
            }
        }
Ejemplo n.º 3
0
        public static IPAddrPort Deserialize(byte[] data)
        {
            using (var ms = new MemoryStream(data))
                using (var br = new BinaryReader(ms))
                {
                    IPAddrPort ipAddr = new IPAddrPort();

                    ipAddr.IPAddress = br.ReadUInt32();
                    ipAddr.Port      = br.ReadUInt16();

                    return(ipAddr);
                }
        }
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }