more work on TLV & MIH Packet
[senf.git] / Packets / 80221Bundle / MIHPacket.hh
index a2c7ceb..a7dcc78 100644 (file)
 
 // Custom includes
 #include "../../Packets/Packets.hh"
+#include "TLVPacket.hh"
 
 //#include "MIHPacket.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
 
 namespace senf {
 
+    struct MIHF_IdParser : public senf::PacketParserBase
+    {
+    #   include SENF_FIXED_PARSER()        
+        
+        SENF_PARSER_FINALIZE ( MIHF_IdParser );
+    };
+
     struct MIHPacketParser : public senf::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() = 1;
+        }
     };