diff --git a/src/mod/applications/mod_bridgecall/mod_bridgecall.c b/src/mod/applications/mod_bridgecall/mod_bridgecall.c index f2ca02209e..2fec1c03f0 100644 --- a/src/mod/applications/mod_bridgecall/mod_bridgecall.c +++ b/src/mod/applications/mod_bridgecall/mod_bridgecall.c @@ -53,7 +53,8 @@ static void audio_bridge_function(switch_core_session_t *session, char *data) if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel!\n"); - switch_channel_hangup(caller_channel, SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL); + /* Hangup the channel with the cause code from the failed originate.*/ + switch_channel_hangup(caller_channel, cause); return; } else { switch_ivr_multi_threaded_bridge(session, peer_session, NULL, NULL, NULL); diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 9690237c46..8319f62040 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1555,7 +1555,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess switch_channel_t *caller_channel = NULL; switch_memory_pool_t *pool = NULL; char *data = NULL; - int i, argc; + int i, argc = 0; int32_t idx = -1; switch_codec_t write_codec = {0}; switch_frame_t write_frame = {0}; @@ -1850,17 +1850,33 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess done: - if (caller_channel) { - *cause = switch_channel_get_cause(caller_channel); + *cause = SWITCH_CAUSE_UNALLOCATED; + + if (status == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Originate Resulted in Success: [%s]\n", switch_channel_get_name(peer_channel)); } else { - *cause = SWITCH_CAUSE_CHANNEL_UNACCEPTABLE; + if (peer_channel) { + *cause = switch_channel_get_cause(peer_channel); + } else { + for (i = 0; i < argc; i++) { + if (!peer_channels[i]) { + continue; + } + + *cause = switch_channel_get_cause(peer_channels[i]); + break; + } + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Originate Resulted in Error Cause: %d [%s]\n", *cause, switch_channel_cause2str(*cause)); } + if (odata) { free(odata); } if (!pass && write_codec.implementation) { switch_core_codec_destroy(&write_codec); } + return status; }