app_readexten: new option 'p' to stop reading on '#' key
authorAlexei Gradinari <alex2grad@gmail.com>
Fri, 17 May 2019 22:45:25 +0000 (18:45 -0400)
committerAlexei Gradinari <alex2grad@gmail.com>
Thu, 23 May 2019 14:37:08 +0000 (08:37 -0600)
This patch adds the 'p' option.
The extension entered will be considered complete when a # is entered.

Change-Id: If77c40c9c8b525885730821e768f5dea71cf04c1

apps/app_readexten.c
doc/CHANGES-staging/app_readexten_pound.txt [new file with mode: 0644]

index c8c9f48..e32c53c 100644 (file)
                                        <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 (file)
index 0000000..551f751
--- /dev/null
@@ -0,0 +1,3 @@
+Subject: ReadExten
+
+Add 'p' option to stop reading extension if user presses '#' key.