public static IRequest Serialize(byte[] rawRequest) { if (rawRequest.Length < 1) { return(null); } IRequest request; switch ((NatPacketType)rawRequest[7]) { case NatPacketType.Init: request = new InitRequest(rawRequest); break; case NatPacketType.AddressCheck: request = new AddressRequest(rawRequest); break; case NatPacketType.NatifyRequest: request = new NatifyRequest(rawRequest); break; case NatPacketType.ConnectAck: request = null; break; case NatPacketType.Report: request = new ReportRequest(rawRequest); break; case NatPacketType.ErtAck: request = new ErtAckRequest(rawRequest); break; default: request = null; LogWriter.UnknownDataRecieved(rawRequest); break; } if (request == null) { return(null); } if (!(bool)request.Parse()) { return(null); } return(request); }
public void NatifyTest() { var rawRequest = new byte[] { 0xfd, 0xfc, 0x1e, 0x66, 0x6a, 0xb2, 0x03, 0x0c, 0x00, 0x00, 0x03, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; var request = new ErtAckRequest(rawRequest); request.Parse(); Assert.Equal(RequestType.NatifyRequest, request.CommandName); Assert.Equal((uint)151191552, request.Cookie); Assert.Equal(NatClientIndex.GameClient, request.ClientIndex); Assert.Equal((byte)0, request.UseGamePort); Assert.Equal((byte)3, request.Version); Assert.Equal((byte)0, request.UseGamePort); Assert.Equal(NatPortType.NN1, request.PortType); }