aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dvbci.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2014-03-21 14:22:09 +0100
committerMartin Kaiser <wireshark@kaiser.cx>2014-03-25 20:09:20 +0000
commit63b0d89574cf575701a4ef76d1db4846f65a1f9a (patch)
treedf113ea96e25cb95a5a33927b3cd813817b3cfe7 /epan/dissectors/packet-dvbci.c
parentd6381c6fe658394f3d759439ed5c90dd85a121e6 (diff)
if a .png file is sent on the application mmi resource, pass the file
data to the png dissector Change-Id: I112733f97ba35d9ec497b427c64b2f5ea99fd963 Reviewed-on: https://code.wireshark.org/review/818 Reviewed-by: Martin Kaiser <wireshark@kaiser.cx> Tested-by: Martin Kaiser <wireshark@kaiser.cx>
Diffstat (limited to 'epan/dissectors/packet-dvbci.c')
-rw-r--r--epan/dissectors/packet-dvbci.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c
index 4c90bd9a20..65f7542e54 100644
--- a/epan/dissectors/packet-dvbci.c
+++ b/epan/dissectors/packet-dvbci.c
@@ -809,6 +809,7 @@ static gboolean dvbci_dissect_lsc_msg = FALSE;
static dissector_handle_t data_handle;
static dissector_handle_t mpeg_pmt_handle;
static dissector_handle_t dvb_nit_handle;
+static dissector_handle_t png_handle;
static dissector_table_t tcp_dissector_table;
static dissector_table_t udp_dissector_table;
@@ -3584,6 +3585,7 @@ dissect_dvbci_ami_file_ack(tvbuff_t *tvb, gint offset,
guint8 file_name_len;
guint8 *file_name_str;
guint32 file_data_len;
+ tvbuff_t *png_file_tvb = NULL;
proto_item *ti;
proto_tree *req_tree;
@@ -3620,8 +3622,25 @@ dissect_dvbci_ami_file_ack(tvbuff_t *tvb, gint offset,
"File data length %d", file_data_len);
offset += 4;
if (file_data_len > 0) {
- proto_tree_add_item(tree, hf_dvbci_file_data,
- tvb, offset, file_data_len, ENC_NA);
+ if (file_name_len>4) {
+ gchar *suffix_lo;
+ suffix_lo = wmem_ascii_strdown(wmem_packet_scope(),
+ &file_name_str[file_name_len-4], -1);
+ if (g_strcmp0(suffix_lo, ".png")==0) {
+ png_file_tvb = tvb_new_subset(
+ tvb, offset, file_data_len, file_data_len);
+ }
+ }
+
+ if (png_handle && png_file_tvb) {
+ col_set_fence(pinfo->cinfo, COL_PROTOCOL);
+ col_set_fence(pinfo->cinfo, COL_INFO);
+ call_dissector(png_handle, png_file_tvb, pinfo, tree);
+ }
+ else {
+ proto_tree_add_item(tree, hf_dvbci_file_data,
+ tvb, offset, file_data_len, ENC_NA);
+ }
}
}
else if (req_type==REQ_TYPE_DATA) {
@@ -6138,6 +6157,7 @@ proto_reg_handoff_dvbci(void)
data_handle = find_dissector("data");
mpeg_pmt_handle = find_dissector("mpeg_pmt");
dvb_nit_handle = find_dissector("dvb_nit");
+ png_handle = find_dissector("png");
tcp_dissector_table = find_dissector_table("tcp.port");
udp_dissector_table = find_dissector_table("udp.port");