From 999a6dd0b7f37e99c53cea3bc79d92c3ffab1822 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Wed, 5 Jul 2017 15:18:44 -0700 Subject: [PATCH] FS-10485: Re-activate ICE on all attribute changes I ran into some ice failures when testing reinvites using bypass_media_after_bridge. Every ice session has ice-ufrag and ice-pwd attributes. When leg A sends those attributes to leg B, leg B is supposed to send stun packets to leg A using the credentials provided in those attributes. Freeswitch was not updating the session credentials when the phone sent a new invite containing new ufrag and pwd attributes. This caused ICE to fail on the client side (PJSIP in this case). The new_ice flag is set to true when freeswitch detects a change in those attributes. For whatever reason, the reinvite flows that I was testing did not set the CF_REINVITE flag on the channel, but new_ice was true. It seems to me that freeswitch should always reactivate ice when the ufrag and pwd credentials change. --- src/switch_core_media.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/switch_core_media.c b/src/switch_core_media.c index d2d70add99..c4f820a1fa 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -4026,8 +4026,8 @@ static switch_status_t check_ice(switch_media_handle_t *smh, switch_media_type_t engine->rtcp_mux = -1; } - if (switch_channel_test_flag(smh->session->channel, CF_REINVITE)) { - if (switch_rtp_ready(engine->rtp_session) && engine->ice_in.cands[engine->ice_in.chosen[0]][0].ready && engine->new_ice) { + if (engine->new_ice) { + if (switch_rtp_ready(engine->rtp_session) && engine->ice_in.cands[engine->ice_in.chosen[0]][0].ready) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(smh->session), SWITCH_LOG_INFO, "RE-Activating %s ICE\n", type2str(type)); switch_rtp_activate_ice(engine->rtp_session,