Ejemplo n.º 1
0
            internal RadioPacket(ByteArraySegment bas)
            {
                log.Debug("");

                // slice off the header portion
                header        = new ByteArraySegment(bas);
                header.Length = RadioFields.DefaultHeaderLength;
                Version       = VersionBytes;
                Length        = LengthBytes;

                // update the header size based on the headers packet length
                header.Length  = Length;
                Present        = ReadPresentFields();
                RadioTapFields = ReadRadioTapFields();

                //Before we attempt to parse the payload we need to work out if
                //the FCS was valid and if it will be present at the end of the frame
                FlagsRadioTapField flagsField = this[RadioTapType.Flags] as FlagsRadioTapField;

                payloadPacketOrData = ParseEncapsulatedBytes(header.EncapsulatedBytes(), flagsField);
            }
Ejemplo n.º 2
0
            internal static PacketOrByteArraySegment ParseEncapsulatedBytes(ByteArraySegment payload, FlagsRadioTapField flagsField)
            {
                var      payloadPacketOrData = new PacketOrByteArraySegment();
                MacFrame frame = null;

                if (flagsField != null)
                {
                    bool fcsPresent = ((flagsField.Flags & RadioTapFlags.FcsIncludedInFrame) == RadioTapFlags.FcsIncludedInFrame);

                    if (fcsPresent)
                    {
                        frame = MacFrame.ParsePacketWithFcs(payload);
                    }
                    else
                    {
                        frame = MacFrame.ParsePacket(payload);
                    }
                }
                else
                {
                    frame = MacFrame.ParsePacket(payload);
                }

                if (frame == null)
                {
                    payloadPacketOrData.TheByteArraySegment = payload;
                }
                else
                {
                    payloadPacketOrData.ThePacket = frame;
                }

                return(payloadPacketOrData);
            }