X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FMPEGDVBBundle%2FSNDUPacket.hh;h=1b699128c511788e9a5d0a0d4a6f608eb31636b7;hb=3863d46dd898b7bc35ea8c6ccd8563b18762a6b6;hp=d2a00fa15c934106eef4792cd3e412638b4a71a5;hpb=981204dbf160d3dd77e303b9bd133eb187e0384f;p=senf.git diff --git a/Packets/MPEGDVBBundle/SNDUPacket.hh b/Packets/MPEGDVBBundle/SNDUPacket.hh index d2a00fa..1b69912 100644 --- a/Packets/MPEGDVBBundle/SNDUPacket.hh +++ b/Packets/MPEGDVBBundle/SNDUPacket.hh @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Thorsten Horstmann // // 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 @@ -23,17 +23,14 @@ /** \file \brief SNDUPacket public header */ -#ifndef HH_SNDUPacket_ -#define HH_SNDUPacket_ 1 +#ifndef HH_SENF_Packets_MPEGDVBBundle_SNDUPacket_ +#define HH_SENF_Packets_MPEGDVBBundle_SNDUPacket_ 1 // Custom includes #include #include -#include "Packets/PacketType.hh" -#include "Packets/ParseInt.hh" -#include "Packets/PacketRegistry.hh" -#include "Packets/PacketParser.hh" -#include "Packets/DefaultBundle/EthernetPacket.hh" +#include "../../Packets/Packets.hh" +#include "../DefaultBundle/EthernetPacket.hh" //#include "SNDUPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -46,42 +43,35 @@ namespace senf { \see SNDUPacketType */ - struct Parse_SNDUPacket : public PacketParserBase + struct SNDUPacketParser : public PacketParserBase { -# ifndef DOXYGEN - - SENF_PACKET_PARSER_NO_INIT(Parse_SNDUPacket); +# include SENF_PARSER() -# endif - - typedef Parse_Flag < 0 > Parse_daaf; // Destination Address Absent Field - typedef Parse_UIntField < 1, 16 > Parse_length; - - Parse_daaf d_bit() const { - return parse( 0 ); - } - Parse_length length() const { - return parse( 0 ); - } - Parse_UInt16 type() const { - return parse( 2 ); - } - Parse_MAC destination() const { - BOOST_ASSERT( ! d_bit() ); - return parse( 4 ); - } - Parse_UInt32 crc() const { - return parse( data().size()-4 ); - } + /* We first define the fields as they appear in the field. Some of the fields are declared + private. We provide custom accessors for those fields further down. */ + + SENF_PARSER_PRIVATE_BITFIELD ( d_bit_ , 1 , unsigned ); + SENF_PARSER_BITFIELD ( length , 15 , unsigned ); + SENF_PARSER_FIELD ( type , UInt16Parser ); + SENF_PARSER_PRIVATE_VARIANT ( destination_ , d_bit_ , + (MACAddressParser) (VoidPacketParser) ); - void init() const { - defaultInit(); - d_bit() = false; - } + SENF_PARSER_FINALIZE( SNDUPacketParser ); - PacketParserBase::size_type bytes() const; + MACAddressParser destination() /// Only defined if d_bit() == \c false + { return destination_().get<0>(); } + + bool d_bit() /// Destination absent bit + { return d_bit_(); } + + void withDestination() /// Clear destination absent bit + { destination_().init<0>(); } - static const size_type init_bytes = 2+2+4; // D-Bit + 15 bits length + 16 bits type field + 32 bits crc + void withoutDestination() /// Set destination absent bit + { destination_().init<1>(); } + + UInt32Parser crc() + { return parse( data().size() - 4 ); } boost::uint32_t calcCrc() const; }; @@ -97,7 +87,8 @@ namespace senf { \ref SNDUPacket \par Fields: - \ref Parse_SNDUPacket + \ref SNDUPacketParser + \image html SNDUPacket.png \ingroup protocolbundle_mpegdvb */ @@ -107,13 +98,13 @@ namespace senf { { // typedef PacketTypeMixin mixin; typedef ConcretePacket packet; - typedef Parse_SNDUPacket parser; + typedef SNDUPacketParser parser; // using mixin::nextPacketRange; // using mixin::nextPacketType; // using mixin::init; -// static registry_key_t nextPacketKey(packet p); +// static key_t nextPacketKey(packet p); static void init(packet p);