Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Packets / MPEGDVBBundle / MPESection.hh
1 // $Id:MPESection.hh 560 2007-12-13 14:39:37Z tho $
2 //
3 // Copyright (C) 2007
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Thorsten Horstmann <tho@berlios.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \file
24     \brief MPESection public header */
25
26 #ifndef HH_SENF_Packets_MPEGDVBBundle_MPESection_
27 #define HH_SENF_Packets_MPEGDVBBundle_MPESection_ 1
28
29 // Custom includes
30 #include <boost/crc.hpp>
31 #include <algorithm>
32 #include <senf/Packets/Packets.hh>
33
34 //#include "MPESection.mpp"
35 //-/////////////////////////////////////////////////////////////////////////////////////////////////
36
37 namespace senf {
38
39     struct MPERealTimeParametersParser : public PacketParserBase
40     {
41 #       include SENF_FIXED_PARSER()
42
43         SENF_PARSER_BITFIELD ( delta_t,                  12, unsigned );
44         SENF_PARSER_BITFIELD ( table_boundary,           1,  bool     );
45         SENF_PARSER_BITFIELD ( frame_boundary,           1,  bool     );
46         SENF_PARSER_BITFIELD ( address,                  18, unsigned );
47
48         SENF_PARSER_FINALIZE( MPERealTimeParametersParser );
49     };
50
51
52     /** \brief Parse a MPE Section
53
54         Parser implementing the header of a MPE Section
55
56         \see MPESectionType
57      */
58     class MPESectionParser : public PacketParserBase
59     {
60     public:
61 #       include SENF_FIXED_PARSER()
62
63         SENF_PARSER_FIELD( table_id, UInt8Parser );
64
65         SENF_PARSER_BITFIELD        ( section_syntax_indicator, 1,  bool     );
66         SENF_PARSER_BITFIELD        ( private_indicator,        1,  bool     );
67         SENF_PARSER_PRIVATE_BITFIELD( reserved_1,               2,  unsigned );
68         SENF_PARSER_BITFIELD        ( section_length,           12, unsigned );
69
70         SENF_PARSER_FIELD( mac_addr_6, UInt8Parser );
71         SENF_PARSER_FIELD( mac_addr_5, UInt8Parser );
72
73         SENF_PARSER_PRIVATE_BITFIELD( reserved_2,          2, unsigned );
74         SENF_PARSER_BITFIELD        ( payload_scrmbl_ctrl, 2, unsigned );
75         SENF_PARSER_BITFIELD        ( addr_scrmbl_ctrl,    2, unsigned );
76         SENF_PARSER_BITFIELD        ( llc_snap_flag,       1, bool     );
77         SENF_PARSER_BITFIELD        ( curr_next_indicator, 1, bool     );
78
79         SENF_PARSER_FIELD( section_num,      UInt8Parser );
80         SENF_PARSER_FIELD( last_section_num, UInt8Parser );
81
82         SENF_PARSER_FIELD( real_time_parameters, MPERealTimeParametersParser );
83
84         SENF_PARSER_FINALIZE( MPESectionParser );
85
86         SENF_PARSER_PRIVATE_BITFIELD( ip_datagram_version, 4, unsigned );
87
88         SENF_PARSER_INIT() {
89             table_id() = 0x3e;
90             section_syntax_indicator() = 1;
91             private_indicator() = 0;
92             reserved_1() = 3;
93             reserved_2() = 3;
94             payload_scrmbl_ctrl() = 0;
95             addr_scrmbl_ctrl() = 0;
96             curr_next_indicator() = 1;
97         }
98
99         UInt32Parser crc() const { return parse<UInt32Parser>( data().size()-4 ); }
100         boost::uint32_t calcCrc() const;
101
102         friend class MPESectionType;
103
104     private:
105         typedef boost::crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0, false, false> crc32_t;
106     };
107
108
109     /** \brief MPE Section
110
111         \par Packet type (typedef):
112             \ref MPESection
113
114         \par Fields:
115             \ref MPESectionParser
116             \image html MPESection.png
117
118         \ingroup protocolbundle_mpegdvb
119      */
120     struct MPESectionType
121         : public PacketTypeBase,
122           public PacketTypeMixin<MPESectionType>
123     {
124 #ifndef DOXYGEN
125         typedef PacketTypeMixin<MPESectionType> mixin;
126 #endif
127         typedef ConcretePacket<MPESectionType> packet; ///< MPESection packet typedef
128         typedef MPESectionParser parser;               ///< typedef to the parser of MPESection
129
130         using mixin::nextPacketRange;
131         using mixin::init;
132
133         /** \brief Dump given MPESection in readable form to given output stream */
134         static void dump(packet p, std::ostream & os);
135
136         static void finalize(packet p);
137
138         static factory_t nextPacketType(packet p);
139
140         static PacketParserBase::size_type initSize();
141         static PacketParserBase::size_type initHeadSize();
142     };
143
144     /** \brief MPESection packet typedef
145          \ingroup protocolbundle_mpegdvb
146      */
147     typedef ConcretePacket<MPESectionType> MPESection;
148 }
149
150 //-/////////////////////////////////////////////////////////////////////////////////////////////////
151 //#include "MPESection.cci"
152 //#include "MPESection.ct"
153 //#include "MPESection.cti"
154 #endif
155
156 \f
157 // Local Variables:
158 // mode: c++
159 // fill-column: 100
160 // c-file-style: "senf"
161 // indent-tabs-mode: nil
162 // ispell-local-dictionary: "american"
163 // compile-command: "scons -u test"
164 // comment-column: 40
165 // End: