src/common/trailer.h
author Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
Fri, 18 Sep 2009 22:18:06 +0200
changeset 5227 ecb08c1fc273
parent 3192 702459162fff
permissions -rw-r--r--
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
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 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
107
2cbaa2a1b116 add trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 105
diff changeset
    21
#ifndef TRAILER_H
2cbaa2a1b116 add trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 105
diff changeset
    22
#define TRAILER_H
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
2647
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2646
diff changeset
    24
#include "chunk.h"
2642
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    25
#include "buffer.h"
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    26
#include <stdint.h>
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
1152
1d06449f0a98 macros to ensure proper initialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1151
diff changeset
    28
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
    29
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
628
21122b21924d move doxygen doc into Header and Trailer classes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
    31
/**
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2834
diff changeset
    32
 * \ingroup packet
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2834
diff changeset
    33
 *
628
21122b21924d move doxygen doc into Header and Trailer classes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
    34
 * \brief Protocol trailer serialization and deserialization.
21122b21924d move doxygen doc into Header and Trailer classes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
    35
 *
21122b21924d move doxygen doc into Header and Trailer classes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
    36
 * Every Protocol trailer which needs to be inserted or removed
1247
d4ce2731bcf5 re-write header and trailer doxygen API doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1236
diff changeset
    37
 * from a Packet instance must derive from this base class and
3192
702459162fff update doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    38
 * implement the pure virtual methods defined here.
628
21122b21924d move doxygen doc into Header and Trailer classes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 463
diff changeset
    39
 */
2647
3e9474e1d77b implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2646
diff changeset
    40
class Trailer : public Chunk
1247
d4ce2731bcf5 re-write header and trailer doxygen API doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1236
diff changeset
    41
{
2642
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    42
public:
2643
2a3324f4dabe define a TypeId for each Header/Trailer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2642
diff changeset
    43
  static TypeId GetTypeId (void);
2642
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    44
  virtual ~Trailer ();
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    45
  /**
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    46
   * \returns the expected size of the trailer.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    47
   *
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    48
   * This method is used by Packet::AddTrailer
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    49
   * to store a trailer into the byte buffer of a packet. This method
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    50
   * should return the number of bytes which are needed to store
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    51
   * the full trailer data by Serialize.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    52
   */
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    53
  virtual uint32_t GetSerializedSize (void) const = 0;
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    54
  /**
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    55
   * \param start an iterator which points to where the trailer
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    56
   *        should be written.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    57
   *
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    58
   * This method is used by Packet::AddTrailer to
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    59
   * store a header into the byte buffer of a packet.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    60
   * The data written is expected to match bit-for-bit the 
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    61
   * representation of this trailer in real networks.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    62
   * The input iterator points to the end of the area where the 
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    63
   * data shall be written. This method is thus expected to call
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    64
   * Buffer::Iterator::Prev prior to actually writing any data.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    65
   */
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    66
  virtual void Serialize (Buffer::Iterator start) const = 0;
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    67
  /**
2688
cf03845fc7ca fix dox warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
    68
   * \param end an iterator which points to the end of the buffer
cf03845fc7ca fix dox warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2647
diff changeset
    69
   *        where the trailer should be read from.
2642
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    70
   * \returns the number of bytes read.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    71
   *
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    72
   * This method is used by Packet::RemoveTrailer to
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    73
   * re-create a trailer from the byte buffer of a packet. 
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    74
   * The data read is expected to match bit-for-bit the 
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    75
   * representation of this trailer in real networks.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    76
   * The input iterator points to the end of the area where the 
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    77
   * data shall be written. This method is thus expected to call
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    78
   * Buffer::Iterator::Prev prio to actually reading any data.
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    79
   */
a35a68bdcd88 make the base Header and Trailer classes virtual.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1253
diff changeset
    80
  virtual uint32_t Deserialize (Buffer::Iterator end) = 0;
2646
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    81
  /**
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3192
diff changeset
    82
   * \param os output stream
2646
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    83
   * This method is used by Packet::Print to print the 
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    84
   * content of a trailer as ascii data to a c++ output stream.
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    85
   * Although the trailer is free to format its output as it
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    86
   * wishes, it is recommended to follow a few rules to integrate
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    87
   * with the packet pretty printer: start with flags, small field 
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    88
   * values located between a pair of parens. Values should be separated 
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    89
   * by whitespace. Follow the parens with the important fields, 
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    90
   * separated by whitespace.
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    91
   * i.e.: (field1 val1 field2 val2 field3 val3) field4 val4 field5 val5
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    92
   */
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    93
  virtual void Print (std::ostream &os) const = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
2646
c1fef7686472 remove dead code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2643
diff changeset
    96
std::ostream & operator << (std::ostream &os, const Trailer &trailer);
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: 1132
diff changeset
    97
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: 1132
diff changeset
    98
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
107
2cbaa2a1b116 add trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 105
diff changeset
   100
#endif /* TRAILER_H */