bug 572: Tag offsets not updated in Packet::PeekData
authorPavel Boyko <boyko@iitp.ru>
Tue Jun 02 19:40:05 2009 +0200 (8 months ago)
changeset 4486e12cbd513b47
parent 4485 4c4c445efebe
child 4488 1faf35545dfd
bug 572: Tag offsets not updated in Packet::PeekData
src/common/packet.cc
     1.1 --- a/src/common/packet.cc	Tue Jun 02 16:38:24 2009 +0200
     1.2 +++ b/src/common/packet.cc	Tue Jun 02 19:40:05 2009 +0200
     1.3 @@ -294,7 +294,13 @@
     1.4  Packet::PeekData (void) const
     1.5  {
     1.6    NS_LOG_FUNCTION (this);
     1.7 -  return m_buffer.PeekData ();
     1.8 +  uint32_t oldStart = m_buffer.GetCurrentStartOffset ();
     1.9 +  uint8_t const * data = m_buffer.PeekData ();
    1.10 +  uint32_t newStart = m_buffer.GetCurrentStartOffset ();
    1.11 +
    1.12 +  // Update tag offsets if buffer offsets were changed
    1.13 +  const_cast<TagList &>(m_tagList).AddAtStart (newStart - oldStart, newStart);
    1.14 +  return data;
    1.15  }
    1.16  
    1.17  uint32_t 
    1.18 @@ -952,6 +958,18 @@
    1.19      CHECK (tmp, 1, E (10, 0, 10));
    1.20    }
    1.21    
    1.22 +  {
    1.23 +    // bug 572                                                                  
    1.24 +    Ptr<Packet> tmp = Create<Packet> (1000);
    1.25 +    tmp->AddTag (ATestTag<20> ());
    1.26 +    CHECK (tmp, 1, E (20, 0, 1000));
    1.27 +    tmp->AddHeader (ATestHeader<2> ());
    1.28 +    CHECK (tmp, 1, E (20, 2, 1002));
    1.29 +    tmp->RemoveAtStart (1);
    1.30 +    CHECK (tmp, 1, E (20, 1, 1001));
    1.31 +    tmp->PeekData ();
    1.32 +    CHECK (tmp, 1, E (20, 1, 1001));
    1.33 +  }
    1.34  
    1.35    return result;
    1.36  }