From 9f1c67dce644cdefa0efdbeeb416fd8cd7b9c1c1 Mon Sep 17 00:00:00 2001 From: Michiel van Baak Date: Thu, 2 Oct 2008 18:02:26 +0000 Subject: fix the 'meetme list', 'meetme list concise', 'meetme list $confno' and 'meetme list $confno concise' CLI commands (closes issue #13586) Reported by: john8675309 Help and feedback from eliel, thanks! git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@145915 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_meetme.c | 136 ++++++++++++++++++++++++++---------------------------- 1 file changed, 66 insertions(+), 70 deletions(-) (limited to 'apps') diff --git a/apps/app_meetme.c b/apps/app_meetme.c index cca6cb851..591799058 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -947,8 +947,7 @@ static char *complete_meetmecmd(const char *line, const char *word, int pos, int } AST_LIST_UNLOCK(&confs); return usr ? ast_strdup(usrno) : NULL; - } else if (strstr(line, "list") && (state == 0)) - return ast_strdup("concise"); + } } return NULL; @@ -957,6 +956,7 @@ static char *complete_meetmecmd(const char *line, const char *word, int pos, int static char *meetme_show_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { /* Process the command */ + struct ast_conf_user *user; struct ast_conference *cnf; int hr, min, sec; int i = 0, total = 0; @@ -987,9 +987,9 @@ static char *meetme_show_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_ar return CLI_FAILURE; } - if (a->argc == 1 || (a->argc == 2 && !strcasecmp(a->argv[1], "concise"))) { - /* 'MeetMe': List all the conferences */ - int concise = (a->argc == 2 && !strcasecmp(a->argv[1], "concise")); + if (a->argc == 2 || (a->argc == 3 && !strcasecmp(a->argv[2], "concise"))) { + /* List all the conferences */ + int concise = (a->argc == 3 && !strcasecmp(a->argv[2], "concise")); now = time(NULL); AST_LIST_LOCK(&confs); if (AST_LIST_EMPTY(&confs)) { @@ -1032,6 +1032,66 @@ static char *meetme_show_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_ar } ast_free(cmdline); return CLI_SUCCESS; + } else if (strcmp(a->argv[1], "list") == 0) { + int concise = (a->argc == 4 && (!strcasecmp(a->argv[3], "concise"))); + /* List all the users in a conference */ + if (AST_LIST_EMPTY(&confs)) { + if (!concise) { + ast_cli(a->fd, "No active MeetMe conferences.\n"); + } + ast_free(cmdline); + return CLI_SUCCESS; + } + /* Find the right conference */ + AST_LIST_LOCK(&confs); + AST_LIST_TRAVERSE(&confs, cnf, list) { + if (strcmp(cnf->confno, a->argv[2]) == 0) { + break; + } + } + if (!cnf) { + if (!concise) + ast_cli(a->fd, "No such conference: %s.\n", a->argv[2]); + AST_LIST_UNLOCK(&confs); + ast_free(cmdline); + return CLI_SUCCESS; + } + /* Show all the users */ + time(&now); + AST_LIST_TRAVERSE(&cnf->userlist, user, list) { + hr = (now - user->jointime) / 3600; + min = ((now - user->jointime) % 3600) / 60; + sec = (now - user->jointime) % 60; + if (!concise) { + ast_cli(a->fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s %s %02d:%02d:%02d\n", + user->user_no, + S_OR(user->chan->cid.cid_num, ""), + S_OR(user->chan->cid.cid_name, ""), + user->chan->name, + user->userflags & CONFFLAG_ADMIN ? "(Admin)" : "", + user->userflags & CONFFLAG_MONITOR ? "(Listen only)" : "", + user->adminflags & ADMINFLAG_MUTED ? "(Admin Muted)" : user->adminflags & ADMINFLAG_SELFMUTED ? "(Muted)" : "", + user->adminflags & ADMINFLAG_T_REQUEST ? "(Request to Talk)" : "", + istalking(user->talking), hr, min, sec); + } else { + ast_cli(a->fd, "%d!%s!%s!%s!%s!%s!%s!%s!%d!%02d:%02d:%02d\n", + user->user_no, + S_OR(user->chan->cid.cid_num, ""), + S_OR(user->chan->cid.cid_name, ""), + user->chan->name, + user->userflags & CONFFLAG_ADMIN ? "1" : "", + user->userflags & CONFFLAG_MONITOR ? "1" : "", + user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED) ? "1" : "", + user->adminflags & ADMINFLAG_T_REQUEST ? "1" : "", + user->talking, hr, min, sec); + } + } + if (!concise) { + ast_cli(a->fd, "%d users in that conference.\n", cnf->users); + } + AST_LIST_UNLOCK(&confs); + ast_free(cmdline); + return CLI_SUCCESS; } if (a->argc < 2) { ast_free(cmdline); @@ -1050,12 +1110,8 @@ static char *meetme_show_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_ar static char *meetme_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { /* Process the command */ - struct ast_conference *cnf; - struct ast_conf_user *user; - int hr, min, sec; - int i = 0; - time_t now; struct ast_str *cmdline = NULL; + int i = 0; switch (cmd) { case CLI_INIT: @@ -1127,66 +1183,6 @@ static char *meetme_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a /* Kick a single user */ ast_str_append(&cmdline, 0, ",k,%s", a->argv[3]); } - } else if (strcmp(a->argv[1], "list") == 0) { - int concise = (a->argc == 4 && (!strcasecmp(a->argv[3], "concise"))); - /* List all the users in a conference */ - if (AST_LIST_EMPTY(&confs)) { - if (!concise) { - ast_cli(a->fd, "No active conferences.\n"); - } - ast_free(cmdline); - return CLI_SUCCESS; - } - /* Find the right conference */ - AST_LIST_LOCK(&confs); - AST_LIST_TRAVERSE(&confs, cnf, list) { - if (strcmp(cnf->confno, a->argv[2]) == 0) { - break; - } - } - if (!cnf) { - if (!concise) - ast_cli(a->fd, "No such conference: %s.\n", a->argv[2]); - AST_LIST_UNLOCK(&confs); - ast_free(cmdline); - return CLI_SUCCESS; - } - /* Show all the users */ - time(&now); - AST_LIST_TRAVERSE(&cnf->userlist, user, list) { - hr = (now - user->jointime) / 3600; - min = ((now - user->jointime) % 3600) / 60; - sec = (now - user->jointime) % 60; - if (!concise) { - ast_cli(a->fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s %s %02d:%02d:%02d\n", - user->user_no, - S_OR(user->chan->cid.cid_num, ""), - S_OR(user->chan->cid.cid_name, ""), - user->chan->name, - user->userflags & CONFFLAG_ADMIN ? "(Admin)" : "", - user->userflags & CONFFLAG_MONITOR ? "(Listen only)" : "", - user->adminflags & ADMINFLAG_MUTED ? "(Admin Muted)" : user->adminflags & ADMINFLAG_SELFMUTED ? "(Muted)" : "", - user->adminflags & ADMINFLAG_T_REQUEST ? "(Request to Talk)" : "", - istalking(user->talking), hr, min, sec); - } else { - ast_cli(a->fd, "%d!%s!%s!%s!%s!%s!%s!%s!%d!%02d:%02d:%02d\n", - user->user_no, - S_OR(user->chan->cid.cid_num, ""), - S_OR(user->chan->cid.cid_name, ""), - user->chan->name, - user->userflags & CONFFLAG_ADMIN ? "1" : "", - user->userflags & CONFFLAG_MONITOR ? "1" : "", - user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED) ? "1" : "", - user->adminflags & ADMINFLAG_T_REQUEST ? "1" : "", - user->talking, hr, min, sec); - } - } - if (!concise) { - ast_cli(a->fd, "%d users in that conference.\n", cnf->users); - } - AST_LIST_UNLOCK(&confs); - ast_free(cmdline); - return CLI_SUCCESS; } else { ast_free(cmdline); return CLI_SHOWUSAGE; -- cgit v1.2.3