/// <summary> /// Serialization constructor /// </summary> /// <param name="data">The request payload data</param> /// <param name="sender">The remote client ip/port</param> public ConnectRequest(byte[] data, IPEndPoint sender) { base.Deserialize(data); // get the remote IP address and port var addr = sender.Address.ToString() + ":" + sender.Port; Console.WriteLine("Connection request from " + addr); // reserve slot for client // TODO: free slot if no pingback within X seconds var client = new Connection(sender); AddClient(addr, client); // headers can be spoofed, so to verify the ip address // contained in the header, we must send a challenge request var pingRequest = new PingRequest(); client.Challenge = pingRequest.Random; Response = pingRequest; }
/// <summary> /// Constructs a ping response from a ping request /// </summary> public PingResponse(PingRequest request) { Type = PacketType.PingResponse; Verify = request.Random; }