Author: anthm Date: Fri Nov 14 09:20:10 2008 New Revision: 10398 Log: finish fixing MODAPP-166 Modified: freeswitch/trunk/src/switch_ivr_play_say.c Modified: freeswitch/trunk/src/switch_ivr_play_say.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_play_say.c (original) +++ freeswitch/trunk/src/switch_ivr_play_say.c Fri Nov 14 09:20:10 2008 @@ -1393,6 +1393,12 @@ 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 @@ 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 @@ 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 @@ 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_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 @@ max_tries--; } + memset(digit_buffer, 0, digit_buffer_length); return SWITCH_STATUS_FALSE; }