]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_rtp_asterisk: Revert DTLS negotiation changes. 75/1975/1
authorJoshua Colp <jcolp@digium.com>
Fri, 8 Jan 2016 17:49:02 +0000 (13:49 -0400)
committerJoshua Colp <jcolp@digium.com>
Sun, 10 Jan 2016 00:36:42 +0000 (20:36 -0400)
Due to locking issues within pjnath these changes are being
reverted until pjnath can be changed.

ASTERISK-25645

Revert "res_rtp_asterisk.c: Fix DTLS negotiation delays."

This reverts commit 24ae124e4f7310cfa64c187b944b2ffc060da28d.

Change-Id: I2986cfb2c43dc14455c1bcaf92c3804f9da49705

Revert "res_rtp_asterisk: Resolve further timing issues with DTLS negotiation"

This reverts commit 965a0eee46d24321f74c244e23c5a5f45e67e12b.

Change-Id: Ie68fafde27dad4b03cb7a1e27ce2a8502c3f7bbe

res/res_rtp_asterisk.c

index 3c630fbe39774cd03f7f7719135a5683f09232e4..f6bf34211b0f53cb7a06a9ef736c03f055bccd65 100644 (file)
@@ -444,7 +444,6 @@ static int ast_rtp_sendcng(struct ast_rtp_instance *instance, int level);
 #ifdef HAVE_OPENSSL_SRTP
 static int ast_rtp_activate(struct ast_rtp_instance *instance);
 static void dtls_srtp_check_pending(struct ast_rtp_instance *instance, struct ast_rtp *rtp, int rtcp);
-static void dtls_srtp_flush_pending(struct ast_rtp_instance *instance, struct ast_rtp *rtp);
 static void dtls_srtp_start_timeout_timer(struct ast_rtp_instance *instance, struct ast_rtp *rtp, int rtcp);
 static void dtls_srtp_stop_timeout_timer(struct ast_rtp_instance *instance, struct ast_rtp *rtp, int rtcp);
 #endif
@@ -1684,20 +1683,15 @@ static void ast_rtp_on_ice_complete(pj_ice_sess *ice, pj_status_t status)
                if (rtp->rtcp) {
                        update_address_with_ice_candidate(rtp, AST_RTP_ICE_COMPONENT_RTCP, &rtp->rtcp->them);
                }
+       }
  
 #ifdef HAVE_OPENSSL_SRTP
-               if (rtp->dtls.dtls_setup != AST_RTP_DTLS_SETUP_PASSIVE) {
-                       dtls_perform_handshake(instance, &rtp->dtls, 0);
-               }
-               else {
-                       dtls_srtp_flush_pending(instance, rtp); /* this flushes pending BIO for both rtp & rtcp as needed. */
-               }
+       dtls_perform_handshake(instance, &rtp->dtls, 0);
 
-               if (rtp->rtcp && rtp->rtcp->dtls.dtls_setup != AST_RTP_DTLS_SETUP_PASSIVE) {
-                       dtls_perform_handshake(instance, &rtp->rtcp->dtls, 1);
-               }
-#endif
+       if (rtp->rtcp) {
+               dtls_perform_handshake(instance, &rtp->rtcp->dtls, 1);
        }
+#endif
 
        if (!strictrtp) {
                return;
@@ -1892,23 +1886,6 @@ static void dtls_srtp_stop_timeout_timer(struct ast_rtp_instance *instance, stru
        AST_SCHED_DEL_UNREF(rtp->sched, dtls->timeout_timer, ao2_ref(instance, -1));
 }
 
-static void dtls_srtp_flush_pending(struct ast_rtp_instance *instance, struct ast_rtp *rtp)
-{
-       struct dtls_details *dtls;
-
-       dtls = &rtp->dtls;
-       ast_mutex_lock(&dtls->lock);
-       dtls_srtp_check_pending(instance, rtp, 0);
-       ast_mutex_unlock(&dtls->lock);
-
-       if (rtp->rtcp) {
-               dtls = &rtp->rtcp->dtls;
-               ast_mutex_lock(&dtls->lock);
-               dtls_srtp_check_pending(instance, rtp, 1);
-               ast_mutex_unlock(&dtls->lock);
-       }
-}
-
 static void dtls_srtp_check_pending(struct ast_rtp_instance *instance, struct ast_rtp *rtp, int rtcp)
 {
        struct dtls_details *dtls = !rtcp ? &rtp->dtls : &rtp->rtcp->dtls;
@@ -2141,8 +2118,6 @@ static int __rtp_recvfrom(struct ast_rtp_instance *instance, void *buf, size_t s
                        SSL_set_accept_state(dtls->ssl);
                }
 
-               ast_mutex_lock(&dtls->lock);
-
                dtls_srtp_check_pending(instance, rtp, rtcp);
 
                BIO_write(dtls->read_bio, buf, len);
@@ -2153,7 +2128,6 @@ static int __rtp_recvfrom(struct ast_rtp_instance *instance, void *buf, size_t s
                        unsigned long error = ERR_get_error();
                        ast_log(LOG_ERROR, "DTLS failure occurred on RTP instance '%p' due to reason '%s', terminating\n",
                                instance, ERR_reason_error_string(error));
-                       ast_mutex_unlock(&dtls->lock);
                        return -1;
                }
 
@@ -2171,8 +2145,6 @@ static int __rtp_recvfrom(struct ast_rtp_instance *instance, void *buf, size_t s
                        dtls_srtp_start_timeout_timer(instance, rtp, rtcp);
                }
 
-               ast_mutex_unlock(&dtls->lock);
-
                return res;
        }
 #endif
@@ -4862,20 +4834,7 @@ static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct
                rtp_learning_seq_init(&rtp->rtp_source_learn, rtp->seqno);
        }
 
-#ifdef HAVE_OPENSSL_SRTP
-       /* Trigger pending outbound DTLS packets received before the address was set.  Avoid unnecessary locking
-        * by checking if we're passive. Without this, we only send the pending packets once a new SSL packet is
-        * received in __rtp_recvfrom.  If rtp->ice, this is instead done on_ice_complete
-        */
-#ifdef HAVE_PJPROJECT
-       if (rtp->ice) {
-               return;
-       }
-#endif
-       if (rtp->dtls.dtls_setup == AST_RTP_DTLS_SETUP_PASSIVE) {
-               dtls_srtp_flush_pending(instance, rtp);
-       }
-#endif
+       return;
 }
 
 /*! \brief Write t140 redundacy frame