dect
/
asterisk
Archived
13
0
Fork 0

Bug #690: Add "show voicemail users" and "show voicemail zones" CLI command to app_voicemail

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1909 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
malcolmd 2004-01-09 05:45:56 +00:00
parent b69afeb73d
commit 79bfabb025
1 changed files with 127 additions and 0 deletions

View File

@ -26,6 +26,7 @@
#include <asterisk/manager.h>
#include <asterisk/dsp.h>
#include <asterisk/localtime.h>
#include <asterisk/cli.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
@ -34,7 +35,9 @@
#include <stdio.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <dirent.h>
/* we define USESQLVM when we have MySQL or POSTGRES */
#ifdef USEMYSQLVM
@ -3003,6 +3006,126 @@ static int append_mailbox(char *context, char *mbox, char *data)
return 0;
}
/* XXX TL Bug 690 */
static char show_voicemail_users_help[] =
"Usage: show voicemail users [for <context>]\n"
" Lists all mailboxes currently set up\n";
static char show_voicemail_zones_help[] =
"Usage: show voicemail zones\n"
" Lists zone message formats\n";
static int handle_show_voicemail_users(int fd, int argc, char *argv[])
{
struct ast_vm_user *vmu = users;
char *output_format = "%-10s %-5s %-25s %-10s %6s\n";
if ((argc < 3) || (argc > 5) || (argc == 4)) return RESULT_SHOWUSAGE;
else if ((argc == 5) && strcmp(argv[3],"for")) return RESULT_SHOWUSAGE;
if (vmu) {
if (argc == 3)
ast_cli(fd, output_format, "Context", "Mbox", "User", "Zone", "NewMsg");
else {
int count = 0;
while (vmu) {
if (!strcmp(argv[4],vmu->context))
count++;
vmu = vmu->next;
}
if (count) {
vmu = users;
ast_cli(fd, output_format, "Context", "Mbox", "User", "Zone", "NewMsg");
} else {
ast_cli(fd, "No such voicemail context \"%s\"\n", argv[4]);
return RESULT_FAILURE;
}
}
while (vmu) {
char dirname[256];
DIR *vmdir;
struct dirent *vment;
int vmcount = 0;
char count[12];
make_dir(dirname, 255, vmu->context, vmu->mailbox, "INBOX");
if ((vmdir = opendir(dirname))) {
/* No matter what the format of VM, there will always be a .txt file for each message. */
while ((vment = readdir(vmdir)))
if (!strncmp(vment->d_name + 7,".txt",4))
vmcount++;
closedir(vmdir);
}
snprintf(count,11,"%d",vmcount);
ast_cli(fd, output_format, vmu->context, vmu->mailbox, vmu->fullname, vmu->zonetag, count);
vmu = vmu->next;
}
} else {
ast_cli(fd, "There are no voicemail users currently defined\n");
return RESULT_FAILURE;
}
return RESULT_SUCCESS;
}
static int handle_show_voicemail_zones(int fd, int argc, char *argv[])
{
struct vm_zone *zone = zones;
char *output_format = "%-15s %-20s %-45s\n";
if (argc != 3) return RESULT_SHOWUSAGE;
if (zone) {
ast_cli(fd, output_format, "Zone", "Timezone", "Message Format");
while (zone) {
ast_cli(fd, output_format, zone->name, zone->timezone, zone->msg_format);
zone = zone->next;
}
} else {
ast_cli(fd, "There are no voicemail zones currently defined\n");
return RESULT_FAILURE;
}
return RESULT_SUCCESS;
}
static char *complete_show_voicemail_users(char *line, char *word, int pos, int state)
{
int which = 0;
struct ast_vm_user *vmu = users;
char *context = "";
/* 0 - show; 1 - voicemail; 2 - users; 3 - for; 4 - <context> */
if (pos > 4)
return NULL;
if (pos == 3) {
if (state == 0)
return strdup("for");
else
return NULL;
}
while (vmu) {
if (!strncasecmp(word, vmu->context, strlen(word))) {
if (context && strcmp(context, vmu->context)) {
if (++which > state) {
return strdup(vmu->context);
}
context = vmu->context;
}
}
vmu = vmu->next;
}
return NULL;
}
static struct ast_cli_entry show_voicemail_users_cli =
{ { "show", "voicemail", "users", NULL },
handle_show_voicemail_users, "List defined voicemail boxes",
show_voicemail_users_help, complete_show_voicemail_users };
static struct ast_cli_entry show_voicemail_zones_cli =
{ { "show", "voicemail", "zones", NULL },
handle_show_voicemail_zones, "List zone message formats",
show_voicemail_zones_help, NULL };
static int load_config(void)
{
struct ast_vm_user *cur, *l;
@ -3233,6 +3356,8 @@ int unload_module(void)
res |= ast_unregister_application(app2);
res |= ast_unregister_application(capp2);
sql_close();
ast_cli_unregister(&show_voicemail_users_cli);
ast_cli_unregister(&show_voicemail_zones_cli);
return res;
}
@ -3254,6 +3379,8 @@ int load_module(void)
ast_log(LOG_WARNING, "SQL init\n");
return res;
}
ast_cli_register(&show_voicemail_users_cli);
ast_cli_register(&show_voicemail_zones_cli);
return res;
}