[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