aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-18 19:40:14 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-18 19:40:14 +0000
commit5a14fd208613cdb2160fb4ef17b42ef54e32553c (patch)
tree7973cb23363a7766c7cf2aac42886826f61fa910 /main
parent3c03ae0b1c8dbf64f75a169cb719faa2d53777e9 (diff)
Merged revisions 165723 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r165723 | russell | 2008-12-18 13:33:42 -0600 (Thu, 18 Dec 2008) | 14 lines Remove the need for AST_PBX_KEEPALIVE with the GoSub option from Dial. This is part of an effort to completely remove AST_PBX_KEEPALIVE and other similar return codes from the source. While this usage was perfectly safe, there are others that are problematic. Since we know ahead of time that we do not want to PBX to destroy the channel, the PBX API has been changed so that information can be provided as an argument, instead, thus removing the need for the KEEPALIVE return value. Further changes to get rid of KEEPALIVE and related code is being done by murf. There is a patch up for that on review 29. Review: http://reviewboard.digium.com/r/98/ ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@165726 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/pbx.c49
1 files changed, 27 insertions, 22 deletions
diff --git a/main/pbx.c b/main/pbx.c
index d41000ba4..62158dfe5 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -302,7 +302,6 @@ static int pbx_builtin_hangup(struct ast_channel *, void *);
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_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 *);
@@ -711,13 +710,6 @@ static struct pbx_builtin {
" Optionally, specify the class for music on hold within parenthesis.\n"
"See Also: Playback(application), Background(application).\n"
},
-
- { "KeepAlive", pbx_builtin_keepalive,
- "returns AST_PBX_KEEPALIVE value",
- " KeepAlive(): This application is chiefly meant for internal use with Gosubs.\n"
- "Please do not run it alone from the dialplan!\n"
- },
-
};
static struct ast_context *contexts;
@@ -3643,7 +3635,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;
@@ -3840,11 +3833,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++;
@@ -3859,8 +3859,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;
}
@@ -3950,7 +3953,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);
@@ -3980,19 +3983,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;
@@ -7565,11 +7575,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;
-}
-
AST_APP_OPTIONS(resetcdr_opts, {
AST_APP_OPTION('w', AST_CDR_FLAG_POSTED),
AST_APP_OPTION('a', AST_CDR_FLAG_LOCKED),