From 4b8dabddaed8a6dcdb90f7f47b68a721c4333b8b Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 31 May 2007 12:34:33 +0200 Subject: [PATCH] add support for a default PacketPrinter --- src/common/packet-printer.cc | 54 ++++++++++++++++++++++++++++++++++++ src/common/packet-printer.h | 29 +++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/src/common/packet-printer.cc b/src/common/packet-printer.cc index 16c83da2c..f038a129f 100644 --- a/src/common/packet-printer.cc +++ b/src/common/packet-printer.cc @@ -54,6 +54,25 @@ PacketPrinter::GetRegisteredChunks (void) 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 @@ PacketPrinter::PrintPayload (std::ostream &os, uint32_t packetUid, uint32_t size 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 diff --git a/src/common/packet-printer.h b/src/common/packet-printer.h index 5a07b9529..116607007 100644 --- a/src/common/packet-printer.h +++ b/src/common/packet-printer.h @@ -105,6 +105,24 @@ private: 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 + 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 static void DoPrint (Ptr callbackPrinter, @@ -202,9 +220,20 @@ PacketPrinter::AllocateUid (void) RegisteredChunks *chunks = PacketPrinter::GetRegisteredChunks (); chunks->push_back (std::make_pair(&PacketPrinter::DoPrint, &PacketPrinter::DoGetName)); + PacketPrinter::PeekDefault ()->AddPrinter (MakeCallback (&PacketPrinter::DoDefaultPrint), + MakeCallback (&PacketPrinter::DoDefaultPrintFragment)); return chunks->size (); } +template +void +PacketPrinter::DoDefaultPrint (std::ostream &os, uint32_t packetUid, uint32_t size, const T *chunk) +{ + chunk->Print (os); + os << std::endl; +} + + } // namespace ns3