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">
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">
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);
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';
}
}
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)
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;