From Chris Maynard:
authorjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 21 Apr 2006 15:10:27 +0000 (15:10 +0000)
committerjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 21 Apr 2006 15:10:27 +0000 (15:10 +0000)
Using the attached patch, this file was generated via "File -> Export -> as XML
- "PDML" (packet details) file ...".  As can be seen in the file, the 1st
packet now contains the value for the "media", whereas previously it did not.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@17943 f5534014-38df-0310-8fa8-9805f1628bb7

epan/dissectors/packet-media.c

index 75c2a4d2b7793e60515e24e2351536b4453ef20f..e10601e5f0e967d18b96a5f48233802df9a50493 100644 (file)
  * print routines
  */
 int proto_media = -1;
+static gint ett_media = -1;
 static heur_dissector_list_t heur_subdissector_list;
 
 static void
 dissect_media(tvbuff_t *tvb, packet_info *pinfo , proto_tree *tree)
 {
     int bytes;
+    proto_item *ti;
+    proto_tree *media_tree = 0;
 
     if (dissector_try_heuristic(heur_subdissector_list, tvb, pinfo, tree)) {
         return;
     }
-    
+
     /* Add media type to the INFO column if it is visible */
     if (check_col(pinfo->cinfo, COL_INFO)) {
-       col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", pinfo->match_string);
+        col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", pinfo->match_string);
     }
 
     if (tree) {
-       bytes = tvb_length_remaining(tvb, 0);
-       if (bytes > 0) {
-           if (pinfo->private_data) {
-               /* The media type has parameters */
-               proto_tree_add_protocol_format(tree, proto_media, tvb, 0, bytes,
-                   "Media Type: %s; %s (%d byte%s)",
-                   pinfo->match_string, (char *)pinfo->private_data,
-                   bytes, plurality(bytes, "", "s"));
-           } else {
-               /* The media type has no parameters */
-               proto_tree_add_protocol_format(tree, proto_media, tvb, 0, bytes,
-                   "Media Type: %s (%d byte%s)",
-                       pinfo->match_string ? pinfo->match_string : "",
-                   bytes, plurality(bytes, "", "s"));
-           }
-       }
+        if ( (bytes = tvb_length_remaining(tvb, 0)) > 0 )
+        {
+            ti = proto_tree_add_item(tree, proto_media, tvb, 0, -1, FALSE);
+            media_tree = proto_item_add_subtree(ti, ett_media);
+
+            if (pinfo->private_data) {
+                /* The media type has parameters */
+                proto_tree_add_text(media_tree, tvb, 0, bytes,
+                    "Media Type: %s; %s (%d byte%s)",
+                    pinfo->match_string, (char *)pinfo->private_data,
+                    bytes, plurality(bytes, "", "s"));
+            } else {
+                /* The media type has no parameters */
+                proto_tree_add_text(media_tree, tvb, 0, bytes,
+                    "Media Type: %s (%d byte%s)",
+                    pinfo->match_string ? pinfo->match_string : "",
+                    bytes, plurality(bytes, "", "s"));
+            }
+        }
     }
 }
 
 void
 proto_register_media(void)
 {
+    static gint *ett[] = {
+        &ett_media
+    };
+
     proto_media = proto_register_protocol (
-           "Media Type",       /* name */
-           "Media",            /* short name */
-           "media"             /* abbrev */
-           );
+        "Media Type",   /* name */
+        "Media",        /* short name */
+        "media"         /* abbrev */
+        );
     register_dissector("media", dissect_media, proto_media);
-       register_heur_dissector_list("media", &heur_subdissector_list);
-    
+    register_heur_dissector_list("media", &heur_subdissector_list);
+    proto_register_subtree_array(ett, array_length(ett));
 
     /*
      * "Media" is used to dissect something whose normal dissector