From: Mark Spencer Date: Tue, 1 Jun 2004 18:50:18 +0000 (+0000) Subject: allow multiple exit characters on control_streamfile, allow '1' to skip envelope X-Git-Tag: 1.0.0-rc1~332 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8164972e34216ad266a9ecc55c97f178d9bc2c10;p=thirdparty%2Fasterisk.git allow multiple exit characters on control_streamfile, allow '1' to skip envelope git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3123 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/app.c b/app.c index 9b17001253..c3686f12f5 100755 --- a/app.c +++ b/app.c @@ -411,20 +411,23 @@ int ast_control_streamfile(struct ast_channel *chan, char *file, char *fwd, char { struct timeval started, ended; long elapsed = 0,last_elapsed =0; - char breaks[5]; - int x=0,res=0; + char *breaks; + int blen=2; + int res=0; + + if (stop) + blen += strlen(stop); + if (pause) + blen += strlen(pause); + + breaks = alloca(blen + 1); + breaks[0] = '\0'; + strcat(breaks, stop); + strcat(breaks, pause); if (chan->_state != AST_STATE_UP) res = ast_answer(chan); - if (stop != NULL && stop[0]) { - breaks[x++] = stop[0]; - } - if (pause != NULL && pause[0]) { - breaks[x++] = pause[0]; - } - breaks[x] = '\0'; - if (chan) ast_stopstream(chan); @@ -449,14 +452,14 @@ int ast_control_streamfile(struct ast_channel *chan, char *file, char *fwd, char if (res < 1) break; - if (pause != NULL && res == *pause) { + if (pause != NULL && strchr(pause, res)) { gettimeofday(&ended, NULL); elapsed = (((ended.tv_sec * 1000) + ended.tv_usec / 1000) - ((started.tv_sec * 1000) + started.tv_usec / 1000) + last_elapsed); for(;;) { if (chan) ast_stopstream(chan); res = ast_waitfordigit(chan, 1000); - if (res == -1 || res == *pause || (stop && res == *stop)) + if (res == -1 || strchr(pause, res) || (stop && strchr(stop, res))) break; } if (res == *pause) { diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 9ca3c93838..4c688b0231 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -2737,10 +2737,11 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc if ((!res)&&(vmu->envelope)) res = play_message_datetime(chan, vmu, origtime, filename); - if ((!res)&&(vmu->saycid)) res = play_message_callerid(chan, vms, cid, context, 0); - + /* Allow pressing '1' to skip envelope / callerid */ + if (res == '1') + res = 0; ast_destroy(msg_cfg); if (!res) {