Merged revisions 260923 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r260923 | jpeeler | 2010-05-04 13:46:46 -0500 (Tue, 04 May 2010) | 12 lines
  
  Voicemail transfer to operator should occur immediately, not after main menu.
  
  There were two scenarios in the advanced options that while using the
  operator=yes and review=yes options, the transfer occurred only after exiting
  the main menu (after sending a reply or leaving a message for an extension).
  Now after the audio is processed for the reply or message the transfer occurs
  immediately as expected.
  
  ABE-2107
  ABE-2108
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@260924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jeff Peeler
2010-05-04 18:51:28 +00:00
parent 7eac4cfb03
commit 9db934a869

View File

@@ -464,6 +464,7 @@ static AST_LIST_HEAD_STATIC(vmstates, vmstate);
#define VM_MESSAGEWRAP (1 << 17) /*!< Wrap around from the last message to the first, and vice-versa */ #define VM_MESSAGEWRAP (1 << 17) /*!< Wrap around from the last message to the first, and vice-versa */
#define VM_FWDURGAUTO (1 << 18) /*!< Autoset of Urgent flag on forwarded Urgent messages set globally */ #define VM_FWDURGAUTO (1 << 18) /*!< Autoset of Urgent flag on forwarded Urgent messages set globally */
#define ERROR_LOCK_PATH -100 #define ERROR_LOCK_PATH -100
#define OPERATOR_EXIT 300
enum vm_box { enum vm_box {
@@ -5594,7 +5595,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
pbx_builtin_setvar_helper(chan, "VMSTATUS", "USEREXIT"); pbx_builtin_setvar_helper(chan, "VMSTATUS", "USEREXIT");
} }
ast_free(tmp); ast_free(tmp);
return 0; return OPERATOR_EXIT;
} }
/* Allow all other digits to exit Voicemail and return to the dialplan */ /* Allow all other digits to exit Voicemail and return to the dialplan */
@@ -9713,7 +9714,7 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
case '1': /* Reply */ case '1': /* Reply */
if (vms.lastmsg > -1 && !vms.starting) { if (vms.lastmsg > -1 && !vms.starting) {
cmd = advanced_options(chan, vmu, &vms, vms.curmsg, 1, record_gain); cmd = advanced_options(chan, vmu, &vms, vms.curmsg, 1, record_gain);
if (cmd == ERROR_LOCK_PATH) { if (cmd == ERROR_LOCK_PATH || cmd == OPERATOR_EXIT) {
res = cmd; res = cmd;
goto out; goto out;
} }
@@ -9763,9 +9764,8 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
case '5': /* Leave VoiceMail */ case '5': /* Leave VoiceMail */
if (ast_test_flag(vmu, VM_SVMAIL)) { if (ast_test_flag(vmu, VM_SVMAIL)) {
cmd = forward_message(chan, context, &vms, vmu, vmfmts, 1, record_gain, 0); cmd = forward_message(chan, context, &vms, vmu, vmfmts, 1, record_gain, 0);
if (cmd == ERROR_LOCK_PATH) { if (cmd == ERROR_LOCK_PATH || cmd == OPERATOR_EXIT) {
res = cmd; res = cmd;
ast_log(AST_LOG_WARNING, "forward_message failed to lock path.\n");
goto out; goto out;
} }
} else } else
@@ -10074,13 +10074,14 @@ out:
if (res > -1) { if (res > -1) {
ast_stopstream(chan); ast_stopstream(chan);
adsi_goodbye(chan); adsi_goodbye(chan);
if (valid) { if (valid && res != OPERATOR_EXIT) {
if (silentexit) if (silentexit)
res = ast_play_and_wait(chan, "vm-dialout"); res = ast_play_and_wait(chan, "vm-dialout");
else else
res = ast_play_and_wait(chan, "vm-goodbye"); res = ast_play_and_wait(chan, "vm-goodbye");
if (res > 0) }
res = 0; if ((valid && res > 0) || res == OPERATOR_EXIT) {
res = 0;
} }
if (useadsi) if (useadsi)
ast_adsi_unload_session(chan); ast_adsi_unload_session(chan);