X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketParser.cci;h=510c2a61b2b0a6715be48c34c7f6086989e566d8;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=844914589ecdbb6bc7dfff82f793699c62fc9cbd;hpb=844ac7af0a15ed6c487bc9928148ac38a2ce4025;p=senf.git diff --git a/Packets/PacketParser.cci b/Packets/PacketParser.cci index 8449145..510c2a6 100644 --- a/Packets/PacketParser.cci +++ b/Packets/PacketParser.cci @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -33,51 +33,37 @@ /////////////////////////////////////////////////////////////////////////// // senf::PacketParserBase +// public members + prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::i() const { return i_; } -prefix_ data_iterator senf::PacketParserBase::i(size_type offset) - const -{ - validate(offset); - return boost::next(i_, offset); -} +// private members -prefix_ senf::PacketParserBase::state_type senf::PacketParserBase::state() +prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::end() const { - return data_; + return data_->end(); } -prefix_ senf::PacketData & senf::PacketParserBase::data() +// protected members + +prefix_ bool senf::PacketParserBase::check(size_type size) const { - return * data_; + return size <= size_type(std::distance(i(),end())); } -prefix_ void senf::PacketParserBase::init() - const -{} - -prefix_ void senf::PacketParserBase::defaultInit() - const -{} - -prefix_ senf::Packet senf::PacketParserBase::packet() - const +prefix_ void senf::PacketParserBase::validate(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()))); + if (! check(size)) + throw TruncatedPacketException(); } -//////////////////////////////////////// -// protected members - prefix_ senf::PacketParserBase::PacketParserBase(data_iterator i, state_type s) : i_ (i), data_ (s) {} @@ -89,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///////////////////////////////////////