From: Michael Jerris Date: Fri, 3 Aug 2007 16:46:21 +0000 (+0000) Subject: fix for FSCORE-34 X-Git-Tag: v1.0-beta1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b3b300e4b4bf0eb73506115cffec4a2d4d33717;p=thirdparty%2Ffreeswitch.git fix for FSCORE-34 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5564 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/src/switch_ivr.c b/src/switch_ivr.c index e80ce70c87..6e25ecddf0 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -890,8 +890,17 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ switch_channel_set_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE, NULL); - if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE)) - && (other_session = switch_core_session_locate(uuid))) { + + /* If HANGUP_AFTER_BRIDGE is set to 'true', SWITCH_SIGNAL_BRIDGE_VARIABLE + * will not have a value, so we need to check SWITCH_BRIDGE_VARIABLE */ + + uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BRIDGE_VARIABLE); + + if(!uuid) { + uuid = switch_channel_get_variable(channel, SWITCH_BRIDGE_VARIABLE); + } + + if (uuid && (other_session = switch_core_session_locate(uuid))) { switch_channel_set_variable(other_channel, SWITCH_SIGNAL_BOND_VARIABLE, NULL); switch_core_session_rwunlock(other_session); } @@ -906,6 +915,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ switch_channel_set_variable(channel, SWITCH_BRIDGE_VARIABLE, NULL); switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL); + + /* If we are transferring the CALLER out of the bridge, we do not want to hang up on them */ + switch_channel_set_variable(channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "false"); switch_channel_hangup(other_channel, SWITCH_CAUSE_BLIND_TRANSFER); switch_ivr_media(uuid, SMF_NONE);