//-/////////////////////////////////////////////////////////////////////////////////////////////////
// Offset table management
+senf::RadiotapPacketParser::OffsetMap senf::RadiotapPacketParser::offsetMap_;
+
prefix_ senf::RadiotapPacketParser::OffsetTable &
senf::RadiotapPacketParser::offsetTable(boost::uint32_t presentFlags)
{
- typedef std::map<boost::uint32_t, OffsetTable> OffsetMap;
- static OffsetMap offsetMap;
-
- OffsetMap::iterator i (offsetMap.find(presentFlags));
- if (i == offsetMap.end())
- i = offsetMap.insert(std::make_pair(presentFlags, OffsetTable())).first;
+ OffsetMap::iterator i (offsetMap_.find(presentFlags));
+ if (i == offsetMap_.end())
+ i = offsetMap_.insert(std::make_pair(presentFlags, OffsetTable())).first;
return i->second;
}
// radiotap.c nor we will ever dereference those pointers, we just calculate the offsets.
// This works, as long as we don't support extension headers ...
header.it_len = 0xFFFF;
- header.it_present = presentFlags;
+ // Note that all data in the header is little endian!
+ header.it_present = htole32(presentFlags);
parseOffsetTable((boost::uint8_t*)&header, header.it_len, table);
}
}
prefix_ senf::RadiotapPacketType::optional_range
-senf::RadiotapPacketType::nextPacketRange(packet p)
+senf::RadiotapPacketType::nextPacketRange(packet const & p)
{
parser rtParser (p.parser());
size_type h (senf::bytes(rtParser));