From: Anthony Minessale Date: Fri, 21 Jun 2013 02:15:32 +0000 (-0500) Subject: FS-5530 X-Git-Tag: v1.5.2~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48ea6b5217ce2dec82c0abf1efe6d9b2f8ee4bf0;p=thirdparty%2Ffreeswitch.git FS-5530 --- diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 583fda4987..7e5991a396 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -1542,29 +1542,31 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses if (cause && !switch_channel_test_flag(peer_channel, CF_ANSWERED)) { switch_channel_handle_cause(caller_channel, cause); } - - if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) { - switch_ivr_park_session(session); - } else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) { - transfer_after_bridge(session, var); - } else { - const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE); - int explicit = 0; - - if (hup) { - explicit = !strcasecmp(hup, "explicit"); - } - if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) { - switch_call_cause_t cause = switch_channel_get_cause(peer_channel); - if (cause == SWITCH_CAUSE_NONE) { - cause = SWITCH_CAUSE_NORMAL_CLEARING; + if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) { + if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) { + switch_ivr_park_session(session); + } else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) { + transfer_after_bridge(session, var); + } else { + const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE); + int explicit = 0; + + if (hup) { + explicit = !strcasecmp(hup, "explicit"); } - if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) { - switch_channel_set_flag(peer_channel, CF_INTERCEPT); + if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) { + switch_call_cause_t cause = switch_channel_get_cause(peer_channel); + if (cause == SWITCH_CAUSE_NONE) { + cause = SWITCH_CAUSE_NORMAL_CLEARING; + } + + if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) { + switch_channel_set_flag(peer_channel, CF_INTERCEPT); + } + switch_channel_hangup(caller_channel, cause); } - switch_channel_hangup(caller_channel, cause); } } }