(closes issue #10210, reported and patched by juggie)
authorRussell Bryant <russell@russellbryant.com>
Thu, 19 Jul 2007 15:59:19 +0000 (15:59 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 19 Jul 2007 15:59:19 +0000 (15:59 +0000)
This merges the trunk only part of the patches from this issue.  In 1.4, res_agi
will issue a warning if you try to use DeadAGI on a channel that is not hung up.
Now, in trunk, it just plain won't let you do it.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@75930 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_agi.c

index e5b62fe..13fe232 100644 (file)
@@ -2077,8 +2077,11 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
 
 static int agi_exec(struct ast_channel *chan, void *data)
 {
-       if (chan->_softhangup)
-               ast_log(LOG_WARNING, "If you want to run AGI on hungup channels you should use DeadAGI!\n");
+       if (ast_check_hangup(chan)) {
+               ast_log(LOG_ERROR, "If you want to run AGI on hungup channels you should use DeadAGI!\n");
+               return 0;
+       }
+       
        return agi_exec_full(chan, data, 0, 0);
 }
 
@@ -2086,8 +2089,10 @@ static int eagi_exec(struct ast_channel *chan, void *data)
 {
        int readformat, res;
 
-       if (chan->_softhangup)
-               ast_log(LOG_WARNING, "If you want to run AGI on hungup channels you should use DeadAGI!\n");
+       if (ast_check_hangup(chan)) {
+               ast_log(LOG_ERROR, "If you want to run AGI on hungup channels you should use DeadAGI!\n");
+               return 0;
+       }
        readformat = chan->readformat;
        if (ast_set_read_format(chan, AST_FORMAT_SLINEAR)) {
                ast_log(LOG_WARNING, "Unable to set channel '%s' to linear mode\n", chan->name);
@@ -2104,6 +2109,10 @@ static int eagi_exec(struct ast_channel *chan, void *data)
 
 static int deadagi_exec(struct ast_channel *chan, void *data)
 {
+       if (!ast_check_hangup(chan)) {
+               ast_log(LOG_ERROR,"Running DeadAGI on a live channel is not permitted, please use AGI\n");
+               return 0;
+       }
        return agi_exec_full(chan, data, 0, 1);
 }