From 6c969a115c161025a58aa96e5a532097d80778e6 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Thu, 16 Oct 2014 01:24:12 +0000 Subject: [PATCH] res_rtp_asterisk: Fix a bug where ICE state would get reset when it shouldn't. In the case where the ICE negotiation had not yet started current state would get wiped when it shouldn't. This also removes channel binding as in practice this does not work well with other implementations. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@425644 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_rtp_asterisk.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 3b27650593..c05f699888 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -563,18 +563,6 @@ static void update_address_with_ice_candidate(struct ast_rtp *rtp, enum ast_rtp_ ast_sockaddr_set_port(cand_address, pj_sockaddr_get_port(&rtp->ice->comp[component - 1].valid_check->rcand->addr)); } -/*! \brief Helper function which sets up channel binding on a TURN session if applicable */ -static void turn_enable_bind_channel(struct ast_rtp *rtp, pj_turn_sock *turn, enum ast_rtp_ice_component_type component, int transport) -{ - if (!rtp->ice || !turn || (component < 1) || !rtp->ice->comp[component - 1].valid_check || - (rtp->ice->comp[component - 1].valid_check->lcand->transport_id != transport)) { - return; - } - - pj_turn_sock_bind_channel(turn, &rtp->ice->comp[component - 1].valid_check->rcand->addr, - sizeof(rtp->ice->comp[component - 1].valid_check->rcand->addr)); -} - static int ice_create(struct ast_rtp_instance *instance, struct ast_sockaddr *addr, int port, int replace); @@ -598,6 +586,10 @@ static int ice_reset_session(struct ast_rtp_instance *instance) pj_ice_sess_role role = rtp->ice->role; int res; + if (!rtp->ice->is_nominating && !rtp->ice->is_complete) { + return 0; + } + ast_rtp_ice_stop(instance); res = ice_create(instance, &rtp->ice_original_rtp_addr, rtp->ice_port, 1); @@ -1608,11 +1600,9 @@ static void ast_rtp_on_ice_complete(pj_ice_sess *ice, pj_status_t status) update_address_with_ice_candidate(rtp, AST_RTP_ICE_COMPONENT_RTP, &remote_address); ast_rtp_instance_set_remote_address(instance, &remote_address); - turn_enable_bind_channel(rtp, rtp->turn_rtp, AST_RTP_ICE_COMPONENT_RTP, TRANSPORT_TURN_RTP); if (rtp->rtcp) { update_address_with_ice_candidate(rtp, AST_RTP_ICE_COMPONENT_RTCP, &rtp->rtcp->them); - turn_enable_bind_channel(rtp, rtp->turn_rtcp, AST_RTP_ICE_COMPONENT_RTCP, TRANSPORT_TURN_RTCP); } }