summaryrefslogtreecommitdiff
path: root/res/res_agi.c
diff options
context:
space:
mode:
authorErin Spiceland <erin@thespicelands.com>2010-11-22 18:43:31 +0000
committerErin Spiceland <erin@thespicelands.com>2010-11-22 18:43:31 +0000
commit7bd56615b28d2f6ef795d23ba08801ca713583b9 (patch)
tree41f517a41b984f99a9c8792684feadb12547e8a3 /res/res_agi.c
parentb1e7f85bce1578a549129d1c841a4f47647b339c (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: https://origsvn.digium.com/svn/asterisk/trunk@295789 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_agi.c')
-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;
}