From 5191a04055a3564af6456030600298e5f114052d Mon Sep 17 00:00:00 2001 From: Malcolm Davenport <malcolmd@digium.com> Date: Fri, 19 Mar 2004 22:39:02 +0000 Subject: [PATCH] Bug # 1088: Add MailboxExists, conditionally branches to priority n+101 if specified mailbox exists (in the config). Thanks Tilghman git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2482 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_voicemail.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 8382d1e19b..ca43f82900 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -170,6 +170,14 @@ static char *descrip_vmain = "a context is specified, logins are considered in that context only.\n" "Returns -1 if the user hangs up or 0 otherwise.\n"; +static char *synopsis_vm_box_exists = +"Check if vmbox exists"; + +static char *descrip_vm_box_exists = +" MailboxExists(mailbox[@context]): Conditionally branches to priority n+101\n" +"if the specified voice mailbox exists.\n"; + + /* Leave a message */ static char *capp = "VoiceMail2"; static char *app = "VoiceMail"; @@ -178,6 +186,8 @@ static char *app = "VoiceMail"; static char *capp2 = "VoiceMailMain2"; static char *app2 = "VoiceMailMain"; +static char *app3 = "MailboxExists"; + static ast_mutex_t vmlock = AST_MUTEX_INITIALIZER; struct ast_vm_user *users; struct ast_vm_user *usersl; @@ -3051,6 +3061,47 @@ static int append_mailbox(char *context, char *mbox, char *data) return 0; } +static int vm_box_exists(struct ast_channel *chan, void *data) { + struct localuser *u; + struct ast_vm_user *user; + char *context, *box; + int branch=0; + + if (!data) { + ast_log(LOG_ERROR, "MailboxExists requires an argument: (vmbox[@context])\n"); + return -1; + } + + LOCAL_USER_ADD(u); + context = ast_strdupa(data); + if (index(context, '@')) { + box = strsep(&context, "@"); + } else { + box = context; + context = "default"; + } + + ast_mutex_lock(&vmlock); + user = users; + while (user) { + if ((!strcmp(box,user->mailbox)) && (!strcmp(context,user->context))) { + branch = 1; + break; + } + } + ast_mutex_unlock(&vmlock); + + if (branch) { + if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid)) { + chan->priority += 100; + } else + ast_log(LOG_WARNING, "VM box %s@%s exists, but extension %s, priority %d doesn't exist\n", box, context, chan->exten, chan->priority + 101); + } + LOCAL_USER_REMOVE(u); + return 0; +} + + #ifndef USEMYSQLVM /* XXX TL Bug 690 */ static char show_voicemail_users_help[] = @@ -3426,6 +3477,7 @@ int unload_module(void) res |= ast_unregister_application(capp); res |= ast_unregister_application(app2); res |= ast_unregister_application(capp2); + res |= ast_unregister_application(app3); sql_close(); #ifndef USEMYSQLVM ast_cli_unregister(&show_voicemail_users_cli); @@ -3441,6 +3493,7 @@ int load_module(void) res |= ast_register_application(capp, vm_exec, synopsis_vm, descrip_vm); res |= ast_register_application(app2, vm_execmain, synopsis_vmain, descrip_vmain); res |= ast_register_application(capp2, vm_execmain, synopsis_vmain, descrip_vmain); + res |= ast_register_application(app3, vm_box_exists, synopsis_vm_box_exists, descrip_vm_box_exists); if (res) return(res); -- GitLab