]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6833
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 4 Feb 2016 21:25:33 +0000 (15:25 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 4 Feb 2016 21:25:33 +0000 (15:25 -0600)
src/mod/endpoints/mod_sofia/sofia.c
src/switch_ivr.c

index 8cf8abb0aa7fba8657931f5a4d032134e887c6e5..053c1c5b2501081b866d438031f7a091b3b76639 100644 (file)
@@ -6978,7 +6978,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                        }
 
                        if (switch_channel_test_flag(channel, CF_3P_NOMEDIA_REQUESTED)) {
-                               switch_channel_clear_flag(channel, CF_3P_NOMEDIA_REQUESTED);
+                               
                                if (switch_channel_test_flag(channel, CF_3P_NOMEDIA_REQUESTED_BLEG)) {
                                        switch_core_session_t *other_session;
                                        
@@ -7010,12 +7010,12 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                                        switch_channel_set_variable(channel, SWITCH_R_SDP_VARIABLE, r_sdp);
                                }
                                
+                               switch_channel_clear_flag(channel, CF_3P_NOMEDIA_REQUESTED);
                                goto done;
 
                        } else if (switch_channel_test_flag(channel, CF_3P_MEDIA_REQUESTED)) {
                                uint8_t match = 0;
                                
-                               switch_channel_clear_flag(channel, CF_3P_MEDIA_REQUESTED);
                                switch_channel_clear_flag(channel, CF_PROXY_MODE);
                                
                                switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0);
@@ -7055,12 +7055,14 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                                                        //TAG_IF(sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)),
                                                        TAG_END());
                                        
+                                       switch_channel_clear_flag(channel, CF_3P_MEDIA_REQUESTED);
                                        goto done;
                                }
 
                                switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "NO CODECS");
                                switch_channel_hangup(channel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION);
 
+                               switch_channel_clear_flag(channel, CF_3P_MEDIA_REQUESTED);
                                goto done;
                                //ss_state = nua_callstate_ready;
                                //goto state_process;
index 8cd8325d1bee5dda3b63cc9ccfdea5730a135635..649debd65a4a1069f63a691546498c8849c0a7eb 100644 (file)
@@ -1623,6 +1623,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_3p_media(const char *uuid, switch_med
                        switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
                        switch_channel_wait_for_flag(channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
                        switch_channel_wait_for_flag(channel, CF_MEDIA_SET, SWITCH_TRUE, 10000, NULL);
+                       switch_channel_wait_for_flag(channel, CF_3P_MEDIA_REQUESTED, SWITCH_FALSE, 10000, NULL);
                        //switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
                }
 
@@ -1640,6 +1641,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_3p_media(const char *uuid, switch_med
                        switch_channel_wait_for_flag(other_channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
                        switch_channel_wait_for_flag(other_channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
                        switch_channel_wait_for_flag(other_channel, CF_MEDIA_SET, SWITCH_TRUE, 10000, NULL);
+                       switch_channel_wait_for_flag(other_channel, CF_3P_MEDIA_REQUESTED, SWITCH_FALSE, 10000, NULL);
                        //switch_core_session_read_frame(other_session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
                        switch_channel_clear_state_handler(other_channel, NULL);
                        switch_core_session_rwunlock(other_session);