]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
phrase update
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 9 Feb 2007 21:48:24 +0000 (21:48 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 9 Feb 2007 21:48:24 +0000 (21:48 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4185 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/say/mod_say_en/mod_say_en.c
src/switch_ivr.c

index 3894e4da9120298770bc3ceec24d866d0bb38b84..0d0223163801790ad61e17a906606d3b6a4d93d3 100644 (file)
@@ -46,8 +46,11 @@ static const char modname[] = "mod_say_en";
 
 #define say_file(...) {\
                char tmp[80];\
+               switch_status_t status;\
                snprintf(tmp, sizeof(tmp), __VA_ARGS__);\
-               switch_ivr_play_file(session, NULL, tmp, args); \
+               if ((status = switch_ivr_play_file(session, NULL, tmp, args)) != SWITCH_STATUS_SUCCESS){ \
+                       return status;\
+               }\
                if (!switch_channel_ready(switch_core_session_get_channel(session))) {\
                        return SWITCH_STATUS_FALSE;\
                }}\
@@ -540,10 +543,10 @@ static switch_status_t en_say(switch_core_session_t *session,
        }
        
        if (say_cb) {
-               say_cb(session, tosay, type, method, args);
+               return say_cb(session, tosay, type, method, args);
        } 
 
-       return SWITCH_STATUS_SUCCESS;
+       return SWITCH_STATUS_FALSE;
 }
 
 static const switch_say_interface_t en_say_interface= {
index e90000b5d7f3ade4b69343b1684611d51eb0c885..01ba6089402cc899494fd07ad110d881cee44784 100644 (file)
@@ -4697,7 +4697,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
             }
 
             if (match) {
-                for (action = switch_xml_child(match, "action"); action; action = action->next) {
+                               status = SWITCH_STATUS_SUCCESS;
+                for (action = switch_xml_child(match, "action"); action && status == SWITCH_STATUS_SUCCESS; action = action->next) {
                     char *adata = (char *) switch_xml_attr_soft(action, "data");
                     char *func = (char *) switch_xml_attr_soft(action, "function");
 
@@ -4739,7 +4740,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
                             char *say_type = (char *) switch_xml_attr_soft(action, "type");
                             char *say_method = (char *) switch_xml_attr_soft(action, "method");
                             
-                            si->say_function(session, odata, get_say_type_by_name(say_type), get_say_method_by_name(say_method), args);
+                            status = si->say_function(session, odata, get_say_type_by_name(say_type), get_say_method_by_name(say_method), args);
                         } else {
                             switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid SAY Interface [%s]!\n", lang);
                         }
@@ -4747,12 +4748,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
                         switch_codec_t *read_codec;
                         if ((read_codec = switch_core_session_get_read_codec(session))) {
                             
-                            switch_ivr_speak_text(session,
-                                                  tts_engine,
-                                                  tts_voice,
-                                                  read_codec->implementation->samples_per_second,
-                                                  odata,
-                                                  args);
+                            status = switch_ivr_speak_text(session,
+                                                                                                                  tts_engine,
+                                                                                                                  tts_voice,
+                                                                                                                  read_codec->implementation->samples_per_second,
+                                                                                                                  odata,
+                                                                                                                  args);
                         }
                     }
                 }
@@ -4763,6 +4764,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
             switch_safe_free(substituted);
         }
 
+               if (status != SWITCH_STATUS_SUCCESS) {
+                       break;
+               }
+
         input = input->next;
     }