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!");
            }
        }
Beispiel #2
0
        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);
        }