private static void AddIps(UdpItem item, UdpListener udp, ulong time) { UdpPacketReader packet = new UdpPacketReader(item.Data); ushort port = packet; UdpNode node = UdpNodeManager.Find(x => x.IP.Equals(((IPEndPoint)item.EndPoint).Address)); if (node != null) { node.Port = port; } else { UdpNodeManager.Add(item.EndPoint); } while (packet.Remaining > 5) { UdpNode n = new UdpNode(); n.IP = packet; n.Port = packet; UdpNodeManager.Add(n); } udp.SendDatagram(new UdpItem { Data = UdpOutbound.AckIps(((IPEndPoint)item.EndPoint).Address, time), EndPoint = item.EndPoint, Msg = UdpMsg.OP_SERVERLIST_ACKIPS }); }
public UdpChannelItem(EndPoint addr, byte[] packet) { UdpPacketReader reader = new UdpPacketReader(packet.Skip(1).ToArray()); this.IP = ((IPEndPoint)addr).Address; this.Port = reader; this.Users = reader; this.Name = reader; this.Topic = reader; this.Language = reader; this.Version = reader; byte count = reader; if (count > 0) { List <IPEndPoint> servers = new List <IPEndPoint>(); for (int i = 0; i < count; i++) { IPAddress ip = reader; ushort port = reader; servers.Add(new IPEndPoint(ip, port)); } this.Servers = servers.ToArray(); } else { this.Servers = new IPEndPoint[] { } }; } }
private static void WantCheckFirewall(UdpItem item, UdpListener udp, ulong time) { UdpPacketReader packet = new UdpPacketReader(item.Data); ushort port = packet; FirewallTest fw = udp.TestRemoteFirewall; if (fw != null) { fw.Cookie = AccountManager.NextCookie; fw.EndPoint = item.EndPoint; fw.Time = time; udp.SendDatagram(new UdpItem { Data = UdpOutbound.ReadyCheckFirewall(fw), EndPoint = item.EndPoint, Msg = UdpMsg.OP_SERVERLIST_READYTOCHECKFIREWALL }); } else { udp.SendDatagram(new UdpItem { Data = UdpOutbound.CheckFirewallBusy(((IPEndPoint)item.EndPoint).Address, time), EndPoint = item.EndPoint, Msg = UdpMsg.OP_SERVERLIST_CHECKFIREWALLBUSY }); } }
private static void ProceedCheckFirewall(UdpItem item, UdpListener udp, ulong time) { UdpPacketReader packet = new UdpPacketReader(item.Data); ushort port = packet; uint cookie = packet; udp.StartRemoteFirewallTest(cookie); }
private static void CheckFirewallBusy(UdpItem item, UdpListener udp, ulong time) { UdpPacketReader packet = new UdpPacketReader(item.Data); ushort port = packet; while (packet.Remaining > 5) { UdpNode n = new UdpNode(); n.IP = packet; n.Port = packet; UdpNodeManager.Add(n); } }
private static void ReadyToCheckFirewall(UdpItem item, UdpListener udp, ulong time) { UdpPacketReader packet = new UdpPacketReader(item.Data); uint cookie = packet; if (!udp.ServerAddressReceived) { udp.ServerAddressReceived = true; Settings.ExternalIP = packet; ServerCore.Log("server address reported as " + Settings.ExternalIP); } udp.SendDatagram(new UdpItem { Data = UdpOutbound.ProceedCheckFirewall(cookie), EndPoint = item.EndPoint, Msg = UdpMsg.OP_SERVERLIST_PROCEEDCHECKFIREWALL }); udp.AddChecker(((IPEndPoint)item.EndPoint).Address); }
private static void AckIps(UdpItem item, UdpListener udp, ulong time) { UdpStats.ACKIPS++; UdpPacketReader packet = new UdpPacketReader(item.Data); ushort port = packet; UdpNode node = UdpNodeManager.Find(x => x.IP.Equals(((IPEndPoint)item.EndPoint).Address)); if (node != null) { node.Port = port; node.Ack++; node.LastConnect = time; node.Try = 0; } while (packet.Remaining > 5) { UdpNode n = new UdpNode(); n.IP = packet; n.Port = packet; UdpNodeManager.Add(n); } }