diff --git a/src/switch_ivr.c b/src/switch_ivr.c index f2f09c801b..8cd8325d1b 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1821,19 +1821,23 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_3p_nomedia(const char *uuid, switch_m switch_channel_set_flag(other_channel, CF_3P_NOMEDIA_REQUESTED); switch_channel_set_flag(other_channel, CF_3P_NOMEDIA_REQUESTED_BLEG); + if (!switch_core_session_in_thread(session)) { + switch_channel_wait_for_state(channel, NULL, CS_PARK); + } + + 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_core_session_receive_message(other_session, &msg); switch_channel_wait_for_flag(other_channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL); - switch_channel_wait_for_flag(other_channel, CF_MEDIA_SET, 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_MEDIA_ACK, SWITCH_TRUE, 10000, NULL); } if (other_channel) { - if (!switch_core_session_in_thread(session)) { - switch_channel_wait_for_state(channel, NULL, CS_PARK); - 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); - } - if (swap) { switch_ivr_signal_bridge(other_session, session); } else {