GenericTLVPacketParser: fix for 64bit
[senf.git] / Packets / 80221Bundle / MIHPacket.hh
index a2c7ceb..a67f0a6 100644 (file)
 
 // Custom includes
 #include "../../Packets/Packets.hh"
+#include "TLVPacket.hh"
 
 //#include "MIHPacket.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
 
 namespace senf {
 
-    struct MIHPacketParser : public senf::PacketParserBase
+    struct MIHF_IdParser : public PacketParserBase
+    {
+    #   include SENF_PARSER()        
+                
+        SENF_PARSER_FINALIZE ( MIHF_IdParser );
+    };
+
+    struct MIHPacketParser : public PacketParserBase
     {
     #   include SENF_PARSER()
         
-        SENF_PARSER_BITFIELD  ( version,       4,  unsigned );
-        SENF_PARSER_BITFIELD  ( ackRequest,    1,  bool     );
-        SENF_PARSER_BITFIELD  ( ackResponse,   1,  bool     );
-        SENF_PARSER_BITFIELD  ( uir,           1,  bool     );
-        SENF_PARSER_BITFIELD  ( moreFragment,  1,  bool     );
-        SENF_PARSER_BITFIELD  ( fragmentNr,    7,  unsigned );
-        SENF_PARSER_SKIP_BITS ( 1                           );
+        SENF_PARSER_BITFIELD_RO ( version,       4,  unsigned );
+        SENF_PARSER_BITFIELD    ( ackRequest,    1,  bool     );
+        SENF_PARSER_BITFIELD    ( ackResponse,   1,  bool     );
+        SENF_PARSER_BITFIELD    ( uir,           1,  bool     );
+        SENF_PARSER_BITFIELD    ( moreFragment,  1,  bool     );
+        SENF_PARSER_BITFIELD    ( fragmentNr,    7,  unsigned );
+        SENF_PARSER_SKIP_BITS   ( 1                           );
         
         // MIH message ID (MID)
-        SENF_PARSER_BITFIELD  ( sid,           4,  unsigned );
-        SENF_PARSER_BITFIELD  ( opcode,        2,  unsigned );
-        SENF_PARSER_BITFIELD  ( aid,           10, unsigned );
+        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 );
         
+        // Source MIHF Id
+        SENF_PARSER_PRIVATE_FIELD ( source_type,    UInt8Parser            );
+        SENF_PARSER_PRIVATE_FIELD ( source_length,  DynamicTLVLengthParser );
+        SENF_PARSER_FIELD         ( source_mihf_id, MIHF_IdParser          );
+
+        // Destination MIHF Id
+        SENF_PARSER_PRIVATE_FIELD ( destination_type,    UInt8Parser            );
+        SENF_PARSER_PRIVATE_FIELD ( destination_length,  DynamicTLVLengthParser );
+        SENF_PARSER_FIELD         ( destination_mihf_id, MIHF_IdParser          );
+        
         SENF_PARSER_FINALIZE ( MIHPacketParser );
+        
+        SENF_PARSER_INIT() {
+            version_() = 1;
+            source_type() = 1;
+            destination_type() = 2;
+        }
+        
+        friend class MIHPacketType;
     };
     
-    
+    /** \brief MIH packet
+
+        \par Packet type (typedef):
+            \ref MIHPacket
+
+        \par Fields:
+            \ref MIHPacketParser
+        
+        \ingroup protocolbundle_80221
+     */
     struct MIHPacketType
         : public PacketTypeBase,
           public PacketTypeMixin<MIHPacketType>
@@ -72,7 +107,7 @@ namespace senf {
         using mixin::initSize;
 
         static void dump(packet p, std::ostream &os);
-//        static void finalize(packet p);
+        static void finalize(packet p);
     };
 
     typedef ConcretePacket<MIHPacketType> MIHPacket;