diff options
author | wmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-02-01 16:18:18 +0000 |
---|---|---|
committer | wmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-02-01 16:18:18 +0000 |
commit | d9c80d01894136c690178ca9393972844d859cec (patch) | |
tree | a52ae3dc4a836a1669419fab981edbabd81443e3 /epan/dissectors/packet-giop.c | |
parent | cafc3d929a023186c81fb5626fb4ed85c87cbd89 (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.c | 102 |
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 */ /* |