/// <summary> /// Initializes a new instance of the <see cref="PacketDotNet.Ieee80211.PpiPacket"/> class. /// </summary> /// <param name='bas'> /// A <see cref="ByteArraySegment"/> /// </param> public PpiPacket(ByteArraySegment bas) { // slice off the header portion header = new ByteArraySegment(bas); Version = VersionBytes; Flags = FlagsBytes; // update the header size based on the headers packet length header.Length = LengthBytes; LinkType = LinkTypeBytes; PpiFields = ReadPpiFields(); PpiCommon commonField = FindFirstByType(PpiFieldType.PpiCommon) as PpiCommon; // parse the encapsulated bytes payloadPacketOrData = ParseEncapsulatedBytes(header, commonField); }
/// <summary> /// Used by the Ieee80211PpiPacket constructor. /// </summary> /// <param name="header"> /// A <see cref="ByteArraySegment"/> /// </param> /// <param name="commonField"> /// The <see cref="PpiCommon"/> object in the PPI packet or null if not available /// </param> /// <returns> /// A <see cref="PacketOrByteArraySegment"/> /// </returns> internal static PacketOrByteArraySegment ParseEncapsulatedBytes(ByteArraySegment header, PpiCommon commonField) { // slice off the payload var payload = header.EncapsulatedBytes(); var payloadPacketOrData = new PacketOrByteArraySegment(); MacFrame frame = null; if (commonField != null) { bool fcsPresent = ((commonField.Flags & PpiCommon.CommonFlags.FcsIncludedInFrame) == PpiCommon.CommonFlags.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); }