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.

svn path=/trunk/; revision=31755
This commit is contained in:
Bill Meier 2010-02-01 16:18:18 +00:00
parent bc80677038
commit 2241bbf094
1 changed files with 57 additions and 51 deletions

View File

@ -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)
{
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;
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,
dissect_giop_request_1_1 (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,
stream_is_big_endian);
break;
case Fragment:
dissect_giop_fragment(payload_tvb, pinfo, tree,
stream_is_big_endian);
break;
default:
break;
}
else
{
dissect_giop_request_1_2 (payload_tvb, pinfo, tree,
&header, stream_is_big_endian);
}
} /* switch message_type */
}
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,
stream_is_big_endian);
break;
case Fragment:
dissect_giop_fragment(payload_tvb, pinfo, tree,
stream_is_big_endian);
break;
default:
break;
} /* switch message_type */
/*