[Freeswitch-svn] [commit] r9095 - freeswitch/trunk/src

Freeswitch SVN anthm at freeswitch.org
Fri Jul 18 15:29:29 EDT 2008


Author: anthm
Date: Fri Jul 18 15:29:29 2008
New Revision: 9095

Modified:
   freeswitch/trunk/src/switch_ivr_originate.c

Log:
don't parse ringback varable in proxy situations

Modified: freeswitch/trunk/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_originate.c	(original)
+++ freeswitch/trunk/src/switch_ivr_originate.c	Fri Jul 18 15:29:29 2008
@@ -256,7 +256,7 @@
 
 SWITCH_DECLARE(switch_status_t) switch_ivr_wait_for_answer(switch_core_session_t *session, switch_core_session_t *peer_session)
 {
-	switch_channel_t *caller_channel = switch_core_session_get_channel(session);
+	switch_channel_t *caller_channel = NULL;
 	switch_channel_t *peer_channel = switch_core_session_get_channel(peer_session);
 	const char *ringback_data = NULL;
 	switch_frame_t write_frame = { 0 };
@@ -271,6 +271,10 @@
 	const char *var = switch_channel_get_variable(caller_channel, "call_timeout");
 	switch_time_t start = 0;
 
+	if (session) {
+		caller_channel = switch_core_session_get_channel(session);
+	}
+
 	if ((switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
 		return SWITCH_STATUS_SUCCESS;
 	}
@@ -288,17 +292,23 @@
 	timelimit *= 1000000;
 	start = switch_timestamp_now();
 
-	if (switch_channel_test_flag(caller_channel, CF_ANSWERED)) {
-		ringback_data = switch_channel_get_variable(caller_channel, "transfer_ringback");
-	}
+	if (caller_channel) {
+		if (switch_channel_test_flag(caller_channel, CF_ANSWERED)) {
+			ringback_data = switch_channel_get_variable(caller_channel, "transfer_ringback");
+		}
+		
+		if (!ringback_data) {
+			ringback_data = switch_channel_get_variable(caller_channel, "ringback");
+		}
+
 
-	if (!ringback_data) {
-		ringback_data = switch_channel_get_variable(caller_channel, "ringback");
+		if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) {
+			ringback_data = NULL;
+		}
 	}
 
 
-	if (read_codec && (ringback_data ||
-					   (!(switch_channel_test_flag(caller_channel, CF_PROXY_MODE) && switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA))))) {
+	if (read_codec && ringback_data) {
 		if (!(pass = (uint8_t) switch_test_flag(read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH))) {
 			if (switch_core_codec_init(&write_codec,
 									   "L16",
@@ -366,7 +376,9 @@
 				}
 			} else {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec Error!\n");
-				switch_channel_hangup(caller_channel, SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE);
+				if (caller_channel) {
+					switch_channel_hangup(caller_channel, SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE);
+				}
 				read_codec = NULL;
 			}
 		}
@@ -1031,6 +1043,12 @@
 
 		  endfor1:
 
+			if (caller_channel) {
+				if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) {
+					ringback_data = NULL;
+				}
+			}
+
 			if (ringback_data && !switch_channel_test_flag(caller_channel, CF_ANSWERED)
 				&& !switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA)) {
 				if ((status = switch_channel_pre_answer(caller_channel)) != SWITCH_STATUS_SUCCESS) {
@@ -1039,10 +1057,7 @@
 				}
 			}
 
-			if (session && (read_codec = switch_core_session_get_read_codec(session)) &&
-				(ringback_data ||
-				 (!(switch_channel_test_flag(caller_channel, CF_PROXY_MODE) && switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA))))) {
-
+			if (session && (read_codec = switch_core_session_get_read_codec(session)) && ringback_data) {
 				if (!(pass = (uint8_t) switch_test_flag(read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH))) {
 					if (switch_core_codec_init(&write_codec,
 											   "L16",



More information about the Freeswitch-svn mailing list