From e1b6d4d1be9aee03f9b65f5a48ec2d5efc218c20 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 20 Jun 2013 20:58:55 -0500 Subject: [PATCH] FS-5530 --resolve --- src/switch_ivr_bridge.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 9e718a1096..202c2f46f2 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -1542,17 +1542,25 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses 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 if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && - switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) { - switch_call_cause_t cause = switch_channel_get_cause(peer_channel); - if (cause == SWITCH_CAUSE_NONE) { - cause = SWITCH_CAUSE_NORMAL_CLEARING; + } 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); } } }