]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
finish fixing MODAPP-166
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 14 Nov 2008 14:20:10 +0000 (14:20 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 14 Nov 2008 14:20:10 +0000 (14:20 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10398 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_ivr_play_say.c

index bc91aa843125d17bbaef14a3e4fc4cf9c671cdaf..523f9d0782fc57dc37930f80ae0b00f9ff0b3856 100644 (file)
@@ -1393,6 +1393,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_read(switch_core_session_t *session,
 
        switch_assert(session);
 
+       if (max_digits < min_digits) {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
+                                                 "Max digits %u is less than Min %u, forcing Max to %u\n", max_digits, min_digits, min_digits);
+               max_digits = min_digits;
+       }
+
        channel = switch_core_session_get_channel(session);
        switch_channel_set_variable(channel, SWITCH_READ_RESULT_VARIABLE, NULL);
 
@@ -1408,7 +1414,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_read(switch_core_session_t *session,
        args.buflen = (uint32_t) digit_buffer_length;
 
        if (!switch_strlen_zero(prompt_audio_file) && strcasecmp(prompt_audio_file, "silence")) {
-               status = switch_ivr_play_file(session, NULL, prompt_audio_file, &args);
+               if ((status = switch_ivr_play_file(session, NULL, prompt_audio_file, &args)) == SWITCH_STATUS_BREAK) {
+                       status = SWITCH_STATUS_SUCCESS;
+               }
        }
 
        if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
@@ -1417,7 +1425,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_read(switch_core_session_t *session,
 
        len = strlen(digit_buffer);
 
-
        if ((min_digits && len < min_digits) || len < max_digits) {
                args.buf = digit_buffer + len;
                args.buflen = (uint32_t) (digit_buffer_length - len);
@@ -1429,16 +1436,20 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_read(switch_core_session_t *session,
                status = SWITCH_STATUS_TOO_SMALL;
        }
 
-       if (status == SWITCH_STATUS_SUCCESS) {
+       switch (status) {
+       case SWITCH_STATUS_SUCCESS:
                switch_channel_set_variable(channel, SWITCH_READ_RESULT_VARIABLE, "success");
-       } else if (status == SWITCH_STATUS_TIMEOUT) {
+               break;
+       case SWITCH_STATUS_TIMEOUT:
                switch_channel_set_variable(channel, SWITCH_READ_RESULT_VARIABLE, "timeout");
-       } else {
+               break;
+       default:
                switch_channel_set_variable(channel, SWITCH_READ_RESULT_VARIABLE, "failure");
+               break;
+               
        }
-
-
-  end:
+       
+ end:
 
        if (var_name && !switch_strlen_zero(digit_buffer)) {
                switch_channel_set_variable(channel, var_name, digit_buffer);
@@ -1469,13 +1480,12 @@ SWITCH_DECLARE(switch_status_t) switch_play_and_get_digits(switch_core_session_t
                switch_channel_flush_dtmf(channel);
                status = switch_ivr_read(session, min_digits, max_digits, prompt_audio_file, NULL, 
                                                                                                 digit_buffer, digit_buffer_length, timeout, valid_terminators);
-
                if (status == SWITCH_STATUS_TIMEOUT && strlen(digit_buffer) >= min_digits) {
                        status = SWITCH_STATUS_SUCCESS;
                }
 
                if (status == SWITCH_STATUS_SUCCESS) {
-                       if (!switch_strlen_zero((char *)digit_buffer)) {
+                       if (!switch_strlen_zero(digit_buffer)) {
                                if (switch_strlen_zero(digits_regex)) {
                                        return SWITCH_STATUS_SUCCESS;
                                }
@@ -1493,6 +1503,7 @@ SWITCH_DECLARE(switch_status_t) switch_play_and_get_digits(switch_core_session_t
                max_tries--;
        }
 
+       memset(digit_buffer, 0, digit_buffer_length);
        return SWITCH_STATUS_FALSE;
 }