aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-giop.c
diff options
context:
space:
mode:
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-02-01 16:18:18 +0000
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-02-01 16:18:18 +0000
commitd9c80d01894136c690178ca9393972844d859cec (patch)
treea52ae3dc4a836a1669419fab981edbabd81443e3 /epan/dissectors/packet-giop.c
parentcafc3d929a023186c81fb5626fb4ed85c87cbd89 (diff)
Create "decompressed Content" tab in hex bytes pane only if decompression actually done.
This is a revision of SVN #29086 which caused the "decompressed Content" tab in the hex bytes pane to always be displayed. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@31755 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-giop.c')
-rw-r--r--epan/dissectors/packet-giop.c102
1 files changed, 54 insertions, 48 deletions
diff --git a/epan/dissectors/packet-giop.c b/epan/dissectors/packet-giop.c
index 195dcfa3a2..c66a0ca1d4 100644
--- a/epan/dissectors/packet-giop.c
+++ b/epan/dissectors/packet-giop.c
@@ -3882,7 +3882,6 @@ static void dissect_giop_common (tvbuff_t * tvb, packet_info * pinfo, proto_tree
header.exception_id = NULL;
giop_header_tvb = tvb_new_subset (tvb, 0, GIOP_HEADER_SIZE, -1);
- payload_tvb = tvb_new_subset_remaining (tvb, GIOP_HEADER_SIZE);
/*
* because I have added extra elements in MessageHeader struct
@@ -3921,6 +3920,7 @@ static void dissect_giop_common (tvbuff_t * tvb, packet_info * pinfo, proto_tree
header.GIOP_version.major,
header.GIOP_version.minor);
}
+ payload_tvb = tvb_new_subset_remaining (tvb, GIOP_HEADER_SIZE);
call_dissector(data_handle,payload_tvb, pinfo, tree);
return;
}
@@ -4005,61 +4005,67 @@ static void dissect_giop_common (tvbuff_t * tvb, packet_info * pinfo, proto_tree
if (header.flags & 0x08)
{
payload_tvb = tvb_child_uncompress(tvb, tvb, GIOP_HEADER_SIZE, tvb_length_remaining(tvb, GIOP_HEADER_SIZE ) );
+ if (payload_tvb) {
+ add_new_data_source (pinfo, payload_tvb, "decompressed Content");
+ } else {
+ /* Decompression failed. */
+ /* XXX: Consider: add expert item ? do data dissection ? */
+ return;
+ }
+ } else {
+ payload_tvb = tvb_new_subset_remaining (tvb, GIOP_HEADER_SIZE);
}
- if (payload_tvb) {
- add_new_data_source (pinfo, payload_tvb, "decompressed Content");
- switch (header.message_type)
- {
+ switch (header.message_type)
+ {
- case Request:
- if(header.GIOP_version.minor < 2)
- {
- dissect_giop_request_1_1 (payload_tvb, pinfo, tree,
- &header, stream_is_big_endian);
- }
- else
- {
- dissect_giop_request_1_2 (payload_tvb, pinfo, tree,
- &header, stream_is_big_endian);
- }
+ case Request:
+ if(header.GIOP_version.minor < 2)
+ {
+ dissect_giop_request_1_1 (payload_tvb, pinfo, tree,
+ &header, stream_is_big_endian);
+ }
+ else
+ {
+ dissect_giop_request_1_2 (payload_tvb, pinfo, tree,
+ &header, stream_is_big_endian);
+ }
- break;
+ break;
- case Reply:
- if(header.GIOP_version.minor < 2)
- {
- dissect_giop_reply (payload_tvb, pinfo, tree, &header,
- stream_is_big_endian);
- }
- else
- {
- dissect_giop_reply_1_2 (payload_tvb, pinfo, tree,
- &header, stream_is_big_endian);
- }
- break;
- case CancelRequest:
- dissect_giop_cancel_request(payload_tvb, pinfo, tree,
- stream_is_big_endian);
- break;
- case LocateRequest:
- dissect_giop_locate_request(payload_tvb, pinfo, tree, &header,
- stream_is_big_endian);
- break;
- case LocateReply:
- dissect_giop_locate_reply(payload_tvb, pinfo, tree, &header,
+ case Reply:
+ if(header.GIOP_version.minor < 2)
+ {
+ dissect_giop_reply (payload_tvb, pinfo, tree, &header,
+ stream_is_big_endian);
+ }
+ else
+ {
+ dissect_giop_reply_1_2 (payload_tvb, pinfo, tree,
+ &header, stream_is_big_endian);
+ }
+ break;
+ case CancelRequest:
+ dissect_giop_cancel_request(payload_tvb, pinfo, tree,
stream_is_big_endian);
- break;
- case Fragment:
- dissect_giop_fragment(payload_tvb, pinfo, tree,
- stream_is_big_endian);
- break;
- default:
- break;
+ break;
+ case LocateRequest:
+ dissect_giop_locate_request(payload_tvb, pinfo, tree, &header,
+ stream_is_big_endian);
+ break;
+ case LocateReply:
+ dissect_giop_locate_reply(payload_tvb, pinfo, tree, &header,
+ stream_is_big_endian);
+ break;
+ case Fragment:
+ dissect_giop_fragment(payload_tvb, pinfo, tree,
+ stream_is_big_endian);
+ break;
+ default:
+ break;
- } /* switch message_type */
- }
+ } /* switch message_type */
/*