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); }
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); }