Revision
15623
Author
mikej
Date
2009-11-23 11:54:08 -0600 (Mon, 23 Nov 2009)

Log Message

core: don't hangup call on asr errors (FSCORE-493)

Modified Paths

Diff

Modified: freeswitch/trunk/src/switch_ivr_async.c (15622 => 15623)


--- freeswitch/trunk/src/switch_ivr_async.c	2009-11-23 17:27:22 UTC (rev 15622)
+++ freeswitch/trunk/src/switch_ivr_async.c	2009-11-23 17:54:08 UTC (rev 15623)
@@ -881,7 +881,7 @@
 	struct record_helper *rh = NULL;
 	int file_flags = SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT;
 	
-    switch_core_session_get_read_impl(session, &read_impl);
+	switch_core_session_get_read_impl(session, &read_impl);
 
 	if ((status = switch_channel_pre_answer(channel)) != SWITCH_STATUS_SUCCESS) {
 		return SWITCH_STATUS_FALSE;
@@ -2396,15 +2396,14 @@
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
+	switch_status_t status;
 
 	if (sth) {
-		if (switch_core_asr_load_grammar(sth->ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
+		if ((status = switch_core_asr_load_grammar(sth->ah, grammar, name)) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error loading Grammar\n");
 			switch_core_asr_close(sth->ah, &flags);
-			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
-			return SWITCH_STATUS_FALSE;
 		}
-		return SWITCH_STATUS_SUCCESS;
+		return status;
 	}
 	return SWITCH_STATUS_FALSE;
 }
@@ -2414,15 +2413,14 @@
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
+	switch_status_t status;
 
 	if (sth) {
-		if (switch_core_asr_unload_grammar(sth->ah, name) != SWITCH_STATUS_SUCCESS) {
+		if ((status = switch_core_asr_unload_grammar(sth->ah, name)) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error unloading Grammar\n");
 			switch_core_asr_close(sth->ah, &flags);
-			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
-			return SWITCH_STATUS_FALSE;
 		}
-		return SWITCH_STATUS_SUCCESS;
+		return status;
 	}
 	return SWITCH_STATUS_FALSE;
 }
@@ -2459,21 +2457,19 @@
 		return SWITCH_STATUS_SUCCESS;
 	}
 
-	if (switch_core_asr_open(ah,
+	if ((status = switch_core_asr_open(ah,
 							 mod_name,
 							 "L16",
 							 read_impl.actual_samples_per_second, dest, &flags,
-							 switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
+							 switch_core_session_get_pool(session))) == SWITCH_STATUS_SUCCESS) {
 
 		if (switch_core_asr_load_grammar(ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error loading Grammar\n");
 			switch_core_asr_close(ah, &flags);
-			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 			return SWITCH_STATUS_FALSE;
 		}
 	} else {
-		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
-		return SWITCH_STATUS_FALSE;
+		return status;
 	}
 
 	sth = switch_core_session_alloc(session, sizeof(*sth));
@@ -2487,7 +2483,6 @@
 
 	if ((status = switch_core_media_bug_add(session, speech_callback, sth, 0, SMBF_READ_STREAM, &sth->bug)) != SWITCH_STATUS_SUCCESS) {
 		switch_core_asr_close(ah, &flags);
-		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 		return status;
 	}
 

Modified: freeswitch/trunk/src/switch_ivr_play_say.c (15622 => 15623)


--- freeswitch/trunk/src/switch_ivr_play_say.c	2009-11-23 17:27:22 UTC (rev 15622)
+++ freeswitch/trunk/src/switch_ivr_play_say.c	2009-11-23 17:54:08 UTC (rev 15623)
@@ -2104,14 +2104,14 @@
 
 	if (need_create) {
 		memset(sh, 0, sizeof(*sh));
-		if (switch_core_speech_open(sh, tts_name, voice_name, (uint32_t) rate, interval,
-									&flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+		if ((status = switch_core_speech_open(sh, tts_name, voice_name, (uint32_t) rate, interval,
+									&flags, switch_core_session_get_pool(session))) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid TTS module!\n");
 			switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE);
 			if (cache_obj) {
 				switch_channel_set_private(channel, SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME, NULL);
 			}
-			return SWITCH_STATUS_FALSE;
+			return status;
 		}
 	} else if (cache_obj && strcasecmp(cache_obj->voice_name, voice_name)) {
 		switch_copy_string(cache_obj->voice_name, voice_name, sizeof(cache_obj->voice_name));