summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2018-04-09 10:32:38 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2018-04-09 10:32:38 -0500
commitdf3db2f1460f17d9eed77ae299f886a09e8948d3 (patch)
treeff0f6a2ba75f3e56bb24e69d7d16581110d7b2e9
parent070428415a5bba68b0ff2a6eb505f29b10aeab2d (diff)
parent75715b95b442d861251e51b2c46cbda0f320617d (diff)
Merge "app_originate: Add async option."
-rw-r--r--CHANGES7
-rw-r--r--apps/app_originate.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 09a7659d4..ac50a6dc9 100644
--- 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
diff --git a/apps/app_originate.c b/apps/app_originate.c
index 30fa565be..107be846d 100644
--- a/apps/app_originate.c
+++ b/apps/app_originate.c
@@ -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);
}