X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FUDPPacket.hh;h=8b1aa70f996a2a5e6ff357917838c2baa025f4a4;hb=165ec46dc3d091c354ef8dbda67dcf7b1a97fc7d;hp=615c5308e3a3afedcd4fc1bc65284238c7015764;hpb=d53c168dbfd70ffea9ebad8953193163e113ff3a;p=senf.git diff --git a/Packets/DefaultBundle/UDPPacket.hh b/Packets/DefaultBundle/UDPPacket.hh index 615c530..8b1aa70 100644 --- a/Packets/DefaultBundle/UDPPacket.hh +++ b/Packets/DefaultBundle/UDPPacket.hh @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2006 -// 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 +// Stefan Bund // // 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,11 +20,14 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef HH_UDPPacket_ -#define HH_UDPPacket_ 1 +/** \file + \brief UDPPacket public header */ + +#ifndef HH_SENF_Packets_DefaultBundle_UDPPacket_ +#define HH_SENF_Packets_DefaultBundle_UDPPacket_ 1 // Custom includes -#include "Packets/Packets.hh" +#include "../../Packets/Packets.hh" //#include "UDPPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -35,30 +38,25 @@ namespace senf { Parser implementing the UDP header. The fields implemented are: - - - - - - -
Field nameParser type
source\ref Parse_16bit
destination\ref Parse_16bit
length\ref Parse_16bit
crc\ref Parse_16bit
- - \see UDPPacketType + \see UDPPacketType \n RFC 768 */ - struct Parse_UDP : public PacketParserBase + struct UDPPacketParser : public PacketParserBase { - SENF_PACKET_PARSER_INIT(Parse_UDP); +# include SENF_FIXED_PARSER() - /////////////////////////////////////////////////////////////////////////// + SENF_PARSER_FIELD( source, senf::UInt16Parser ); + SENF_PARSER_FIELD( destination, senf::UInt16Parser ); + SENF_PARSER_FIELD( length, senf::UInt16Parser ); + SENF_PARSER_FIELD( checksum, senf::UInt16Parser ); - typedef Parse_UInt16 Parse_16bit; + SENF_PARSER_FINALIZE(UDPPacketParser); - SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( - ((Field)( source, Parse_16bit )) - ((Field)( destination, Parse_16bit )) - ((Field)( length, Parse_16bit )) - ((Field)( crc, Parse_16bit )) ); + boost::uint16_t calcChecksum() const; + + bool validateChecksum() const { + return checksum() == 0u || checksum() == calcChecksum(); + } }; /** \brief UDP packet @@ -67,7 +65,11 @@ namespace senf { \ref UDPPacket \par Fields: - \ref Parse_UDP + \ref UDPPacketParser + + \par Finalize action: + Set \a length from payload size\n + Calculate \a checksum \ingroup protocolbundle_default */ @@ -75,19 +77,22 @@ namespace senf { : public PacketTypeBase, public PacketTypeMixin { +#ifndef DOXYGEN typedef PacketTypeMixin mixin; typedef ConcretePacket packet; - typedef Parse_UDP parser; - + typedef UDPPacketParser parser; +#endif using mixin::nextPacketRange; using mixin::initSize; using mixin::init; static void dump(packet p, std::ostream & os); + + static void finalize(packet p); }; /** \brief UDP packet typedef */ - typedef UDPPacketType::packet UDPPacket; + typedef ConcretePacket UDPPacket; }