X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv4Packet.hh;h=39eaffb6ac8f96c98a0dd1b76213e98d8e537ebb;hb=9bc655e14d2d8c204ed835896cb51e42d49bd68f;hp=0122084135da40c4651eedb82317390648713285;hpb=eb83d096ce313989c3588c1cb6663caa513fb370;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv4Packet.hh b/senf/Packets/DefaultBundle/IPv4Packet.hh index 0122084..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,22 +174,24 @@ 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" */ }; - /** \brief IPv4 packet typedef */ + /** \brief IPv4 packet typedef + \ingroup protocolbundle_default + */ typedef ConcretePacket IPv4Packet; }