X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2F80211Bundle%2FWLANPacket.cc;h=c704f6d2e4b32372c2791fc12e4d1d813f912346;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=675a09bff6c4f8dd1ebad0161a8a662daa2e1379;hpb=bdbba4bce64d25fdc42c2531b3b2e60bd8849e4f;p=senf.git diff --git a/Packets/80211Bundle/WLANPacket.cc b/Packets/80211Bundle/WLANPacket.cc index 675a09b..c704f6d 100644 --- a/Packets/80211Bundle/WLANPacket.cc +++ b/Packets/80211Bundle/WLANPacket.cc @@ -81,6 +81,26 @@ prefix_ senf::MACAddressParser senf::WLANPacket_DataFrameParser::bssid() return addr1(); } +prefix_ senf::PacketInterpreterBase::factory_t senf::WLANPacketType::nextPacketType(packet p) +{ + if (p->is_dataFrame() && (p->subtype()==0 || p->subtype()==8)) //data frame and subtype is Data or QoS Data + return LlcSnapPacket::factory(); + return no_factory(); +} + +prefix_ senf::PacketInterpreterBase::optional_range senf::WLANPacketType::nextPacketRange(packet p) +{ + if (p->is_dataFrame()) { + size_type sz = 24; //header length of wlan data frame (WDS is not considered) + if (p->subtype()==8) //subtype QoSData + sz+=2; //2 bytes for QoS field + return range( + boost::next(p.data().begin(),sz), + boost::prior(p.data().end(),4) ); //-4 bytes FCS + } + //TODO beacon frame payload + return no_range(); +} prefix_ void senf::WLANPacketType::dump(packet p, std::ostream &os) {