From: Mike Bradeen Date: Mon, 30 Jan 2023 23:14:30 +0000 (-0700) Subject: app_read: Add an option to return terminator on empty digits. X-Git-Tag: 18.17.0-rc1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc5b7ab4595c9e6625bade5c70d286a9d11e0d31;p=thirdparty%2Fasterisk.git app_read: Add an option to return terminator on empty digits. Adds 'e' option to allow Read() to return the terminator as the dialed digits in the case where only the terminator is entered. ie; if "#" is entered, return "#" if the 'e' option is set and "" if it is not. ASTERISK-30411 Change-Id: I49f3221824330a193a20c660f99da0f1fc2cbbc5 --- diff --git a/apps/app_read.c b/apps/app_read.c index f4a965c8b4..e2ac60cc96 100644 --- a/apps/app_read.c +++ b/apps/app_read.c @@ -85,6 +85,13 @@ and you will need to rely on duration and max digits for ending input. + @@ -125,6 +132,7 @@ enum read_option_flags { OPT_INDICATION = (1 << 1), OPT_NOANSWER = (1 << 2), OPT_TERMINATOR = (1 << 3), + OPT_KEEP_TERMINATOR = (1 << 4), }; enum { @@ -138,6 +146,7 @@ AST_APP_OPTIONS(read_app_options, { AST_APP_OPTION('i', OPT_INDICATION), AST_APP_OPTION('n', OPT_NOANSWER), AST_APP_OPTION_ARG('t', OPT_TERMINATOR, OPT_ARG_TERMINATOR), + AST_APP_OPTION('e', OPT_KEEP_TERMINATOR), }); static char *app = "Read"; @@ -261,12 +270,20 @@ static int read_exec(struct ast_channel *chan, const char *data) } } else { res = ast_app_getdata_terminator(chan, arglist.filename, tmp, maxdigits, to, terminator); - if (res == AST_GETDATA_COMPLETE || res == AST_GETDATA_EMPTY_END_TERMINATED) + if (res == AST_GETDATA_COMPLETE) { + status = "OK"; + } else if (res == AST_GETDATA_EMPTY_END_TERMINATED) { + if (ast_test_flag(&flags, OPT_KEEP_TERMINATOR)) { + /* if the option is set to do so, read the + returned string as the terminator string */ + ast_copy_string(tmp, terminator, sizeof(tmp)); + } status = "OK"; - else if (res == AST_GETDATA_TIMEOUT) + } else if (res == AST_GETDATA_TIMEOUT) { status = "TIMEOUT"; - else if (res == AST_GETDATA_INTERRUPTED) + } else if (res == AST_GETDATA_INTERRUPTED) { status = "INTERRUPTED"; + } } if (res > -1) { pbx_builtin_setvar_helper(chan, arglist.variable, tmp); diff --git a/doc/CHANGES-staging/app_read_return_terminator.txt b/doc/CHANGES-staging/app_read_return_terminator.txt new file mode 100644 index 0000000000..2987f77ea7 --- /dev/null +++ b/doc/CHANGES-staging/app_read_return_terminator.txt @@ -0,0 +1,5 @@ +Subject: app_read + +A new option 'e' has been added to allow Read() to return the +terminator as the dialed digits in the case where only the terminator +is entered.