[svn-commits] file: branch file/sha256-a-harsh-reality r417073 - /team/file/sha256-a-harsh-...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 23 06:59:16 CDT 2014


Author: file
Date: Mon Jun 23 06:59:08 2014
New Revision: 417073

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=417073
Log:
Defer DTLS handshake until ICE negotiation completes.

Modified:
    team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c

Modified: team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c?view=diff&rev=417073&r1=417072&r2=417073
==============================================================================
--- team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c (original)
+++ team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c Mon Jun 23 06:59:08 2014
@@ -1141,7 +1141,15 @@
 #ifdef USE_PJPROJECT
 static void ast_rtp_on_ice_complete(pj_ice_sess *ice, pj_status_t status)
 {
-	struct ast_rtp *rtp = ice->user_data;
+	struct ast_rtp_instance *instance = ice->user_data;
+	struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
+
+#ifdef HAVE_OPENSSL_SRTP
+	if (rtp->ssl) {
+		SSL_do_handshake(rtp->ssl);
+		dtls_srtp_check_pending(instance, rtp);
+	}
+#endif
 
 	if (!strictrtp) {
 		return;
@@ -1153,7 +1161,8 @@
 
 static void ast_rtp_on_ice_rx_data(pj_ice_sess *ice, unsigned comp_id, unsigned transport_id, void *pkt, pj_size_t size, const pj_sockaddr_t *src_addr, unsigned src_addr_len)
 {
-	struct ast_rtp *rtp = ice->user_data;
+	struct ast_rtp_instance *instance = ice->user_data;
+	struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
 
 	/* Instead of handling the packet here (which really doesn't work with our architecture) we set a bit to indicate that it should be handled after pj_ice_sess_on_rx_pkt
 	 * returns */
@@ -1162,7 +1171,8 @@
 
 static pj_status_t ast_rtp_on_ice_tx_pkt(pj_ice_sess *ice, unsigned comp_id, unsigned transport_id, const void *pkt, pj_size_t size, const pj_sockaddr_t *dst_addr, unsigned dst_addr_len)
 {
-	struct ast_rtp *rtp = ice->user_data;
+	struct ast_rtp_instance *instance = ice->user_data;
+	struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
 	pj_status_t status = PJ_EINVALIDOP;
 	pj_ssize_t _size = (pj_ssize_t)size;
 
@@ -1937,7 +1947,7 @@
 	if (pj_ice_sess_create(&stun_config, NULL, PJ_ICE_SESS_ROLE_UNKNOWN, 2,
 			&ast_rtp_ice_sess_cb, &ufrag, &passwd, &rtp->ice) == PJ_SUCCESS) {
 		/* Make this available for the callbacks */
-		rtp->ice->user_data = rtp;
+		rtp->ice->user_data = instance;
 
 		/* Add all of the available candidates to the ICE session */
 		rtp_add_candidates_to_ice(instance, rtp, addr, port, AST_RTP_ICE_COMPONENT_RTP,
@@ -4461,7 +4471,12 @@
 {
 	struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
 
+	/* If ICE negotiation is enabled the DTLS Handshake will be performed upon completion of it */
+#ifdef USE_PJPROJECT
+	if (!rtp->ssl || rtp->ice) {
+#else
 	if (!rtp->ssl) {
+#endif
 		return 0;
 	}
 




More information about the svn-commits mailing list