Merged revisions 50298 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Wed, 10 Jan 2007 04:56:48 +0000 (04:56 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 10 Jan 2007 04:56:48 +0000 (04:56 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r50298 | file | 2007-01-09 23:55:13 -0500 (Tue, 09 Jan 2007) | 10 lines

Merged revisions 50295 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r50295 | file | 2007-01-09 23:51:06 -0500 (Tue, 09 Jan 2007) | 2 lines

Add another return value to dial_exec_full that indicates execution is going to continuing at a new extension/context/priority and to just let it slide. (issue #8598 reported by jon)

........

................

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

apps/app_dial.c

index 5bb99b3..7f731bc 100644 (file)
@@ -1517,7 +1517,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
                        peer->priority++;
                        ast_pbx_start(peer);
                        hanguptree(outgoing, NULL);
-                       res = 0;
+                       res = 1;
                        goto done;
                }
 
@@ -1692,8 +1692,12 @@ done:
 static int dial_exec(struct ast_channel *chan, void *data)
 {
        struct ast_flags peerflags;
+       int res = 0;
+
        memset(&peerflags, 0, sizeof(peerflags));
-       return dial_exec_full(chan, data, &peerflags);
+       res = dial_exec_full(chan, data, &peerflags);
+
+       return (res >= 0 ? 0 : -1);
 }
 
 static int retrydial_exec(struct ast_channel *chan, void *data)
@@ -1753,7 +1757,10 @@ static int retrydial_exec(struct ast_channel *chan, void *data)
                if (ast_test_flag(chan, AST_FLAG_MOH))
                        ast_moh_stop(chan);
 
-               if ((res = dial_exec_full(chan, dialdata, &peerflags)) == 0) {
+               res = dial_exec_full(chan, dialdata, &peerflags);
+               if (res == 1) {
+                       break;
+               } else if (res == 0) {
                        if (ast_test_flag(&peerflags, OPT_DTMF_EXIT)) {
                                if (!(res = ast_streamfile(chan, announce, chan->language)))
                                        res = ast_waitstream(chan, AST_DIGIT_ANY);
@@ -1786,10 +1793,13 @@ static int retrydial_exec(struct ast_channel *chan, void *data)
        }
        if (loops == 0)
                res = 0;
-       
+       else if (res == 1)
+               res = 0;
+
        if (ast_test_flag(chan, AST_FLAG_MOH))
                ast_moh_stop(chan);
-done:
+
+ done:
        ast_module_user_remove(u);
        return res;
 }