summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--UPGRADE.txt4
-rw-r--r--apps/app_voicemail.c44
2 files changed, 48 insertions, 0 deletions
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 63eaf563c..67fa6a628 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -78,6 +78,10 @@ From 1.6.2 to 1.8:
* The Manager event 'iax2 show peers' output has been updated. It now has a
similar output of 'sip show peers'.
+* VoiceMailMain and VMAuthenticate, if a '*' is entered in the first position
+ of a Mailbox or Password, will, if it exists, jump to the 'a' extension in
+ the current dialplan context.
+
From 1.6.1 to 1.6.2:
* SIP no longer sends the 183 progress message for early media by
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index fece02aca..a311b6e8d 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -250,6 +250,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
may be specified. If a <replaceable>mailbox</replaceable> is not provided, the calling party will
be prompted to enter one. If a <replaceable>context</replaceable> is not specified, the
<literal>default</literal> context will be used.</para>
+ <para>The VoiceMailMain application will exit if the following DTMF digit is entered as Mailbox
+ or Password, and the extension exists:</para>
+ <enumlist>
+ <enum name="*">
+ <para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
+ </enum>
+ </enumlist>
</description>
</application>
<application name="MailboxExists" language="en_US">
@@ -303,6 +310,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
specified, only that mailbox's password will be considered valid. If the <replaceable>mailbox</replaceable>
is not specified, the channel variable <variable>AUTH_MAILBOX</variable> will be set with the authenticated
mailbox.</para>
+ <para>The VMAuthenticate application will exit if the following DTMF digit is entered as Mailbox
+ or Password, and the extension exists:</para>
+ <enumlist>
+ <enum name="*">
+ <para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
+ </enum>
+ </enumlist>
</description>
</application>
<application name="VMSayName" language="en_US">
@@ -9342,7 +9356,14 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
ast_verb(3, "Username not entered\n");
return -1;
}
+ } else if (mailbox[0] == '*') {
+ /* user entered '*' */
+ if (ast_exists_extension(chan, chan->context, "a", 1, chan->cid.cid_num)) {
+ return -1;
+ }
+ mailbox[0] = '\0';
}
+
if (useadsi)
adsi_password(chan);
@@ -9366,6 +9387,13 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
if (ast_readstring(chan, password, sizeof(password) - 1, 2000, 10000, "#") < 0) {
ast_log(AST_LOG_WARNING, "Unable to read password\n");
return -1;
+ } else if (password[0] == '*') {
+ /* user entered '*' */
+ if (ast_exists_extension(chan, chan->context, "a", 1, chan->cid.cid_num)) {
+ mailbox[0] = '*';
+ return -1;
+ }
+ mailbox[0] = '\0';
}
}
@@ -9531,6 +9559,17 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
res = vm_authenticate(chan, vms.username, sizeof(vms.username), &vmus, context, prefixstr, skipuser, maxlogins, 0);
ast_debug(1, "After vm_authenticate\n");
+
+ if (vms.username[0] == '*') {
+ ast_debug(1, "user pressed * in context '%s'\n", chan->context);
+
+ /* user entered '*' */
+ if (!ast_goto_if_exists(chan, chan->context, "a", 1)) {
+ res = 0; /* prevent hangup */
+ goto out;
+ }
+ }
+
if (!res) {
valid = 1;
if (!skipuser)
@@ -10536,6 +10575,11 @@ static int vmauthenticate(struct ast_channel *chan, const char *data)
pbx_builtin_setvar_helper(chan, "AUTH_CONTEXT", vmus.context);
ast_play_and_wait(chan, "auth-thankyou");
res = 0;
+ } else if (mailbox[0] == '*') {
+ /* user entered '*' */
+ if (!ast_goto_if_exists(chan, chan->context, "a", 1)) {
+ res = 0; /* prevent hangup */
+ }
}
return res;