Example #1
0
            /// <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);
            }
Example #2
0
            /// <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);
            }