X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FUDPPacket.hh;h=e85c182dcf9f2f3be46aff0bd9f78bddb817547c;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=560c36075c6cd18898fcb78f3d92f103aef89345;hpb=1f3b4447179d0cd771037d02b9a5671eeaaaec8d;p=senf.git diff --git a/Packets/DefaultBundle/UDPPacket.hh b/Packets/DefaultBundle/UDPPacket.hh index 560c360..e85c182 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 @@ -23,11 +23,11 @@ /** \file \brief UDPPacket public header */ -#ifndef HH_UDPPacket_ -#define HH_UDPPacket_ 1 +#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//////////////////////////////////////// @@ -37,32 +37,30 @@ namespace senf { /** \brief Parse a UDP packet Parser implementing the UDP header. The fields implemented are: - - \see UDPPacketType + \image html UDPPacket.png + + \see UDPPacketType \n RFC 768 */ - struct Parse_UDP : public PacketParserBase + struct UDPPacketParser : public PacketParserBase { - typedef Parse_UInt16 Parse_16bit; - -# ifndef DOXYGEN - - SENF_PACKET_PARSER_INIT(Parse_UDP); - - SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( - ((Field)( source, Parse_16bit )) - ((Field)( destination, Parse_16bit )) - ((Field)( length, Parse_16bit )) - ((Field)( crc, Parse_16bit )) ); - -# else - - Parse_16bit source(); - Parse_16bit destination(); - Parse_16bit length(); - Parse_16bit crc(); - -# endif +# 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 ); + + SENF_PARSER_FINALIZE(UDPPacketParser); + + 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 @@ -71,7 +69,23 @@ namespace senf { \ref UDPPacket \par Fields: - \ref Parse_UDP + \ref UDPPacketParser + + + + + + + + + + + + +
0 8 1624 31
\ref UDPPacketParser::source() "Source Port"\ref UDPPacketParser::destination() "Destination Port"
\ref UDPPacketParser::length() "Length"\ref UDPPacketParser::checksum() "Checksum"
+ + \par Finalize action: + \copydetails finalize() \ingroup protocolbundle_default */ @@ -79,26 +93,35 @@ namespace senf { : public PacketTypeBase, public PacketTypeMixin { +#ifndef DOXYGEN typedef PacketTypeMixin mixin; - typedef ConcretePacket packet; - typedef Parse_UDP parser; +#endif + typedef ConcretePacket 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); ///< Finalize packet. + /**< \li set \ref UDPPacketParser::length() "length" from + payload size + \li calculate and set \ref UDPPacketParser::checksum() + "checksum" */ }; /** \brief UDP packet typedef */ - typedef UDPPacketType::packet UDPPacket; + typedef ConcretePacket UDPPacket; } ///////////////////////////////hh.e//////////////////////////////////////// #endif #ifndef SENF_PACKETS_DECL_ONLY -//#include UDPPacket.cci" +//#include "UDPPacket.cci" //#include "UDPPacket.ct" //#include "UDPPacket.cti" #endif