!oglobals.progress && (progress_timelimit_sec && elapsed > (time_t) progress_timelimit_sec)) {
to++;
oglobals.idx = IDX_TIMEOUT;
- force_reason = SWITCH_CAUSE_PROGRESS_TIMEOUT;
+ if (force_reason == SWITCH_CAUSE_NONE) {
+ force_reason = SWITCH_CAUSE_PROGRESS_TIMEOUT;
+ }
goto notready;
}
time_t elapsed = switch_epoch_time_now(NULL) - start;
if (cancel_cause && *cancel_cause > 0) {
- force_reason = *cancel_cause;
+ if (force_reason == SWITCH_CAUSE_NONE) {
+ force_reason = *cancel_cause;
+ }
oglobals.idx = IDX_CANCEL;
goto notready;
}
if (!oglobals.sent_ring && !oglobals.progress && (progress_timelimit_sec && elapsed > (time_t) progress_timelimit_sec)) {
oglobals.idx = IDX_TIMEOUT;
+ if (force_reason == SWITCH_CAUSE_NONE) {
+ force_reason = SWITCH_CAUSE_PROGRESS_TIMEOUT;
+ }
goto notready;
}
switch_channel_hangup(peer_channel, SWITCH_CAUSE_ATTENDED_TRANSFER);
switch_core_session_rwunlock(peer_session);
}
- force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER;
+ if (force_reason == SWITCH_CAUSE_NONE) {
+ force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER;
+ }
} else if (zstr(soft_holding)) {
if (peer_channel && switch_channel_ready(peer_channel)) {
switch_core_session_t *holding_session;
- force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER;
+ if (force_reason == SWITCH_CAUSE_NONE) {
+ force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER;
+ }
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");