Refactored VARIANT field.
[senf.git] / Packets / MPEGDVBBundle / GREPacket.hh
index fc1d433..6e29e82 100644 (file)
@@ -1,4 +1,4 @@
-// $Id:DatagramSection.hh 327 2007-07-20 10:03:44Z tho $
+// $Id$
 //
 // Copyright (C) 2007
 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
@@ -41,23 +41,29 @@ namespace senf {
         
         \see GREPacketType
      */
+    struct GREChecksumParser : public PacketParserBase {
+#       include SENF_PARSER()        
+        SENF_PARSER_FIELD ( checksum1_, Parse_UInt16 );
+        SENF_PARSER_PRIVATE_FIELD ( reserved1_, Parse_UInt16 );
+       SENF_PARSER_FINALIZE(GREChecksumParser);
+    };
+
     struct Parse_GREPacket : public PacketParserBase
     {
-        
-#include SENF_PARSER()
+#       include SENF_PARSER()
+
         SENF_PARSER_BITFIELD         ( checksum_present,  1, bool );
         SENF_PARSER_PRIVATE_BITFIELD ( reserved0_,       12, unsigned ); // TODO: SKIP !!
         SENF_PARSER_BITFIELD_RO      ( version_number,    3, unsigned ); // TODO: Always Zero !!
         SENF_PARSER_FIELD            ( protocol_type,    Parse_UInt16 );
         SENF_PARSER_PRIVATE_VARIANT  ( checksum_,  checksum_present,
-                                                   (VoidPacketParser) (Parse_UInt16) );
-        SENF_PARSER_PRIVATE_VARIANT  ( reserved1_, checksum_present,
-                                                   (VoidPacketParser) (Parse_UInt16) );
+                                                   (VoidPacketParser) (GREChecksumParser) );
         SENF_PARSER_FINALIZE( Parse_GREPacket );
 
       private: 
         Parse_UInt16 checksum() const /// only defined if checksum_present() == \c true
-             { return checksum_().get<1>(); }
+             { return checksum_().get<1>().checksum1_(); }
     };
     
     /** \brief GRE packet