X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FMPEGDVBBundle%2FDatagramSection.hh;h=bf5d87a32e968331fac0de7a7f903da32b11c688;hb=ae06fe86f16fdabb7ffb219d255444d2eb4f4f79;hp=3e4e35555efeff9c3934666392fd8a1996eca078;hpb=ceba483d966a9fd884b30fb9dac07156b29a4b31;p=senf.git diff --git a/Packets/MPEGDVBBundle/DatagramSection.hh b/Packets/MPEGDVBBundle/DatagramSection.hh index 3e4e355..bf5d87a 100644 --- a/Packets/MPEGDVBBundle/DatagramSection.hh +++ b/Packets/MPEGDVBBundle/DatagramSection.hh @@ -28,11 +28,8 @@ // Custom includes #include -#include "Packets/PacketType.hh" -#include "Packets/ParseInt.hh" -#include "Packets/PacketRegistry.hh" -#include "Packets/PacketParser.hh" -#include "Packets/MPEGDVBBundle/DSMCCSection.hh" +#include "../../Packets/Packets.hh" +#include "DSMCCSection.hh" //#include "DatagramSection.mpp" @@ -48,47 +45,27 @@ namespace senf { */ struct Parse_DatagramSection : public Parse_DSMCCSection { - Parse_DatagramSection(data_iterator i, state_type s) : senf::Parse_DSMCCSection(i,s) {} +# include SENF_FIXED_PARSER() - typedef Parse_UIntField < 2, 4 > Parse_payload_scrmbl_ctrl; - typedef Parse_UIntField < 4, 6 > Parse_addr_scrmbl_ctrl; - typedef Parse_Flag < 6 > Parse_llc_snap_flag; - -# ifndef DOXYGEN - - SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS_OFFSET(Parse_DSMCCSection::fixed_bytes, - ((Field ) ( mac_addr_4, Parse_UInt8 )) - ((Field ) ( mac_addr_3, Parse_UInt8 )) - ((Field ) ( mac_addr_2, Parse_UInt8 )) - ((Field ) ( mac_addr_1, Parse_UInt8 )) - ); - -# else - - Parse_UInt8 mac_addr_4() const; - Parse_UInt8 mac_addr_3() const; - Parse_UInt8 mac_addr_2() const; - Parse_UInt8 mac_addr_1() const; - -# endif - - Parse_UInt8 mac_addr_6() const { return parse( 3 ); } - Parse_UInt8 mac_addr_5() const { return parse( 4 ); } - Parse_payload_scrmbl_ctrl payload_scrmbl_ctrl() const { - return parse( 5 ); - } - Parse_addr_scrmbl_ctrl addr_scrmbl_ctrl() const { - return parse( 5 ); - } - Parse_llc_snap_flag llc_snap_flag() const { - return parse( 5 ); - } - - void init() - { - Parse_DSMCCSection::init(); - defaultInit(); - } + SENF_PARSER_INHERIT( Parse_DSMCCSection ); + + SENF_PARSER_FIELD ( mac_addr_4 , Parse_UInt8 ); + SENF_PARSER_FIELD ( mac_addr_3 , Parse_UInt8 ); + SENF_PARSER_FIELD ( mac_addr_2 , Parse_UInt8 ); + SENF_PARSER_FIELD ( mac_addr_1 , Parse_UInt8 ); + + SENF_PARSER_FINALIZE( Parse_DatagramSection ); + + // Parse table_id_extension as two bytes + SENF_PARSER_GOTO( table_id_extension ); + SENF_PARSER_FIELD ( mac_addr_6 , Parse_UInt8 ); + SENF_PARSER_FIELD ( mac_addr_5 , Parse_UInt8 ); + + // Divide 5 bit version_num field into several subfields. + SENF_PARSER_SKIP_BITS( 2 ); + SENF_PARSER_BITFIELD ( payload_scrmbl_ctrl , 2, unsigned ); + SENF_PARSER_BITFIELD ( addr_scrmbl_ctrl , 2, unsigned ); + SENF_PARSER_BITFIELD ( llc_snap_flag , 1, bool ); }; /** \brief Datagram Section @@ -110,8 +87,6 @@ namespace senf { typedef Parse_DatagramSection parser; using mixin::nextPacketRange; -// using mixin::nextPacketType; - //using mixin::initSize; using mixin::init; static void dump(packet p, std::ostream & os);