From: Jason Parker Date: Thu, 7 Jun 2007 20:06:00 +0000 (+0000) Subject: Merged revisions 68204 via svnmerge from X-Git-Tag: 1.4.5~41 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1d704b2857612640cd331e4e6e91484723160f32;p=thirdparty%2Fasterisk.git Merged revisions 68204 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r68204 | qwell | 2007-06-07 15:02:50 -0500 (Thu, 07 Jun 2007) | 4 lines Don't try to save voicemail greetings unless the user presses '1' to accept/save. Issue 9904, patch by me. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@68211 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 23c3bd253f..06d559ed1c 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -8042,6 +8042,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re int recorded = 0; int message_exists = 0; signed char zero_gain = 0; + char tempfile[PATH_MAX]; char *acceptdtmf = "#"; char *canceldtmf = ""; @@ -8053,6 +8054,11 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re return -1; } + if (!outsidecaller) + snprintf(tempfile, sizeof(tempfile), "%s.tmp", recordfile); + else + ast_copy_string(tempfile, recordfile, sizeof(tempfile)); + cmd = '3'; /* Want to start by recording */ while ((cmd >= 0) && (cmd != 't')) { @@ -8066,9 +8072,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re /* Otherwise 1 is to save the existing message */ if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Saving message as is\n"); - ast_stream_and_wait(chan, "vm-msgsaved", chan->language, ""); if (!outsidecaller) - { + ast_filerename(tempfile, recordfile, NULL); + ast_stream_and_wait(chan, "vm-msgsaved", chan->language, ""); + if (!outsidecaller) { STORE(recordfile, vmu->mailbox, vmu->context, -1, chan, vmu, fmt, *duration, vms); DISPOSE(recordfile, -1); } @@ -8079,7 +8086,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re /* Review */ if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Reviewing the message\n"); - cmd = ast_stream_and_wait(chan, recordfile, chan->language, AST_DIGIT_ANY); + cmd = ast_stream_and_wait(chan, tempfile, chan->language, AST_DIGIT_ANY); break; case '3': message_exists = 0; @@ -8101,11 +8108,15 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0); if (ast_test_flag(vmu, VM_OPERATOR)) canceldtmf = "0"; - cmd = ast_play_and_record_full(chan, playfile, recordfile, maxtime, fmt, duration, silencethreshold, maxsilence, unlockdir, acceptdtmf, canceldtmf); + cmd = ast_play_and_record_full(chan, playfile, tempfile, maxtime, fmt, duration, silencethreshold, maxsilence, unlockdir, acceptdtmf, canceldtmf); if (record_gain) ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0); if (cmd == -1) { - /* User has hung up, no options to give */ + /* User has hung up, no options to give */ + if (!outsidecaller) { + /* user was recording a greeting and they hung up, so let's delete the recording. */ + vm_delete(tempfile); + } return cmd; } if (cmd == '0') { @@ -8119,14 +8130,14 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Message too short\n"); cmd = ast_play_and_wait(chan, "vm-tooshort"); - cmd = vm_delete(recordfile); + cmd = vm_delete(tempfile); break; } else if (vmu->review && (cmd == 2 && *duration < (maxsilence + 3))) { /* Message is all silence */ if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Nothing recorded\n"); - cmd = vm_delete(recordfile); + cmd = vm_delete(tempfile); cmd = ast_play_and_wait(chan, "vm-nothingrecorded"); if (!cmd) cmd = ast_play_and_wait(chan, "vm-speakup"); @@ -8155,7 +8166,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re case '*': /* Cancel recording, delete message, offer to take another message*/ cmd = ast_play_and_wait(chan, "vm-deleted"); - cmd = vm_delete(recordfile); + cmd = vm_delete(tempfile); if (outsidecaller) { res = vm_exec(chan, NULL); return res;