diff --git a/apps/app_meetme.c b/apps/app_meetme.c index cca6cb85154da05a176302ad24d9007e03e3837c..591799058be252da2b012bacfc7ad92496aa19bc 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, "<unknown>"), + S_OR(user->chan->cid.cid_name, "<no 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, "<unknown>"), - S_OR(user->chan->cid.cid_name, "<no 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;