Packets: Really fix WLANPacket desaster
g0dil [Wed, 28 Jan 2009 10:28:27 +0000 (10:28 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1085 270642c3-0616-0410-b53a-bc976706d245

Packets/80211Bundle/WLANPacket.hh
doclib/pkgdraw

index 3138826..046bed9 100644 (file)
@@ -40,10 +40,11 @@ namespace senf
     {
     #   include SENF_FIXED_PARSER()
         
-        SENF_PARSER_PRIVATE_BITFIELD ( subtype, 4,  unsigned                );
-        SENF_PARSER_SKIP_BITS        (          4                           ); //skip type and version
+        SENF_PARSER_PRIVATE_BITFIELD ( subtype, 4,  unsigned                ); //<pkgdraw: hide
+       //skip type and version
+        SENF_PARSER_SKIP_BITS        (          4                           ); //<pkgdraw: hide
         //jump to fist address field
-        SENF_PARSER_SKIP             ( 3                                    );
+        SENF_PARSER_SKIP             ( 3                                    ); //<pkgdraw: hide
         SENF_PARSER_FIELD            ( destinationAddress, MACAddressParser );
         SENF_PARSER_FIELD            ( sourceAddress,      MACAddressParser );
         SENF_PARSER_FIELD            ( bssid,              MACAddressParser );
@@ -73,10 +74,11 @@ namespace senf
     {
     #   include SENF_PARSER()
         
-        SENF_PARSER_PRIVATE_BITFIELD ( subtype,  4,  unsigned            );
-        SENF_PARSER_SKIP_BITS        (           4                       ); //skip type and version
+        SENF_PARSER_PRIVATE_BITFIELD ( subtype,  4,  unsigned            ); //<pkgdraw: hide
+       //skip type and version
+        SENF_PARSER_SKIP_BITS        (           4                       ); //<pkgdraw: hide
         //jump to fist address field
-        SENF_PARSER_SKIP             ( 3, 3                              );
+        SENF_PARSER_SKIP             ( 3, 3                              ); //<pkgdraw: hide
         SENF_PARSER_FIELD            ( receiverAddress, MACAddressParser );
 
         //only RTS frame contains a source address field
@@ -99,16 +101,16 @@ namespace senf
     struct WLANPacket_DataFrameParser : public senf::PacketParserBase
     {
     #   include SENF_PARSER()
-        SENF_PARSER_PRIVATE_BITFIELD ( subtype,  4,  unsigned  );
+        SENF_PARSER_PRIVATE_BITFIELD ( subtype,  4,  unsigned  ); //<pkgdraw: hide
         //jump to 'toDS' and 'fromDS' bits
         //skip type and version
-        SENF_PARSER_SKIP_BITS        ( 4                       );
+        SENF_PARSER_SKIP_BITS        ( 4                       ); //<pkgdraw: hide
         //skip other flags
-        SENF_PARSER_SKIP_BITS        ( 6                       );
+        SENF_PARSER_SKIP_BITS        ( 6                       ); //<pkgdraw: hide
         //needed in data frames due to the variable address fields
-        SENF_PARSER_PRIVATE_BITFIELD ( dsBits,  2,  unsigned   );
+        SENF_PARSER_PRIVATE_BITFIELD ( dsBits,  2,  unsigned   ); //<pkgdraw: hide
         //skip duration field
-        SENF_PARSER_SKIP             ( 2, 0                    );
+        SENF_PARSER_SKIP             ( 2, 2                    ); //<pkgdraw: hide
 
         SENF_PARSER_PRIVATE_FIELD    ( addr1, MACAddressParser );
         SENF_PARSER_PRIVATE_FIELD    ( addr2, MACAddressParser );
@@ -206,6 +208,7 @@ namespace senf
 
         \par Fields:
             \ref WLANPacketParser
+           \image html WLANPacket.png
 
         \ingroup protocolbundle_80211
      */
index 8049514..35a6b92 100755 (executable)
@@ -386,7 +386,11 @@ def scanFields(data):
                         del field['size']
                     else:
                         field['size'] = int(flags['size'])
-                fields.append(field)
+                if not field['name'] and fields and not fields[-1]['name'] \
+                       and field.has_key('size') and fields[-1].has_key('size'):
+                    fields[-1]['size'] += field['size']
+                else:
+                    fields.append(field)
         else:
             sys.stderr.write("Unknown parser type: %s\n" % tp)
     return fields