diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2014-05-01 19:04:13 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-05-02 14:43:40 +0000 |
commit | fa84054dc7c8a381d9665ddb2c6d22e0e96094b1 (patch) | |
tree | f2e751179dd13d8ac3a075d2b6301652679eb9f4 /epan/dissectors/packet-spdy.c | |
parent | 13e8983dbf7400cffdfee96f9a4fd6e429fb50b0 (diff) |
Enhance display of SPDY packet (Remove some information from column)
Fix also tvb_length / tvb_length_remaining soft warning
Change-Id: I3fd8f3a842fa84273b84ae36317e2c3fbdca076d
Reviewed-on: https://code.wireshark.org/review/1461
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-spdy.c')
-rw-r--r-- | epan/dissectors/packet-spdy.c | 92 |
1 files changed, 33 insertions, 59 deletions
diff --git a/epan/dissectors/packet-spdy.c b/epan/dissectors/packet-spdy.c index fd23b5a807..07c94c7243 100644 --- a/epan/dissectors/packet-spdy.c +++ b/epan/dissectors/packet-spdy.c @@ -653,18 +653,15 @@ static spdy_stream_info_t* spdy_assemble_data_frames(spdy_conv_t *conv_data, */ static void dissect_spdy_stream_id_field(tvbuff_t *tvb, int offset, - packet_info *pinfo, + packet_info *pinfo _U_, proto_tree *frame_tree, const int hfindex) { guint32 stream_id = tvb_get_ntohl(tvb, offset) & SPDY_STREAM_ID_MASK; - /* Add stream id to info column. */ - if (hfindex == hf_spdy_streamid) { - col_append_fstr(pinfo->cinfo, COL_INFO, " Stream=%u", stream_id); - } /* Add stream id to tree. */ proto_tree_add_item(frame_tree, hfindex, tvb, offset, 4, ENC_BIG_ENDIAN); + if (hfindex == hf_spdy_streamid) { proto_item_append_text(frame_tree, ", Stream: %u", stream_id); } @@ -722,7 +719,7 @@ static void dissect_spdy_flags(tvbuff_t *tvb, static int dissect_spdy_data_payload(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *top_level_tree, + proto_tree *top_level_tree _U_, proto_tree *spdy_tree, proto_item *spdy_proto, spdy_conv_t *conv_data, @@ -733,9 +730,6 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, guint num_data_frames; gboolean dissected; - col_add_fstr(pinfo->cinfo, COL_INFO, "DATA Stream=%d Length=%d", - stream_id, frame->length); - /* Add frame description. */ proto_item_append_text(spdy_proto, ", Stream: %d, Length: %d", stream_id, @@ -781,7 +775,6 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, if (!(frame->flags & SPDY_FLAG_FIN)) { col_set_fence(pinfo->cinfo, COL_INFO); - col_add_fstr(pinfo->cinfo, COL_INFO, " (partial entity)"); proto_item_append_text(spdy_proto, " (partial entity body)"); /* would like the proto item to say */ /* " (entity body fragment N of M)" */ @@ -831,16 +824,16 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, (g_ascii_strcasecmp(si->content_encoding, "gzip") == 0 || g_ascii_strcasecmp(si->content_encoding, "deflate") == 0)) { uncomp_tvb = tvb_child_uncompress(tvb, data_tvb, 0, - tvb_length(data_tvb)); + tvb_reported_length(data_tvb)); } /* * Add the encoded entity to the protocol tree */ - e_ti = proto_tree_add_text(top_level_tree, data_tvb, - 0, tvb_length(data_tvb), + e_ti = proto_tree_add_text(spdy_tree, data_tvb, + 0, tvb_reported_length(data_tvb), "Content-encoded entity body (%s): %u bytes", si->content_encoding, - tvb_length(data_tvb)); + tvb_reported_length(data_tvb)); e_tree = proto_item_add_subtree(e_ti, ett_spdy_encoded_entity); if (si->num_data_frames > 1) { wmem_list_t *dflist = si->data_frames; @@ -848,7 +841,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, spdy_data_frame_t *df; guint32 framenum; ce_ti = proto_tree_add_text(e_tree, data_tvb, 0, - tvb_length(data_tvb), + tvb_reported_length(data_tvb), "Assembled from %d frames in packet(s)", si->num_data_frames); framenum = 0; @@ -875,7 +868,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, * tvb_free(next_tvb); */ - proto_item_append_text(e_ti, " -> %u bytes", tvb_length(uncomp_tvb)); + proto_item_append_text(e_ti, " -> %u bytes", tvb_reported_length(uncomp_tvb)); data_tvb = uncomp_tvb; add_new_data_source(pinfo, data_tvb, "Uncompressed entity body"); } else { @@ -930,7 +923,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb, /* * We have a subdissector - call it. */ - dissected = call_dissector(handle, data_tvb, pinfo, top_level_tree); + dissected = call_dissector(handle, data_tvb, pinfo, spdy_tree); } else { dissected = FALSE; } @@ -940,10 +933,10 @@ 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, top_level_tree); + call_dissector(media_handle, next_tvb, pinfo, spdy_tree); } else { /* Call the default data dissector */ - call_dissector(data_handle, next_tvb, pinfo, top_level_tree); + call_dissector(data_handle, next_tvb, pinfo, spdy_tree); } body_dissected: @@ -1243,7 +1236,7 @@ static int dissect_spdy_header_payload( int header_value_length; /* Get header name details. */ - if (tvb_length_remaining(header_tvb, hdr_offset) < 4) { + if (tvb_reported_length_remaining(header_tvb, hdr_offset) < 4) { expert_add_info_format(pinfo, frame_tree, &ei_spdy_mal_frame_data, "Not enough frame data for header name size."); break; @@ -1251,7 +1244,7 @@ static int dissect_spdy_header_payload( header_name_offset = hdr_offset; header_name_length = tvb_get_ntohl(header_tvb, hdr_offset); hdr_offset += 4; - if (tvb_length_remaining(header_tvb, hdr_offset) < header_name_length) { + if (tvb_reported_length_remaining(header_tvb, hdr_offset) < header_name_length) { expert_add_info_format(pinfo, frame_tree, &ei_spdy_mal_frame_data, "Not enough frame data for header name."); break; @@ -1262,7 +1255,7 @@ static int dissect_spdy_header_payload( hdr_offset += header_name_length; /* Get header value details. */ - if (tvb_length_remaining(header_tvb, hdr_offset) < 4) { + if (tvb_reported_length_remaining(header_tvb, hdr_offset) < 4) { expert_add_info_format(pinfo, frame_tree, &ei_spdy_mal_frame_data, "Not enough frame data for header value size."); break; @@ -1270,7 +1263,7 @@ static int dissect_spdy_header_payload( header_value_offset = hdr_offset; header_value_length = tvb_get_ntohl(header_tvb, hdr_offset); hdr_offset += 4; - if (tvb_length_remaining(header_tvb, hdr_offset) < header_value_length) { + if (tvb_reported_length_remaining(header_tvb, hdr_offset) < header_value_length) { expert_add_info_format(pinfo, frame_tree, &ei_spdy_mal_frame_data, "Not enough frame data for header value."); break; @@ -1293,20 +1286,12 @@ static int dissect_spdy_header_payload( header_tree = proto_item_add_subtree(header, ett_spdy_header); /* Add header name. */ - /*header_name_ti = */proto_tree_add_item(header_tree, - hf_spdy_header_name, - header_tvb, - header_name_offset, - 4, - ENC_NA); + proto_tree_add_item(header_tree, hf_spdy_header_name, header_tvb, + header_name_offset, 4, ENC_NA); /* Add header value. */ - /*header_value_ti =*/ proto_tree_add_item(header_tree, - hf_spdy_header_value, - header_tvb, - header_value_offset, - 4, - ENC_NA); + proto_tree_add_item(header_tree, hf_spdy_header_value, header_tvb, + header_value_offset, 4, ENC_NA); } /* @@ -1335,10 +1320,10 @@ static int dissect_spdy_header_payload( /* Set Info column. */ if (hdr_version != NULL) { if (hdr_status == NULL) { - col_append_fstr(pinfo->cinfo, COL_INFO, " Request=\"%s %s://%s%s %s\"", + proto_item_append_text(frame_tree, ", Request: %s %s://%s%s %s", hdr_method, hdr_scheme, hdr_host, hdr_path, hdr_version); } else { - col_append_fstr(pinfo->cinfo, COL_INFO, " Response=\"%s %s\"", + proto_item_append_text(frame_tree, ", Response: %s %s", hdr_status, hdr_version); } } @@ -1381,8 +1366,6 @@ static int dissect_spdy_rst_stream_payload( } str = val_to_str(rst_status, rst_stream_status_names, "Unknown (%d)"); - /* Add status to info column. */ - col_append_fstr(pinfo->cinfo, COL_INFO, " Status=%s)", str); proto_item_append_text(frame_tree, ", Status: %s", str); @@ -1396,7 +1379,7 @@ static int dissect_spdy_settings_payload( proto_tree *frame_tree, const spdy_control_frame_info_t *frame) { guint32 num_entries; - proto_item *ti; + proto_item *ti, *ti_setting; proto_tree *setting_tree; proto_tree *flags_tree; @@ -1423,8 +1406,8 @@ static int dissect_spdy_settings_payload( guint32 setting_value; /* Create key/value pair subtree. */ - ti = proto_tree_add_item(frame_tree, hf_spdy_setting, tvb, offset, 8, ENC_NA); - setting_tree = proto_item_add_subtree(ti, ett_spdy_setting); + ti_setting = proto_tree_add_item(frame_tree, hf_spdy_setting, tvb, offset, 8, ENC_NA); + setting_tree = proto_item_add_subtree(ti_setting, ett_spdy_setting); /* Set flags. */ if (setting_tree) { @@ -1447,13 +1430,10 @@ static int dissect_spdy_settings_payload( setting_value = tvb_get_ntohl(tvb, offset); proto_tree_add_item(setting_tree, hf_spdy_setting_value, tvb, offset, 4, ENC_BIG_ENDIAN); - proto_item_set_text(setting_tree, "Setting, %s: %u", setting_id_str, setting_value); + proto_item_append_text(ti_setting, ", %s: %u", setting_id_str, setting_value); proto_item_append_text(frame_tree, ", %s: %u", setting_id_str, setting_value); offset += 4; - /* Append to info column. */ - col_append_fstr(pinfo->cinfo, COL_INFO, " %s=%u", setting_id_str, setting_value); - /* Increment. */ --num_entries; } @@ -1461,7 +1441,7 @@ static int dissect_spdy_settings_payload( return frame->length; } -static int dissect_spdy_ping_payload(tvbuff_t *tvb, int offset, packet_info *pinfo, +static int dissect_spdy_ping_payload(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *frame_tree, const spdy_control_frame_info_t *frame) { /* Get ping ID. */ @@ -1471,9 +1451,6 @@ static int dissect_spdy_ping_payload(tvbuff_t *tvb, int offset, packet_info *pin proto_tree_add_item(frame_tree, hf_spdy_ping_id, tvb, offset, 4, ENC_BIG_ENDIAN); proto_item_append_text(frame_tree, ", ID: %u", ping_id); - /* Add ping ID to info column. */ - col_append_fstr(pinfo->cinfo, COL_INFO, " ID=%u", ping_id); - return frame->length; } @@ -1500,7 +1477,7 @@ static int dissect_spdy_goaway_payload(tvbuff_t *tvb, } /* Add status to info column. */ - col_append_fstr(pinfo->cinfo, COL_INFO, " Status=%s)", + proto_item_append_text(frame_tree, " Status=%s)", val_to_str(goaway_status, rst_stream_status_names, "Unknown (%d)")); return frame->length; @@ -1526,9 +1503,6 @@ static int dissect_spdy_window_update_payload( proto_tree_add_item(frame_tree, hf_spdy_window_update_delta, tvb, offset, 4, ENC_BIG_ENDIAN); proto_item_append_text(frame_tree, ", Delta: %u", window_update_delta); - /* Add delta to info column. */ - col_append_fstr(pinfo->cinfo, COL_INFO, " Delta=%u", window_update_delta); - return frame->length; } @@ -1587,9 +1561,9 @@ int dissect_spdy_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void /* Add frame info. */ frame_type_name = val_to_str(frame.type, frame_type_names, "Unknown(%d)"); - col_add_str(pinfo->cinfo, COL_INFO, frame_type_name); + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", frame_type_name); - proto_item_append_text(spdy_tree, ", %s", frame_type_name); + proto_item_append_text(spdy_tree, ": %s", frame_type_name); /* Add flags. */ frame.flags = tvb_get_guint8(tvb, offset); @@ -1608,10 +1582,10 @@ int dissect_spdy_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void /* * Make sure there's as much data as the frame header says there is. */ - if ((guint)tvb_length_remaining(tvb, offset) < frame.length) { + if ((guint)tvb_reported_length_remaining(tvb, offset) < frame.length) { expert_add_info_format(pinfo, tree, &ei_spdy_mal_frame_data, "Not enough frame data: %d vs. %d", - frame.length, tvb_length_remaining(tvb, offset)); + frame.length, tvb_reported_length_remaining(tvb, offset)); return -1; } @@ -1862,7 +1836,7 @@ void proto_register_spdy(void) }, { &hf_spdy_setting, { "Setting", "spdy.setting", - FT_BYTES, BASE_NONE, NULL, 0x0, + FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |