aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-http.c7
-rw-r--r--epan/dissectors/packet-jxta.c4
-rw-r--r--epan/dissectors/packet-media.c4
-rw-r--r--epan/dissectors/packet-multipart.c2
-rw-r--r--epan/dissectors/packet-spdy.c4
-rw-r--r--epan/dissectors/packet-wsp.c20
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,