[Freeswitch-svn] [commit] r2671 - in freeswitch/trunk/src: . mod/applications/mod_bridgecall
Freeswitch SVN
anthm at freeswitch.org
Tue Sep 12 19:20:40 EDT 2006
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;
}
More information about the Freeswitch-svn
mailing list