diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 99b699e63a..61dfd70b36 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -929,7 +929,6 @@ typedef enum { CF_NOT_READY, CF_SIGNAL_BRIDGE_TTL, CF_MEDIA_BRIDGE_TTL, - CF_HANGUP_AFTER_BRIDGE, /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ CF_FLAG_MAX } switch_channel_flag_t; diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 9c8a98dcdb..9c5a9bc31f 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -793,10 +793,6 @@ static switch_status_t signal_bridge_on_hangup(switch_core_session_t *session) switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL); if (switch_channel_up(other_channel)) { - if (switch_channel_test_flag(other_channel, CF_HANGUP_AFTER_BRIDGE)) { - switch_channel_hangup(other_channel, switch_channel_get_cause(channel)); - } - if (switch_true(switch_channel_get_variable(other_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) { switch_ivr_park_session(other_session); } else if ((var = switch_channel_get_variable(other_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) { @@ -1127,10 +1123,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses if ((state != CS_EXECUTE && state != CS_SOFT_EXECUTE && state != CS_PARK && state != CS_ROUTING) || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP)) { - if (switch_channel_test_flag(caller_channel, CF_HANGUP_AFTER_BRIDGE)) { - switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel)); - } - 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))) { diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 78326baef0..417ff2d217 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -2340,7 +2340,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER; if ((holding_session = switch_core_session_locate(holding))) { - switch_channel_set_flag(switch_core_session_get_channel(holding_session), CF_HANGUP_AFTER_BRIDGE); + switch_channel_set_variable(switch_core_session_get_channel(holding_session), SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true"); switch_core_session_rwunlock(holding_session); } @@ -2361,6 +2361,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess switch_channel_t *holding_channel = switch_core_session_get_channel(holding_session); if (caller_channel && switch_channel_ready(caller_channel)) { + switch_channel_set_variable(holding_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true"); switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(session)); holding = NULL; } else { @@ -2403,7 +2404,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess } if (holding && oglobals.idx != IDX_TIMEOUT && oglobals.idx != IDX_KEY_CANCEL) { + switch_core_session_t *holding_session; + + if ((holding_session = switch_core_session_locate(holding))) { + switch_channel_set_variable(switch_core_session_get_channel(holding_session), SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true"); + switch_core_session_rwunlock(holding_session); + } + switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(originate_status[i].peer_session)); + holding = NULL; } else { switch_channel_hangup(originate_status[i].peer_channel, reason); }