aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_agi.c
diff options
context:
space:
mode:
authoroej <oej@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-05 20:54:30 +0000
committeroej <oej@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-05 20:54:30 +0000
commit80e141d6ff27c22f20e9eb9639ff84d65c07a89e (patch)
treee153ed82937f1c994dd8145b3a43521624bf2c7b /res/res_agi.c
parentd5f935aea5f19c476fc69ab61cc14ec8c3ab5b70 (diff)
Implement flags for AGI in the channel structure so taht "show channels" and
AMI commands can display that a channel is under control of an AGI. Work inspired by work at customer site, but paid for by Edvina AB git-svn-id: http://svn.digium.com/svn/asterisk/trunk@128240 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_agi.c')
-rw-r--r--res/res_agi.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/res/res_agi.c b/res/res_agi.c
index b509ef67d..521e47fcf 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -204,7 +204,7 @@ static struct agi_cmd *get_agi_cmd(struct ast_channel *chan)
return cmd;
}
-/* channel is locked when calling this one either from the CLI or manager thread */
+/*! \brief channel is locked when calling this one either from the CLI or manager thread */
static int add_agi_cmd(struct ast_channel *chan, const char *cmd_buff, const char *cmd_id)
{
struct ast_datastore *store;
@@ -424,6 +424,8 @@ static enum agi_result launch_asyncagi(struct ast_channel *chan, char *argv[], i
returnstatus = AGI_RESULT_FAILURE;
goto quit;
}
+ ast_set_flag(chan, AST_FLAG_ASYNCAGI);
+
agi_buffer[res] = '\0';
/* encode it and send it thru the manager so whoever is going to take
care of AGI commands on this channel can decide which AGI commands
@@ -606,8 +608,10 @@ static enum agi_result launch_script(struct ast_channel *chan, char *script, cha
int pid, toast[2], fromast[2], audio[2], res;
struct stat st;
- if (!strncasecmp(script, "agi://", 6))
+ if (!strncasecmp(script, "agi://", 6)) {
+ ast_set_flag(chan, AST_FLAG_FASTAGI);
return launch_netscript(script, argv, fds, efd, opid);
+ }
if (!strncasecmp(script, "agi:async", sizeof("agi:async")-1))
return launch_asyncagi(chan, argv, efd);
@@ -711,6 +715,7 @@ static enum agi_result launch_script(struct ast_channel *chan, char *script, cha
close(audio[0]);
*opid = pid;
+ ast_set_flag(chan, AST_FLAG_AGI);
return AGI_RESULT_SUCCESS;
}
@@ -2919,6 +2924,9 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
close(efd);
}
ast_safe_fork_cleanup();
+ ast_clear_flag(chan, AST_FLAG_AGI);
+ ast_clear_flag(chan, AST_FLAG_FASTAGI);
+ ast_clear_flag(chan, AST_FLAG_ASYNCAGI);
switch (res) {
case AGI_RESULT_SUCCESS: