diff options
Diffstat (limited to 'main/pbx.c')
-rw-r--r-- | main/pbx.c | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/main/pbx.c b/main/pbx.c index 273418366..45c87faed 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -388,16 +388,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") a longer match.</para> </description> </application> - <application name="KeepAlive" language="en_US"> - <synopsis> - Returns AST_PBX_KEEPALIVE value. - </synopsis> - <syntax /> - <description> - <para>This application is chiefly meant for internal use with Gosubs. Please do not run - it alone from the dialplan!</para> - </description> - </application> <application name="NoOp" language="en_US"> <synopsis> Do Nothing (No Operation). @@ -931,7 +921,6 @@ static int pbx_builtin_background(struct ast_channel *, void *); static int pbx_builtin_wait(struct ast_channel *, void *); static int pbx_builtin_waitexten(struct ast_channel *, void *); static int pbx_builtin_incomplete(struct ast_channel *, void *); -static int pbx_builtin_keepalive(struct ast_channel *, void *); static int pbx_builtin_resetcdr(struct ast_channel *, void *); static int pbx_builtin_setamaflags(struct ast_channel *, void *); static int pbx_builtin_ringing(struct ast_channel *, void *); @@ -1097,7 +1086,6 @@ static struct pbx_builtin { { "ImportVar", pbx_builtin_importvar }, { "Hangup", pbx_builtin_hangup }, { "Incomplete", pbx_builtin_incomplete }, - { "KeepAlive", pbx_builtin_keepalive }, { "NoOp", pbx_builtin_noop }, { "Proceeding", pbx_builtin_proceeding }, { "Progress", pbx_builtin_progress }, @@ -4139,7 +4127,8 @@ static int collect_digits(struct ast_channel *c, int waittime, char *buf, int bu return 0; } -static int __ast_pbx_run(struct ast_channel *c) +static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c, + struct ast_pbx_args *args) { int found = 0; /* set if we find at least one match */ int res = 0; @@ -4352,11 +4341,18 @@ static int __ast_pbx_run(struct ast_channel *c) } } } - if (!found && !error) + + if (!found && !error) { ast_log(LOG_WARNING, "Don't know what to do with '%s'\n", c->name); - if (res != AST_PBX_KEEPALIVE) + } + + if (!args || !args->no_hangup_chan) { ast_softhangup(c, c->hangupcause ? c->hangupcause : AST_CAUSE_NORMAL_CLEARING); - if ((res != AST_PBX_KEEPALIVE) && !ast_test_flag(c, AST_FLAG_BRIDGE_HANGUP_RUN) && ast_exists_extension(c, c->context, "h", 1, c->cid.cid_num)) { + } + + if ((!args || !args->no_hangup_chan) && + !ast_test_flag(c, AST_FLAG_BRIDGE_HANGUP_RUN) && + ast_exists_extension(c, c->context, "h", 1, c->cid.cid_num)) { set_ext_pri(c, "h", 1); while ((res = ast_spawn_extension(c, c->context, c->exten, c->priority, c->cid.cid_num, &found, 1)) == 0) { c->priority++; @@ -4371,8 +4367,11 @@ static int __ast_pbx_run(struct ast_channel *c) ast_clear_flag(c, AST_FLAG_BRIDGE_HANGUP_RUN); /* from one round to the next, make sure this gets cleared */ pbx_destroy(c->pbx); c->pbx = NULL; - if (res != AST_PBX_KEEPALIVE) + + if (!args || !args->no_hangup_chan) { ast_hangup(c); + } + return 0; } @@ -4462,7 +4461,7 @@ static void *pbx_thread(void *data) */ struct ast_channel *c = data; - __ast_pbx_run(c); + __ast_pbx_run(c, NULL); decrease_call_count(); pthread_exit(NULL); @@ -4492,19 +4491,26 @@ enum ast_pbx_result ast_pbx_start(struct ast_channel *c) return AST_PBX_SUCCESS; } -enum ast_pbx_result ast_pbx_run(struct ast_channel *c) +enum ast_pbx_result ast_pbx_run_args(struct ast_channel *c, struct ast_pbx_args *args) { enum ast_pbx_result res = AST_PBX_SUCCESS; - if (increase_call_count(c)) + if (increase_call_count(c)) { return AST_PBX_CALL_LIMIT; + } + + res = __ast_pbx_run(c, args); - res = __ast_pbx_run(c); decrease_call_count(); return res; } +enum ast_pbx_result ast_pbx_run(struct ast_channel *c) +{ + return ast_pbx_run_args(c, NULL); +} + int ast_active_calls(void) { return countcalls; @@ -8310,11 +8316,6 @@ static int pbx_builtin_answer(struct ast_channel *chan, void *data) return __ast_answer(chan, delay); } -static int pbx_builtin_keepalive(struct ast_channel *chan, void *data) -{ - return AST_PBX_KEEPALIVE; -} - static int pbx_builtin_incomplete(struct ast_channel *chan, void *data) { char *options = data; |