bug 572: Tag offsets not updated in Packet::PeekData
authorPavel Boyko <boyko@iitp.ru>
Tue, 02 Jun 2009 19:40:05 +0200
changeset 4486 e12cbd513b47
parent 4485 4c4c445efebe
child 4488 1faf35545dfd
bug 572: Tag offsets not updated in Packet::PeekData
src/common/packet.cc
--- a/src/common/packet.cc	Tue Jun 02 16:38:24 2009 +0200
+++ b/src/common/packet.cc	Tue Jun 02 19:40:05 2009 +0200
@@ -294,7 +294,13 @@
 Packet::PeekData (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_buffer.PeekData ();
+  uint32_t oldStart = m_buffer.GetCurrentStartOffset ();
+  uint8_t const * data = m_buffer.PeekData ();
+  uint32_t newStart = m_buffer.GetCurrentStartOffset ();
+
+  // Update tag offsets if buffer offsets were changed
+  const_cast<TagList &>(m_tagList).AddAtStart (newStart - oldStart, newStart);
+  return data;
 }
 
 uint32_t 
@@ -952,6 +958,18 @@
     CHECK (tmp, 1, E (10, 0, 10));
   }
   
+  {
+    // bug 572                                                                  
+    Ptr<Packet> tmp = Create<Packet> (1000);
+    tmp->AddTag (ATestTag<20> ());
+    CHECK (tmp, 1, E (20, 0, 1000));
+    tmp->AddHeader (ATestHeader<2> ());
+    CHECK (tmp, 1, E (20, 2, 1002));
+    tmp->RemoveAtStart (1);
+    CHECK (tmp, 1, E (20, 1, 1001));
+    tmp->PeekData ();
+    CHECK (tmp, 1, E (20, 1, 1001));
+  }
 
   return result;
 }