res_rtp_asterisk: Use RTP component for ICE if RTCP-MUX is in use.
authorJoshua Colp <jcolp@digium.com>
Sun, 16 Jul 2017 17:18:39 +0000 (17:18 +0000)
committerJoshua Colp <jcolp@digium.com>
Sun, 16 Jul 2017 17:26:00 +0000 (17:26 +0000)
This change makes it so that if an RTCP packet is being sent
the RTP ICE component is used for sending if RTCP-MUX is in use.

ASTERISK-27133

Change-Id: I6200f611ede709602ee9b89501720c29545ed68b

res/res_rtp_asterisk.c

index 9d3969f..a2e63ec 100644 (file)
@@ -2650,9 +2650,15 @@ static int __rtp_sendto(struct ast_rtp_instance *instance, void *buf, size_t siz
 
 #ifdef HAVE_PJPROJECT
        if (transport_rtp->ice) {
+               enum ast_rtp_ice_component_type component = rtcp ? AST_RTP_ICE_COMPONENT_RTCP : AST_RTP_ICE_COMPONENT_RTP;
                pj_status_t status;
                struct ice_wrap *ice;
 
+               /* If RTCP is sharing the same socket then use the same component */
+               if (rtcp && rtp->rtcp->s == rtp->s) {
+                       component = AST_RTP_ICE_COMPONENT_RTP;
+               }
+
                pj_thread_register_check();
 
                /* Release the instance lock to avoid deadlock with PJPROJECT group lock */
@@ -2661,8 +2667,7 @@ static int __rtp_sendto(struct ast_rtp_instance *instance, void *buf, size_t siz
                if (instance == transport) {
                        ao2_unlock(instance);
                }
-               status = pj_ice_sess_send_data(ice->real_ice,
-                       rtcp ? AST_RTP_ICE_COMPONENT_RTCP : AST_RTP_ICE_COMPONENT_RTP, temp, len);
+               status = pj_ice_sess_send_data(ice->real_ice, component, temp, len);
                ao2_ref(ice, -1);
                if (instance == transport) {
                        ao2_lock(instance);