public ITransportPacket CreateFromRaw(ProtocolType type, byte[] rawPacket, IApplicationPacketFactory applicationPacketFactory) { switch (type) { case ProtocolType.Udp: return(UdpPacket.CreateFromRaw(applicationPacketFactory, rawPacket)); default: throw new NotSupportedException("Protocol type not supported!"); } }
public static UdpPacket CreateFromRaw(IApplicationPacketFactory applicationPacketFactory, byte[] rawPacket) { UdpPacket packet = new UdpPacket(); using (var reader = new BinaryReader(new MemoryStream(rawPacket))) { packet.SourcePort = (ushort)IPAddress.NetworkToHostOrder(reader.ReadInt16()); packet.DestinationPort = (ushort)IPAddress.NetworkToHostOrder(reader.ReadInt16()); ushort totalLength = (ushort)IPAddress.NetworkToHostOrder(reader.ReadInt16()); ushort checksum = (ushort)IPAddress.NetworkToHostOrder(reader.ReadInt16()); ushort payloadLength = (ushort)(totalLength - 8); byte[] payloadData = reader.ReadBytes(payloadLength); packet.Payload = applicationPacketFactory.CreateFromRaw(packet.DestinationPort, payloadData); } return(packet); }