public void Receive_ProxyAck(G2ReceivedPacket packet) { ProxyAck ack = ProxyAck.Decode(packet); // update routing if (packet.ReceivedUdp && ack.Source.Firewall == FirewallType.Open) { Routing.Add(new DhtContact(ack.Source, packet.Source.IP)); } foreach (DhtContact contact in ack.ContactList) { Routing.Add(contact); } // dont do proxy if we're not firewalled or remote host didnt accept if (Core.Firewall == FirewallType.Open || !ack.Accept) { if (packet.ReceivedTcp) { packet.Tcp.CleanClose("Proxy request rejected"); } return; } // received ack udp if (packet.ReceivedUdp) { if (!TcpControl.ProxyMap.ContainsKey(ack.Source.RoutingID)) { TcpControl.MakeOutbound(packet.Source, ack.Source.TcpPort, "proxy ack recv"); } } // received ack tcp else { packet.Tcp.Proxy = ProxyType.Server; TcpControl.AddProxy(packet.Tcp); TcpControl.CheckProxies(); // location and rudp connections updated after 20 seconds } }
public void Receive_ProxyRequest(G2ReceivedPacket packet) { ProxyReq request = ProxyReq.Decode(packet); ProxyAck ack = new ProxyAck(); ack.Source = GetLocalSource(); // check if there is space for type required if (Core.Firewall == FirewallType.Open && TcpControl.AcceptProxy(request.Type, ack.Source.UserID)) { ack.Accept = true; } else if (packet.ReceivedTcp) { packet.Tcp.CleanClose("Couldn't accept proxy request"); return; } // always send some contacts along so node can find closer proxy ack.ContactList = Routing.Find(request.SenderID, 8); // received request tcp if (packet.ReceivedUdp) { UdpControl.SendTo(packet.Source, ack); } // received request tcp else { packet.Tcp.Proxy = request.Type; packet.Tcp.SendPacket(ack); TcpControl.AddProxy(packet.Tcp); // check if a proxy needs to be disconnected now because overflow TcpControl.CheckProxies(); } }
public void Receive_ProxyRequest(G2ReceivedPacket packet) { ProxyReq request = ProxyReq.Decode(packet); ProxyAck ack = new ProxyAck(); ack.Source = GetLocalSource(); // check if there is space for type required if (Core.Firewall == FirewallType.Open && TcpControl.AcceptProxy(request.Type, ack.Source.UserID)) { ack.Accept = true; } else if (packet.ReceivedTcp) { packet.Tcp.CleanClose("Couldn't accept proxy request"); return; } // always send some contacts along so node can find closer proxy ack.ContactList = Routing.Find(request.SenderID, 8); // received request tcp if (packet.ReceivedUdp) UdpControl.SendTo(packet.Source, ack); // received request tcp else { packet.Tcp.Proxy = request.Type; packet.Tcp.SendPacket(ack); TcpControl.AddProxy(packet.Tcp); // check if a proxy needs to be disconnected now because overflow TcpControl.CheckProxies(); } }