summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2004-10-26 02:25:50 +0000
committerMark Spencer <markster@digium.com>2004-10-26 02:25:50 +0000
commitdb58aec4f3a28265b40cfade91a4280eba2d3d24 (patch)
tree808cf0a91d4df76c582df81b947c6bd5e6db19eb
parentb8a02257a5cbdd894209bc3442d4bc19b1fd87ec (diff)
Add n+101 jump if file does not exist (bug #2722)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4099 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-xapps/app_controlplayback.c10
-rwxr-xr-xapps/app_playback.c6
2 files changed, 12 insertions, 4 deletions
diff --git a/apps/app_controlplayback.c b/apps/app_controlplayback.c
index b44eafba9..af2b79900 100755
--- a/apps/app_controlplayback.c
+++ b/apps/app_controlplayback.c
@@ -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;
}
diff --git a/apps/app_playback.c b/apps/app_playback.c
index c6cb0ba24..d61ba0e61 100755
--- a/apps/app_playback.c
+++ b/apps/app_playback.c
@@ -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);