X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv6Packet.hh;h=ac9560bbb16b7ffa7f8825bfd18927bae73232b1;hb=874b9d37b59223d9b0dce3bddafa130045419750;hp=251dfa7df01f94a17a8b82f5220f12c1718d15e3;hpb=57524bfa72e4536b15700a83eae94093ed32106a;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv6Packet.hh b/senf/Packets/DefaultBundle/IPv6Packet.hh index 251dfa7..ac9560b 100644 --- a/senf/Packets/DefaultBundle/IPv6Packet.hh +++ b/senf/Packets/DefaultBundle/IPv6Packet.hh @@ -37,24 +37,18 @@ namespace senf { /** \brief Parse an IPv6 address - + \see INet6Address */ - struct INet6AddressParser : public PacketParserBase + struct INet6AddressParser + : public ValueParserBase { - INet6AddressParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} - - /////////////////////////////////////////////////////////////////////////// - - typedef INet6Address value_type; - static const size_type fixed_bytes = 16u; + INet6AddressParser(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); } - INet6AddressParser const & operator= (value_type const & other) - { value(other); return *this; } + + using Base::operator=; }; /** \brief Parse an IPv6 packet @@ -88,7 +82,7 @@ namespace senf { \par Packet type (typedef): \ref IPv6Packet - + \par Fields: \ref IPv6PacketParser @@ -114,7 +108,7 @@ namespace senf { \ref IPv6PacketParser::destination() "Destination Address" - + \par Associated registries: \ref IpTypes @@ -138,17 +132,17 @@ namespace senf { using mixin::initSize; using mixin::init; - static key_t nextPacketKey(packet p) + static key_t nextPacketKey(packet p) { return p->nextHeader(); } - + /** \brief Dump given IPv6Packet 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 IPv6PacketParser::length() "length" + /**< \li set \ref IPv6PacketParser::length() "length" from payload size - \li set \ref IPv6PacketParser::nextHeader() - "nextHeader" from type of next packet if found + \li set \ref IPv6PacketParser::nextHeader() + "nextHeader" from type of next packet if found in \ref IpTypes */ };