X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80211Bundle%2FRadiotapPacket.cc;h=960c9b48fe7f25ee7a62de300cd0afe15a874811;hb=ddb2132be4265f8a0d7d4c954c7c9401e59d027c;hp=4bf458d34f1a3fe608754da3c137eab26a1d1866;hpb=01e8fa6cf173c60c3deb47c29c6d56718ef9548e;p=senf.git diff --git a/senf/Packets/80211Bundle/RadiotapPacket.cc b/senf/Packets/80211Bundle/RadiotapPacket.cc index 4bf458d..960c9b4 100644 --- a/senf/Packets/80211Bundle/RadiotapPacket.cc +++ b/senf/Packets/80211Bundle/RadiotapPacket.cc @@ -2,23 +2,30 @@ // // Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Christian Niephaus // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund +// Christian Niephaus + // Definition of RadiotapPacket non-inline non-template functions @@ -35,9 +42,9 @@ extern "C" { } #define prefix_ -///////////////////////////////cc.p////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // Offset table management prefix_ senf::RadiotapPacketParser::OffsetTable & @@ -63,7 +70,7 @@ prefix_ void senf::RadiotapPacketParser::parseOffsetTable(boost::uint8_t * data, unsigned size (8u); while (ieee80211_radiotap_iterator_next(&iter) == 0) { if (iter.is_radiotap_ns && - iter.this_arg_index <= int(senf::RadiotapPacketParser::MAX_INDEX)) + iter.this_arg_index <= int(RadiotapPacketParser::MAX_INDEX)) table[iter.this_arg_index] = iter.this_arg - data; // We need to set size here in the loop since the iter fields are only valid // when at least one present bit is set ... @@ -93,7 +100,7 @@ prefix_ void senf::RadiotapPacketParser::buildOffsetTable(boost::uint32_t presen parseOffsetTable((boost::uint8_t*)&header, header.it_len, table); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::RadiotapPacketParser unsigned const senf::RadiotapPacketParser_Header::FIELD_SIZE[] = { @@ -118,16 +125,6 @@ prefix_ void senf::RadiotapPacketParser::disable_fcs() } prefix_ senf::RadiotapPacketParser::OffsetTable const & -senf::RadiotapPacketParser::currentTable() - const -{ - OffsetTable & table (offsetTable(presentFlags())); - if (! table[MAX_INDEX+1]) - parseOffsetTable(&(*data().begin()), data().size(), table); - return table; -} - -prefix_ senf::RadiotapPacketParser::OffsetTable const & senf::RadiotapPacketParser::getTable(boost::uint32_t presentFlags) const { @@ -193,13 +190,15 @@ prefix_ void senf::RadiotapPacketParser::updatePresentFlags(boost::uint32_t flag cumulativeNewBytes += newBytes; b = newTable[index] + FIELD_SIZE[index]; } + length() += cumulativeNewBytes; presentFlags() = flags; + currentTable_ = &newTable; } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::RadiotapPacketType -prefix_ void senf::RadiotapPacketType::dump(packet p, std::ostream &os) +prefix_ void senf::RadiotapPacketType::dump(packet p, std::ostream & os) { boost::io::ios_all_saver ias(os); os << "Radiotap:\n" @@ -296,11 +295,11 @@ prefix_ void senf::RadiotapPacketType::dump(packet p, std::ostream &os) # undef FIELD } - -prefix_ void senf::RadiotapPacketType::finalize(packet p) +prefix_ void senf::RadiotapPacketType::init(packet p) { - ///\fixme Is this really correct ? shouldn't I use nextPacket.begin() - begin() here ? - p->length() << p->calculateSize(); + // ?? Why the heck do we need the +0? Otherwise we get an + // 'undefined reference to 'RadiotapPacketParser_Header::fixed_bytes' + p->length() << RadiotapPacketParser_Header::fixed_bytes+0; } prefix_ senf::PacketInterpreterBase::factory_t senf::RadiotapPacketType::nextPacketType(packet p) @@ -315,14 +314,15 @@ prefix_ senf::PacketInterpreterBase::factory_t senf::RadiotapPacketType::nextPac prefix_ senf::RadiotapPacketType::optional_range senf::RadiotapPacketType::nextPacketRange(packet p) { - size_type h (senf::bytes(p.parser())); - size_type t (p->flagsPresent() && p->flags().fcsAtEnd() ? 4 : 0); + parser rtParser (p.parser()); + size_type h (senf::bytes(rtParser)); + size_type t (rtParser.flagsPresent() && rtParser.flags().fcsAtEnd() ? 4 : 0); return p.size() <= h+t ? no_range() : optional_range( range(p.data().begin() + h, p.data().end() - t) ); } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_