[commit] r2671 - in freeswitch/trunk/src: . mod/applications/mod_bridgecall
Author: anthm Date: Tue Sep 12 19:20:40 2006 New Revision: 2671 Modified: freeswitch/trunk/src/mod/applications/mod_bridgecall/mod_bridgecall.c freeswitch/trunk/src/switch_ivr.c Log: cause code goodies Modified: freeswitch/trunk/src/mod/applications/mod_bridgecall/mod_bridgecall.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_bridgecall/mod_bridgecall.c (original) +++ freeswitch/trunk/src/mod/applications/mod_bridgecall/mod_bridgecall.c Tue Sep 12 19:20:40 2006 @@ -53,7 +53,8 @@ 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); Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Tue Sep 12 19:20:40 2006 @@ -1555,7 +1555,7 @@ 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 @@ 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; }
participants (1)
-
Freeswitch SVN