src/common/packet-printer.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sat, 04 Aug 2007 17:14:54 +0200
changeset 1155 1269189b9f41
parent 1151 527d7b7e25af
child 1232 2e8c3f8bb77f
permissions -rw-r--r--
update the Tag API to match the Header/Trailer API
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
#ifndef PACKET_PRINTER_H
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#define 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
#include "ns3/callback.h"
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/ptr.h"
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    26
#include "buffer.h"
1151
527d7b7e25af force users to register their header/trailer uid strings by hand rather than do lazy uid allocation.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1141
diff changeset
    27
#include "chunk.h"
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    28
#include <vector>
796
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
namespace ns3 {
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
877
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    32
/**
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    33
 * \brief hold a list of print callbacks for packet headers and trailers
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    34
 *
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    35
 * Users can register in instances of this class print callbacks
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    36
 * which are used by Packet::Print to print the content of a packet.
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
    37
 */
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
class PacketPrinter 
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
{
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
public:
900
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    41
  /**
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    42
   * \brief indicates how many bytes were trimmed from a header
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    43
   * or a trailer.
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    44
   */
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    45
  struct FragmentInformation
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    46
  {
900
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    47
    /**
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    48
     * The number of bytes trimmed from the start of the header or the trailer.
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    49
     */
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    50
    uint32_t start;
900
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    51
    /**
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    52
     * The number of bytes trimmed from the end of the header or the trailer.
2087082ba3ed change default pretty printing output format, add doc to metadata data structures
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 892
diff changeset
    53
     */
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    54
    uint32_t end;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    55
  };
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
   * \brief callback to print payload.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
   *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
   * Arguments: output stream, packet uid, size, fragment information
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
  typedef Callback<void,std::ostream &,uint32_t,uint32_t,struct PacketPrinter::FragmentInformation>
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
    PayloadPrinter;
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
   * \brief callback to print fragmented chunks.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
   *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
   * Arguments: output stream, packet uid, size, header/trailer name, fragment information
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
  typedef Callback<void,std::ostream &,uint32_t,uint32_t,std::string &,struct PacketPrinter::FragmentInformation>
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
    ChunkFragmentPrinter;
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
   * \brief callback to print chunks for which no specific callback was specified.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
   *
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
   * Arguments: output stream, packet uid, size, header/trailer name, fragment information
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  typedef Callback<void,std::ostream&,uint32_t,uint32_t,std::string&,struct PacketPrinter::FragmentInformation> 
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
    DefaultPrinter;
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
    80
  PacketPrinter ();
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
   * Print the content of the packet forward.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  void PrintForward (void);
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
   * Print the content of the packet backward.
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
  void PrintBackward (void);
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    90
  /**
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    91
   * \param separator the new separator
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    92
   *
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    93
   * The default separator is a single space character.
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    94
   */
892
b3f73643c055 add separator support to PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 883
diff changeset
    95
  void SetSeparator (std::string separator);
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
   * \param printer printer for payload
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
   */
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
    99
  void SetPayloadPrinter (PayloadPrinter printer);
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  /**
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
   * \param printer printer for the specified chunk
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
   * \param fragmentPrinter printer for a fragment of the specified chunk
877
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
   103
   *
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   104
   * If the user does not force a user-specific printing function through
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   105
   * a call to SetHeaderPrinter, the default print output is generated.
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
   */
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
  template <typename T>
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   108
  void SetHeaderPrinter (Callback<void,std::ostream &,uint32_t,uint32_t,const T *> printer,
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   109
                         ChunkFragmentPrinter fragmentPrinter);
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   110
  /**
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   111
   * \param printer printer for the specified chunk
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   112
   * \param fragmentPrinter printer for a fragment of the specified chunk
877
0d2f96b69c47 improve dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 837
diff changeset
   113
   *
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   114
   * If the user does not force a user-specific printing function through
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   115
   * a call to SetTrailerPrinter, the default print output is generated.
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   116
   */
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   117
  template <typename T>
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   118
  void SetTrailerPrinter (Callback<void,std::ostream &,uint32_t,uint32_t,const T *> printer,
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   119
                          ChunkFragmentPrinter fragmentPrinter);  
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
private:
883
4d2da35c09b0 PacketHistory -> PacketMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 877
diff changeset
   121
  friend class PacketMetadata;
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
  void PrintChunk (uint32_t uid, 
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   123
		   Buffer::Iterator i, 
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
		   std::ostream &os, 
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
		   uint32_t packetUid,
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
   126
		   uint32_t size) const;
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
  void PrintChunkFragment (uint32_t uid,
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
			   std::ostream &os,
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
			   uint32_t packetUid,
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
			   uint32_t size,
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
			   uint32_t fragmentStart,
800
dd9660f5f784 constify, allow ItemList access to private methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 799
diff changeset
   132
			   uint32_t fragmentEnd) const;
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  void 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
   134
		     uint32_t fragmentStart, uint32_t fragmentEnd) const;
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   135
  struct Printer
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   136
  {
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   137
    uint32_t m_chunkUid;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   138
    Ptr<CallbackImplBase> m_printer;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   139
    Callback<void,std::ostream &,uint32_t,uint32_t,std::string &,
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   140
             struct PacketPrinter::FragmentInformation> m_fragmentPrinter;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   141
  };
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   142
  typedef std::vector<struct PacketPrinter::Printer> PrinterList;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   143
  
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   144
  PrinterList m_printerList;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   145
  PayloadPrinter m_payloadPrinter;
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   146
  DefaultPrinter m_defaultPrinter;
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
  bool m_forward;
892
b3f73643c055 add separator support to PacketPrinter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 883
diff changeset
   148
  std::string m_separator;
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
};
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
} // namespace ns3
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
namespace ns3 {
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
template <typename T>
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
void 
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   157
PacketPrinter::SetHeaderPrinter (Callback<void,std::ostream &,uint32_t,uint32_t,const T *> printer,
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   158
                                 ChunkFragmentPrinter fragmentPrinter)
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
{
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   160
  Printer p;
1151
527d7b7e25af force users to register their header/trailer uid strings by hand rather than do lazy uid allocation.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1141
diff changeset
   161
  p.m_chunkUid = T::GetUid ();
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   162
  p.m_printer = printer.GetImpl ();
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   163
  p.m_fragmentPrinter = fragmentPrinter;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   164
  m_printerList.push_back (p);
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   165
}
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   166
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   167
template <typename T>
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   168
void 
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   169
PacketPrinter::SetTrailerPrinter (Callback<void,std::ostream &,uint32_t,uint32_t,const T *> printer,
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   170
                                 ChunkFragmentPrinter fragmentPrinter)
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   171
{
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   172
  Printer p;
1151
527d7b7e25af force users to register their header/trailer uid strings by hand rather than do lazy uid allocation.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1141
diff changeset
   173
  p.m_chunkUid = T::GetUid ();
1141
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   174
  p.m_printer = printer.GetImpl ();
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   175
  p.m_fragmentPrinter = fragmentPrinter;
a75fc1741700 rework the PacketPrinter API and implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1139
diff changeset
   176
  m_printerList.push_back (p);
837
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   177
}
b73b63e84130 implement PacketHistory::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 827
diff changeset
   178
798
f947deabe06e rework the PacketPrinter code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 796
diff changeset
   179
796
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
} // namespace ns3
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
73d7e23c4d3e try to design a packer printer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
#endif /* PACKET_PRINTER_H */