]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_originate: Add async option.
authorRussell Bryant <russell@russellbryant.net>
Wed, 21 Mar 2018 19:54:48 +0000 (15:54 -0400)
committerJoshua Colp <jcolp@digium.com>
Thu, 22 Mar 2018 13:22:23 +0000 (13:22 +0000)
Add an option to make app_originate not wait for the created channel
to answer.

Change-Id: I7fc2facd77079abc6321f44e8bcd4e39298de2ae
Requested-by: Frederic Steinfels <fst@highdefinition.ch>
Signed-off-by: Russell Bryant <russell@russellbryant.net>
CHANGES
apps/app_originate.c

diff --git a/CHANGES b/CHANGES
index 09a7659d46983a681c375a0d946378fb41892cac..ac50a6dc9fb8199e5df13503a94960272545e112 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,13 @@ app_fax
  * The app_fax module is now deprecated, users should migrate to the
    replacement module res_fax.
 
+app_originate
+------------------
+ * An 'a' option has been added to the Originate dialplan application which
+   will execute the originate in an asynchronous fashion. If set then the
+   application will return immediately without waiting for the originated
+   channel to answer.
+
 Build System
 ------------------
  * MALLOC_DEBUG no longer has an effect on Asterisk's ABI.  Asterisk built
index 30fa565bea8e664628da2f93f652a34595f8fbc5..107be846dab5f3492b18422c671b7d410560d812 100644 (file)
@@ -74,6 +74,10 @@ static const char app_originate[] = "Originate";
                        </parameter>
                        <parameter name="options" required="false">
                                <optionlist>
+                               <option name="a">
+                                       <para>Originate asynchronously.  In other words, continue in the dialplan
+                                       without waiting for the originated channel to answer.</para>
+                               </option>
                                <option name="b" argsep="^">
                                        <para>Before originating the outgoing call, Gosub to the specified
                                        location using the newly created channel.</para>
@@ -123,6 +127,7 @@ static const char app_originate[] = "Originate";
 enum {
        OPT_PREDIAL_CALLEE =    (1 << 0),
        OPT_PREDIAL_CALLER =    (1 << 1),
+       OPT_ASYNC =             (1 << 2),
 };
 
 enum {
@@ -133,6 +138,7 @@ enum {
 };
 
 AST_APP_OPTIONS(originate_exec_options, BEGIN_OPTIONS
+       AST_APP_OPTION('a', OPT_ASYNC),
        AST_APP_OPTION_ARG('b', OPT_PREDIAL_CALLEE, OPT_ARG_PREDIAL_CALLEE),
        AST_APP_OPTION_ARG('B', OPT_PREDIAL_CALLER, OPT_ARG_PREDIAL_CALLER),
 END_OPTIONS );
@@ -250,7 +256,8 @@ static int originate_exec(struct ast_channel *chan, const char *data)
 
                res = ast_pbx_outgoing_exten_predial(chantech, cap_slin, chandata,
                                timeout * 1000, args.arg1, exten, priority, &outgoing_status,
-                               AST_OUTGOING_WAIT, NULL, NULL, NULL, NULL, NULL, 0, NULL,
+                               ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,
+                               NULL, NULL, NULL, NULL, NULL, 0, NULL,
                                predial_callee);
        } else {
                ast_debug(1, "Originating call to '%s/%s' and connecting them to %s(%s)\n",
@@ -258,7 +265,8 @@ static int originate_exec(struct ast_channel *chan, const char *data)
 
                res = ast_pbx_outgoing_app_predial(chantech, cap_slin, chandata,
                                timeout * 1000, args.arg1, args.arg2, &outgoing_status,
-                               AST_OUTGOING_WAIT, NULL, NULL, NULL, NULL, NULL, NULL,
+                               ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,
+                               NULL, NULL, NULL, NULL, NULL, NULL,
                                predial_callee);
        }