aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2006-04-21 15:10:27 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2006-04-21 15:10:27 +0000
commit65ab879c00b3529c720cd92803592b89f777cbd2 (patch)
treea8b57c393304aa4059be1efe844519e687996a4e /epan
parent60e65f48697444409cc1ef1fb03f53ef034b7ef0 (diff)
From Chris Maynard:
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. svn path=/trunk/; revision=17943
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-media.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/epan/dissectors/packet-media.c b/epan/dissectors/packet-media.c
index 75c2a4d2b7..e10601e5f0 100644
--- a/epan/dissectors/packet-media.c
+++ b/epan/dissectors/packet-media.c
@@ -39,53 +39,63 @@
* 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