Ethereal-dev: [Ethereal-dev] [Patch] Show/skip profile-specific extensions in RTCP SR/RR repor
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Martin Mathieson <martin.mathieson@xxxxxxxxxxxx>
Date: Fri, 26 May 2006 16:03:41 +0100
Hi, This patch:- shows profile-specific extension data at the end of SR/RR reports (if packet length has not yet been reached after parsing normal data) and advances offset (further packets were not recognised+dissected as this data wasn't being skipped).
Regards, Martin P.S. I see there have been no SVN commits all week - is there a problem?
Index: epan/dissectors/packet-rtcp.c =================================================================== --- epan/dissectors/packet-rtcp.c (revision 18189) +++ epan/dissectors/packet-rtcp.c (working copy) @@ -300,6 +300,7 @@ static int hf_rtcp_blp = -1; static int hf_rtcp_padding_count = -1; static int hf_rtcp_padding_data = -1; +static int hf_rtcp_profile_specific_extension = -1; static int hf_rtcp_app_poc1_subtype = -1; static int hf_rtcp_app_poc1_sip_uri = -1; static int hf_rtcp_app_poc1_disp_name = -1; @@ -1375,7 +1376,7 @@ static int dissect_rtcp_rr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, - unsigned int count ) + unsigned int count, unsigned int packet_length ) { unsigned int counter = 1; proto_tree *ssrc_tree = (proto_tree*) NULL; @@ -1384,6 +1385,7 @@ proto_item *ti = (proto_item*) NULL; guint8 rr_flt; unsigned int cum_nr = 0; + int rr_offset = offset; while ( counter <= count ) { guint32 lsr, dlsr; @@ -1455,16 +1457,25 @@ counter++; } + /* If length remaining, assume profile-specific extension bytes */ + if ((offset-rr_offset) < (int)packet_length) + { + proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, + packet_length - (offset - rr_offset), FALSE); + offset = rr_offset + packet_length; + } + return offset; } static int dissect_rtcp_sr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, - unsigned int count ) + unsigned int count, unsigned int packet_length ) { proto_item* item; guint32 ts_msw, ts_lsw; gchar *buff; + int sr_offset = offset; /* NTP timestamp */ ts_msw = tvb_get_ntohl(tvb, offset); @@ -1500,7 +1511,17 @@ /* The rest of the packet is equal to the RR packet */ if ( count != 0 ) - offset = dissect_rtcp_rr( pinfo, tvb, offset, tree, count ); + offset = dissect_rtcp_rr( pinfo, tvb, offset, tree, count, packet_length-(offset-sr_offset) ); + else + { + /* If length remaining, assume profile-specific extension bytes */ + if ((offset-sr_offset) < (int)packet_length) + { + proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, + packet_length - (offset - sr_offset), FALSE); + offset = sr_offset + packet_length; + } + } return offset; } @@ -1927,8 +1948,10 @@ proto_tree_add_uint( rtcp_tree, hf_rtcp_ssrc_sender, tvb, offset, 4, tvb_get_ntohl( tvb, offset ) ); offset += 4; - if ( packet_type == RTCP_SR ) offset = dissect_rtcp_sr( pinfo, tvb, offset, rtcp_tree, elem_count ); - else offset = dissect_rtcp_rr( pinfo, tvb, offset, rtcp_tree, elem_count ); + if ( packet_type == RTCP_SR ) + offset = dissect_rtcp_sr( pinfo, tvb, offset, rtcp_tree, elem_count, packet_length-8 ); + else + offset = dissect_rtcp_rr( pinfo, tvb, offset, rtcp_tree, elem_count, packet_length-8 ); break; case RTCP_SDES: /* Source count, 5 bits */ @@ -2771,6 +2794,18 @@ } }, { + &hf_rtcp_profile_specific_extension, + { + "Profile-specific extension", + "rtcp.profile-specific-extension", + FT_BYTES, + BASE_NONE, + NULL, + 0x0, + "Profile-specific extension", HFILL + } + }, + { &hf_rtcp_setup, { "Stream setup",
_______________________________________________ Ethereal-dev mailing list Ethereal-dev@xxxxxxxxxxxx http://www.ethereal.com/mailman/listinfo/ethereal-dev
- Prev by Date: RE: [Ethereal-dev] Print in packet Bytes pane
- Next by Date: [Ethereal-dev] Dissecting with variable length fields
- Previous by thread: [Ethereal-dev] having trouble using heuristic dissector
- Next by thread: [Ethereal-dev] Dissecting with variable length fields
- Index(es):