From 66c3a25fe1df34810316138c8a92c048031ded53 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Wed, 30 May 2007 10:03:15 +0200 Subject: [PATCH] add Chunk::GetName and implement it --- samples/main-packet.cc | 6 ++++++ src/common/chunk.cc | 5 +++++ src/common/chunk.h | 2 ++ src/common/header.h | 4 ++++ src/common/packet-history.cc | 20 ++++++++++++++++++++ src/common/trailer.h | 4 ++++ src/internet-node/arp-header.cc | 5 +++++ src/internet-node/arp-header.h | 1 + src/internet-node/ipv4-header.cc | 6 ++++++ src/internet-node/ipv4-header.h | 1 + src/internet-node/udp-header.cc | 6 +++++- src/internet-node/udp-header.h | 1 + src/node/llc-snap-header.cc | 6 ++++++ src/node/llc-snap-header.h | 1 + 14 files changed, 67 insertions(+), 1 deletion(-) diff --git a/samples/main-packet.cc b/samples/main-packet.cc index 01b46097c..777f95815 100644 --- a/samples/main-packet.cc +++ b/samples/main-packet.cc @@ -15,6 +15,7 @@ public: void SetData (uint16_t data); uint16_t GetData (void) const; private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual void SerializeTo (Buffer::Iterator start) const; virtual uint32_t DeserializeFrom (Buffer::Iterator start); @@ -27,6 +28,11 @@ MyHeader::MyHeader () {} MyHeader::~MyHeader () {} +std::string +MyHeader::DoGetName (void) const +{ + return "MyHeader"; +} void MyHeader::PrintTo (std::ostream &os) const { diff --git a/src/common/chunk.cc b/src/common/chunk.cc index 34c6cbce6..52c1112c3 100644 --- a/src/common/chunk.cc +++ b/src/common/chunk.cc @@ -30,6 +30,11 @@ Chunk::Chunk () Chunk::~Chunk () {} +std::string +Chunk::GetName (void) const +{ + return DoGetName (); +} void Chunk::Print (std::ostream &os) const { diff --git a/src/common/chunk.h b/src/common/chunk.h index 9aa025f96..ab568cd9f 100644 --- a/src/common/chunk.h +++ b/src/common/chunk.h @@ -33,11 +33,13 @@ public: Chunk (); virtual ~Chunk (); + std::string GetName (void) const; void Print (std::ostream &os) const; uint32_t GetSize (void) const; void Serialize (Buffer::Iterator start) const; uint32_t Deserialize (Buffer::Iterator start); private: + virtual std::string DoGetName (void) const = 0; virtual void PrintTo (std::ostream &os) const = 0; virtual uint32_t GetSerializedSize (void) const = 0; virtual void SerializeTo (Buffer::Iterator i) const = 0; diff --git a/src/common/header.h b/src/common/header.h index b51b520ba..18ff84bb2 100644 --- a/src/common/header.h +++ b/src/common/header.h @@ -41,6 +41,10 @@ class Header : public Chunk { public: virtual ~Header (); private: + /** + * \returns a user-readable name to identify this type of header. + */ + virtual std::string DoGetName (void) const = 0; /** * \param os the std output stream in which this * protocol header must print itself. diff --git a/src/common/packet-history.cc b/src/common/packet-history.cc index 256e397e7..4a0e65e88 100644 --- a/src/common/packet-history.cc +++ b/src/common/packet-history.cc @@ -925,6 +925,7 @@ PacketHistory::RegisterChunkFactory (Chunk *(*createStatic) (void)) #include #include +#include #include "ns3/test.h" #include "header.h" #include "trailer.h" @@ -964,12 +965,22 @@ template class HistoryHeader : public Header { private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual uint32_t GetSerializedSize (void) const; virtual void SerializeTo (Buffer::Iterator start) const; virtual uint32_t DeserializeFrom (Buffer::Iterator start); }; +template +std::string +HistoryHeader::DoGetName (void) const +{ + std::ostringstream oss; + oss << N; + return oss.str (); +} + template void HistoryHeader::PrintTo (std::ostream &os) const @@ -1006,12 +1017,21 @@ template class HistoryTrailer : public Trailer { private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual uint32_t GetSerializedSize (void) const; virtual void SerializeTo (Buffer::Iterator start) const; virtual uint32_t DeserializeFrom (Buffer::Iterator start); }; +template +std::string +HistoryTrailer::DoGetName (void) const +{ + std::ostringstream oss; + oss << N; + return oss.str (); +} template void HistoryTrailer::PrintTo (std::ostream &os) const diff --git a/src/common/trailer.h b/src/common/trailer.h index 7ad1e7c31..90d75f2c5 100644 --- a/src/common/trailer.h +++ b/src/common/trailer.h @@ -41,6 +41,10 @@ class Trailer : public Chunk { public: virtual ~Trailer (); private: + /** + * \returns a user-readable name to identify this type of header. + */ + virtual std::string DoGetName (void) const = 0; /** * \param os the std output stream in which this * protocol trailer must print itself. diff --git a/src/internet-node/arp-header.cc b/src/internet-node/arp-header.cc index 3554681ee..0263a29ee 100644 --- a/src/internet-node/arp-header.cc +++ b/src/internet-node/arp-header.cc @@ -83,6 +83,11 @@ ArpHeader::GetDestinationIpv4Address (void) return m_ipv4Dest; } +std::string +ArpHeader::DoGetName (void) const +{ + return "Arp"; +} void ArpHeader::PrintTo (std::ostream &os) const diff --git a/src/internet-node/arp-header.h b/src/internet-node/arp-header.h index d215186ac..9f85579f5 100644 --- a/src/internet-node/arp-header.h +++ b/src/internet-node/arp-header.h @@ -50,6 +50,7 @@ class ArpHeader : public Header { Ipv4Address GetDestinationIpv4Address (void); private: + virtual std::string DoGetName (void) const; /** * \param os */ diff --git a/src/internet-node/ipv4-header.cc b/src/internet-node/ipv4-header.cc index 15be05cab..6242bec23 100644 --- a/src/internet-node/ipv4-header.cc +++ b/src/internet-node/ipv4-header.cc @@ -190,6 +190,12 @@ Ipv4Header::IsChecksumOk (void) const return m_goodChecksum; } +std::string +Ipv4Header::DoGetName (void) const +{ + return "Ipv4"; +} + void Ipv4Header::PrintTo (std::ostream &os) const { diff --git a/src/internet-node/ipv4-header.h b/src/internet-node/ipv4-header.h index 910313073..b45ed9f02 100644 --- a/src/internet-node/ipv4-header.h +++ b/src/internet-node/ipv4-header.h @@ -140,6 +140,7 @@ public: bool IsChecksumOk (void) const; private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual uint32_t GetSerializedSize (void) const; virtual void SerializeTo (Buffer::Iterator start) const; diff --git a/src/internet-node/udp-header.cc b/src/internet-node/udp-header.cc index 38a7fa7d8..c4ef2642d 100644 --- a/src/internet-node/udp-header.cc +++ b/src/internet-node/udp-header.cc @@ -91,7 +91,11 @@ UdpHeader::InitializeChecksum (Ipv4Address source, m_initialChecksum = Ipv4ChecksumCalculate (0, buf, 12); } - +std::string +UdpHeader::DoGetName (void) const +{ + return "Udp"; +} void UdpHeader::PrintTo (std::ostream &os) const diff --git a/src/internet-node/udp-header.h b/src/internet-node/udp-header.h index 1948440cf..332614ba0 100644 --- a/src/internet-node/udp-header.h +++ b/src/internet-node/udp-header.h @@ -81,6 +81,7 @@ public: uint8_t protocol); private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual uint32_t GetSerializedSize (void) const; virtual void SerializeTo (Buffer::Iterator start) const; diff --git a/src/node/llc-snap-header.cc b/src/node/llc-snap-header.cc index 6f4b2295f..b7bd73121 100644 --- a/src/node/llc-snap-header.cc +++ b/src/node/llc-snap-header.cc @@ -47,6 +47,12 @@ LlcSnapHeader::GetSerializedSize (void) const return 1 + 1 + 1 + 3 + 2; } +std::string +LlcSnapHeader::DoGetName (void) const +{ + return "LlcSnap"; +} + void LlcSnapHeader::PrintTo (std::ostream &os) const { diff --git a/src/node/llc-snap-header.h b/src/node/llc-snap-header.h index 5b7457ad6..ad98cda7c 100644 --- a/src/node/llc-snap-header.h +++ b/src/node/llc-snap-header.h @@ -37,6 +37,7 @@ class LlcSnapHeader : public Header { uint16_t GetType (void); private: + virtual std::string DoGetName (void) const; virtual void PrintTo (std::ostream &os) const; virtual uint32_t GetSerializedSize (void) const; virtual void SerializeTo (Buffer::Iterator start) const;