aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespiceland <espiceland@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-22 18:43:31 +0000
committerespiceland <espiceland@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-22 18:43:31 +0000
commit6558fbe18a2140713f22aafddc636758c7f4c441 (patch)
tree41f517a41b984f99a9c8792684feadb12547e8a3
parent20147eda82ef32bc0c9efce159862d93578170f4 (diff)
Revert to the previous behavior of AGI command WAIT FOR DIGIT, since the
behavior of the command with this patch is almost exactly like that of GET DATA. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@295789 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--res/res_agi.c89
1 files changed, 5 insertions, 84 deletions
diff --git a/res/res_agi.c b/res/res_agi.c
index 7fe43f9a5..f7bc8d9cf 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -688,21 +688,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
</synopsis>
<syntax>
<parameter name="timeout" required="true" />
- <parameter name="voicefile" required="false" />
- <parameter name="escape_chars" required="false" />
- <parameter name="maxdigits" required="false" />
- <parameter name="previously_die_on_chars" required="false" />
</syntax>
<description>
<para>Waits up to <replaceable>timeout</replaceable> milliseconds for channel to
receive a DTMF digit. Returns <literal>-1</literal> on channel failure, <literal>0</literal>
if no digit is received in the timeout, or the numerical value of the ascii of the digit if
one is received. Use <literal>-1</literal> for the <replaceable>timeout</replaceable> value if
- you desire the call to block indefinitely.
-
- If 'voicefile' is specified it is played as long 'previously die chars' (default '#') are
- not typed in or as long as any of 'escape chars' (default '1234567890*#ABCD') is pressed a
- 'maxdigit' (default 1) times .</para>
+ you desire the call to block indefinitely.</para>
</description>
</agi>
<agi name="speech create" language="en_US">
@@ -1686,85 +1678,14 @@ static int handle_asyncagi_break(struct ast_channel *chan, AGI *agi, int argc, c
static int handle_waitfordigit(struct ast_channel *chan, AGI *agi, int argc, const char * const argv[])
{
- int res;
- int to;
- char *valid_dtmf_digits = AST_DIGIT_ANY;
- char *previously_die_on = "#";
- char *digits = NULL;
- char *escape_digits = NULL;
- char *voicefile = NULL;
- int maxdigits = 1;
+ int res, to;
- if (argc < 4)
+ if (argc != 4)
return RESULT_SHOWUSAGE;
if (sscanf(argv[3], "%30d", &to) != 1)
return RESULT_SHOWUSAGE;
-
- /* Answer the chan */
- if (chan->_state != AST_STATE_UP)
- res = ast_answer(chan);
-
- /* soundfile specified */
- if (argc >= 5) {
-
- /* escape characters defined */
- if (argc >= 6)
- valid_dtmf_digits = (char *) argv[5];
-
- /* maxdigits */
- if (argc >= 7 && (sscanf(argv[6], "%d", &maxdigits) != 1))
- return RESULT_SHOWUSAGE;
-
- /* escape before escape chars on */
- if (argc >= 8)
- previously_die_on = (char *) argv[7];
-
- voicefile = (char *) argv[4];
- res = ast_streamfile(chan, voicefile, chan->language);
- if (res < 0)
- return RESULT_FAILURE;
-
- /* allocate space for the digits (2 chars per digit + \0 - <digit>|<digit>|...) */
- digits = (char *)ast_malloc(maxdigits * 2 + 1);
- ast_copy_string(digits, "", 1);
-
- /* catenate the escape digits together with previously die digits */
- escape_digits = (char *)ast_malloc(strlen(valid_dtmf_digits) + strlen(previously_die_on)+ 1);
- ast_copy_string(escape_digits, valid_dtmf_digits, sizeof(valid_dtmf_digits));
- strcat(escape_digits, previously_die_on);
-
- if (chan->stream) {
- int dtmf_count = 0;
- do {
- char buf[3];
- res = ast_waitstream_full(chan, escape_digits, agi->audio, agi->ctrl);
- if (res > 0) {
- if (strchr(previously_die_on, res) != NULL) {
- /* previously die character found - end loop */
- ast_log(LOG_DEBUG, "prev die digit %c pressed\n", res);
- break;
- } else {
- /* chars in valid_dtmf_digits found */
- ast_log(LOG_DEBUG, "dtmf turn=%d of %d | res=%d\n", dtmf_count, maxdigits, res);
- sprintf(buf, "%c", res);
- strcat(digits, buf);
- dtmf_count++;
- }
- }
- } while ( strchr(previously_die_on, res) == NULL && dtmf_count < maxdigits && chan->stream);
- ast_stopstream(chan);
- ast_agi_send(agi->fd, chan, "200 result=%s\n", digits);
- } else {
- res = ast_waitfordigit_full(chan, to, agi->audio, agi->ctrl);
- ast_agi_send(agi->fd, chan, "200 result=%c\n", res);
- }
- } else {
- res = ast_waitfordigit_full(chan, to, agi->audio, agi->ctrl);
- ast_agi_send(agi->fd, chan, "200 result=%c\n", res);
- }
-
- ast_free(escape_digits);
- ast_free(digits);
+ res = ast_waitfordigit_full(chan, to, agi->audio, agi->ctrl);
+ ast_agi_send(agi->fd, chan, "200 result=%d\n", res);
return (res >= 0) ? RESULT_SUCCESS : RESULT_FAILURE;
}