]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add n+101 jump if file does not exist (bug #2722)
authorMark Spencer <markster@digium.com>
Tue, 26 Oct 2004 02:25:50 +0000 (02:25 +0000)
committerMark Spencer <markster@digium.com>
Tue, 26 Oct 2004 02:25:50 +0000 (02:25 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4099 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_controlplayback.c
apps/app_playback.c

index b44eafba96babf1d5c98dd378e8b9b7e30a93acb..af2b79900758303d36d7ebe5f88834ce37a3f66a 100755 (executable)
@@ -35,7 +35,7 @@ static char *descrip =
 "  be included following a pipe symbol.  You can use * and # to rewind and\n"
 "  fast forward the playback specified. If 'stopchar' is added the file will\n"
 "  terminate playback when 'stopchar' is pressed. Returns -1 if the channel\n"
-"  was hung up, or if the file does not exist. Returns 0 otherwise.\n\n"
+"  was hung up. if the file does not exist jumps to n+101 if it present.\n\n"
 "  Example:  exten => 1234,1,ControlPlayback(file|4000|*|#|1|0)\n\n";
 
 STANDARD_LOCAL_USER;
@@ -54,6 +54,7 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
        struct localuser *u;
        char tmp[256];
        char *skip = NULL, *fwd = NULL, *rev = NULL, *stop = NULL, *pause = NULL, *file = NULL;
+       
 
        if (!data || ast_strlen_zero((char *)data)) {
                ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n");
@@ -110,7 +111,12 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
        /* If we stopped on one of our stop keys, return 0  */
        if(stop && strchr(stop, res)) 
                res = 0;
-       
+
+       if(res < 0) {
+               if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num))
+            chan->priority+=100;
+               res = 0;
+       }
        return res;
 }
 
index c6cb0ba248c075d5376c6ec7d626863e0d6cbfe7..d61ba0e6104f67b0c5a42b7374be87e3d149b337 100755 (executable)
@@ -36,8 +36,8 @@ static char *descrip =
 "specified, the application will return immediately should the channel not be\n"
 "off hook.  Otherwise, unless 'noanswer' is specified, the channel channel will\n"
 "be answered before the sound is played. Not all channels support playing\n"
-"messages while still hook. Returns -1 if the channel was hung up, or if the\n"
-"file does not exist. Returns 0 otherwise.\n";
+"messages while still hook. Returns -1 if the channel was hung up.  If the\n"
+"file does not exist, will jump to priority n+101 if present.\n";
 
 STANDARD_LOCAL_USER;
 
@@ -81,6 +81,8 @@ static int playback_exec(struct ast_channel *chan, void *data)
                        res = ast_waitstream(chan, "");
                else {
                        ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", chan->name, (char *)data);
+                       if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num))
+                               chan->priority+=100;
                        res = 0;
                }
                ast_stopstream(chan);