]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 292223 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Mon, 18 Oct 2010 21:54:38 +0000 (21:54 +0000)
committerJeff Peeler <jpeeler@digium.com>
Mon, 18 Oct 2010 21:54:38 +0000 (21:54 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r292223 | jpeeler | 2010-10-18 16:50:30 -0500 (Mon, 18 Oct 2010) | 11 lines

  Fix improper operator key acceptance and clean up temp recording files.

  This is a fix for when pressing the operator key after recording an unavailable,
  busy, name, or temporary message in mailbox options. The operator key should not
  be accepted here, but should be allowed during the message recording. If the
  operator key is pressed during ensure the file is saved or deleted as
  apporopriate.  Also, ensure removal of temporary recorded files after an early
  hang up or when message acceptance confirmation times out.

  ABE-2518
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@292226 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index 6e9b2df07c98e3cde041f8dc7b6b8f27aeb93a79..097ccfcc1520eef63b758b8715de5d0c60a30b67 100644 (file)
@@ -11692,6 +11692,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
        char tempfile[PATH_MAX];
        char *acceptdtmf = "#";
        char *canceldtmf = "";
+       int canceleddtmf = 0;
 
        /* Note that urgent and private are for flagging messages as such in the future */
 
@@ -11753,6 +11754,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                        if (ast_test_flag(vmu, VM_OPERATOR))
                                canceldtmf = "0";
                        cmd = ast_play_and_record_full(chan, playfile, tempfile, maxtime, fmt, duration, silencethreshold, maxsilence, unlockdir, acceptdtmf, canceldtmf);
+                       if (strchr(canceldtmf, cmd)) {
+                       /* need this flag here to distinguish between pressing '0' during message recording or after */
+                               canceleddtmf = 1;
+                       }
                        if (record_gain)
                                ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0);
                        if (cmd == -1) {
@@ -11832,7 +11837,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                                return 1;
 #endif
                case '0':
-                       if (!ast_test_flag(vmu, VM_OPERATOR) || !outsidecaller) {
+                       if (!ast_test_flag(vmu, VM_OPERATOR) || (!canceleddtmf && !outsidecaller)) {
                                cmd = ast_play_and_wait(chan, "vm-sorry");
                                break;
                        }
@@ -11841,6 +11846,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                                if (!cmd)
                                        cmd = ast_waitfordigit(chan, 3000);
                                if (cmd == '1') {
+                                       ast_filerename(tempfile, recordfile, NULL);
                                        ast_play_and_wait(chan, "vm-msgsaved");
                                        cmd = '0';
                                } else if (cmd == '4') {
@@ -11852,7 +11858,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                                        cmd = '0';
                                } else {
                                        ast_play_and_wait(chan, "vm-deleted");
-                                       DELETE(recordfile, -1, recordfile, vmu);
+                                       DELETE(tempfile, -1, tempfile, vmu);
                                        cmd = '0';
                                }
                        }
@@ -11897,6 +11903,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                        }
                }
        }
+       if (!outsidecaller && (cmd == -1 || cmd == 't')) {
+               /* Hang up or timeout, so delete the recording. */
+               ast_filedelete(tempfile, NULL);
+       }
        if (cmd == 't')
                cmd = 0;
        else if (outsidecaller) /* won't play if time out occurs */