src/common/packet-printer.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 07 Jun 2007 12:29:38 +0200
changeset 878 37cbce7d5b5c
parent 842 ab2dd4d7951d
child 885 4f385160b3d5
permissions -rw-r--r--
make the code match the dox doc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2007 INRIA
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "packet-printer.h"
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
namespace ns3 {
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
PacketPrinter::PacketPrinter ()
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
  : m_forward (true)
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
{}
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
void 
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
PacketPrinter::PrintForward (void)
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    32
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    33
  m_forward = true;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    34
}
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
void 
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
PacketPrinter::PrintBackward (void)
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    37
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    38
  m_forward = false;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    39
}
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
void 
805
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    41
PacketPrinter::AddPayloadPrinter (PayloadPrinter printer)
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
{
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  m_payloadPrinter = printer;
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
}
805
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    45
void 
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    46
PacketPrinter::AddDefaultPrinter (DefaultPrinter printer)
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    47
{
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    48
  m_defaultPrinter = printer;
3368d1e0446d implement forgotten PacketPrinter::AddDefaultPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 803
diff changeset
    49
}
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    50
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    51
PacketPrinter::RegisteredChunks *
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    52
PacketPrinter::GetRegisteredChunks (void)
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    53
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    54
  static RegisteredChunks registeredChunks;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    55
  return &registeredChunks;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    56
}
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    57
799
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    58
PacketPrinter 
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    59
PacketPrinter::GetDefault (void)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    60
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    61
  return *(PacketPrinter::PeekDefault ());
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    62
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    63
PacketPrinter *
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    64
PacketPrinter::PeekDefault (void)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    65
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    66
  static PacketPrinter *tmp = PacketPrinter::CreateStaticDefault ();
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    67
  return tmp;
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    68
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    69
PacketPrinter *
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    70
PacketPrinter::CreateStaticDefault (void)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    71
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    72
  static PacketPrinter tmp;
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    73
  return &tmp;
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    74
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    75
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
    76
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    77
void 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    78
PacketPrinter::PrintChunk (uint32_t chunkUid, 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    79
                           Buffer::Iterator start, 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    80
                           std::ostream &os, 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    81
                           uint32_t packetUid,
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
    82
                           uint32_t size) const
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    83
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    84
  RegisteredChunks *registeredChunks = PacketPrinter::GetRegisteredChunks ();
842
ab2dd4d7951d fix a bunch of buggy asserts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    85
  NS_ASSERT (chunkUid >= 1 && chunkUid/2 <= registeredChunks->size ());
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
    86
  for (PrinterList::const_iterator i = m_printerList.begin (); i != m_printerList.end (); i++)
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    87
    {
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    88
      if (i->m_chunkUid == chunkUid)
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    89
        {
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
    90
          DoPrintCallback cb = (*registeredChunks)[chunkUid/2-1].printCallback;
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    91
          cb (i->m_printer, start, os, packetUid, size);
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    92
          return;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    93
        }
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    94
    }
842
ab2dd4d7951d fix a bunch of buggy asserts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    95
  DoGetNameCallback cb = (*registeredChunks)[chunkUid/2-1].getNameCallback;
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    96
  std::string name = cb ();
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    97
  struct PacketPrinter::FragmentInformation info;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    98
  info.start = 0;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    99
  info.end = size;
878
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   100
  if (!m_defaultPrinter.IsNull ())
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   101
    {
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   102
      m_defaultPrinter (os, packetUid, size, name, info);
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   103
    }
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   104
}
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   105
void 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   106
PacketPrinter::PrintChunkFragment (uint32_t chunkUid,
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   107
                                   std::ostream &os,
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   108
                                   uint32_t packetUid,
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   109
                                   uint32_t size,
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   110
                                   uint32_t fragmentStart,
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
   111
                                   uint32_t fragmentEnd) const
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   112
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   113
  RegisteredChunks *registeredChunks = PacketPrinter::GetRegisteredChunks ();
842
ab2dd4d7951d fix a bunch of buggy asserts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
   114
  NS_ASSERT (chunkUid >= 1 && chunkUid/2 <= registeredChunks->size ());
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   115
  DoGetNameCallback cb = (*registeredChunks)[chunkUid/2-1].getNameCallback;
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   116
  std::string name = cb ();
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   117
  struct PacketPrinter::FragmentInformation info;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   118
  info.start = fragmentStart;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   119
  info.end = fragmentEnd;
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
   120
  for (PrinterList::const_iterator i = m_printerList.begin (); i != m_printerList.end (); i++)
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   121
    {
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   122
      if (i->m_chunkUid == chunkUid)
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   123
        {
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   124
          i->m_fragmentPrinter (os, packetUid, size, name, info);
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   125
          return;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   126
        }
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   127
    }
878
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   128
  if (!m_defaultPrinter.IsNull ())
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   129
    {
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   130
      m_defaultPrinter (os, packetUid, size, name, info);
37cbce7d5b5c make the code match the dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 842
diff changeset
   131
    }
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   132
}
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   133
void 
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   134
PacketPrinter::PrintPayload (std::ostream &os, uint32_t packetUid, uint32_t size,
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
   135
                             uint32_t fragmentStart, uint32_t fragmentEnd) const
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   136
{
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   137
  struct PacketPrinter::FragmentInformation info;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   138
  info.start = fragmentStart;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   139
  info.end = fragmentEnd;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   140
  m_payloadPrinter (os, packetUid, size, info);
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   141
}
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   142
799
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   143
void 
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   144
PacketPrinter::DoDefaultPrintPayload (std::ostream & os,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   145
                                      uint32_t packetUid,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   146
                                      uint32_t size,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   147
                                      struct PacketPrinter::FragmentInformation info)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   148
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   149
  os << "data ";
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   150
  os << "[" << info.start << ":" << info.end << "] -> "
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   151
     << "[0:" << size << "]";
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   152
  os << std::endl;
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   153
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   154
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   155
void 
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   156
PacketPrinter::DoDefaultPrintDefault (std::ostream & os,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   157
                                      uint32_t packetUid,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   158
                                      uint32_t size,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   159
                                      std::string &name,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   160
                                      struct PacketPrinter::FragmentInformation info)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   161
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   162
  NS_ASSERT_MSG (false, "This should never happen because we provide a printer for _all_ chunk types.");
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   163
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   164
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   165
void 
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   166
PacketPrinter::DoDefaultPrintFragment (std::ostream & os,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   167
                                       uint32_t packetUid,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   168
                                       uint32_t size,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   169
                                       std::string &name,
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   170
                                       struct PacketPrinter::FragmentInformation info)
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   171
{
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   172
  os << name << " ";
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   173
  os << "[" << info.start << ":" << info.end << "] -> "
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   174
     << "[0:" << size << "]";
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   175
  os << std::endl;
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   176
}
3236b54a77a6 add support for a default PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 798
diff changeset
   177
803
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   178
void
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   179
PacketPrinter::DoAddPrinter (uint32_t uid,
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   180
                             Ptr<CallbackImplBase> printer,
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   181
                             Callback<void,
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   182
                             std::ostream &, 
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   183
                             uint32_t, 
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   184
                             uint32_t, 
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   185
                             std::string &,
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   186
                             struct PacketPrinter::FragmentInformation> fragmentPrinter)
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   187
{
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   188
  struct PacketPrinter::Printer p;
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   189
  p.m_chunkUid = uid;
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   190
  p.m_printer = printer;
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   191
  p.m_fragmentPrinter = fragmentPrinter;
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   192
  m_printerList.push_back (p);
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   193
}
f4875471b5fb avoid recursive initialization of uid static variable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 800
diff changeset
   194
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   195
bool 
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   196
PacketPrinter::IsTrailer (uint32_t uid)
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   197
{
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   198
  RegisteredChunks *registeredChunks = PacketPrinter::GetRegisteredChunks ();
842
ab2dd4d7951d fix a bunch of buggy asserts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
   199
  NS_ASSERT (uid >= 1 && uid/2 <= registeredChunks->size ());
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   200
  bool isHeader = (*registeredChunks)[uid/2-1].isHeader;
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   201
  return !isHeader;
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   202
}
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   203
bool 
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   204
PacketPrinter::IsHeader (uint32_t uid)
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   205
{
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   206
  RegisteredChunks *registeredChunks = PacketPrinter::GetRegisteredChunks ();
842
ab2dd4d7951d fix a bunch of buggy asserts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
   207
  NS_ASSERT (uid >= 1 && uid/2 <= registeredChunks->size ());
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   208
  bool isHeader = (*registeredChunks)[uid/2-1].isHeader;
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   209
  return isHeader;
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   210
}
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   211
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 811
diff changeset
   212
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
} // namespace ns3