src/network/model/packet.cc
author Alexander Krotov <ilabdsf@yandex.ru>
Sun, 26 Jul 2015 19:44:32 +0300
changeset 11567 6aea6eab3ff3
parent 11566 85fc8963ab62
permissions -rw-r--r--
Make ByteTagList offsets relative to packet start
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "packet.h"
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 239
diff changeset
    21
#include "ns3/assert.h"
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
    22
#include "ns3/log.h"
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
    23
#include "ns3/simulator.h"
5334
92aafeab5e4f packet test suite ported to new framework
Pavel Boyko <boyko@iitp.ru>
parents: 5224
diff changeset
    24
#include <string>
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
    25
#include <cstdarg>
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
    26
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9894
diff changeset
    27
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9894
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("Packet");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
    31
uint32_t Packet::m_globalUid = 0;
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
    32
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    33
TypeId 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    34
ByteTagIterator::Item::GetTypeId (void) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    35
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    36
  return m_tid;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    37
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    38
uint32_t 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    39
ByteTagIterator::Item::GetStart (void) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    40
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    41
  return m_start;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    42
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    43
uint32_t 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    44
ByteTagIterator::Item::GetEnd (void) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    45
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    46
  return m_end;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    47
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    48
void 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    49
ByteTagIterator::Item::GetTag (Tag &tag) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    50
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    51
  if (tag.GetInstanceTypeId () != GetTypeId ())
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    52
    {
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    53
      NS_FATAL_ERROR ("The tag you provided is not of the right type.");
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    54
    }
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    55
  tag.Deserialize (m_buffer);
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    56
}
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    57
ByteTagIterator::Item::Item (TypeId tid, uint32_t start, uint32_t end, TagBuffer buffer)
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    58
  : m_tid (tid),
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    59
    m_start (start),
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    60
    m_end (end),
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    61
    m_buffer (buffer)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    62
{
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    63
}
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    64
bool
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    65
ByteTagIterator::HasNext (void) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    66
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    67
  return m_current.HasNext ();
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    68
}
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    69
ByteTagIterator::Item
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    70
ByteTagIterator::Next (void)
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    71
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    72
  ByteTagList::Iterator::Item i = m_current.Next ();
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    73
  return ByteTagIterator::Item (i.tid,
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
    74
                                i.start-m_current.GetOffsetStart (),
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
    75
                                i.end-m_current.GetOffsetStart (),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    76
                                i.buf);
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    77
}
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    78
ByteTagIterator::ByteTagIterator (ByteTagList::Iterator i)
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    79
  : m_current (i)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    80
{
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    81
}
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    82
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
    83
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    84
PacketTagIterator::PacketTagIterator (const struct PacketTagList::TagData *head)
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    85
  : m_current (head)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    86
{
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    87
}
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    88
bool
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    89
PacketTagIterator::HasNext (void) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    90
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    91
  return m_current != 0;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    92
}
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
    93
PacketTagIterator::Item
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    94
PacketTagIterator::Next (void)
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    95
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    96
  NS_ASSERT (HasNext ());
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    97
  const struct PacketTagList::TagData *prev = m_current;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    98
  m_current = m_current->next;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
    99
  return PacketTagIterator::Item (prev);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   100
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   101
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   102
PacketTagIterator::Item::Item (const struct PacketTagList::TagData *data)
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   103
  : m_data (data)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   104
{
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   105
}
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   106
TypeId
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   107
PacketTagIterator::Item::GetTypeId (void) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   108
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   109
  return m_data->tid;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   110
}
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   111
void
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   112
PacketTagIterator::Item::GetTag (Tag &tag) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   113
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   114
  NS_ASSERT (tag.GetInstanceTypeId () == m_data->tid);
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   115
  tag.Deserialize (TagBuffer ((uint8_t*)m_data->data,
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   116
                              (uint8_t*)m_data->data
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   117
                              + PacketTagList::TagData::MAX_SIZE));
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   118
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   119
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   120
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   121
Ptr<Packet> 
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   122
Packet::Copy (void) const
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   123
{
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   124
  // we need to invoke the copy constructor directly
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   125
  // rather than calling Create because the copy constructor
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   126
  // is private.
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   127
  return Ptr<Packet> (new Packet (*this), false);
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   128
}
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   129
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
Packet::Packet ()
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   131
  : m_buffer (),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   132
    m_byteTagList (),
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   133
    m_packetTagList (),
6167
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   134
    /* The upper 32 bits of the packet id in 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   135
     * metadata is for the system id. For non-
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   136
     * distributed simulations, this is simply 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   137
     * zero.  The lower 32 bits are for the 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   138
     * global UID
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   139
     */
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   140
    m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, 0),
5505
c0ac392289c3 replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5334
diff changeset
   141
    m_nixVector (0)
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   142
{
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   143
  m_globalUid++;
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   144
}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   146
Packet::Packet (const Packet &o)
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   147
  : m_buffer (o.m_buffer),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   148
    m_byteTagList (o.m_byteTagList),
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   149
    m_packetTagList (o.m_packetTagList),
5505
c0ac392289c3 replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5334
diff changeset
   150
    m_metadata (o.m_metadata)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   151
{
6457
9dd21e4198f8 undelete copy method in nix-vector
Josh Pelkey <jpelkey@gatech.edu>
parents: 6455
diff changeset
   152
  o.m_nixVector ? m_nixVector = o.m_nixVector->Copy ()
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   153
    : m_nixVector = 0;
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   154
}
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   155
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   156
Packet &
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   157
Packet::operator = (const Packet &o)
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   158
{
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   159
  if (this == &o)
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   160
    {
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   161
      return *this;
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   162
    }
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   163
  m_buffer = o.m_buffer;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   164
  m_byteTagList = o.m_byteTagList;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   165
  m_packetTagList = o.m_packetTagList;
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   166
  m_metadata = o.m_metadata;
6457
9dd21e4198f8 undelete copy method in nix-vector
Josh Pelkey <jpelkey@gatech.edu>
parents: 6455
diff changeset
   167
  o.m_nixVector ? m_nixVector = o.m_nixVector->Copy () 
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   168
    : m_nixVector = 0;
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   169
  return *this;
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   170
}
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   171
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
Packet::Packet (uint32_t size)
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   173
  : m_buffer (size),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   174
    m_byteTagList (),
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   175
    m_packetTagList (),
6167
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   176
    /* The upper 32 bits of the packet id in 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   177
     * metadata is for the system id. For non-
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   178
     * distributed simulations, this is simply 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   179
     * zero.  The lower 32 bits are for the 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   180
     * global UID
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   181
     */
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   182
    m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size),
5505
c0ac392289c3 replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5334
diff changeset
   183
    m_nixVector (0)
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   184
{
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   185
  m_globalUid++;
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   186
}
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   187
Packet::Packet (uint8_t const *buffer, uint32_t size, bool magic)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   188
  : m_buffer (0, false),
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   189
    m_byteTagList (),
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   190
    m_packetTagList (),
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   191
    m_metadata (0,0),
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   192
    m_nixVector (0)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   193
{
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   194
  NS_ASSERT (magic);
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   195
  Deserialize (buffer, size);
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   196
}
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   197
239
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   198
Packet::Packet (uint8_t const*buffer, uint32_t size)
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   199
  : m_buffer (),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   200
    m_byteTagList (),
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   201
    m_packetTagList (),
6167
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   202
    /* The upper 32 bits of the packet id in 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   203
     * metadata is for the system id. For non-
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   204
     * distributed simulations, this is simply 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   205
     * zero.  The lower 32 bits are for the 
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   206
     * global UID
b920710704c9 Add clarifying comments
Josh Pelkey <jpelkey@gatech.edu>
parents: 6132
diff changeset
   207
     */
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   208
    m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size),
5505
c0ac392289c3 replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5334
diff changeset
   209
    m_nixVector (0)
239
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   210
{
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   211
  m_globalUid++;
239
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   212
  m_buffer.AddAtStart (size);
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   213
  Buffer::Iterator i = m_buffer.Begin ();
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   214
  i.Write (buffer, size);
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   215
}
e194d619534b add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   216
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   217
Packet::Packet (const Buffer &buffer,  const ByteTagList &byteTagList, 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   218
                const PacketTagList &packetTagList, const PacketMetadata &metadata)
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   219
  : m_buffer (buffer),
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   220
    m_byteTagList (byteTagList),
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   221
    m_packetTagList (packetTagList),
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   222
    m_metadata (metadata),
5505
c0ac392289c3 replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5334
diff changeset
   223
    m_nixVector (0)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   224
{
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   225
}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   227
Ptr<Packet>
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   228
Packet::CreateFragment (uint32_t start, uint32_t length) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
   230
  NS_LOG_FUNCTION (this << start << length);
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   231
  Buffer buffer = m_buffer.CreateFragment (start, length);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   232
  ByteTagList byteTagList = m_byteTagList;
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   233
  byteTagList.Adjust (-start);
819
3bae75040589 calculate the correct size of header and trailer to remove from buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 806
diff changeset
   234
  NS_ASSERT (m_buffer.GetSize () >= start + length);
3bae75040589 calculate the correct size of header and trailer to remove from buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 806
diff changeset
   235
  uint32_t end = m_buffer.GetSize () - (start + length);
888
f882ee7eaccf history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 887
diff changeset
   236
  PacketMetadata metadata = m_metadata.CreateFragment (start, end);
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   237
  // again, call the constructor directly rather than
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   238
  // through Create because it is private.
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   239
  return Ptr<Packet> (new Packet (buffer, byteTagList, m_packetTagList, metadata), false);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   242
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   243
Packet::SetNixVector (Ptr<NixVector> nixVector)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   244
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   245
  m_nixVector = nixVector;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   246
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   247
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   248
Ptr<NixVector>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   249
Packet::GetNixVector (void) const
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   250
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   251
  return m_nixVector;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   252
} 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5074
diff changeset
   253
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   254
void
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   255
Packet::AddHeader (const Header &header)
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   256
{
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   257
  uint32_t size = header.GetSerializedSize ();
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   258
  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << size);
11551
c84a84dea37a ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents: 11072
diff changeset
   259
  m_buffer.AddAtStart (size);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   260
  m_byteTagList.Adjust (size);
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   261
  m_byteTagList.AddAtStart (size);
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   262
  header.Serialize (m_buffer.Begin ());
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   263
  m_metadata.AddHeader (header, size);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   264
}
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   265
uint32_t
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   266
Packet::RemoveHeader (Header &header)
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   267
{
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   268
  uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   269
  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized);
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   270
  m_buffer.RemoveAtStart (deserialized);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   271
  m_byteTagList.Adjust (-deserialized);
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   272
  m_metadata.RemoveHeader (header, deserialized);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   273
  return deserialized;
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   274
}
3364
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   275
uint32_t
3738
011897c60e9c bug 331: constify Packet::PeekHeader
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3553
diff changeset
   276
Packet::PeekHeader (Header &header) const
3364
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   277
{
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   278
  uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   279
  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized);
3364
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   280
  return deserialized;
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   281
}
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   282
void
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   283
Packet::AddTrailer (const Trailer &trailer)
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   284
{
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   285
  uint32_t size = trailer.GetSerializedSize ();
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   286
  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << size);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   287
  m_byteTagList.AddAtEnd (GetSize ());
11551
c84a84dea37a ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents: 11072
diff changeset
   288
  m_buffer.AddAtEnd (size);
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   289
  Buffer::Iterator end = m_buffer.End ();
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   290
  trailer.Serialize (end);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   291
  m_metadata.AddTrailer (trailer, size);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   292
}
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   293
uint32_t
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   294
Packet::RemoveTrailer (Trailer &trailer)
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   295
{
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   296
  uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   297
  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized);
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   298
  m_buffer.RemoveAtEnd (deserialized);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   299
  m_metadata.RemoveTrailer (trailer, deserialized);
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   300
  return deserialized;
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   301
}
3364
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   302
uint32_t
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   303
Packet::PeekTrailer (Trailer &trailer)
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   304
{
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   305
  uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   306
  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized);
3364
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   307
  return deserialized;
8e6ac6061680 implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3301
diff changeset
   308
}
2663
dc5314da50aa remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2660
diff changeset
   309
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
void 
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   311
Packet::AddAtEnd (Ptr<const Packet> packet)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
{
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   313
  NS_LOG_FUNCTION (this << packet << packet->GetSize ());
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   314
  m_byteTagList.AddAtEnd (GetSize ());
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   315
  ByteTagList copy = packet->m_byteTagList;
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   316
  copy.AddAtStart (0);
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   317
  copy.Adjust (GetSize ());
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   318
  m_byteTagList.Add (copy);
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2834
diff changeset
   319
  m_buffer.AddAtEnd (packet->m_buffer);
1865
829dc1815014 add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1493
diff changeset
   320
  m_metadata.AddAtEnd (packet->m_metadata);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
}
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   322
void
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   323
Packet::AddPaddingAtEnd (uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
   325
  NS_LOG_FUNCTION (this << size);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   326
  m_byteTagList.AddAtEnd (GetSize ());
11551
c84a84dea37a ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents: 11072
diff changeset
   327
  m_buffer.AddAtEnd (size);
888
f882ee7eaccf history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 887
diff changeset
   328
  m_metadata.AddPaddingAtEnd (size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   331
Packet::RemoveAtEnd (uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
   333
  NS_LOG_FUNCTION (this << size);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   334
  m_buffer.RemoveAtEnd (size);
888
f882ee7eaccf history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 887
diff changeset
   335
  m_metadata.RemoveAtEnd (size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   338
Packet::RemoveAtStart (uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
   340
  NS_LOG_FUNCTION (this << size);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   341
  m_buffer.RemoveAtStart (size);
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   342
  m_byteTagList.Adjust (-size);
888
f882ee7eaccf history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 887
diff changeset
   343
  m_metadata.RemoveAtStart (size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   344
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
void 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   347
Packet::RemoveAllByteTags (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3057
diff changeset
   349
  NS_LOG_FUNCTION (this);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   350
  m_byteTagList.RemoveAll ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   353
uint32_t 
3764
64f1310350e4 add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3738
diff changeset
   354
Packet::CopyData (uint8_t *buffer, uint32_t size) const
64f1310350e4 add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3738
diff changeset
   355
{
5938
69bcae35bc81 avoid copying bytes one after the other.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5505
diff changeset
   356
  return m_buffer.CopyData (buffer, size);
3764
64f1310350e4 add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3738
diff changeset
   357
}
64f1310350e4 add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3738
diff changeset
   358
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4502
diff changeset
   359
void
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 6968
diff changeset
   360
Packet::CopyData (std::ostream *os, uint32_t size) const
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4502
diff changeset
   361
{
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4502
diff changeset
   362
  return m_buffer.CopyData (os, size);
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4502
diff changeset
   363
}
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4502
diff changeset
   364
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   365
uint64_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   366
Packet::GetUid (void) const
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   367
{
888
f882ee7eaccf history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 887
diff changeset
   368
  return m_metadata.GetUid ();
91
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   369
}
8066ef8d9274 add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 90
diff changeset
   370
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   371
void 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   372
Packet::PrintByteTags (std::ostream &os) const
1241
66f126692f5e add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1150
diff changeset
   373
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   374
  ByteTagIterator i = GetByteTagIterator ();
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   375
  while (i.HasNext ())
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   376
    {
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   377
      ByteTagIterator::Item item = i.Next ();
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   378
      os << item.GetTypeId ().GetName () << " [" << item.GetStart () << "-" << item.GetEnd () << "]";
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   379
      Callback<ObjectBase *> constructor = item.GetTypeId ().GetConstructor ();
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   380
      if (constructor.IsNull ())
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   381
        {
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   382
          if (i.HasNext ())
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   383
            {
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   384
              os << " ";
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   385
            }
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   386
          continue;
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   387
        }
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   388
      Tag *tag = dynamic_cast<Tag *> (constructor ());
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   389
      NS_ASSERT (tag != 0);
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   390
      os << " ";
3230
e59680767a04 bug 212: Packet::PrintTags fails
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   391
      item.GetTag (*tag);
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   392
      tag->Print (os);
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   393
      if (i.HasNext ())
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   394
        {
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   395
          os << " ";
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   396
        }
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   397
      delete tag;
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   398
    }
1241
66f126692f5e add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1150
diff changeset
   399
}
66f126692f5e add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1150
diff changeset
   400
11072
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   401
std::string
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   402
Packet::ToString() const
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   403
{
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   404
  std::ostringstream oss;
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   405
  Print (oss);
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   406
  return oss.str();
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   407
}
0af6dbbb959e ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents: 11021
diff changeset
   408
1241
66f126692f5e add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1150
diff changeset
   409
void 
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   410
Packet::Print (std::ostream &os) const
789
1e19322e9012 merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
   411
{
2660
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   412
  PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer);
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   413
  while (i.HasNext ())
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   414
    {
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   415
      PacketMetadata::Item item = i.Next ();
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   416
      if (item.isFragment)
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   417
        {
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   418
          switch (item.type) {
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   419
            case PacketMetadata::Item::PAYLOAD:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   420
              os << "Payload";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   421
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   422
            case PacketMetadata::Item::HEADER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   423
            case PacketMetadata::Item::TRAILER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   424
              os << item.tid.GetName ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   425
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   426
            }
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   427
          os << " Fragment [" << item.currentTrimedFromStart<<":"
2660
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   428
             << (item.currentTrimedFromStart + item.currentSize) << "]";
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   429
        }
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   430
      else
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   431
        {
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   432
          switch (item.type) {
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   433
            case PacketMetadata::Item::PAYLOAD:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   434
              os << "Payload (size=" << item.currentSize << ")";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   435
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   436
            case PacketMetadata::Item::HEADER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   437
            case PacketMetadata::Item::TRAILER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   438
              os << item.tid.GetName () << " (";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   439
              {
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   440
                NS_ASSERT (item.tid.HasConstructor ());
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   441
                Callback<ObjectBase *> constructor = item.tid.GetConstructor ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   442
                NS_ASSERT (!constructor.IsNull ());
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   443
                ObjectBase *instance = constructor ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   444
                NS_ASSERT (instance != 0);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   445
                Chunk *chunk = dynamic_cast<Chunk *> (instance);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   446
                NS_ASSERT (chunk != 0);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   447
                chunk->Deserialize (item.current);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   448
                chunk->Print (os);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   449
                delete chunk;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   450
              }
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   451
              os << ")";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   452
              break;
2660
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   453
            }
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   454
        }
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   455
      if (i.HasNext ())
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   456
        {
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   457
          os << " ";
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   458
        }
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   459
    }
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   460
#if 0
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   461
  // The code below will work only if headers and trailers
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   462
  // define the right attributes which is not the case for
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   463
  // now. So, as a temporary measure, we use the 
1d54065d728a convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
   464
  // headers' and trailers' Print method as shown above.
2647
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   465
  PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer);
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   466
  while (i.HasNext ())
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   467
    {
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   468
      PacketMetadata::Item item = i.Next ();
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   469
      if (item.isFragment)
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   470
        {
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   471
          switch (item.type) {
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   472
            case PacketMetadata::Item::PAYLOAD:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   473
              os << "Payload";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   474
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   475
            case PacketMetadata::Item::HEADER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   476
            case PacketMetadata::Item::TRAILER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   477
              os << item.tid.GetName ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   478
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   479
            }
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   480
          os << " Fragment [" << item.currentTrimedFromStart<<":"
2647
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   481
             << (item.currentTrimedFromStart + item.currentSize) << "]";
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   482
        }
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   483
      else
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   484
        {
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   485
          switch (item.type) {
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   486
            case PacketMetadata::Item::PAYLOAD:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   487
              os << "Payload (size=" << item.currentSize << ")";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   488
              break;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   489
            case PacketMetadata::Item::HEADER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   490
            case PacketMetadata::Item::TRAILER:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   491
              os << item.tid.GetName () << "(";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   492
              {
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   493
                NS_ASSERT (item.tid.HasConstructor ());
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   494
                Callback<ObjectBase *> constructor = item.tid.GetConstructor ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   495
                NS_ASSERT (constructor.IsNull ());
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   496
                ObjectBase *instance = constructor ();
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   497
                NS_ASSERT (instance != 0);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   498
                Chunk *chunk = dynamic_cast<Chunk *> (instance);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   499
                NS_ASSERT (chunk != 0);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   500
                chunk->Deserialize (item.current);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   501
                for (uint32_t j = 0; j < item.tid.GetAttributeN (); j++)
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   502
                  {
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   503
                    std::string attrName = item.tid.GetAttributeName (j);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   504
                    std::string value;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   505
                    bool ok = chunk->GetAttribute (attrName, value);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   506
                    NS_ASSERT (ok);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   507
                    os << attrName << "=" << value;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   508
                    if ((j + 1) < item.tid.GetAttributeN ())
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   509
                      {
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   510
                        os << ",";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   511
                      }
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   512
                  }
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   513
              }
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   514
              os << ")";
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   515
              break;
2647
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   516
            }
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   517
        }
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   518
      if (i.HasNext ())
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   519
        {
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   520
          os << " ";
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   521
        }
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2640
diff changeset
   522
    }
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   523
#endif
789
1e19322e9012 merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
   524
}
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   525
2639
588221b7f892 replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1865
diff changeset
   526
PacketMetadata::ItemIterator 
588221b7f892 replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1865
diff changeset
   527
Packet::BeginItem (void) const
806
0190f1b49dc8 re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 790
diff changeset
   528
{
2639
588221b7f892 replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1865
diff changeset
   529
  return m_metadata.BeginItem (m_buffer);
806
0190f1b49dc8 re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 790
diff changeset
   530
}
0190f1b49dc8 re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 790
diff changeset
   531
875
4ebee6ceebb5 rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 824
diff changeset
   532
void
3553
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   533
Packet::EnablePrinting (void)
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   534
{
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   535
  NS_LOG_FUNCTION_NOARGS ();
883
4d2da35c09b0 PacketHistory -> PacketMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 875
diff changeset
   536
  PacketMetadata::Enable ();
875
4ebee6ceebb5 rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 824
diff changeset
   537
}
463
c2082308e01a merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   538
3553
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   539
void
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   540
Packet::EnableChecking (void)
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   541
{
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   542
  NS_LOG_FUNCTION_NOARGS ();
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   543
  PacketMetadata::EnableChecking ();
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   544
}
065488d0420c bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3364
diff changeset
   545
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   546
uint32_t Packet::GetSerializedSize (void) const
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   547
{
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   548
  uint32_t size = 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   549
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   550
  if (m_nixVector)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   551
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   552
      // increment total size by the size of the nix-vector
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   553
      // ensuring 4-byte boundary
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   554
      size += ((m_nixVector->GetSerializedSize () + 3) & (~3));
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   555
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   556
      // add 4-bytes for entry of total length of nix-vector
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   557
      size += 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   558
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   559
  else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   560
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   561
      // if no nix-vector, still have to add 4-bytes
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   562
      // to account for the entry of total size for 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   563
      // nix-vector in the buffer
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   564
      size += 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   565
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   566
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   567
  //Tag size
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9768
diff changeset
   568
  /// \todo Serialze Tags size
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   569
  //size += m_tags.GetSerializedSize ();
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   570
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   571
  // increment total size by size of meta-data 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   572
  // ensuring 4-byte boundary
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   573
  size += ((m_metadata.GetSerializedSize () + 3) & (~3));
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   574
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   575
  // add 4-bytes for entry of total length of meta-data
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   576
  size += 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   577
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   578
  // increment total size by size of buffer 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   579
  // ensuring 4-byte boundary
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   580
  size += ((m_buffer.GetSerializedSize () + 3) & (~3));
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   581
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   582
  // add 4-bytes for entry of total length of buffer 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   583
  size += 4;
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   584
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   585
  return size;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   586
}
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   587
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   588
uint32_t 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   589
Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   590
{
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   591
  uint32_t* p = reinterpret_cast<uint32_t *> (buffer);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   592
  uint32_t size = 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   593
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   594
  // if nix-vector exists, serialize it
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   595
  if (m_nixVector)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   596
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   597
      uint32_t nixSize = m_nixVector->GetSerializedSize ();
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   598
      if (size + nixSize <= maxSize)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   599
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   600
          // put the total length of nix-vector in the
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   601
          // buffer. this includes 4-bytes for total 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   602
          // length itself
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   603
          *p++ = nixSize + 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   604
          size += nixSize;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   605
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   606
          // serialize the nix-vector
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   607
          uint32_t serialized = 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   608
            m_nixVector->Serialize (p, nixSize);
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   609
          if (serialized)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   610
            {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   611
              // increment p by nixSize bytes
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   612
              // ensuring 4-byte boundary
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   613
              p += ((nixSize+3) & (~3)) / 4;
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   614
            }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   615
          else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   616
            {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   617
              return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   618
            }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   619
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   620
      else 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   621
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   622
          return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   623
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   624
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   625
  else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   626
    { 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   627
      // no nix vector, set zero length, 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   628
      // ie 4-bytes, since it must include 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   629
      // length for itself
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   630
      if (size + 4 <= maxSize)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   631
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   632
          size += 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   633
          *p++ = 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   634
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   635
      else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   636
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   637
          return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   638
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   639
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   640
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   641
  // Serialize Tags
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9768
diff changeset
   642
  /// \todo Serialize Tags
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   643
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   644
  // Serialize Metadata
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   645
  uint32_t metaSize = m_metadata.GetSerializedSize ();
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   646
  if (size + metaSize <= maxSize)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   647
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   648
      // put the total length of metadata in the
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   649
      // buffer. this includes 4-bytes for total 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   650
      // length itself
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   651
      *p++ = metaSize + 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   652
      size += metaSize;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   653
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   654
      // serialize the metadata
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   655
      uint32_t serialized = 
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   656
        m_metadata.Serialize (reinterpret_cast<uint8_t *> (p), metaSize); 
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   657
      if (serialized)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   658
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   659
          // increment p by metaSize bytes
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   660
          // ensuring 4-byte boundary
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   661
          p += ((metaSize+3) & (~3)) / 4;
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   662
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   663
      else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   664
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   665
          return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   666
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   667
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   668
  else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   669
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   670
      return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   671
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   672
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   673
  // Serialize the packet contents
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   674
  uint32_t bufSize = m_buffer.GetSerializedSize ();
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   675
  if (size + bufSize <= maxSize)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   676
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   677
      // put the total length of the buffer in the
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   678
      // buffer. this includes 4-bytes for total 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   679
      // length itself
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   680
      *p++ = bufSize + 4;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   681
      size += bufSize;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   682
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   683
      // serialize the buffer
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   684
      uint32_t serialized = 
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   685
        m_buffer.Serialize (reinterpret_cast<uint8_t *> (p), bufSize);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   686
      if (serialized)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   687
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   688
          // increment p by bufSize bytes
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   689
          // ensuring 4-byte boundary
9768
bee4f4bf5044 Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9763
diff changeset
   690
          p += ((bufSize+3) & (~3)) / 4;
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   691
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   692
      else 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   693
        {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   694
          return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   695
        }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   696
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   697
  else
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   698
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   699
      return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   700
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   701
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   702
  // Serialized successfully
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   703
  return 1;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   704
}
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   705
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   706
uint32_t 
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   707
Packet::Deserialize (const uint8_t* buffer, uint32_t size)
1138
27245d50e5e0 use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 896
diff changeset
   708
{
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   709
  NS_LOG_FUNCTION (this);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   710
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   711
  const uint32_t* p = reinterpret_cast<const uint32_t *> (buffer);
1144
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   712
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   713
  // read nix-vector
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   714
  NS_ASSERT (!m_nixVector);
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   715
  uint32_t nixSize = *p++;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   716
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   717
  // if size less than nixSize, the buffer 
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   718
  // will be overrun, assert
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   719
  NS_ASSERT (size >= nixSize);
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   720
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   721
  size -= nixSize;
1144
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   722
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   723
  if (nixSize > 4)
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   724
    {
6455
e17da5733c0b Change nix-vector to use SimpleRefCount instead of Object
Josh Pelkey <jpelkey@gatech.edu>
parents: 6397
diff changeset
   725
      Ptr<NixVector> nix = Create<NixVector> ();
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   726
      uint32_t nixDeserialized = nix->Deserialize (p, nixSize);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   727
      if (!nixDeserialized)
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   728
        {
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   729
          // nix-vector not deserialized
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   730
          // completely
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   731
          return 0;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   732
        }
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   733
      m_nixVector = nix;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   734
      // increment p by nixSize ensuring
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   735
      // 4-byte boundary
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   736
      p += ((((nixSize - 4) + 3) & (~3)) / 4);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   737
    }
1144
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   738
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   739
  // read tags
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9768
diff changeset
   740
  /// \todo Deserialize Tags
3039
722cf749a9e3 remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
   741
  //uint32_t tagsDeserialized = m_tags.Deserialize (buffer.Begin ());
722cf749a9e3 remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
   742
  //buffer.RemoveAtStart (tagsDeserialized);
1144
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   743
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   744
  // read metadata
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   745
  uint32_t metaSize = *p++;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   746
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   747
  // if size less than metaSize, the buffer 
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   748
  // will be overrun, assert
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   749
  NS_ASSERT (size >= metaSize);
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   750
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   751
  size -= metaSize;
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   752
1144
6442e000420b finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1142
diff changeset
   753
  uint32_t metadataDeserialized = 
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   754
    m_metadata.Deserialize (reinterpret_cast<const uint8_t *> (p), metaSize);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   755
  if (!metadataDeserialized)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   756
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   757
      // meta-data not deserialized 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   758
      // completely
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   759
      return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   760
    }
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   761
  // increment p by metaSize ensuring 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   762
  // 4-byte boundary
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   763
  p += ((((metaSize - 4) + 3) & (~3)) / 4);
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   764
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   765
  // read buffer contents
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   766
  uint32_t bufSize = *p++;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   767
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   768
  // if size less than bufSize, the buffer 
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   769
  // will be overrun, assert
6610
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   770
  NS_ASSERT (size >= bufSize);
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   771
6d5c1c19bdfe Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents: 6549
diff changeset
   772
  size -= bufSize;
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   773
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   774
  uint32_t bufferDeserialized =
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6167
diff changeset
   775
    m_buffer.Deserialize (reinterpret_cast<const uint8_t *> (p), bufSize);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   776
  if (!bufferDeserialized)
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   777
    {
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   778
      // buffer not deserialized 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   779
      // completely
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   780
      return 0;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   781
    }
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   782
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   783
  // return zero if did not deserialize the 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   784
  // number of expected bytes
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   785
  return (size == 0);
1138
27245d50e5e0 use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 896
diff changeset
   786
}
27245d50e5e0 use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 896
diff changeset
   787
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   788
void 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   789
Packet::AddByteTag (const Tag &tag) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   790
{
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   791
  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   792
  ByteTagList *list = const_cast<ByteTagList *> (&m_byteTagList);
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3039
diff changeset
   793
  TagBuffer buffer = list->Add (tag.GetInstanceTypeId (), tag.GetSerializedSize (), 
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   794
                                0,
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   795
                                GetSize ());
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   796
  tag.Serialize (buffer);
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   797
}
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   798
ByteTagIterator 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   799
Packet::GetByteTagIterator (void) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   800
{
11567
6aea6eab3ff3 Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents: 11566
diff changeset
   801
  return ByteTagIterator (m_byteTagList.Begin (0, GetSize ()));
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   802
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   803
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   804
bool 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   805
Packet::FindFirstMatchingByteTag (Tag &tag) const
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   806
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   807
  TypeId tid = tag.GetInstanceTypeId ();
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   808
  ByteTagIterator i = GetByteTagIterator ();
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   809
  while (i.HasNext ())
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   810
    {
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   811
      ByteTagIterator::Item item = i.Next ();
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   812
      if (tid == item.GetTypeId ())
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   813
        {
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   814
          item.GetTag (tag);
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   815
          return true;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   816
        }
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   817
    }
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   818
  return false;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   819
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   820
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   821
void 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   822
Packet::AddPacketTag (const Tag &tag) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   823
{
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   824
  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   825
  m_packetTagList.Add (tag);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   826
}
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   827
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   828
bool 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   829
Packet::RemovePacketTag (Tag &tag)
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   830
{
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   831
  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   832
  bool found = m_packetTagList.Remove (tag);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   833
  return found;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   834
}
9763
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   835
bool
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   836
Packet::ReplacePacketTag (Tag &tag)
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   837
{
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   838
  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   839
  bool found = m_packetTagList.Replace (tag);
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   840
  return found;
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   841
}
038d5627c5a9 Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9192
diff changeset
   842
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   843
bool 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   844
Packet::PeekPacketTag (Tag &tag) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   845
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   846
  bool found = m_packetTagList.Peek (tag);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   847
  return found;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   848
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   849
void 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   850
Packet::RemoveAllPacketTags (void)
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   851
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   852
  NS_LOG_FUNCTION (this);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   853
  m_packetTagList.RemoveAll ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   854
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   855
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   856
void 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   857
Packet::PrintPacketTags (std::ostream &os) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   858
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   859
  PacketTagIterator i = GetPacketTagIterator ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   860
  while (i.HasNext ())
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   861
    {
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   862
      PacketTagIterator::Item item = i.Next ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   863
      NS_ASSERT (item.GetTypeId ().HasConstructor ());
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   864
      Callback<ObjectBase *> constructor = item.GetTypeId ().GetConstructor ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   865
      NS_ASSERT (!constructor.IsNull ());
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   866
      ObjectBase *instance = constructor ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   867
      Tag *tag = dynamic_cast<Tag *> (instance);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   868
      NS_ASSERT (tag != 0);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   869
      item.GetTag (*tag);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   870
      tag->Print (os);
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   871
      delete tag;
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   872
      if (i.HasNext ())
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   873
        {
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   874
          os << " ";
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   875
        }
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   876
    }
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   877
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   878
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   879
PacketTagIterator 
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   880
Packet::GetPacketTagIterator (void) const
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   881
{
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   882
  return PacketTagIterator (m_packetTagList.Head ());
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   883
}
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4488
diff changeset
   884
1360
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   885
std::ostream& operator<< (std::ostream& os, const Packet &packet)
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   886
{
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   887
  packet.Print (os);
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   888
  return os;
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   889
}
7686e996bd1d add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1241
diff changeset
   890
5334
92aafeab5e4f packet test suite ported to new framework
Pavel Boyko <boyko@iitp.ru>
parents: 5224
diff changeset
   891
} // namespace ns3