Utils/Logger: Complete unit testing
[senf.git] / Packets / DefaultBundle / IpV6Packet.cc
index 7a72d0f..e96eaec 100644 (file)
 //#include "IpV6Packet.ih"
 
 // Custom includes
+#include <iomanip>
+#include <boost/io/ios_state.hpp>
 #include "EthernetPacket.hh"
-#include "Socket/INetAddressing.hh"
+#include "../../Socket/Protocols/INet/INetAddressing.hh"
 
 //#include "IpV6Packet.mpp"
 #define prefix_
@@ -45,15 +47,24 @@ namespace {
 
 prefix_ void senf::IpV6PacketType::dump(packet p, std::ostream & os)
 {
+    boost::io::ios_all_saver ias(os);
     os << "Internet protocol Version 6:\n"
-       << "  version       : " << unsigned(p->version()) << "\n"
-       << "  traffic class : " << std::hex << unsigned(p->trafficClass()) << "\n"
-       << "  flow label    : " << std::hex << unsigned(p->flowLabel()) << "\n"
-       << "  length        : " << std::dec << unsigned(p->length()) << "\n"
-       << "  next header   : " << unsigned(p->nextHeader()) << "\n"
-       << "  hop limit     : " << unsigned(p->hopLimit()) << "\n"
-       << "  source        : " << INet6Address(p->source()) << "\n"
-       << "  destination   : " << INet6Address(p->destination()) << "\n";
+       << "  version        : " << unsigned(p->version()) << "\n"
+       << "  traffic class  : 0x" 
+         << std::hex << std::setw(2) << std::setfill('0') << unsigned(p->trafficClass()) << "\n"
+       << "  flow label     : 0x" 
+         << std::hex << std::setw(5) << std::setfill('0') << unsigned(p->flowLabel()) << "\n"
+       << "  payload length : " << std::dec << unsigned(p->length()) << "\n"
+       << "  next header    : " << unsigned(p->nextHeader()) << "\n"
+       << "  hop limit      : " << unsigned(p->hopLimit()) << "\n"
+       << "  source         : " << p->source() << "\n"
+       << "  destination    : " << p->destination() << "\n";
+}
+
+prefix_ void senf::IpV6PacketType::finalize(packet p)
+{
+    p->length() << (p.size() - Parse_IpV6::fixed_bytes);
+    p->nextHeader() << key(p.next());
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////