X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv4Packet.hh;h=39eaffb6ac8f96c98a0dd1b76213e98d8e537ebb;hb=225f601ae7b61c510ccd9596e80aa6cf9cc7cbbe;hp=898620bde07af95845cbc9289e54dbbb00057f2a;hpb=5a7344d1bc318ab9105b71d65a0cc86337dcd4d5;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv4Packet.hh b/senf/Packets/DefaultBundle/IPv4Packet.hh index 898620b..39eaffb 100644 --- a/senf/Packets/DefaultBundle/IPv4Packet.hh +++ b/senf/Packets/DefaultBundle/IPv4Packet.hh @@ -39,29 +39,23 @@ namespace senf { \see INet4Address */ - struct INet4AddressParser : public PacketParserBase + struct INet4AddressParser + : public ValueParserBase { - INet4AddressParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} - - /////////////////////////////////////////////////////////////////////////// - - typedef INet4Address value_type; - static const size_type fixed_bytes = 4u; + INet4AddressParser(data_iterator i, state_type s) : Base(i,s) {} value_type value() const { return value_type::from_data(i()); } void value(value_type const & v) { std::copy(v.begin(), v.end(), i()); } - operator value_type() const { return value(); } - byte & operator[](size_type index) const { return *boost::next(i(),index); } - INet4AddressParser const & operator= (value_type const & other) - { value(other); return *this; } + + using Base::operator=; }; /** \brief Parse an IPv4 packet Parser implementing the IPv4 header. - + \image html IPv4Packet.png - + \see IPv4PacketType \n RFC 791 @@ -96,7 +90,7 @@ namespace senf { } SENF_PARSER_FINALIZE(IPv4PacketParser); - + boost::uint16_t calcChecksum() const; ///< calculate header checksum /**< calculate and return the checksum of the header \see \ref senf::IpChecksum */ @@ -104,8 +98,8 @@ namespace senf { bool validateChecksum() const { return checksum() == calcChecksum(); } ///< validate header checksum - /**< return \c true if the \ref checksum() "checksum" - field is equal to the \ref calcChecksum() + /**< return \c true if the \ref checksum() "checksum" + field is equal to the \ref calcChecksum() "calculated checksum" */ }; @@ -121,7 +115,7 @@ namespace senf { }; /** \brief IPv4 packet - + \par Packet type (typedef): \ref IPv4Packet @@ -139,7 +133,7 @@ namespace senf { \ref IPv4PacketParser::version() "Version" \ref IPv4PacketParser::ihl() "IHL" \ref IPv4PacketParser::tos() "TOS" - \ref IPv4PacketParser::length() "Length" + \ref IPv4PacketParser::length() "Length" \ref IPv4PacketParser::identifier() "Identifier" R @@ -162,7 +156,7 @@ namespace senf { \par Finalize action: \copydetails finalize() - + \ingroup protocolbundle_default */ struct IPv4PacketType @@ -180,18 +174,18 @@ namespace senf { using mixin::initSize; using mixin::init; - static key_t nextPacketKey(packet p) + static key_t nextPacketKey(packet p) { return p->protocol(); } - + /** \brief Dump given IPv4Packet in readable form to given output stream */ - static void dump(packet p, std::ostream & os); - + static void dump(packet p, std::ostream & os); + static void finalize(packet p); ///< Finalize packet. - /**< \li set \ref IPv4PacketParser::length() "length" + /**< \li set \ref IPv4PacketParser::length() "length" from payload size - \li set \ref IPv4PacketParser::protocol() "protocol" + \li set \ref IPv4PacketParser::protocol() "protocol" from type of next packet if found in \ref IpTypes - \li calculate and set + \li calculate and set \ref IPv4PacketParser::checksum() "checksum" */ };