From: Corey Burke Date: Fri, 2 Oct 2015 14:31:20 +0000 (-0700) Subject: Handle RTP Contributing Source Identifiers (CSRC) X-Git-Tag: v1.6.3~1^2~59^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0677b53b175430b8871576073d44dbea17fb8b2;p=thirdparty%2Ffreeswitch.git Handle RTP Contributing Source Identifiers (CSRC) RFC 3550 allows for parties to optionally specify a list of Contributing Source Identifiers in the RTP header. Skip over them when looking for the RTP body. --- diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 62e48e7d1c..a516053c3b 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -5322,16 +5322,20 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t if (rtp_session->recv_msg.header.version == 2) { + if (rtp_session->recv_msg.header.cc > 0) { /* Contributing Source Identifiers (4 bytes = sizeof CSRC header)*/ + rtp_session->recv_msg.ebody = RTP_BODY(rtp_session) + (rtp_session->recv_msg.header.cc * 4); + } + /* recalculate body length in case rtp extension used */ if (!rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] && !rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] && rtp_session->recv_msg.header.version == 2 && rtp_session->recv_msg.header.x) { /* header extensions */ uint16_t length; - rtp_session->recv_msg.ext = (switch_rtp_hdr_ext_t *) rtp_session->recv_msg.body; + rtp_session->recv_msg.ext = (switch_rtp_hdr_ext_t *) RTP_BODY(rtp_session); length = ntohs((uint16_t)rtp_session->recv_msg.ext->length); if (length < SWITCH_RTP_MAX_BUF_LEN_WORDS) { - rtp_session->recv_msg.ebody = rtp_session->recv_msg.body + (length * 4) + 4; + rtp_session->recv_msg.ebody = (char *)rtp_session->recv_msg.ext + (length * 4) + 4; if (*bytes > (length * 4 + 4)) { *bytes -= (length * 4 + 4); } else {