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