From 5be78db7c6f384e2a1679c8c3526f0bbfb1e12c2 Mon Sep 17 00:00:00 2001
From: tho <tho@wiback.org>
Date: Wed, 4 Feb 2009 13:30:23 +0000
Subject: [PATCH] Packets documentation updates

---
 Makefile                                   |   3 +
 Packets/80221Bundle/MIHPacket.hh           |  28 +++++---
 Packets/80221Bundle/TLV.dia                | Bin 0 -> 2400 bytes
 Packets/80221Bundle/TLVPacket.hh           |  77 +++++++++++++++++++--
 Packets/DefaultBundle/EthernetPacket.hh    |   9 ++-
 Packets/DefaultBundle/IPv4Packet.hh        |  64 ++++++++++-------
 Packets/DefaultBundle/IPv4Packet.test.cc   |   1 -
 Packets/DefaultBundle/IPv6Extensions.hh    |  19 ++---
 Packets/DefaultBundle/IPv6Packet.hh        |  46 +++++++++---
 Packets/DefaultBundle/LlcSnapPacket.hh     |  12 ++--
 Packets/DefaultBundle/Mldv2Packet.test.cc  |   2 +-
 Packets/DefaultBundle/RTPPacket.cc         |  16 ++---
 Packets/DefaultBundle/RTPPacket.hh         |  30 ++++----
 Packets/DefaultBundle/RTPPacket.test.cc    |  13 ++--
 Packets/DefaultBundle/UDPPacket.hh         |  46 ++++++++----
 Packets/MPEGDVBBundle/MPESection.hh        |  11 ++-
 Packets/MPEGDVBBundle/TLV.dia              | Bin 2532 -> 0 bytes
 Packets/MPEGDVBBundle/TransportPacket.hh   |  16 ++---
 Packets/SConscript                         |   2 +-
 Socket/Protocols/DatagramSocketProtocol.hh |   4 --
 20 files changed, 275 insertions(+), 124 deletions(-)
 create mode 100644 Packets/80221Bundle/TLV.dia
 delete mode 100644 Packets/MPEGDVBBundle/TLV.dia

diff --git a/Makefile b/Makefile
index 250155cb2..b09752e66 100644
--- a/Makefile
+++ b/Makefile
@@ -24,6 +24,9 @@ all_docs all_tests all:
 %/test %/doc:
 	$(SCONS) $@
 
+%/build:
+	$(SCONS) $*
+
 #----------------------------------------------------------------------
 # Subversion stuff
 #----------------------------------------------------------------------
diff --git a/Packets/80221Bundle/MIHPacket.hh b/Packets/80221Bundle/MIHPacket.hh
index 9c7f10388..ede5f4133 100644
--- a/Packets/80221Bundle/MIHPacket.hh
+++ b/Packets/80221Bundle/MIHPacket.hh
@@ -44,7 +44,7 @@ namespace senf {
     // the maximum length of a MIHF_ID is 253 octets (see F.3.11 in 802.21)
     // we could set maxLengthValue in INIT, but for the most MIHF_IDs the default
     // maximum length of 127 should be enough.
-    // The user must call mihPacket->src_mihfId().maxLengthValue( 127) before 
+    // The user must call mihPacket->src_mihfId().maxLengthValue( 253) before 
     // setting longer MIHF_IDs
     class MIHFId_TLVParser : public BaseTLVPacketParser
     {
@@ -94,6 +94,13 @@ namespace senf {
         }
     };
 
+    /** \brief Parse a MIH packet
+
+        Parser implementing the MIH header. The fields implemented are:
+        \image html MIHPacket.png
+        
+        \see MIHPacketType
+     */
     struct MIHPacketParser : public PacketParserBase
     {
     #   include SENF_PARSER()
@@ -138,7 +145,6 @@ namespace senf {
 
         \par Fields:
             \ref MIHPacketParser
-            \image html MIHPacket.png
         
         \ingroup protocolbundle_80221
      */
@@ -146,19 +152,23 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<MIHPacketType>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<MIHPacketType> mixin;
-        typedef ConcretePacket<MIHPacketType> packet;
-        typedef MIHPacketParser parser;
+#endif
+        typedef ConcretePacket<MIHPacketType> packet; ///< MIH packet typedef
+        typedef MIHPacketParser parser;               ///< typedef to the parser of MIH packet
 
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
 
+        /** \brief Dump given MIH packet in readable form to given output stream */
         static void dump(packet p, std::ostream &os);
         static void finalize(packet p);
         static factory_t nextPacketType(packet p);
     };
 
+    /** \brief MIH packet typedef */
     typedef ConcretePacket<MIHPacketType> MIHPacket;
     
     
@@ -174,20 +184,22 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<MIHPayloadPacketType>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<MIHPayloadPacketType> mixin;
-        typedef ConcretePacket<MIHPayloadPacketType> packet;
-        typedef MIHPayloadPacketParser parser;
+#endif
+        typedef ConcretePacket<MIHPayloadPacketType> packet; ///< MIH Payload packet typedef 
+        typedef MIHPayloadPacketParser parser; ///< typedef to the parser of MIH Payload packet
 
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
 
+        /** \brief Dump given MIHPayload in readable form to given output stream */
         static void dump(packet p, std::ostream &os);
     };
         
+     /** \brief MIH Payload packet typedef */
     typedef ConcretePacket<MIHPayloadPacketType> MIHPayloadPacket;
-            
-
 }
 
 
diff --git a/Packets/80221Bundle/TLV.dia b/Packets/80221Bundle/TLV.dia
new file mode 100644
index 0000000000000000000000000000000000000000..d3f9ab516a0712561a3eb1b2e67479680dd267bb
GIT binary patch
literal 2400
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
St^e`<`t1LDuUo`VhX4TAxwaMn

literal 0
HcmV?d00001

diff --git a/Packets/80221Bundle/TLVPacket.hh b/Packets/80221Bundle/TLVPacket.hh
index c337aecbc..bf0ce2e6d 100644
--- a/Packets/80221Bundle/TLVPacket.hh
+++ b/Packets/80221Bundle/TLVPacket.hh
@@ -71,27 +71,80 @@ namespace senf {
     };  
         
 
+    /** \brief Base class for TLV-Packet-Parsers
+     
+         BaseTLVPacketParser is the abstract base class for TLV-Packet-Parsers. It defines the
+         \ref type() field as an \ref senf::UInt8Parser and the \ref length() field as a 
+         DynamicTLVLengthParser. The length field is read-only. 
+         
+         To create your own \c TLVParser you have to inherit from BaseTLVPacketParser (don't 
+         forget \ref SENF_PARSER_INHERIT) and define the \c value field. In the following example 
+         the value is a vector of MacAddresses: 
+         \code
+         struct MacAddressesTLVParser : public BaseTLVPacketParser {
+         #   include SENF_PARSER()        
+             SENF_PARSER_INHERIT ( BaseTLVPacketParser );
+             SENF_PARSER_VECTOR  ( value, bytes(length), senf::MACAddressParser );
+             SENF_PARSER_FINALIZE( MacAddressesTLVParser );
+         };
+         
+         struct MacAddressesTLVPacketType : public PacketTypeBase {
+            typedef MacAddressesTLVParser parser;
+            ...
+            static void finalize(ConcretePacket<MacAddressesTLVPacketType> p) { 
+                p->shrinkLength();
+            }
+         };
+         \endcode
+         
+         You have to adjust the maximum length value with the \ref maxLengthValue function 
+         before the length value is set. The default maximum value is 127. So, in the above
+         example adding more than 21 MACAddresses to the vector will throw a TLVLengthException
+         if you don't call \c macAddressesTLVPacket->maxLengthValue( \e some_value) before.
+         
+         \see DynamicTLVLengthParser \n
+           GenericTLVPacketParser \n
+     */
     class BaseTLVPacketParser : public PacketParserBase
     {
+    public:
 #       include SENF_PARSER()
         SENF_PARSER_FIELD    ( type,   UInt8Parser            );
         SENF_PARSER_FIELD_RO ( length, DynamicTLVLengthParser );
         SENF_PARSER_FINALIZE ( BaseTLVPacketParser            );
         
+        /** \brief set maximum value of length field
+    
+            The size of the length field will be increased if necessary.
+            \param v maximum value of length field
+         */
         void maxLengthValue(DynamicTLVLengthParser::value_type v) const {
             length_().maxValue(v);
         }
+        
+        /** \brief shrink size of length field to minimum
+    
+            The size of the length field will be decreased to minimum necessary to hold
+            the current length value.
+         */
         void shrinkLength() { 
             length_().shrink(); 
         };
         
     protected:
+        /// return size of length field
         size_type length_bytes() const { return length_().bytes(); };
+        /// set length field to given value
         void length(DynamicTLVLengthParser::value_type &v) { length_() = v; };
+        /// resize the Packet after the length field to given size
         senf::safe_data_iterator resizeValue(DynamicTLVLengthParser::value_type size);
     };
 
         
+    /** \brief Parser for a generic TLV packet
+
+        \see GenericTLVPacketType
+     */
     struct GenericTLVPacketParser : public BaseTLVPacketParser
     {
 #       include SENF_PARSER()        
@@ -109,22 +162,38 @@ namespace senf {
         void value(ForwardReadableRange const &range);
     };
     
+    /** \brief Generic TLV packet
+
+        \par Packet type (typedef):
+            \ref GenericTLVPacket
+
+        \image html TLV.png
+        
+        \ingroup protocolbundle_80221
+     */
     struct GenericTLVPacketType
         : public PacketTypeBase,
           public PacketTypeMixin<GenericTLVPacketType>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<GenericTLVPacketType> mixin;
-        typedef ConcretePacket<GenericTLVPacketType> packet;
-        typedef GenericTLVPacketParser parser;
+#endif
+        typedef ConcretePacket<GenericTLVPacketType> packet; ///< GenericTLV packet typedef
+        typedef GenericTLVPacketParser parser;               ///< typedef to the parser of GenericTLV packet
 
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
         
-        static void finalize(packet p);
-        static void dump(packet p, std::ostream & os);
+        /** \brief Dump given GenericTLVPacket in readable form to given output stream */
+        static void dump(packet p, std::ostream & os);  
+        static void finalize(packet p);  ///< Finalize packet.
+                                         /**< shrink size of length field to minimum 
+                                              \see BaseTLVPacketParser::shrinkLength() */
+        
     };
     
+    /** \brief GenericTLV packet typedef */
     typedef ConcretePacket<GenericTLVPacketType> GenericTLVPacket;
 }
 
diff --git a/Packets/DefaultBundle/EthernetPacket.hh b/Packets/DefaultBundle/EthernetPacket.hh
index 8286e88fc..433239167 100644
--- a/Packets/DefaultBundle/EthernetPacket.hh
+++ b/Packets/DefaultBundle/EthernetPacket.hh
@@ -85,7 +85,6 @@ namespace senf {
             \ref PacketRegistry
      */
     struct EtherTypes {
-        // See 
         typedef boost::uint16_t key_t;
     };
 
@@ -110,7 +109,9 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<EthernetPacketType, EtherTypes>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<EthernetPacketType, EtherTypes> mixin;
+#endif
         typedef ConcretePacket<EthernetPacketType> packet;
         typedef EthernetPacketParser parser;
 
@@ -119,7 +120,8 @@ namespace senf {
         using mixin::init;
 
         static factory_t nextPacketType(packet p);
-        static void dump(packet p, std::ostream & os);
+        /// Dump given EthernetPacket in readable form to given output stream
+        static void dump(packet p, std::ostream & os); 
         static void finalize(packet p);
     };
 
@@ -166,7 +168,9 @@ namespace senf {
         : public PacketTypeBase, 
           public PacketTypeMixin<EthVLanPacketType, EtherTypes>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<EthVLanPacketType, EtherTypes> mixin;
+#endif
         typedef ConcretePacket<EthVLanPacketType> packet;
         typedef EthVLanPacketParser parser;
 
@@ -180,6 +184,7 @@ namespace senf {
         static key_t nextPacketKey(packet p) 
             { return p->type(); }
 
+        /// Dump given EthVLanPacket in readable form to given output stream
         static void dump(packet p, std::ostream & os);
         static void finalize(packet p);
     };
diff --git a/Packets/DefaultBundle/IPv4Packet.hh b/Packets/DefaultBundle/IPv4Packet.hh
index 0dc791733..e124ee4c6 100644
--- a/Packets/DefaultBundle/IPv4Packet.hh
+++ b/Packets/DefaultBundle/IPv4Packet.hh
@@ -60,6 +60,8 @@ namespace senf {
 
         Parser implementing the IPv4 header.
         
+        \image html IPv4Packet.png
+                
         \see IPv4PacketType \n
             <a href="http://tools.ietf.org/html/rfc791">RFC 791</a>
 
@@ -76,10 +78,10 @@ namespace senf {
         SENF_PARSER_FIELD( length,      UInt16Parser       );
         SENF_PARSER_FIELD( identifier,  UInt16Parser       );
 
-        SENF_PARSER_BITFIELD( reserved,  1, bool     );
-        SENF_PARSER_BITFIELD( df,        1, bool     );
-        SENF_PARSER_BITFIELD( mf,        1, bool     );
-        SENF_PARSER_BITFIELD( frag,     13, unsigned );
+        SENF_PARSER_PRIVATE_BITFIELD( reserved,  1, bool     );
+        SENF_PARSER_BITFIELD        ( df,        1, bool     );
+        SENF_PARSER_BITFIELD        ( mf,        1, bool     );
+        SENF_PARSER_BITFIELD        ( frag,     13, unsigned );
 
         SENF_PARSER_FIELD( ttl,         UInt8Parser        );
         SENF_PARSER_FIELD( protocol,    UInt8Parser        );
@@ -95,11 +97,16 @@ namespace senf {
 
         SENF_PARSER_FINALIZE(IPv4PacketParser);
         
-        boost::uint16_t calcChecksum() const;
+        boost::uint16_t calcChecksum() const; ///< calculate header checksum
+                                              /**< calculate and return the checksum of the header
+                                                   \see \ref senf::IpChecksum */
 
         bool validateChecksum() const {
             return checksum() == calcChecksum();
-        }
+        }                               ///< validate header checksum
+                                        /**< return \c true if the \ref checksum() "checksum" 
+                                             field is equal to the \ref calcChecksum() 
+                                             "calculated checksum" */
     };
 
     /** \brief IP protocol number registry
@@ -114,6 +121,12 @@ namespace senf {
     };
 
     /** \brief IPv4 packet
+        
+        \par Packet type (typedef):
+            \ref IPv4Packet
+
+        \par Fields:
+            see \ref IPv4PacketParser
 
         <table class="packet" cellpadding="5" cellspacing="1" border="1">
           <tr>
@@ -129,7 +142,7 @@ namespace senf {
             <td colspan="8">\ref IPv4PacketParser::length() "Length"</td> 
           </tr><tr>
             <td colspan="4">\ref IPv4PacketParser::identifier() "Identifier"</td>
-            <td>\ref IPv4PacketParser::reserved() "R"</td>
+            <td>R</td>
             <td>\ref IPv4PacketParser::df() "DF"</td>
             <td>\ref IPv4PacketParser::mf() "MF"</td>
             <td colspan="5">\ref IPv4PacketParser::frag() "Fragment Offset"</td>
@@ -143,23 +156,13 @@ namespace senf {
             <td colspan="12">\ref IPv4PacketParser::destination() "Destination Address"</td>
           </tr>
         </table>
-        
-        \par Packet type (typedef):
-            \ref IPv4Packet
-
-        \par Fields:
-            \ref IPv4PacketParser
 
         \par Associated registries:
             \ref IpTypes
 
         \par Finalize action:
-            Set \a length from payload size\n
-            Set \a protocol from type of next packet if found in \ref IpTypes\n
-            Calculate \a checksum
-
-        \image html IPv4Packet.png
-
+            \copydetails finalize()
+ 
         \ingroup protocolbundle_default
      */
     struct IPv4PacketType
@@ -168,9 +171,10 @@ namespace senf {
     {
 #ifndef DOXYGEN
         typedef PacketTypeMixin<IPv4PacketType, IpTypes> mixin;
-        typedef ConcretePacket<IPv4PacketType> packet;
-        typedef IPv4PacketParser parser;
 #endif
+        typedef ConcretePacket<IPv4PacketType> packet;  ///< IPv4 packet typedef
+        typedef IPv4PacketParser parser;                ///< typedef to the parser of IPv4 packet
+
         using mixin::nextPacketRange;
         using mixin::nextPacketType;
         using mixin::initSize;
@@ -178,11 +182,19 @@ namespace senf {
 
         static key_t nextPacketKey(packet p) 
             { return p->protocol(); }
-
-        static void dump(packet p, std::ostream & os);
-        static void finalize(packet p);
-    };
         
+        /** \brief Dump given IPv4Packet in readable form to given output stream */
+        static void dump(packet p, std::ostream & os); 
+        
+        static void finalize(packet p); ///< Finalize packet.
+                                        /**< \li set \ref IPv4PacketParser::length() "length" 
+                                               from payload size
+                                             \li set \ref IPv4PacketParser::protocol() "protocol" 
+                                               from type of next packet if found in \ref IpTypes
+                                             \li calculate and set 
+                                               \ref IPv4PacketParser::checksum() "checksum" */
+    };
+
     /** \brief IPv4 packet typedef */
     typedef ConcretePacket<IPv4PacketType> IPv4Packet;
 }
@@ -191,7 +203,7 @@ namespace senf {
 ///////////////////////////////hh.e////////////////////////////////////////
 #endif
 #ifndef SENF_PACKETS_DECL_ONLY
-//#include IPv4Packet.cci"
+//#include "IPv4Packet.cci"
 //#include "IPv4Packet.ct"
 //#include "IPv4Packet.cti"
 #endif
diff --git a/Packets/DefaultBundle/IPv4Packet.test.cc b/Packets/DefaultBundle/IPv4Packet.test.cc
index 423e19fe3..9f1eb94b3 100644
--- a/Packets/DefaultBundle/IPv4Packet.test.cc
+++ b/Packets/DefaultBundle/IPv4Packet.test.cc
@@ -54,7 +54,6 @@ BOOST_AUTO_UNIT_TEST(ipV4Packet_packet)
     BOOST_CHECK_EQUAL( p->tos(),         0x02u       );
     BOOST_CHECK_EQUAL( p->length(),      0x0304u     );
     BOOST_CHECK_EQUAL( p->identifier(),  0x0506u     );
-    BOOST_CHECK_EQUAL( p->reserved(),    0           );
     BOOST_CHECK_EQUAL( p->df(),          0           );
     BOOST_CHECK_EQUAL( p->mf(),          0           );
     BOOST_CHECK_EQUAL( p->frag(),        0x0708u     );
diff --git a/Packets/DefaultBundle/IPv6Extensions.hh b/Packets/DefaultBundle/IPv6Extensions.hh
index d2e9de07d..4a88310eb 100644
--- a/Packets/DefaultBundle/IPv6Extensions.hh
+++ b/Packets/DefaultBundle/IPv6Extensions.hh
@@ -37,6 +37,7 @@ namespace senf {
     /** \brief Parse in IPv6 fragment extension header
         
         Parser implementing the IPv6 fragment extension. The fields implemented are:
+        \image html IPv6Extensions_Fragment.png
 
         \see IPv6ExtensionType_Fragment \n
             <a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
@@ -66,13 +67,11 @@ namespace senf {
             \ref IPv6PacketParserExtension_Fragment
         
         \par Associated registries:
-            \par IpTypes
+            \ref IpTypes
         
         \par Finalize action:
             Set \a nextHeader from type of next packet if found in \ref IpTypes
 
-        \image html IPv6Extensions_Fragment.png
-
         \ingroup protocolbundle_default
      */
     struct IPv6ExtensionType_Fragment
@@ -81,9 +80,12 @@ namespace senf {
     {
 #ifndef DOXYGEN
         typedef PacketTypeMixin<IPv6ExtensionType_Fragment, IpTypes> mixin;
-        typedef ConcretePacket<IPv6ExtensionType_Fragment> packet;
-        typedef IPv6PacketParserExtension_Fragment parser;
 #endif
+        /** \brief IPv6 fragment extension packet typedef */
+        typedef ConcretePacket<IPv6ExtensionType_Fragment> packet; 
+        /** \brief typedef to the parser of IPv6 fragment extension packet */
+        typedef IPv6PacketParserExtension_Fragment parser;
+
         using mixin::nextPacketRange;
         using mixin::nextPacketType;
         using mixin::initSize;
@@ -92,10 +94,11 @@ namespace senf {
         static key_t nextPacketKey(packet p) 
             { return p->nextHeader(); }
         
-        static void dump(packet p, std::ostream & os);
+        /** \brief Dump given IPv6Extension_Fragment in readable form to given output stream */
+        static void dump(packet p, std::ostream & os); 
 
-        static void finalize(packet p)
-            { p->nextHeader() << key(p.next(nothrow)); }
+        static void finalize(packet p) { 
+            p->nextHeader() << key(p.next(nothrow)); }
     };
 
     /** \brief IPv6 fragment extension packet typedef */
diff --git a/Packets/DefaultBundle/IPv6Packet.hh b/Packets/DefaultBundle/IPv6Packet.hh
index 97f79abb2..2ce41a610 100644
--- a/Packets/DefaultBundle/IPv6Packet.hh
+++ b/Packets/DefaultBundle/IPv6Packet.hh
@@ -59,6 +59,7 @@ namespace senf {
 
     /** \brief Parse an IPv6 packet
 
+        \image html IPv6Packet.png
         \see IPv6PacketType \n
             <a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
      */
@@ -91,14 +92,34 @@ namespace senf {
         \par Fields:
             \ref IPv6PacketParser
 
+        <table class="packet" cellpadding="5" cellspacing="1" border="1">
+          <tr>
+            <th width="12.5%">0</th>  <th width="12.5%">4</th> <th width="12.5%">8</th>
+            <th width="12.5%">12</th> <th width="12.5%">16</th> <th width="12.5%">20</th>
+            <th width="12.5%">24</th> <th width="6.5%">28</th>
+            <th style="text-align:right" width="6%">31</th>
+          </tr><tr>
+            <td>\ref IPv6PacketParser::version() "Version"</td>
+            <td colspan="2">\ref IPv6PacketParser::trafficClass() "Traffic Class"</td>
+            <td colspan="6">\ref IPv6PacketParser::flowLabel() "Flow Label"</td>
+          </tr><tr>
+            <td colspan="4">\ref IPv6PacketParser::length() "Payload Length"</td>
+            <td colspan="2">\ref IPv6PacketParser::nextHeader() "Next Header"</td>
+            <td colspan="3">\ref IPv6PacketParser::hopLimit() "Hop Limit"</td>
+          </tr><tr>
+            <td colspan="9" style="height:8em">
+              \ref IPv6PacketParser::source() "Source Address"</td>
+          </tr><tr>
+            <td colspan="9" style="height:8em">
+              \ref IPv6PacketParser::destination()  "Destination Address"</td>
+          </tr>
+        </table>
+          
         \par Associated registries:
             \ref IpTypes
 
         \par Finalize action:
-            Set \a length from payload size\n
-            Set \a nextHeader from type of next packet if found in \ref IpTypes
-
-        \image html IPv6Packet.png
+            \copydetails finalize()
 
         \ingroup protocolbundle_default
      */
@@ -108,9 +129,10 @@ namespace senf {
     {
 #ifndef DOXYGEN
         typedef PacketTypeMixin<IPv6PacketType, IpTypes> mixin;
-        typedef ConcretePacket<IPv6PacketType> packet;
-        typedef IPv6PacketParser parser;
 #endif
+        typedef ConcretePacket<IPv6PacketType> packet; ///< IPv6 packet typedef
+        typedef IPv6PacketParser parser;               ///< typedef to the parser of IPv6 packet
+
         using mixin::nextPacketRange;
         using mixin::nextPacketType;
         using mixin::initSize;
@@ -119,9 +141,15 @@ namespace senf {
         static key_t nextPacketKey(packet p) 
             { return p->nextHeader(); }
         
-        static void dump(packet p, std::ostream & os);
-
-        static void finalize(packet p);
+        /** \brief Dump given IPv6Packet in readable form to given output stream */
+        static void dump(packet p, std::ostream & os); 
+        
+        static void finalize(packet p); ///< Finalize packet.
+                                        /**< \li set \ref IPv6PacketParser::length() "length" 
+                                               from payload size
+                                             \li set \ref IPv6PacketParser::nextHeader() 
+                                               "nextHeader" from type of next packet if found 
+                                               in \ref IpTypes */
     };
 
     /** \brief IPv6 packet typedef */
diff --git a/Packets/DefaultBundle/LlcSnapPacket.hh b/Packets/DefaultBundle/LlcSnapPacket.hh
index df1d155c3..5d0f7e9ab 100644
--- a/Packets/DefaultBundle/LlcSnapPacket.hh
+++ b/Packets/DefaultBundle/LlcSnapPacket.hh
@@ -38,6 +38,7 @@ namespace senf {
 
     /** \brief Parse a LLC/SNAP header
         
+        \image html LlcSnapPacket.png
         \todo document me
      */
     struct LlcSnapPacketParser : public PacketParserBase
@@ -77,8 +78,6 @@ namespace senf {
         \par Finalize action:
             XXXX
 
-        \image html LlcSnapPacket.png
-
         \ingroup protocolbundle_default
      */
     struct LlcSnapPacketType
@@ -87,18 +86,21 @@ namespace senf {
     {
 #ifndef DOXYGEN
         typedef PacketTypeMixin<LlcSnapPacketType, EtherTypes> mixin;
-        typedef ConcretePacket<LlcSnapPacketType> packet;
-        typedef LlcSnapPacketParser parser;
 #endif
+        typedef ConcretePacket<LlcSnapPacketType> packet; ///< LLC/SNAP packet typedef
+        typedef LlcSnapPacketParser parser;               ///< typedef to the parser of LLC/SNAP packet
+
         using mixin::nextPacketRange;
         using mixin::initSize;
         using mixin::init;
         
         static factory_t nextPacketType(packet p);
-        static void dump(packet p, std::ostream & os);
+        /** \brief Dump given LlcSnapPacket in readable form to given output stream */
+        static void dump(packet p, std::ostream & os); 
         static void finalize(packet p);
     };
 
+    /** \brief LLC/SNAP packet typedef */
     typedef ConcretePacket<LlcSnapPacketType> LlcSnapPacket;
 }
 
diff --git a/Packets/DefaultBundle/Mldv2Packet.test.cc b/Packets/DefaultBundle/Mldv2Packet.test.cc
index 1aeb6a5ae..b26eabe68 100644
--- a/Packets/DefaultBundle/Mldv2Packet.test.cc
+++ b/Packets/DefaultBundle/Mldv2Packet.test.cc
@@ -1,4 +1,4 @@
-// $Id: main.test.cc 206 2008-06-08 14:20:52Z pug $
+// $Id$
 //
 // Copyright (C) 2006
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
diff --git a/Packets/DefaultBundle/RTPPacket.cc b/Packets/DefaultBundle/RTPPacket.cc
index a09a89f72..4e512ab76 100644
--- a/Packets/DefaultBundle/RTPPacket.cc
+++ b/Packets/DefaultBundle/RTPPacket.cc
@@ -1,9 +1,9 @@
-// $Id: main.test.cc 206 2008-08-06 14:20:52Z pug $
+// $Id$
 //
-// Copyright (C) 2006
+// Copyright (C) 2008
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
+//     Philipp Batroff <pug@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -20,14 +20,14 @@
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// Definition of non-inline non-template functions
+/** \file 
+    \brief RTPPacket non-inline non-template implementation */
 
-// Custom includes
 #include "RTPPacket.hh"
-#include "../../Packets/Packets.hh"
-#include "../../Scheduler/ClockService.hh"
-#include <boost/io/ios_state.hpp>
+//#include "UDPPacket.ih"
 
+// Custom includes
+#include <boost/io/ios_state.hpp>
 
 #define prefix_
 
diff --git a/Packets/DefaultBundle/RTPPacket.hh b/Packets/DefaultBundle/RTPPacket.hh
index c65360e3c..403d994a1 100644
--- a/Packets/DefaultBundle/RTPPacket.hh
+++ b/Packets/DefaultBundle/RTPPacket.hh
@@ -1,9 +1,9 @@
-// $Id: main.test.cc 206 2008-08-06 14:20:52Z pug $
+// $Id$
 //
 // Copyright (C) 2006
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
+//     Philipp Batroff <pug@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -20,7 +20,8 @@
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// Definition of non-inline non-template functions
+/** \file
+    \brief RTPPacket public header */
 
 // Custom includes
 #ifndef HH_SENF_Packets_DefaultBundle_RTPPacket_
@@ -28,14 +29,12 @@
 
 #include "../../Packets/Packets.hh"
 #include "../../Socket/Protocols/INet/INet6Address.hh"
-#include "../../Socket/Protocols/INet.hh"
-#include "../../Utils/Logger/SenfLog.hh"
+
 
 namespace senf {
     
-    struct RTPPacketParser : public senf::PacketParserBase
+    struct RTPPacketParser : public PacketParserBase
     {
-        SENF_LOG_CLASS_AREA();
 #       include SENF_PARSER()
         SENF_PARSER_BITFIELD  ( version,        2, unsigned     );      //Version (RFC 3550)
         SENF_PARSER_BITFIELD  ( padding,        1, bool         );      //1 if padding behind payload
@@ -43,22 +42,21 @@ namespace senf {
         SENF_PARSER_BITFIELD_RO  ( csrcCount,      4, unsigned     );   //0-15,define the number of contributing sources
         SENF_PARSER_BITFIELD  ( marker,         1, bool         );      //Marker M=1, used to signal speech silent compression; further use in combination with PT to be defined
         SENF_PARSER_BITFIELD  ( payloadType,    7, unsigned     );      //Payload Type; e.g. PCM=8 (RFC 3550)
-        SENF_PARSER_FIELD     ( seqNumber,      senf::UInt16Parser );   //random number to identify initial segment of  a stream, increment by 1 used to resequence segments at receiver
-        SENF_PARSER_FIELD     ( timeStamp,      senf::UInt32Parser );   //signals sampling time of 1st byte of payload; initialised; used to calculate Jitter between segments
-        SENF_PARSER_FIELD     ( synSourceId,    senf::UInt32Parser );   //Synchronisation source identifier; identifier of RFTP stream source (random number) in case of conferencing identifier of mixer
-        SENF_PARSER_VECTOR    (csrcOpt, csrcCount, senf::UInt32Parser );
+        SENF_PARSER_FIELD     ( seqNumber,      UInt16Parser );   //random number to identify initial segment of  a stream, increment by 1 used to resequence segments at receiver
+        SENF_PARSER_FIELD     ( timeStamp,      UInt32Parser );   //signals sampling time of 1st byte of payload; initialised; used to calculate Jitter between segments
+        SENF_PARSER_FIELD     ( synSourceId,    UInt32Parser );   //Synchronisation source identifier; identifier of RFTP stream source (random number) in case of conferencing identifier of mixer
+        SENF_PARSER_VECTOR    (csrcOpt, csrcCount, UInt32Parser );
         
         bool valid() const {return version() == 2;}
         SENF_PARSER_FINALIZE(RTPPacketParser);
     };
     
     struct RTPPacketType 
-        : public senf::PacketTypeBase,
-          public senf::PacketTypeMixin<RTPPacketType>
+        : public PacketTypeBase,
+          public PacketTypeMixin<RTPPacketType>
     {
-        SENF_LOG_CLASS_AREA();
-        typedef senf::PacketTypeMixin<RTPPacketType> mixin;
-        typedef senf::ConcretePacket<RTPPacketType> packet;
+        typedef PacketTypeMixin<RTPPacketType> mixin;
+        typedef ConcretePacket<RTPPacketType> packet;
         typedef RTPPacketParser parser;
     
         using mixin::nextPacketRange;
diff --git a/Packets/DefaultBundle/RTPPacket.test.cc b/Packets/DefaultBundle/RTPPacket.test.cc
index 8a8446fac..9cff4af7c 100644
--- a/Packets/DefaultBundle/RTPPacket.test.cc
+++ b/Packets/DefaultBundle/RTPPacket.test.cc
@@ -1,9 +1,9 @@
-// $Id: main.test.cc 206 2008-08-06 14:20:52Z pug $
+// $Id$
 //
-// Copyright (C) 2006
+// Copyright (C) 2008
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
+//     Philipp Batroff <pug@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -20,14 +20,15 @@
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// Definition of non-inline non-template functions
+// Unit tests
 
 // Custom includes
+#include "RTPPacket.hh"
 
-#include "../../Packets/Packets.hh"
 #include "../../Utils/auto_unit_test.hh"
 #include <boost/test/test_tools.hpp>
-#include "RTPPacket.hh"
+
+
 BOOST_AUTO_UNIT_TEST(RTPPacket_packet)
 {
     unsigned char data[] = {0x80 , 0x08 , 0x1b , 0xbb , 0x02 , 0xcb , 0xad , 0x80 , 0x50 , 0x48 , 0xa7, 0x8c };
diff --git a/Packets/DefaultBundle/UDPPacket.hh b/Packets/DefaultBundle/UDPPacket.hh
index fb71f4460..e85c182dc 100644
--- a/Packets/DefaultBundle/UDPPacket.hh
+++ b/Packets/DefaultBundle/UDPPacket.hh
@@ -37,7 +37,8 @@ namespace senf {
     /** \brief Parse a UDP packet
 
         Parser implementing the UDP header. The fields implemented are:
-
+        \image html UDPPacket.png
+        
         \see UDPPacketType \n
             <a href="http://tools.ietf.org/html/rfc768">RFC 768</a>
      */
@@ -52,11 +53,14 @@ namespace senf {
 
         SENF_PARSER_FINALIZE(UDPPacketParser);
 
-        boost::uint16_t calcChecksum() const;
-
+        boost::uint16_t calcChecksum() const; ///< calculate (pseudo-)header checksum
+                                              /**< calculate and return the checksum of the
+                                                   (pseudo-)header \see \ref senf::IpChecksum */
         bool validateChecksum() const {
             return checksum() == 0u || checksum() == calcChecksum();
-        }
+        }                               ///< validate header checksum
+                                        /**< return \c true if the \ref checksum() "checksum"
+                                             field is equal to the \ref calcChecksum() "calculated checksum" */
     };
 
     /** \brief UDP packet
@@ -67,11 +71,21 @@ namespace senf {
         \par Fields:
             \ref UDPPacketParser
 
+        <table class="packet" cellpadding="5" cellspacing="1" border="1">
+          <tr>
+            <th width="25%">0</th> <th width="25%">8</th> <th width="25%">16</th>
+            <th width="15%">24</th> <th style="text-align:right" width="10%">31</th>
+          </tr><tr>
+            <td colspan="2">\ref UDPPacketParser::source() "Source Port"</td>
+            <td colspan="3">\ref UDPPacketParser::destination() "Destination Port"</td>
+          </tr><tr>
+            <td colspan="2">\ref UDPPacketParser::length() "Length"</td>
+            <td colspan="3">\ref UDPPacketParser::checksum() "Checksum"</td>
+          </tr>
+        </table>
+          
         \par Finalize action:
-            Set \a length from payload size\n
-            Calculate \a checksum
-
-        \image html UDPPacket.png
+            \copydetails finalize()
 
         \ingroup protocolbundle_default
      */
@@ -81,16 +95,22 @@ namespace senf {
     {
 #ifndef DOXYGEN
         typedef PacketTypeMixin<UDPPacketType> mixin;
-        typedef ConcretePacket<UDPPacketType> packet;
-        typedef UDPPacketParser parser;
 #endif
+        typedef ConcretePacket<UDPPacketType> packet; ///< UDP packet typedef
+        typedef UDPPacketParser parser;               ///< typedef to the parser of UDP packet
+
         using mixin::nextPacketRange;
         using mixin::initSize;
         using mixin::init;
 
+        /** \brief Dump given UDPPacket in readable form to given output stream */
         static void dump(packet p, std::ostream & os);
-
-        static void finalize(packet p);
+        
+        static void finalize(packet p); ///< Finalize packet.
+                                        /**< \li set \ref UDPPacketParser::length() "length" from 
+                                               payload size
+                                             \li calculate and set \ref UDPPacketParser::checksum() 
+                                               "checksum" */
     };
 
     /** \brief UDP packet typedef */
@@ -101,7 +121,7 @@ namespace senf {
 ///////////////////////////////hh.e////////////////////////////////////////
 #endif
 #ifndef SENF_PACKETS_DECL_ONLY
-//#include UDPPacket.cci"
+//#include "UDPPacket.cci"
 //#include "UDPPacket.ct"
 //#include "UDPPacket.cti"
 #endif
diff --git a/Packets/MPEGDVBBundle/MPESection.hh b/Packets/MPEGDVBBundle/MPESection.hh
index e6176915e..5b80e0502 100644
--- a/Packets/MPEGDVBBundle/MPESection.hh
+++ b/Packets/MPEGDVBBundle/MPESection.hh
@@ -121,20 +121,27 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<MPESectionType>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<MPESectionType> mixin;
-        typedef ConcretePacket<MPESectionType> packet;
-        typedef MPESectionParser parser;
+#endif
+        typedef ConcretePacket<MPESectionType> packet; ///< MPESection packet typedef
+        typedef MPESectionParser parser;               ///< typedef to the parser of MPESection
 
         using mixin::nextPacketRange;
         using mixin::init;
 
+        /** \brief Dump given MPESection in readable form to given output stream */
         static void dump(packet p, std::ostream & os);
+        
         static void finalize(packet p);
+        
         static factory_t nextPacketType(packet p);
+        
         static PacketParserBase::size_type initSize();
         static PacketParserBase::size_type initHeadSize();
     };
 
+    /** \brief MPESection packet typedef */
     typedef ConcretePacket<MPESectionType> MPESection;
 }
 
diff --git a/Packets/MPEGDVBBundle/TLV.dia b/Packets/MPEGDVBBundle/TLV.dia
deleted file mode 100644
index 77dc6ebaa1c69f2976044a737694e5b59aa6e3c4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2532
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

diff --git a/Packets/MPEGDVBBundle/TransportPacket.hh b/Packets/MPEGDVBBundle/TransportPacket.hh
index 13eff46bd..38200d523 100644
--- a/Packets/MPEGDVBBundle/TransportPacket.hh
+++ b/Packets/MPEGDVBBundle/TransportPacket.hh
@@ -34,16 +34,10 @@
 
 namespace senf {
 
-//    struct PSIPayloadPacketParser : public PacketParserBase
-//    {
-//        static const size_type fixed_bytes = 184;
-//
-//    };
-
-
     /** \brief Parse a Transport Stream packet
 
         Parser implementing the header of a MPEG Transport Stream packet.
+        \image html TransportPacket.png
         
         \see TransportPacketType
      */
@@ -117,7 +111,6 @@ namespace senf {
 
         \par Fields:
             \ref TransportPacketParser
-            \image html TransportPacket.png
 
         \ingroup protocolbundle_mpegdvb
      */
@@ -125,14 +118,17 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<TransportPacketType>
     {
+#ifndef DOXYGEN
         typedef PacketTypeMixin<TransportPacketType> mixin;
-        typedef ConcretePacket<TransportPacketType> packet;
-        typedef TransportPacketParser parser;
+#endif
+        typedef ConcretePacket<TransportPacketType> packet; ///< Transport packet typedef
+        typedef TransportPacketParser parser; ///< typedef to the parser of Transport packet
     
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
         
+        /** \brief Dump given Transport packet in readable form to given output stream */
         static void dump(packet p, std::ostream & os);
         static const byte SYNC_BYTE = 0x47;
     };
diff --git a/Packets/SConscript b/Packets/SConscript
index 21b1900bd..640269c47 100644
--- a/Packets/SConscript
+++ b/Packets/SConscript
@@ -11,7 +11,7 @@ SENFSCons.StandardTargets(env)
 SENFSCons.Lib(env, sources)
 SENFSCons.Doxygen(env, extra_sources = [
     env.Dia2Png("structure.dia"),
-    env.Dia2Png("MPEGDVBBundle/TLV.dia"),
+    env.Dia2Png("80221Bundle/TLV.dia"),
     env.PkgDraw("MPEGDVBBundle/DTCPPacket.hh"),
     env.PkgDraw("DefaultBundle/EthernetPacket.hh",
                 PKGDRAWPACKETS = "EthernetPacketParser"),
diff --git a/Socket/Protocols/DatagramSocketProtocol.hh b/Socket/Protocols/DatagramSocketProtocol.hh
index dcf5af830..73df0630c 100644
--- a/Socket/Protocols/DatagramSocketProtocol.hh
+++ b/Socket/Protocols/DatagramSocketProtocol.hh
@@ -51,10 +51,6 @@ namespace senf {
                                              received from the network. This allows precise network
                                              timing.
 
-                                             The returned value can be converted to the
-                                             senf::ClockService::clock_type representation using
-                                             semf::ClockService::from_timeval().
-
                                              \pre The \c SO_TIMESTAMP socket option must not be set
                                                  on the socket.
                                              \returns timestamp when last packet was received */
-- 
GitLab