no need to keep around a Ptr<Packet>
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon Jun 08 16:45:13 2009 +0200 (8 months ago)
changeset 4536981e2f0b696b
parent 4535 c2b1a2145ae5
child 4537 092556b2c176
no need to keep around a Ptr<Packet>
src/applications/v4ping/v4ping.cc
src/internet-stack/icmpv4.cc
src/internet-stack/icmpv4.h
     1.1 --- a/src/applications/v4ping/v4ping.cc	Mon Jun 08 16:44:21 2009 +0200
     1.2 +++ b/src/applications/v4ping/v4ping.cc	Mon Jun 08 16:45:13 2009 +0200
     1.3 @@ -87,10 +87,11 @@
     1.4  	  if (echo.GetSequenceNumber () == (m_seq - 1) &&
     1.5  	      echo.GetIdentifier () == 0)
     1.6  	    {
     1.7 -	      Ptr<const Packet> data = echo.GetData ();
     1.8 -	      if (data->GetSize () == 16)
     1.9 +	      uint8_t data[16];
    1.10 +	      uint32_t dataSize = echo.GetData (data);
    1.11 +	      if (dataSize == 16)
    1.12  		{
    1.13 -		  uint32_t *buf = (uint32_t *)data->PeekData ();
    1.14 +		  uint32_t *buf = (uint32_t *)data;
    1.15  		  if (buf[0] == GetNode ()->GetId () &&
    1.16  		      buf[1] == GetApplicationId ())
    1.17  		    {
     2.1 --- a/src/internet-stack/icmpv4.cc	Mon Jun 08 16:44:21 2009 +0200
     2.2 +++ b/src/internet-stack/icmpv4.cc	Mon Jun 08 16:45:13 2009 +0200
     2.3 @@ -108,7 +108,9 @@
     2.4  void 
     2.5  Icmpv4Echo::SetData (Ptr<const Packet> data)
     2.6  {
     2.7 -  m_data = data->Copy ();
     2.8 +  uint32_t size = (data->GetSize ()>16)?16:data->GetSize();
     2.9 +  data->CopyData (m_data, size);
    2.10 +  m_dataSize = size;
    2.11  }
    2.12  uint16_t 
    2.13  Icmpv4Echo::GetIdentifier (void) const
    2.14 @@ -120,10 +122,11 @@
    2.15  {
    2.16    return m_sequence;
    2.17  }
    2.18 -Ptr<const Packet> 
    2.19 -Icmpv4Echo::GetData (void) const
    2.20 +uint32_t
    2.21 +Icmpv4Echo::GetData (uint8_t data[16]) const
    2.22  {
    2.23 -  return m_data->Copy ();
    2.24 +  memcpy (data, m_data, m_dataSize);
    2.25 +  return m_dataSize;
    2.26  }
    2.27  
    2.28  
    2.29 @@ -139,8 +142,14 @@
    2.30  Icmpv4Echo::Icmpv4Echo ()
    2.31    : m_identifier (0),
    2.32      m_sequence (0),
    2.33 -    m_data (0)
    2.34 -{}
    2.35 +    m_dataSize (0)
    2.36 +{
    2.37 +  // make sure that thing is initialized to get initialized bytes
    2.38 +  for (uint8_t j = 0; j < 16; j++)
    2.39 +    {
    2.40 +      m_data[j] = 0;
    2.41 +    }
    2.42 +}
    2.43  Icmpv4Echo::~Icmpv4Echo ()
    2.44  {}
    2.45  TypeId 
    2.46 @@ -151,14 +160,14 @@
    2.47  uint32_t 
    2.48  Icmpv4Echo::GetSerializedSize (void) const
    2.49  {
    2.50 -  return 4 + m_data->GetSize ();
    2.51 +  return 4 + m_dataSize;
    2.52  }
    2.53  void 
    2.54  Icmpv4Echo::Serialize (Buffer::Iterator start) const
    2.55  {
    2.56    start.WriteHtonU16 (m_identifier);
    2.57    start.WriteHtonU16 (m_sequence);
    2.58 -  start.Write (m_data->PeekData (), m_data->GetSize ());
    2.59 +  start.Write (m_data, m_dataSize);
    2.60  }
    2.61  uint32_t 
    2.62  Icmpv4Echo::Deserialize (Buffer::Iterator start)
    2.63 @@ -166,11 +175,8 @@
    2.64    m_identifier = start.ReadNtohU16 ();
    2.65    m_sequence = start.ReadNtohU16 ();
    2.66    NS_ASSERT (start.GetSize () >= 4);
    2.67 -  uint32_t size = start.GetSize () - 4;
    2.68 -  uint8_t *buffer = new uint8_t[size] ();
    2.69 -  start.Read (buffer, size);
    2.70 -  m_data = Create<Packet> (buffer, size);
    2.71 -  delete[] buffer;
    2.72 +  m_dataSize = start.GetSize () - 4;
    2.73 +  start.Read (m_data, m_dataSize);
    2.74    return start.GetSize ();
    2.75  }
    2.76  void 
     3.1 --- a/src/internet-stack/icmpv4.h	Mon Jun 08 16:44:21 2009 +0200
     3.2 +++ b/src/internet-stack/icmpv4.h	Mon Jun 08 16:45:13 2009 +0200
     3.3 @@ -50,7 +50,7 @@
     3.4    void SetData (Ptr<const Packet> data);
     3.5    uint16_t GetIdentifier (void) const;
     3.6    uint16_t GetSequenceNumber (void) const;
     3.7 -  Ptr<const Packet> GetData (void) const;
     3.8 +  uint32_t GetData (uint8_t payload[16]) const;
     3.9  
    3.10  
    3.11    static TypeId GetTypeId (void);
    3.12 @@ -64,7 +64,8 @@
    3.13  private:
    3.14    uint16_t m_identifier;
    3.15    uint16_t m_sequence;
    3.16 -  Ptr<Packet> m_data;
    3.17 +  uint8_t m_data[16];
    3.18 +  uint32_t m_dataSize;
    3.19  };
    3.20  
    3.21  class Icmpv4DestinationUnreachable : public Header