]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Handle RTP Contributing Source Identifiers (CSRC)
authorCorey Burke <corey@switch.co>
Fri, 2 Oct 2015 14:31:20 +0000 (07:31 -0700)
committerCorey Burke <corey@switch.co>
Fri, 2 Oct 2015 14:31:20 +0000 (07:31 -0700)
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.

src/switch_rtp.c

index 62e48e7d1cbba327565eea3dce4ebab7bcddeb80..a516053c3b146f97748d55f5f123f2d13085f753 100644 (file)
@@ -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 {