diff --git a/app.c b/app.c index 9b17001253ae8db274af1bfdc759500c4cc331ba..c3686f12f564e59f792be29eba1d765fe419c97d 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 9ca3c938382354e21fdded97da4c91fe2d8425ea..4c688b02312ca62bfefc016a9cc39ddd9e223e4d 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) {