bug 179: Packet fragmentation bug
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 15 May 2008 09:49:04 -0700
changeset 3060 5a49ba9ad976
parent 3059 890b147e1ed6
child 3061 2b7093f42f78
bug 179: Packet fragmentation bug
src/common/buffer.cc
src/common/packet-metadata-test.cc
--- a/src/common/buffer.cc	Thu May 08 12:40:44 2008 -0700
+++ b/src/common/buffer.cc	Thu May 15 09:49:04 2008 -0700
@@ -438,7 +438,9 @@
 void
 Buffer::AddAtEnd (const Buffer &o)
 {
-  if (m_end == m_zeroAreaEnd &&
+  if (m_data->m_count == 1 &&
+      m_end == m_zeroAreaEnd &&
+      m_end == m_data->m_dirtyEnd &&
       o.m_start == o.m_zeroAreaStart &&
       o.m_zeroAreaEnd - o.m_zeroAreaStart > 0)
     {
@@ -450,6 +452,7 @@
       uint32_t zeroSize = o.m_zeroAreaEnd - o.m_zeroAreaStart;
       m_zeroAreaEnd += zeroSize;
       m_end = m_zeroAreaEnd;
+      m_data->m_dirtyEnd = m_zeroAreaEnd;
       uint32_t endData = o.m_end - o.m_zeroAreaEnd;
       AddAtEnd (endData);
       Buffer::Iterator dst = End ();
@@ -459,6 +462,7 @@
       dst.Write (src, o.End ());
       return;
     }
+
   Buffer dst = CreateFullCopy ();
   Buffer src = o.CreateFullCopy ();
 
--- a/src/common/packet-metadata-test.cc	Thu May 08 12:40:44 2008 -0700
+++ b/src/common/packet-metadata-test.cc	Thu May 15 09:49:04 2008 -0700
@@ -613,6 +613,17 @@
   p = Create<Packet> (16383);
   p = Create<Packet> (16384);
 
+
+  // bug 179.
+  p = Create<Packet> (40);
+  p2 = p->CreateFragment (5, 5);
+  p3 = p->CreateFragment (10, 30);
+  ADD_HEADER (p2, 8);
+  ADD_HEADER (p3, 8);
+  REM_HEADER (p2, 8);
+  REM_HEADER (p3, 8);
+  p2->AddAtEnd (p3);
+
   return ok;
 }