Packets/80221Bundle: added static MIHF_IDs
[senf.git] / senf / Packets / DefaultBundle / IPv6Extensions.cc
index d033d44..d9b1dc9 100644 (file)
@@ -26,8 +26,9 @@
 
 #include "IPv6Extensions.hh"
 //#include "IPv6Extensions.ih"
-#include <senf/Utils/hexdump.hh>
+
 // Custom includes
+#include <senf/Utils/hexdump.hh>
 
 //#include "IPv6Extensions.mpp"
 #define prefix_
@@ -51,6 +52,16 @@ prefix_ void senf::IPv6FragmentPacketType::dump(packet p, std::ostream & os)
        << "0x" << std::hex << unsigned(p->id()) << "\n";
 }
 
+prefix_ void senf::IPv6FragmentPacketType::finalize(packet p)
+{
+    try {
+        p->nextHeader() << key(p.next());
+    }
+    catch (InvalidPacketChainException & ex) {
+        p->nextHeader() << 59; // No next header
+    }
+}
+
 prefix_ void senf::IPv6RoutingPacketType::dump(packet p, std::ostream & os)
 {
     os << "Internet protocol Version 6 routing extension:\n"
@@ -66,6 +77,16 @@ prefix_ void senf::IPv6RoutingPacketType::dump(packet p, std::ostream & os)
             os << "    " << *i << "\n";
 }
 
+prefix_ void senf::IPv6RoutingPacketType::finalize(packet p)
+{
+    try {
+        p->nextHeader() << key(p.next());
+    }
+    catch (InvalidPacketChainException & ex) {
+        p->nextHeader() << 59; // No next header
+    }
+}
+
 prefix_ void senf::IPv6HopByHopOptionsPacketType::dump(packet p, std::ostream & os)
 {
     os << "Internet protocol Version 6 Hop-By-Hop extension:\n"
@@ -74,13 +95,17 @@ prefix_ void senf::IPv6HopByHopOptionsPacketType::dump(packet p, std::ostream &
     os << "  OptionTypes:\n";
     typedef IPv6HopByHopOptionsPacket::Parser::options_t::container optContainer_t;
     optContainer_t options (p->options());
-    optContainer_t::iterator optIter(options.begin());
-    for(; optIter != options.end(); ++optIter) {
-        os << senf::fieldName("  AltAction")           << unsigned(optIter->altAction()) << "\n"
-           << senf::fieldName("  ChangeFlag")          << unsigned(optIter->changeFlag()) << "\n"
-           << senf::fieldName("  Option Type")         << unsigned(optIter->optionType()) << "\n"
-           << senf::fieldName("  OptionLength")        << unsigned(optIter->optionLength()) <<"\n";
-        senf::hexdump(boost::begin(optIter->value()) , boost::end(optIter->value()), os );
+    for (optContainer_t::const_iterator i = options.begin(); i != options.end(); ++i)
+        i->dump( os);
+}
+
+prefix_ void senf::IPv6HopByHopOptionsPacketType::finalize(packet p)
+{
+    try {
+        p->nextHeader() << key(p.next());
+    }
+    catch (InvalidPacketChainException & ex) {
+        p->nextHeader() << 59; // No next header
     }
 }