From d282e7c444d1a2e8b92ccb5d0aec572c29dfac48 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 10 Nov 2016 19:47:37 -0600 Subject: [PATCH] FS-9712 #resolve [3PCC-Proxy Missing SDP on Reinvite. ] --- src/mod/endpoints/mod_sofia/sofia.c | 9 ++++++++- src/mod/endpoints/mod_sofia/sofia_glue.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index eaf48dd519..1e28be82a5 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -7523,7 +7523,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, switch_channel_set_state(channel, CS_HIBERNATE); switch_core_media_gen_local_sdp(session, SDP_TYPE_REQUEST, NULL, 0, NULL, 0); sofia_set_flag_locked(tech_pvt, TFLAG_3PCC); - + if (sofia_use_soa(tech_pvt)) { nua_respond(tech_pvt->nh, SIP_200_OK, SIPTAG_CONTACT_STR(tech_pvt->profile->url), @@ -7560,8 +7560,15 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, sofia_set_flag_locked(tech_pvt, TFLAG_NOSDP_REINVITE); if ((switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) && sofia_test_pflag(profile, PFLAG_3PCC_PROXY)) { sofia_set_flag_locked(tech_pvt, TFLAG_3PCC); + sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA); + if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS) { switch_core_session_message_t *msg; + if (switch_core_session_compare(session, other_session)) { + private_object_t *other_tech_pvt = switch_core_session_get_private(other_session); + sofia_clear_flag(other_tech_pvt, TFLAG_ENABLE_SOA); + } + msg = switch_core_session_alloc(other_session, sizeof(*msg)); msg->message_id = SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT; msg->from = __FILE__; diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 6b523ac993..c62b9b9023 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1297,6 +1297,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session) } if (sofia_use_soa(tech_pvt)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_CRIT, "INVITE WITH SOA:\n%s\n", tech_pvt->mparams.local_sdp_str); nua_invite(tech_pvt->nh, NUTAG_AUTOANSWER(0), //TAG_IF(zstr(tech_pvt->mparams.local_sdp_str), NUTAG_AUTOACK(0)), @@ -1336,6 +1337,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session) TAG_IF(!require_timer, NUTAG_TIMER_AUTOREQUIRE(0)), TAG_IF(!zstr(tech_pvt->mparams.local_sdp_str), SOATAG_HOLD(holdstr)), TAG_END()); } else { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_CRIT, "INVITE WITHOUT SOA:\n%s\n", tech_pvt->mparams.local_sdp_str); nua_invite(tech_pvt->nh, NUTAG_AUTOANSWER(0), NUTAG_AUTOACK(0),