switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Packets / 80221Bundle / MIHPacket.hh
index e9f6f3c..af90a4b 100644 (file)
@@ -2,23 +2,28 @@
 //
 // Copyright (C) 2009
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Thorsten Horstmann <tho@berlios.de>
 //
-// 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
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Thorsten Horstmann <tho@berlios.de>
 
 /** \file
     \brief MIH protocol public header */
 // Custom includes
 #include <senf/Packets/Packets.hh>
 #include "TLVParser.hh"
+#include "MIHMessageRegistry.hh"
 
 //#include "MIHPacket.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 
-    struct MIHMessageRegistry {
-        // MIH messages registry
-        typedef boost::uint16_t key_t;
-    };
-
-#   define SENF_MIH_PACKET_REGISTRY_REGISTER( packet )                    \
-        SENF_PACKET_REGISTRY_REGISTER(                                    \
-            senf::MIHMessageRegistry, packet::type::MESSAGE_ID, packet )
-    
-     
     /** \brief Parse a MIH packet
 
         Parser implementing the MIH header. The fields implemented are:
@@ -70,24 +66,23 @@ namespace senf {
         SENF_PARSER_BITFIELD ( sid,     4,  unsigned   );
         SENF_PARSER_BITFIELD ( opcode,  2,  unsigned   );
         SENF_PARSER_BITFIELD ( aid,    10,  unsigned   );
-        
+
         SENF_PARSER_SKIP_BITS ( 4                           );
         SENF_PARSER_BITFIELD  ( transactionId, 12, unsigned );
         SENF_PARSER_FIELD_RO  ( payloadLength, UInt16Parser );
-        
+
         SENF_PARSER_GOTO_OFFSET( 8, 8); // just to limit the offset calculation
-        
+
         // Source MIHF Id
-        SENF_PARSER_FIELD ( src_mihfId, MIHFId_TLVParser );
+        SENF_PARSER_FIELD ( src_mihfId, MIHFSrcIdTLVParser );
         // Destination MIHF Id
-        SENF_PARSER_FIELD ( dst_mihfId, MIHFId_TLVParser );
+        SENF_PARSER_FIELD ( dst_mihfId, MIHFDstIdTLVParser );
 
         SENF_PARSER_FINALIZE ( MIHPacketParser );
 
         SENF_PARSER_INIT() {
+            defaultInit();
             version_() = 1;
-            src_mihfId().type() = 1;
-            dst_mihfId().type() = 2;
         }
 
         friend class MIHPacketType;
@@ -107,9 +102,7 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<MIHPacketType, MIHMessageRegistry>
     {
-#ifndef DOXYGEN
         typedef PacketTypeMixin<MIHPacketType, MIHMessageRegistry> mixin;
-#endif
         typedef ConcretePacket<MIHPacketType> packet; ///< MIH packet typedef
         typedef MIHPacketParser parser;               ///< typedef to the parser of MIH packet
 
@@ -118,9 +111,12 @@ namespace senf {
         using mixin::initSize;
 
         /** \brief Dump given MIH packet in readable form to given output stream */
-        static void dump(packet p, std::ostream &os);
+        static void dump(packet p, std::ostream & os);
         static void finalize(packet p);
         static factory_t nextPacketType(packet p);
+        static void validate(packet p);
+
+        static const boost::uint16_t etherType = 0x8917;
     };
 
     /** \brief MIH packet typedef
@@ -132,7 +128,7 @@ namespace senf {
     struct MIHGenericPayloadPacketParser : public PacketParserBase
     {
     #   include SENF_PARSER()
-        SENF_PARSER_LIST ( tlv_list, packetSize(), MIHGenericTLVParser );
+        SENF_PARSER_LIST ( tlvList, packetSize(), MIHGenericTLVParser );
         SENF_PARSER_FINALIZE ( MIHGenericPayloadPacketParser );
     };
 
@@ -140,9 +136,7 @@ namespace senf {
         : public PacketTypeBase,
           public PacketTypeMixin<MIHGenericPayloadPacketType>
     {
-#ifndef DOXYGEN
         typedef PacketTypeMixin<MIHGenericPayloadPacketType> mixin;
-#endif
         typedef ConcretePacket<MIHGenericPayloadPacketType> packet; ///< MIH Payload packet typedef
         typedef MIHGenericPayloadPacketParser parser; ///< typedef to the parser of MIH Payload packet
 
@@ -151,7 +145,7 @@ namespace senf {
         using mixin::initSize;
 
         /** \brief Dump given MIHGenericPayload in readable form to given output stream */
-        static void dump(packet p, std::ostream &os);
+        static void dump(packet p, std::ostream & os);
         static void finalize(packet p);
     };
 
@@ -162,7 +156,7 @@ namespace senf {
 }
 
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 //#include "MIHPacket.cci"
 //#include "MIHPacket.ct"
 //#include "MIHPacket.cti"