// 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; }
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); }
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); }
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); }