X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2F80211Bundle%2FWLANPacket.cc;h=c704f6d2e4b32372c2791fc12e4d1d813f912346;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=2f1c1481d9153e09511807b8cec115f490b7d273;hpb=acffdb583e9130b451bf52018a39d62b49621042;p=senf.git diff --git a/Packets/80211Bundle/WLANPacket.cc b/Packets/80211Bundle/WLANPacket.cc index 2f1c148..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) { @@ -91,7 +111,7 @@ prefix_ void senf::WLANPacketType::dump(packet p, std::ostream &os) << " Retransmission : " << unsigned( p->retry()) << "\n" << " Duration : " << unsigned( p->duration()) << "\n"; if (p->is_mgtFrame()) { - os << " Management-Frame:\n" + os << " Management-Frame:\n" << " BSSID : " << p->mgtFrame().bssid() << "\n" << " Destination Address : " << p->mgtFrame().destinationAddress() << "\n" << " Source Address : " << p->mgtFrame().sourceAddress() << "\n" @@ -109,8 +129,8 @@ prefix_ void senf::WLANPacketType::dump(packet p, std::ostream &os) } if (p->is_dataFrame()) { os << " Data-Frame:\n" - << " Sequence Number : " << unsigned( p->mgtFrame().sequenceNumber()) << "\n" - << " Fragment Number : " << unsigned( p->mgtFrame().fragmentNumber()) << "\n"; + << " Sequence Number : " << unsigned( p->dataFrame().sequenceNumber()) << "\n" + << " Fragment Number : " << unsigned( p->dataFrame().fragmentNumber()) << "\n"; } };