diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-05 20:54:30 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-05 20:54:30 +0000 |
commit | 80e141d6ff27c22f20e9eb9639ff84d65c07a89e (patch) | |
tree | e153ed82937f1c994dd8145b3a43521624bf2c7b /res/res_agi.c | |
parent | d5f935aea5f19c476fc69ab61cc14ec8c3ab5b70 (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.c | 12 |
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: |