From 408210bd4cf6cdd9813afb2ca98ae14c36b3c66a Mon Sep 17 00:00:00 2001
From: Alexei Gradinari <alex2grad@gmail.com>
Date: Fri, 17 May 2019 18:45:25 -0400
Subject: [PATCH] app_readexten: new option 'p' to stop reading on '#' key

This patch adds the 'p' option.
The extension entered will be considered complete when a # is entered.

Change-Id: If77c40c9c8b525885730821e768f5dea71cf04c1
---
 apps/app_readexten.c                        | 11 +++++++++++
 doc/CHANGES-staging/app_readexten_pound.txt |  3 +++
 2 files changed, 14 insertions(+)
 create mode 100644 doc/CHANGES-staging/app_readexten_pound.txt

diff --git a/apps/app_readexten.c b/apps/app_readexten.c
index c8c9f4863e..e32c53cccb 100644
--- a/apps/app_readexten.c
+++ b/apps/app_readexten.c
@@ -63,6 +63,10 @@
 					<option name="n">
 						<para>Read digits even if the channel is not answered.</para>
 					</option>
+					<option name="p">
+						<para>The extension entered will be considered complete when a <literal>#</literal>
+						is entered.</para>
+					</option>
 				</optionlist>
 			</parameter>
 			<parameter name="timeout">
@@ -100,12 +104,14 @@ enum readexten_option_flags {
 	OPT_SKIP = (1 << 0),
 	OPT_INDICATION = (1 << 1),
 	OPT_NOANSWER = (1 << 2),
+	OPT_POUND_TO_END = (1 << 3),
 };
 
 AST_APP_OPTIONS(readexten_app_options, {
 	AST_APP_OPTION('s', OPT_SKIP),
 	AST_APP_OPTION('i', OPT_INDICATION),
 	AST_APP_OPTION('n', OPT_NOANSWER),
+	AST_APP_OPTION('p', OPT_POUND_TO_END),
 });
 
 static char *app = "ReadExten";
@@ -226,6 +232,11 @@ static int readexten_exec(struct ast_channel *chan, const char *data)
 				break;
 			}
 
+			if (ast_test_flag(&flags, OPT_POUND_TO_END) && res == '#') {
+				exten[x] = 0;
+				break;
+			}
+
 			exten[x] = res;
 			if (!ast_matchmore_extension(chan, arglist.context, exten, 1 /* priority */,
 				S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
diff --git a/doc/CHANGES-staging/app_readexten_pound.txt b/doc/CHANGES-staging/app_readexten_pound.txt
new file mode 100644
index 0000000000..551f751d10
--- /dev/null
+++ b/doc/CHANGES-staging/app_readexten_pound.txt
@@ -0,0 +1,3 @@
+Subject: ReadExten
+
+Add 'p' option to stop reading extension if user presses '#' key.
-- 
GitLab