[asterisk-commits] tilghman: trunk r136141 - /trunk/apps/app_meetme.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Aug 6 12:33:48 CDT 2008
Author: tilghman
Date: Wed Aug 6 12:33:48 2008
New Revision: 136141
URL: http://svn.digium.com/view/asterisk?view=rev&rev=136141
Log:
Janitor ast_str project
(closes issue #13058)
Reported by: pputman
Patches:
app_meetme_aststr2.patch uploaded by pputman (license 81)
Modified:
trunk/apps/app_meetme.c
Modified: trunk/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_meetme.c?view=diff&rev=136141&r1=136140&r2=136141
==============================================================================
--- trunk/apps/app_meetme.c (original)
+++ trunk/apps/app_meetme.c Wed Aug 6 12:33:48 2008
@@ -954,7 +954,7 @@
int hr, min, sec;
int i = 0, total = 0;
time_t now;
- char cmdline[1024] = "";
+ struct ast_str *cmdline = NULL;
#define MC_HEADER_FORMAT "%-14s %-14s %-10s %-8s %-8s %-6s\n"
#define MC_DATA_FORMAT "%-12.12s %4.4d %4.4s %02d:%02d:%02d %-8s %-6s\n"
@@ -976,106 +976,126 @@
if (strlen(a->argv[i]) > 100)
ast_cli(a->fd, "Invalid Arguments.\n");
}
+
+ /* Max confno length */
+ if (!(cmdline = ast_str_create(MAX_CONFNUM))) {
+ 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"));
now = time(NULL);
AST_LIST_LOCK(&confs);
if (AST_LIST_EMPTY(&confs)) {
- if (!concise)
+ if (!concise) {
ast_cli(a->fd, "No active MeetMe conferences.\n");
+ }
AST_LIST_UNLOCK(&confs);
+ ast_free(cmdline);
return CLI_SUCCESS;
}
- if (!concise)
+ if (!concise) {
ast_cli(a->fd, MC_HEADER_FORMAT, "Conf Num", "Parties", "Marked", "Activity", "Creation", "Locked");
+ }
AST_LIST_TRAVERSE(&confs, cnf, list) {
- if (cnf->markedusers == 0)
- strcpy(cmdline, "N/A ");
- else
- snprintf(cmdline, sizeof(cmdline), "%4.4d", cnf->markedusers);
+ if (cnf->markedusers == 0) {
+ ast_str_set(&cmdline, 0, "N/A ");
+ } else {
+ ast_str_set(&cmdline, 0, "%4.4d", cnf->markedusers);
+ }
hr = (now - cnf->start) / 3600;
min = ((now - cnf->start) % 3600) / 60;
sec = (now - cnf->start) % 60;
- if (!concise)
- ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users, cmdline, hr, min, sec, cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
- else {
- ast_cli(a->fd, "%s!%d!%d!%02d:%02d:%02d!%d!%d\n",
- cnf->confno,
- cnf->users,
- cnf->markedusers,
+ if (!concise) {
+ ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users, cmdline->str, hr, min, sec, cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
+ } else {
+ ast_cli(a->fd, "%s!%d!%d!%02d:%02d:%02d!%d!%d\n",
+ cnf->confno,
+ cnf->users,
+ cnf->markedusers,
hr, min, sec,
- cnf->isdynamic,
+ cnf->isdynamic,
cnf->locked);
}
- total += cnf->users;
+ total += cnf->users;
}
AST_LIST_UNLOCK(&confs);
- if (!concise)
+ if (!concise) {
ast_cli(a->fd, "* Total number of MeetMe users: %d\n", total);
+ }
+ ast_free(cmdline);
return CLI_SUCCESS;
}
- if (a->argc < 3)
+ if (a->argc < 3) {
+ ast_free(cmdline);
return CLI_SHOWUSAGE;
- ast_copy_string(cmdline, a->argv[2], sizeof(cmdline)); /* Argv 2: conference number */
- if (strstr(a->argv[1], "lock")) {
+ }
+
+ ast_str_set(&cmdline, 0, "%s", a->argv[2]); /* Argv 2: conference number */
+ if (strstr(a->argv[1], "lock")) {
if (strcmp(a->argv[1], "lock") == 0) {
/* Lock */
- strncat(cmdline, ",L", sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",L");
} else {
/* Unlock */
- strncat(cmdline, ",l", sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",l");
}
} else if (strstr(a->argv[1], "mute")) {
- if (a->argc < 4)
+ if (a->argc < 4) {
+ ast_free(cmdline);
return CLI_SHOWUSAGE;
+ }
if (strcmp(a->argv[1], "mute") == 0) {
/* Mute */
if (strcmp(a->argv[3], "all") == 0) {
- strncat(cmdline, ",N", sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",N");
} else {
- strncat(cmdline, ",M,", sizeof(cmdline) - strlen(cmdline) - 1);
- strncat(cmdline, a->argv[3], sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",M,%s", a->argv[3]);
}
} else {
/* Unmute */
if (strcmp(a->argv[3], "all") == 0) {
- strncat(cmdline, ",n", sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",n");
} else {
- strncat(cmdline, ",m,", sizeof(cmdline) - strlen(cmdline) - 1);
- strncat(cmdline, a->argv[3], sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",m,%s", a->argv[3]);
}
}
} else if (strcmp(a->argv[1], "kick") == 0) {
- if (a->argc < 4)
+ if (a->argc < 4) {
+ ast_free(cmdline);
return CLI_SHOWUSAGE;
+ }
if (strcmp(a->argv[3], "all") == 0) {
/* Kick all */
- strncat(cmdline, ",K", sizeof(cmdline) - strlen(cmdline) - 1);
+ ast_str_append(&cmdline, 0, ",K");
} else {
/* Kick a single user */
- strncat(cmdline, ",k,", sizeof(cmdline) - strlen(cmdline) - 1);
- strncat(cmdline, a->argv[3], sizeof(cmdline) - strlen(cmdline) - 1);
+ 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)
+ 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)
+ 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 */
@@ -1084,7 +1104,7 @@
hr = (now - user->jointime) / 3600;
min = ((now - user->jointime) % 3600) / 60;
sec = (now - user->jointime) % 60;
- if (!concise)
+ 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>"),
@@ -1095,7 +1115,7 @@
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
+ } 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, ""),
@@ -1106,18 +1126,23 @@
user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED) ? "1" : "",
user->adminflags & ADMINFLAG_T_REQUEST ? "1" : "",
user->talking, hr, min, sec);
-
- }
- if (!concise)
+ }
+ }
+ 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
+ } else {
+ ast_free(cmdline);
return CLI_SHOWUSAGE;
-
- ast_debug(1, "Cmdline: %s\n", cmdline);
-
- admin_exec(NULL, cmdline);
+ }
+
+ ast_debug(1, "Cmdline: %s\n", cmdline->str);
+
+ admin_exec(NULL, cmdline->str);
+ ast_free(cmdline);
return CLI_SUCCESS;
}
@@ -3912,7 +3937,7 @@
{
struct sla_station *station;
struct sla_trunk_ref *trunk_ref;
- char conf_name[MAX_CONFNUM];
+ struct ast_str *conf_name = ast_str_create(16);
struct ast_flags conf_flags = { 0 };
struct ast_conference *conf;
@@ -3927,11 +3952,11 @@
}
ast_atomic_fetchadd_int((int *) &trunk_ref->trunk->active_stations, 1);
- snprintf(conf_name, sizeof(conf_name), "SLA_%s", trunk_ref->trunk->name);
+ ast_str_set(&conf_name, 0, "SLA_%s", trunk_ref->trunk->name);
ast_set_flag(&conf_flags,
CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_PASS_DTMF | CONFFLAG_SLA_STATION);
ast_answer(trunk_ref->chan);
- conf = build_conf(conf_name, "", "", 0, 0, 1, trunk_ref->chan);
+ conf = build_conf(conf_name->str, "", "", 0, 0, 1, trunk_ref->chan);
if (conf) {
conf_run(trunk_ref->chan, conf, conf_flags.flags, NULL);
dispose_conf(conf);
@@ -3940,8 +3965,8 @@
trunk_ref->chan = NULL;
if (ast_atomic_dec_and_test((int *) &trunk_ref->trunk->active_stations) &&
trunk_ref->state != SLA_TRUNK_STATE_ONHOLD_BYME) {
- strncat(conf_name, ",K", sizeof(conf_name) - strlen(conf_name) - 1);
- admin_exec(NULL, conf_name);
+ ast_str_append(&conf_name, 0, ",K");
+ admin_exec(NULL, conf_name->str);
trunk_ref->trunk->hold_stations = 0;
sla_change_trunk_state(trunk_ref->trunk, SLA_TRUNK_STATE_IDLE, ALL_TRUNK_REFS, NULL);
}
@@ -3949,6 +3974,7 @@
ast_dial_join(station->dial);
ast_dial_destroy(station->dial);
station->dial = NULL;
+ ast_free(conf_name);
return NULL;
}
More information about the asterisk-commits
mailing list