X-Git-Url: http://git.asterisk.org/gitweb/?p=asterisk%2Fasterisk.git;a=blobdiff_plain;f=res%2Fres_agi.c;h=521e47fcfcdabbde0fca59ff0b3038a9d5e41618;hp=b509ef67d716bc0ce343a8d6d4cbb215d37980d3;hb=45e79490babaa8775aad1de72bad503aa2eb23f1;hpb=0fd94cb93d333629f7636f3d63f7d8cd8b899559;ds=inline diff --git a/res/res_agi.c b/res/res_agi.c index b509ef6..521e47f 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: