Author: anthm Date: Fri Dec 7 11:14:09 2007 New Revision: 6566 Modified: freeswitch/trunk/src/switch_ivr_bridge.c Log: don't hangup when transfering Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Fri Dec 7 11:14:09 2007 @@ -464,13 +464,14 @@ switch_channel_set_variable(channel, SWITCH_BRIDGE_VARIABLE, NULL); switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL); - if (switch_channel_test_flag(other_channel, CF_ANSWERED) && - switch_channel_get_state(other_channel) < CS_HANGUP && - !switch_channel_test_flag(other_channel, CF_TRANSFER) && - switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) { - switch_channel_hangup(other_channel, switch_channel_get_cause(channel)); - } else { - switch_channel_set_state(other_channel, CS_EXECUTE); + if (!switch_channel_test_flag(other_channel, CF_TRANSFER)) { + if (switch_channel_test_flag(other_channel, CF_ANSWERED) && + switch_channel_get_state(other_channel) < CS_HANGUP && + switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) { + switch_channel_hangup(other_channel, switch_channel_get_cause(channel)); + } else { + switch_channel_set_state(other_channel, CS_EXECUTE); + } } switch_core_session_rwunlock(other_session); } @@ -684,11 +685,12 @@ done: - if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && - switch_channel_get_state(caller_channel) < CS_HANGUP && - !switch_channel_test_flag(caller_channel, CF_TRANSFER) && - switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) { - switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel)); + if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) { + if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && + switch_channel_get_state(caller_channel) < CS_HANGUP && + switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) { + switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel)); + } } return status;
participants (1)
-
Freeswitch SVN