]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9712 #resolve [3PCC-Proxy Missing SDP on Reinvite. ]
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 11 Nov 2016 01:47:37 +0000 (19:47 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 11 Nov 2016 01:47:37 +0000 (19:47 -0600)
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index eaf48dd519c3e40404bf8bdc61ecfc8d00f15a4b..1e28be82a5253d8f83a4111cfccb2fe4ef9e3d78 100644 (file)
@@ -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__;
index 6b523ac993fd0ed7c2fb92c9830f1e9a778ec58d..c62b9b9023487d6af98d9a138b5e6c9877395d30 100644 (file)
@@ -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),