Advertisement
Guest User

Untitled

a guest
May 22nd, 2020
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <ns3/packet.h>
  2. #include <iostream>
  3.  
  4. using namespace ns3;
  5.  
  6. struct Data
  7. {
  8. uint16_t m_a {31};
  9.  
  10. void Serialize (Buffer::Iterator start) const;
  11. uint32_t Deserialize (Buffer::Iterator start);
  12. uint32_t GetSerializedSize () const;
  13. void Print (std::ostream &os) const;
  14. bool operator == (const Data &o) const;
  15. };
  16.  
  17. void
  18. Data::Serialize (Buffer::Iterator start) const
  19. {
  20. Buffer::Iterator i = start;
  21. i.WriteHtonU16 (m_a);
  22. }
  23.  
  24. uint32_t
  25. Data::Deserialize (Buffer::Iterator start)
  26. {
  27. Buffer::Iterator i = start;
  28. m_a = i.ReadNtohU16 ();
  29. return GetSerializedSize ();
  30. }
  31.  
  32. uint32_t
  33. Data::GetSerializedSize () const
  34. {
  35. return 2;
  36. }
  37.  
  38. void
  39. Data::Print (std::ostream &os) const
  40. {
  41. os << m_a;
  42. }
  43.  
  44. bool
  45. Data::operator == (const Data &o) const
  46. {
  47. return m_a == o.m_a;
  48. }
  49.  
  50. class TestHeader : public Header
  51. {
  52. public:
  53. static TypeId GetTypeId (void);
  54. virtual TypeId GetInstanceTypeId (void) const override { return GetTypeId (); }
  55.  
  56. virtual void Serialize (Buffer::Iterator start) const override;
  57. virtual uint32_t Deserialize (Buffer::Iterator start) override;
  58. virtual uint32_t GetSerializedSize () const override;
  59. virtual void Print (std::ostream &os) const override;
  60. bool operator == (const TestHeader &o) const;
  61.  
  62. uint8_t m_a {1};
  63. Data m_d;
  64. };
  65.  
  66.  
  67. TypeId
  68. TestHeader::GetTypeId (void)
  69. {
  70. static TypeId tid = TypeId ("ns3::TestHeader")
  71. .SetParent<Header> ()
  72. .AddConstructor<TestHeader> ();
  73. return tid;
  74. }
  75.  
  76. void
  77. TestHeader::Serialize (Buffer::Iterator start) const
  78. {
  79. Buffer::Iterator i = start;
  80. m_d.Serialize (i);
  81. i.WriteU8 (m_a);
  82. }
  83.  
  84. uint32_t
  85. TestHeader::Deserialize (Buffer::Iterator start)
  86. {
  87. Buffer::Iterator i = start;
  88. m_d.Deserialize (i);
  89. m_a = i.ReadU8 ();
  90. return GetSerializedSize ();
  91. }
  92.  
  93. uint32_t
  94. TestHeader::GetSerializedSize () const
  95. {
  96. return 1 + 2;
  97. }
  98.  
  99. void
  100. TestHeader::Print (std::ostream &os) const
  101. {
  102. os << +m_a << " ";
  103. m_d.Print (os);
  104. }
  105.  
  106. bool
  107. TestHeader::operator == (const TestHeader &o) const
  108. {
  109. return m_a == o.m_a && m_d == o.m_d;
  110. }
  111.  
  112. int main()
  113. {
  114. Ptr<Packet> p = Create<Packet> (1000);
  115. TestHeader h;
  116.  
  117. h.m_a = 99;
  118.  
  119. p->AddHeader (h);
  120.  
  121. // ======================================
  122.  
  123. TestHeader o;
  124. p->RemoveHeader (o);
  125.  
  126. if (h == o)
  127. {
  128. std::cout << "The two headers are the same. Written: ";
  129. h.Print (std::cout);
  130. std::cout << ", read ";
  131. o.Print (std::cout);
  132. std::cout << std::endl;
  133. }
  134. else
  135. {
  136. std::cout << "The two headers differs. Written: ";
  137. h.Print (std::cout);
  138. std::cout << ", read ";
  139. o.Print (std::cout);
  140. std::cout << std::endl;
  141. }
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement