diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 4d320d0e5c..1f9f7acd8f 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -433,19 +433,21 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj) if (ans_a != ans_b) { switch_channel_t *un = ans_a ? chan_b : chan_a; + switch_channel_t *a = un == chan_b ? chan_a : chan_b; - if (!switch_channel_test_flag(un, CF_OUTBOUND)) { - switch_channel_pass_callee_id(un == chan_b ? chan_a : chan_b, un); + if ((!switch_channel_test_flag(un, CF_OUTBOUND) && switch_channel_test_flag(a, CF_OUTBOUND)) || (un == chan_a && !originator)) { + switch_channel_pass_callee_id(a, un); if (switch_channel_answer(un) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Media Establishment Failed.\n", switch_channel_get_name(un)); goto end_of_bridge_loop; } - } - if (ans_a) - ans_b = 1; - else - ans_a = 1; + if (ans_a) { + ans_b = 1; + } else { + ans_a = 1; + } + } } if (originator && !sent_update && ans_a && ans_b && switch_channel_media_ack(chan_a) && switch_channel_media_ack(chan_b)) {