[Asterisk-code-review] app_read: Add an option to return terminator on empty digits. (asterisk[20])

Michael Bradeen asteriskteam at digium.com
Thu Feb 23 13:18:07 CST 2023


Michael Bradeen has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/19905 )


Change subject: app_read: Add an option to return terminator on empty digits.
......................................................................

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
---
M apps/app_read.c
A doc/CHANGES-staging/app_read_return_terminator.txt
2 files changed, 42 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/05/19905/1

diff --git a/apps/app_read.c b/apps/app_read.c
index f4a965c..e2ac60c 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.</para>
 					</option>
+					<option name="e">
+						<para>to read the terminator as the digit string if the
+						only digit read is the terminator. This is for cases
+						where the terminator is a valid digit, but only by itself.
+						ie; <literal>1234</literal> and <literal>#</literal> are
+						valid, but <literal>1234#</literal> is not.</para>
+					</option>
 				</optionlist>
 			</parameter>
 			<parameter name="attempts">
@@ -125,6 +132,7 @@
 	OPT_INDICATION = (1 << 1),
 	OPT_NOANSWER = (1 << 2),
 	OPT_TERMINATOR = (1 << 3),
+	OPT_KEEP_TERMINATOR = (1 << 4),
 };
 
 enum {
@@ -138,6 +146,7 @@
 	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 @@
 				}
 			} 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_TIMEOUT)
+				} 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) {
 					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 0000000..2987f77
--- /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.

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/19905
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 20
Gerrit-Change-Id: I49f3221824330a193a20c660f99da0f1fc2cbbc5
Gerrit-Change-Number: 19905
Gerrit-PatchSet: 1
Gerrit-Owner: Michael Bradeen <mbradeen at sangoma.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20230223/84cb40e0/attachment-0001.html>


More information about the asterisk-code-review mailing list