Пример #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);
        }
Пример #2
0
            internal void Deserialize(DataStream ds)
            {
                Magic = ds.ReadUInt16();

                uint length = ds.ReadUInt32();

                Index = ds.ReadUInt32();

                Data = ds.ReadBytes(length);
            }
Пример #3
0
        internal Steam2Ticket(byte[] blob)
        {
            Entries = new List <Entry>();

            using (var ds = new DataStream(blob))
            {
                Magic = ds.ReadUInt16();

                Length   = ds.ReadUInt32();
                unknown1 = ds.ReadUInt32();

                while (ds.SizeRemaining() > 0)
                {
                    var entry = new Entry();
                    entry.Deserialize(ds);

                    Entries.Add(entry);
                }
            }
        }
        /// <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);
        }
Пример #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);
        }