--- a/src/common/packet-printer.cc Thu May 31 11:03:42 2007 +0200
+++ b/src/common/packet-printer.cc Thu May 31 12:34:33 2007 +0200
@@ -54,6 +54,25 @@
return ®isteredChunks;
}
+PacketPrinter
+PacketPrinter::GetDefault (void)
+{
+ return *(PacketPrinter::PeekDefault ());
+}
+PacketPrinter *
+PacketPrinter::PeekDefault (void)
+{
+ static PacketPrinter *tmp = PacketPrinter::CreateStaticDefault ();
+ return tmp;
+}
+PacketPrinter *
+PacketPrinter::CreateStaticDefault (void)
+{
+ static PacketPrinter tmp;
+ return &tmp;
+}
+
+
void
PacketPrinter::PrintChunk (uint32_t chunkUid,
Buffer::Iterator start,
@@ -112,5 +131,40 @@
m_payloadPrinter (os, packetUid, size, info);
}
+void
+PacketPrinter::DoDefaultPrintPayload (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ struct PacketPrinter::FragmentInformation info)
+{
+ os << "data ";
+ os << "[" << info.start << ":" << info.end << "] -> "
+ << "[0:" << size << "]";
+ os << std::endl;
+}
+
+void
+PacketPrinter::DoDefaultPrintDefault (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ std::string &name,
+ struct PacketPrinter::FragmentInformation info)
+{
+ NS_ASSERT_MSG (false, "This should never happen because we provide a printer for _all_ chunk types.");
+}
+
+void
+PacketPrinter::DoDefaultPrintFragment (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ std::string &name,
+ struct PacketPrinter::FragmentInformation info)
+{
+ os << name << " ";
+ os << "[" << info.start << ":" << info.end << "] -> "
+ << "[0:" << size << "]";
+ os << std::endl;
+}
+
} // namespace ns3
--- a/src/common/packet-printer.h Thu May 31 11:03:42 2007 +0200
+++ b/src/common/packet-printer.h Thu May 31 12:34:33 2007 +0200
@@ -105,6 +105,24 @@
static PacketPrinter GetDefault (void);
+ static PacketPrinter *PeekDefault (void);
+ static PacketPrinter *CreateStaticDefault (void);
+ static void DoDefaultPrintPayload (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ struct PacketPrinter::FragmentInformation info);
+ static void DoDefaultPrintDefault (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ std::string &name,
+ struct PacketPrinter::FragmentInformation info);
+ template <typename T>
+ static void DoDefaultPrint (std::ostream &os, uint32_t packetUid, uint32_t size, const T *chunk);
+ static void DoDefaultPrintFragment (std::ostream & os,
+ uint32_t packetUid,
+ uint32_t size,
+ std::string &name,
+ struct PacketPrinter::FragmentInformation info);
template <typename T>
static void DoPrint (Ptr<CallbackImplBase> callbackPrinter,
@@ -202,9 +220,20 @@
RegisteredChunks *chunks = PacketPrinter::GetRegisteredChunks ();
chunks->push_back (std::make_pair(&PacketPrinter::DoPrint<T>,
&PacketPrinter::DoGetName<T>));
+ PacketPrinter::PeekDefault ()->AddPrinter (MakeCallback (&PacketPrinter::DoDefaultPrint<T>),
+ MakeCallback (&PacketPrinter::DoDefaultPrintFragment));
return chunks->size ();
}
+template <typename T>
+void
+PacketPrinter::DoDefaultPrint (std::ostream &os, uint32_t packetUid, uint32_t size, const T *chunk)
+{
+ chunk->Print (os);
+ os << std::endl;
+}
+
+
} // namespace ns3