diff options
author | Jeremy McNamara <jj@nufone.net> | 2004-04-30 02:08:12 +0000 |
---|---|---|
committer | Jeremy McNamara <jj@nufone.net> | 2004-04-30 02:08:12 +0000 |
commit | a3803a3c9360bc5dc497091049505a8d4f4c5541 (patch) | |
tree | 40c08ee6ca945ea92e602258ff86eabb54fe4829 /apps/app_voicemail.c | |
parent | 489656458fc02b83e22e7992482e6e24bddfb573 (diff) |
rollback bug#77..the right fix immanent
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2830 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_voicemail.c')
-rwxr-xr-x | apps/app_voicemail.c | 162 |
1 files changed, 78 insertions, 84 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index d6fa86805..a3bb4c088 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -1078,7 +1078,7 @@ static int play_and_prepend(struct ast_channel *chan, char *playfile, char *reco return -1; } ast_dsp_set_threshold(sildet, silencethreshold); - + if (maxsilence > 0) { rfmt = chan->readformat; res = ast_set_read_format(chan, AST_FORMAT_SLINEAR); @@ -1149,7 +1149,7 @@ static int play_and_prepend(struct ast_channel *chan, char *playfile, char *reco /* stop recording with any digit */ if (option_verbose > 2) ast_verbose( VERBOSE_PREFIX_3 "User ended message by pressing %c\n", f->subclass); - res = 't'; + res = f->subclass; outmsg = 2; ast_frfree(f); break; @@ -1221,7 +1221,7 @@ static int play_and_prepend(struct ast_channel *chan, char *playfile, char *reco if (outmsg) { if (outmsg > 1) { /* Let them know it worked */ - ast_streamfile(chan, "auth-thankyou", chan->language); + ast_streamfile(chan, "vm-msgsaved", chan->language); ast_waitstream(chan, ""); } } @@ -1289,7 +1289,7 @@ static int play_and_record(struct ast_channel *chan, char *playfile, char *recor return -1; } ast_dsp_set_threshold(sildet, silencethreshold); - + if (maxsilence > 0) { rfmt = chan->readformat; res = ast_set_read_format(chan, AST_FORMAT_SLINEAR); @@ -1705,7 +1705,7 @@ static int count_messages(char *dir) static int say_and_wait(struct ast_channel *chan, int num) { int d; - d = ast_say_number(chan, num, AST_DIGIT_ANY, chan->language); + d = ast_say_number(chan, num, AST_DIGIT_ANY, chan->language, (char *) NULL); return d; } @@ -2269,7 +2269,7 @@ static int get_folder(struct ast_channel *chan, int start) if (d) return d; for (x = start; x< 5; x++) { - if ((d = ast_say_number(chan, x, AST_DIGIT_ANY, chan->language))) + if ((d = ast_say_number(chan, x, AST_DIGIT_ANY, chan->language, (char *) NULL))) return d; d = play_and_wait(chan, "vm-for"); if (d) @@ -2308,7 +2308,7 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, int cmd = 0; int retries = 0; - while((cmd >= 0) && (cmd != 't') && (cmd != '*')) { + while((cmd >= 0) && (cmd != 't') && (cmd != '#')) { if (cmd) retries = 0; switch (cmd) { @@ -2323,14 +2323,12 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, case '2': cmd = 't'; break; - case '*': - cmd = '*'; + case '#': + cmd = '#'; break; default: cmd = play_and_wait(chan,"vm-forwardoptions"); if (!cmd) - cmd = play_and_wait(chan,"vm-starmain"); - if (!cmd) cmd = ast_waitfordigit(chan,6000); if (!cmd) retries++; @@ -2400,83 +2398,79 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i return res; vmtmp = extensions; cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context); - if (!cmd) { - while(!res && vmtmp) { - /* if (play_and_wait(chan, "vm-savedto")) - break; - */ - snprintf(todir, sizeof(todir), "%s/voicemail/%s/%s/INBOX", (char *)ast_config_AST_SPOOL_DIR, vmtmp->context, vmtmp->mailbox); - snprintf(sys, sizeof(sys), "mkdir -p %s\n", todir); - ast_log(LOG_DEBUG, sys); - ast_safe_system(sys); - - todircount = count_messages(todir); - strncpy(tmp, fmt, sizeof(tmp) - 1); - stringp = tmp; - while((s = strsep(&stringp, "|"))) { - /* XXX This is a hack -- we should use build_filename or similar XXX */ - if (!strcasecmp(s, "wav49")) - s = "WAV"; - snprintf(sys, sizeof(sys), "cp %s/msg%04d.%s %s/msg%04d.%s\n", dir, curmsg, s, todir, todircount, s); - ast_log(LOG_DEBUG, sys); - ast_safe_system(sys); - } - snprintf(sys, sizeof(sys), "cp %s/msg%04d.txt %s/msg%04d.txt\n", dir, curmsg, todir, todircount); + + while(!res && vmtmp) { + /* if (play_and_wait(chan, "vm-savedto")) + break; + */ + snprintf(todir, sizeof(todir), "%s/voicemail/%s/%s/INBOX", (char *)ast_config_AST_SPOOL_DIR, vmtmp->context, vmtmp->mailbox); + snprintf(sys, sizeof(sys), "mkdir -p %s\n", todir); + ast_log(LOG_DEBUG, sys); + ast_safe_system(sys); + + todircount = count_messages(todir); + strncpy(tmp, fmt, sizeof(tmp) - 1); + stringp = tmp; + while((s = strsep(&stringp, "|"))) { + /* XXX This is a hack -- we should use build_filename or similar XXX */ + if (!strcasecmp(s, "wav49")) + s = "WAV"; + snprintf(sys, sizeof(sys), "cp %s/msg%04d.%s %s/msg%04d.%s\n", dir, curmsg, s, todir, todircount, s); ast_log(LOG_DEBUG, sys); ast_safe_system(sys); - snprintf(fn, sizeof(fn), "%s/msg%04d", todir,todircount); - - /* load the information on the source message so we can send an e-mail like a new message */ - snprintf(miffile, sizeof(miffile), "%s/msg%04d.txt", dir, curmsg); - if ((mif=ast_load(miffile))) { - - /* set callerid and duration variables */ - snprintf(callerid, sizeof(callerid), "FWD from: %s from %s", sender->fullname, ast_variable_retrieve(mif, NULL, "callerid")); - s = ast_variable_retrieve(mif, NULL, "duration"); - if (s) - duration = atol(s); - else - duration = 0; - if (strlen(vmtmp->email)) { - int attach_user_voicemail = attach_voicemail; - char *myserveremail = serveremail; - if (vmtmp->attach > -1) - attach_user_voicemail = vmtmp->attach; - if (strlen(vmtmp->serveremail)) - myserveremail = vmtmp->serveremail; - sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, callerid, fn, tmp, duration, attach_user_voicemail); - } - - if (strlen(vmtmp->pager)) { - char *myserveremail = serveremail; - if (strlen(vmtmp->serveremail)) - myserveremail = vmtmp->serveremail; - sendpage(myserveremail, vmtmp->pager, todircount, vmtmp->mailbox, callerid, duration, vmtmp); - } - - ast_destroy(mif); /* or here */ - } - /* Leave voicemail for someone */ - manager_event(EVENT_FLAG_CALL, "MessageWaiting", "Mailbox: %s\r\nWaiting: %d\r\n", vmtmp->mailbox, ast_app_has_voicemail(vmtmp->mailbox)); - run_externnotify(chan->context, vmtmp->mailbox, ast_app_has_voicemail(vmtmp->mailbox)); - - saved_messages++; - vmfree = vmtmp; - vmtmp = vmtmp->next; - free_user(vmfree); } - if (saved_messages > 0) { - /* give confirmatopm that the message was saved */ - /* commented out since we can't forward batches yet - if (saved_messages == 1) - res = play_and_wait(chan, "vm-message"); + snprintf(sys, sizeof(sys), "cp %s/msg%04d.txt %s/msg%04d.txt\n", dir, curmsg, todir, todircount); + ast_log(LOG_DEBUG, sys); + ast_safe_system(sys); + snprintf(fn, sizeof(fn), "%s/msg%04d", todir,todircount); + + /* load the information on the source message so we can send an e-mail like a new message */ + snprintf(miffile, sizeof(miffile), "%s/msg%04d.txt", dir, curmsg); + if ((mif=ast_load(miffile))) { + + /* set callerid and duration variables */ + snprintf(callerid, sizeof(callerid), "FWD from: %s from %s", sender->fullname, ast_variable_retrieve(mif, NULL, "callerid")); + s = ast_variable_retrieve(mif, NULL, "duration"); + if (s) + duration = atol(s); else - res = play_and_wait(chan, "vm-messages"); - if (!res) - res = play_and_wait(chan, "vm-saved"); */ - if (!res) - res = play_and_wait(chan, "vm-msgsaved"); + duration = 0; + if (strlen(vmtmp->email)) { + int attach_user_voicemail = attach_voicemail; + char *myserveremail = serveremail; + if (vmtmp->attach > -1) + attach_user_voicemail = vmtmp->attach; + if (strlen(vmtmp->serveremail)) + myserveremail = vmtmp->serveremail; + sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, callerid, fn, tmp, duration, attach_user_voicemail); + } + + if (strlen(vmtmp->pager)) { + char *myserveremail = serveremail; + if (strlen(vmtmp->serveremail)) + myserveremail = vmtmp->serveremail; + sendpage(myserveremail, vmtmp->pager, todircount, vmtmp->mailbox, callerid, duration, vmtmp); + } + + ast_destroy(mif); /* or here */ } + /* Leave voicemail for someone */ + manager_event(EVENT_FLAG_CALL, "MessageWaiting", "Mailbox: %s\r\nWaiting: %d\r\n", vmtmp->mailbox, ast_app_has_voicemail(vmtmp->mailbox)); + run_externnotify(chan->context, vmtmp->mailbox, ast_app_has_voicemail(vmtmp->mailbox)); + + saved_messages++; + vmfree = vmtmp; + vmtmp = vmtmp->next; + free_user(vmfree); + } + if (saved_messages > 0) { + /* give confirmatopm that the message was saved */ + if (saved_messages == 1) + res = play_and_wait(chan, "vm-message"); + else + res = play_and_wait(chan, "vm-messages"); + if (!res) + res = play_and_wait(chan, "vm-saved"); } return res ? res : cmd; } @@ -2639,7 +2633,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc res = wait_file2(chan, vms, "vm-message"); if (msg && (msg != vms->lastmsg)) { if (!res) - res = ast_say_number(chan, msg + 1, AST_DIGIT_ANY, chan->language); + res = ast_say_number(chan, msg + 1, AST_DIGIT_ANY, chan->language, (char *) NULL); } } |