示例#1
0
文件: DhtBucket.cs 项目: nandub/DeOps
        // used to add global proxies
        public DhtContact(DhtSource opHost, IPAddress opIP, TunnelAddress client, DhtAddress server)
        {
            UserID   = opHost.UserID;
            ClientID = opHost.ClientID;
            IP       = opIP;
            TcpPort  = opHost.TcpPort;
            UdpPort  = opHost.UdpPort;

            TunnelServer = new DhtAddress(server.UserID, server.ClientID, server.IP, server.UdpPort);
            TunnelClient = client;
        }
示例#2
0
        public static TunnelPacket Decode(G2Header root)
        {
            TunnelPacket tunnel = new TunnelPacket();

            if (G2Protocol.ReadPayload(root))
            {
                tunnel.Payload = Utilities.ExtractBytes(root.Data, root.PayloadPos, root.PayloadSize);
            }

            G2Protocol.ResetPacket(root);


            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_Source:
                    tunnel.Source = TunnelAddress.FromBytes(child.Data, child.PayloadPos);
                    break;

                case Packet_Target:
                    tunnel.Target = TunnelAddress.FromBytes(child.Data, child.PayloadPos);
                    break;

                case Packet_SourceServer:
                    tunnel.SourceServer = DhtAddress.ReadPacket(child);
                    break;

                case Packet_TargetServer:
                    tunnel.TargetServer = DhtAddress.ReadPacket(child);
                    break;
                }
            }

            return(tunnel);
        }
示例#3
0
文件: DhtBucket.cs 项目: nandub/DeOps
        public static new DhtContact ReadPacket(G2Header root)
        {
            // read payload
            DhtContact contact = new DhtContact();

            contact.UserID   = BitConverter.ToUInt64(root.Data, root.PayloadPos);
            contact.ClientID = BitConverter.ToUInt16(root.Data, root.PayloadPos + 8);
            contact.UdpPort  = BitConverter.ToUInt16(root.Data, root.PayloadPos + 10);
            contact.TcpPort  = BitConverter.ToUInt16(root.Data, root.PayloadPos + 12);

            // read packets
            G2Protocol.ResetPacket(root);

            G2Header child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_IP:
                    contact.IP = new IPAddress(Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize));
                    break;

                case Packet_Server:
                    contact.TunnelServer = DhtAddress.ReadPacket(child);
                    break;

                case Packet_Client:
                    contact.TunnelClient = TunnelAddress.FromBytes(child.Data, child.PayloadPos);
                    break;
                }
            }

            return(contact);
        }
示例#4
0
        public static LocationData Decode(byte[] data)
        {
            G2Header root = new G2Header(data);

            G2Protocol.ReadPacket(root);

            if (root.Name != LocationPacket.Data)
            {
                return(null);
            }

            LocationData loc   = new LocationData();
            G2Header     child = new G2Header(root.Data);

            while (G2Protocol.ReadNextChild(root, child) == G2ReadResult.PACKET_GOOD)
            {
                if (!G2Protocol.ReadPayload(child))
                {
                    continue;
                }

                switch (child.Name)
                {
                case Packet_Key:
                    loc.Key    = Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize);
                    loc.UserID = Utilities.KeytoID(loc.Key);
                    break;

                case Packet_Source:
                    loc.Source = DhtSource.ReadPacket(child);
                    loc.UserID = loc.Source.UserID;     // encode light doesnt send full key
                    break;

                case Packet_IP:
                    loc.IP = new IPAddress(Utilities.ExtractBytes(child.Data, child.PayloadPos, child.PayloadSize));
                    break;

                case Packet_Proxies:
                    loc.Proxies.Add(DhtAddress.ReadPacket(child));
                    break;

                case Packet_Name:
                    loc.Name = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Place:
                    loc.Place = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Version:
                    loc.Version = CompactNum.ToUInt32(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_GMTOffset:
                    loc.GmtOffset = BitConverter.ToInt32(child.Data, child.PayloadPos);
                    break;

                case Packet_Away:
                    loc.Away = BitConverter.ToBoolean(child.Data, child.PayloadPos);
                    break;

                case Packet_AwayMsg:
                    loc.AwayMessage = UTF8Encoding.UTF8.GetString(child.Data, child.PayloadPos, child.PayloadSize);
                    break;

                case Packet_Tag:
                    loc.Tags.Add(PatchTag.FromBytes(child.Data, child.PayloadPos, child.PayloadSize));
                    break;

                case Packet_TunnelClient:
                    loc.TunnelClient = TunnelAddress.FromBytes(child.Data, child.PayloadPos);
                    break;

                case Packet_TunnelServers:
                    loc.TunnelServers.Add(DhtAddress.ReadPacket(child));
                    break;
                }
            }

            return(loc);
        }
示例#5
0
        // used to add global proxies
        public DhtContact(DhtSource opHost, IPAddress opIP, TunnelAddress client, DhtAddress server)
        {
            UserID = opHost.UserID;
            ClientID = opHost.ClientID;
            IP = opIP;
            TcpPort = opHost.TcpPort;
            UdpPort = opHost.UdpPort;

            TunnelServer = new DhtAddress(server.UserID, server.ClientID, server.IP, server.UdpPort);
            TunnelClient = client;
        }