From 06a0b2c0d559568a70721b38ea92849ab483189b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 12 Sep 2006 23:20:40 +0000 Subject: [PATCH] cause code goodies git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2671 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../mod_bridgecall/mod_bridgecall.c | 3 ++- src/switch_ivr.c | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) 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; }