diff options
-rw-r--r-- | epan/dissectors/packet-http.c | 7 | ||||
-rw-r--r-- | epan/dissectors/packet-jxta.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-media.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-multipart.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-spdy.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-wsp.c | 20 |
6 files changed, 18 insertions, 23 deletions
diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c index 6addc14986..64c27e8a07 100644 --- a/epan/dissectors/packet-http.c +++ b/epan/dissectors/packet-http.c @@ -1270,6 +1270,7 @@ dissect_http_message(tvbuff_t *tvb, int offset, packet_info *pinfo, void *save_private_data = NULL; gboolean private_data_changed = FALSE; gint chunks_decoded = 0; + char *media_str = NULL; /* * Create a tvbuff for the payload. @@ -1436,8 +1437,10 @@ dissect_http_message(tvbuff_t *tvb, int offset, packet_info *pinfo, save_private_data = pinfo->private_data; private_data_changed = TRUE; - if (headers.content_type_parameters) + if (headers.content_type_parameters) { pinfo->private_data = wmem_strdup(wmem_packet_scope(), headers.content_type_parameters); + media_str = (char*)pinfo->private_data; + } else pinfo->private_data = NULL; /* @@ -1502,7 +1505,7 @@ dissect_http_message(tvbuff_t *tvb, int offset, packet_info *pinfo, * Calling the default media handle if there is a content-type that * wasn't handled above. */ - call_dissector(media_handle, next_tvb, pinfo, tree); + call_dissector_with_data(media_handle, next_tvb, pinfo, tree, media_str); } else { /* Call the default data dissector */ call_dissector(data_handle, next_tvb, pinfo, http_tree); diff --git a/epan/dissectors/packet-jxta.c b/epan/dissectors/packet-jxta.c index c89962e34c..d73d796f03 100644 --- a/epan/dissectors/packet-jxta.c +++ b/epan/dissectors/packet-jxta.c @@ -2050,10 +2050,12 @@ static int dissect_media( const gchar* fullmediatype, tvbuff_t * tvb, packet_inf gchar *parms_at = strchr(mediatype, ';'); const char *save_match_string = pinfo->match_string; void * save_private_data = pinfo->private_data; + char *media_str = NULL; /* Based upon what is done in packet-media.c we set up type and params */ if (NULL != parms_at) { pinfo->private_data = wmem_strdup( wmem_packet_scope(), parms_at + 1 ); + media_str = (char*)pinfo->private_data; *parms_at = '\0'; } else { pinfo->private_data = NULL; @@ -2094,7 +2096,7 @@ static int dissect_media( const gchar* fullmediatype, tvbuff_t * tvb, packet_inf } if (0 == dissected) { - dissected = call_dissector(media_handle, tvb, pinfo, tree); + dissected = call_dissector_with_data(media_handle, tvb, pinfo, tree, media_str); } pinfo->match_string = save_match_string; diff --git a/epan/dissectors/packet-media.c b/epan/dissectors/packet-media.c index 1305b345d3..903a5ee852 100644 --- a/epan/dissectors/packet-media.c +++ b/epan/dissectors/packet-media.c @@ -62,11 +62,11 @@ dissect_media(tvbuff_t *tvb, packet_info *pinfo , proto_tree *tree, void* data) ti = proto_tree_add_item(tree, proto_media, tvb, 0, -1, ENC_NA); media_tree = proto_item_add_subtree(ti, ett_media); - if (pinfo->private_data) { + if (data) { /* The media type has parameters */ proto_tree_add_bytes_format_value(media_tree, hf_media_type, tvb, 0, bytes, NULL, "%s; %s (%d byte%s)", - pinfo->match_string, (char *)pinfo->private_data, + pinfo->match_string, (char *)data, bytes, plurality(bytes, "", "s")); } else { /* The media type has no parameters */ diff --git a/epan/dissectors/packet-multipart.c b/epan/dissectors/packet-multipart.c index 4e6c20b2e8..c01722e3c9 100644 --- a/epan/dissectors/packet-multipart.c +++ b/epan/dissectors/packet-multipart.c @@ -741,7 +741,7 @@ process_body_part(proto_tree *tree, tvbuff_t *tvb, const guint8 *boundary, if (! dissected) { const char *save_match_string = pinfo->match_string; pinfo->match_string = content_type_str; - call_dissector(media_handle, tmp_tvb, pinfo, subtree); + call_dissector_with_data(media_handle, tmp_tvb, pinfo, subtree, parameters); pinfo->match_string = save_match_string; } pinfo->private_data = save_private_data; diff --git a/epan/dissectors/packet-spdy.c b/epan/dissectors/packet-spdy.c index f773331ed0..b6987f0f58 100644 --- a/epan/dissectors/packet-spdy.c +++ b/epan/dissectors/packet-spdy.c @@ -751,6 +751,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, gboolean private_data_changed = FALSE; gboolean is_single_chunk = FALSE; gboolean have_entire_body; + char *media_str = NULL; /* * Create a tvbuff for the payload. @@ -908,6 +909,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, if (si->content_type_parameters) { pinfo->private_data = wmem_strdup(wmem_packet_scope(), si->content_type_parameters); + media_str = (char*)pinfo->private_data; } else { pinfo->private_data = NULL; } @@ -934,7 +936,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, * Calling the default media handle if there is a content-type that * wasn't handled above. */ - call_dissector(media_handle, next_tvb, pinfo, spdy_tree); + call_dissector_with_data(media_handle, next_tvb, pinfo, spdy_tree, media_str); } else { /* Call the default data dissector */ call_dissector(data_handle, next_tvb, pinfo, spdy_tree); diff --git a/epan/dissectors/packet-wsp.c b/epan/dissectors/packet-wsp.c index b624866871..bdcb838ee2 100644 --- a/epan/dissectors/packet-wsp.c +++ b/epan/dissectors/packet-wsp.c @@ -5035,12 +5035,9 @@ dissect_wsp_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, if (! found_match) { if (! dissector_try_heuristic(heur_subdissector_list, tmp_tvb, pinfo, tree, &hdtbl_entry, NULL)) { - guint8* save_private_data = (guint8 *)pinfo->private_data; pinfo->match_string = contentTypeStr; - pinfo->private_data = NULL; /* TODO: parameters */ - call_dissector(media_handle, tmp_tvb, pinfo, tree); - pinfo->private_data = save_private_data; + call_dissector_with_data(media_handle, tmp_tvb, pinfo, tree, NULL /* TODO: parameters */); #if 0 if (tree) /* Only display if needed */ add_post_data (wsp_tree, tmp_tvb, @@ -5128,12 +5125,9 @@ dissect_wsp_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, if (! found_match) { if (! dissector_try_heuristic(heur_subdissector_list, tmp_tvb, pinfo, tree, &hdtbl_entry, NULL)) { - guint8* save_private_data = (guint8 *)pinfo->private_data; pinfo->match_string = contentTypeStr; - pinfo->private_data = NULL; /* TODO: parameters */ - call_dissector(media_handle, tmp_tvb, pinfo, tree); - pinfo->private_data = save_private_data; + call_dissector_with_data(media_handle, tmp_tvb, pinfo, tree, NULL /* TODO: parameters */); #if 0 if (tree) / * Only display if needed * / proto_tree_add_item (wsp_tree, @@ -5212,12 +5206,9 @@ dissect_wsp_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, if (! found_match) { if (! dissector_try_heuristic(heur_subdissector_list, tmp_tvb, pinfo, tree, &hdtbl_entry, NULL)) { - guint8* save_private_data = (guint8 *)pinfo->private_data; pinfo->match_string = contentTypeStr; - pinfo->private_data = NULL; /* TODO: parameters */ - call_dissector(media_handle, tmp_tvb, pinfo, tree); - pinfo->private_data = save_private_data; + call_dissector_with_data(media_handle, tmp_tvb, pinfo, tree, NULL /* TODO: parameters */); #if 0 if (tree) /* Only display if needed */ proto_tree_add_item (wsp_tree, @@ -5809,12 +5800,9 @@ add_multipart_data (proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo) if (! found_match) { if (! dissector_try_heuristic(heur_subdissector_list, tmp_tvb, pinfo, mpart_tree, &hdtbl_entry, NULL)) { - guint8* save_private_data = (guint8 *)pinfo->private_data; pinfo->match_string = contentTypeStr; - pinfo->private_data = NULL; /* TODO: parameters */ - call_dissector(media_handle, tmp_tvb, pinfo, mpart_tree); - pinfo->private_data = save_private_data; + call_dissector_with_data(media_handle, tmp_tvb, pinfo, mpart_tree, NULL /* TODO: parameters */); #if 0 if (tree) /* Only display if needed */ proto_tree_add_item (mpart_tree, hf_wsp_multipart_data, |