X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketParser.cci;h=510c2a61b2b0a6715be48c34c7f6086989e566d8;hb=3863d46dd898b7bc35ea8c6ccd8563b18762a6b6;hp=ca796280b50527c51b132ebd5b40242469162d74;hpb=a2bece00465e874b1a52e98918f64aa24919a009;p=senf.git diff --git a/Packets/PacketParser.cci b/Packets/PacketParser.cci index ca79628..510c2a6 100644 --- a/Packets/PacketParser.cci +++ b/Packets/PacketParser.cci @@ -1,6 +1,8 @@ -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// $Id$ +// +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -31,43 +33,36 @@ /////////////////////////////////////////////////////////////////////////// // senf::PacketParserBase +// public members + prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::i() const { return i_; } -prefix_ senf::PacketParserBase::state_type senf::PacketParserBase::state() - const -{ - return data_; -} +// private members -prefix_ senf::PacketData & senf::PacketParserBase::data() +prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::end() const { - return * data_; + return data_->end(); } -prefix_ void senf::PacketParserBase::init() - const -{} - -prefix_ void senf::PacketParserBase::defaultInit() - const -{} +// protected members -prefix_ senf::Packet senf::PacketParserBase::packet() +prefix_ bool senf::PacketParserBase::check(size_type size) const { - // OUCH ... I hate this but for some awkward packet types, access to the packet - // from the parser is really needed (e.g. UDP when building the pseudo-header - // for calculating the checksum). - return Packet(PacketInterpreterBase::ptr(static_cast(&data()))); + return size <= size_type(std::distance(i(),end())); } -//////////////////////////////////////// -// protected members +prefix_ void senf::PacketParserBase::validate(size_type size) + const +{ + if (! check(size)) + throw TruncatedPacketException(); +} prefix_ senf::PacketParserBase::PacketParserBase(data_iterator i, state_type s) : i_ (i), data_ (s) @@ -80,26 +75,42 @@ prefix_ senf::PacketParserBase::PacketParserBase(data_iterator i, state_type s, validate(size); } -prefix_ bool senf::PacketParserBase::check(size_type size) +// public members + +prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::i(size_type offset) const { - return size <= size_type(std::distance(i(),end())); + validate(offset); + return boost::next(i_, offset); } -prefix_ void senf::PacketParserBase::validate(size_type size) +prefix_ senf::PacketParserBase::state_type senf::PacketParserBase::state() const { - if (! check(size)) - throw TruncatedPacketException(); + return data_; } -//////////////////////////////////////// -// private members +prefix_ senf::PacketData & senf::PacketParserBase::data() + const +{ + return * data_; +} -prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::end() +prefix_ void senf::PacketParserBase::init() + const +{} + +prefix_ void senf::PacketParserBase::defaultInit() + const +{} + +prefix_ senf::Packet senf::PacketParserBase::packet() const { - return data_->end(); + // OUCH ... I hate this but for some awkward packet types, access to the packet + // from the parser is really needed (e.g. UDP when building the pseudo-header + // for calculating the checksum). + return Packet(PacketInterpreterBase::ptr(static_cast(&data()))); } ///////////////////////////////cci.e///////////////////////////////////////