mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-23 13:09:00 +00:00
added filtering options to 'zap show channels' to implement functionality described in issue 6520
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@59286 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -10714,6 +10714,8 @@ static int zap_show_channels(int fd, int argc, char **argv)
|
||||
{
|
||||
#define FORMAT "%7s %-10.10s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"
|
||||
#define FORMAT2 "%7s %-10.10s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"
|
||||
unsigned int targetnum = 0;
|
||||
int filtertype = 0;
|
||||
struct zt_pvt *tmp = NULL;
|
||||
char tmps[20] = "";
|
||||
char statestr[20] = "";
|
||||
@@ -10729,28 +10731,43 @@ static int zap_show_channels(int fd, int argc, char **argv)
|
||||
lock = &iflock;
|
||||
start = iflist;
|
||||
|
||||
#ifdef HAVE_PRI
|
||||
if (argc == 4) {
|
||||
if ((trunkgroup = atoi(argv[3])) < 1)
|
||||
return RESULT_SHOWUSAGE;
|
||||
for (x = 0; x < NUM_SPANS; x++) {
|
||||
if (pris[x].trunkgroup == trunkgroup) {
|
||||
pri = pris + x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pri) {
|
||||
start = pri->crvs;
|
||||
lock = &pri->lock;
|
||||
} else {
|
||||
ast_cli(fd, "No such trunk group %d\n", trunkgroup);
|
||||
return RESULT_FAILURE;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
if (argc != 3)
|
||||
/* syntax: zap show channels [ group <group> | context <context> | trunkgroup <trunkgroup> ] */
|
||||
|
||||
if (!((argc == 3) || (argc == 5)))
|
||||
return RESULT_SHOWUSAGE;
|
||||
|
||||
if (argc == 5) {
|
||||
#ifdef HAVE_PRI
|
||||
if (!strcasecmp(argv[3], "trunkgroup")) {
|
||||
/* this option requires no special handling, so leave filtertype to zero */
|
||||
if ((trunkgroup = atoi(argv[4])) < 1)
|
||||
return RESULT_SHOWUSAGE;
|
||||
for (x = 0; x < NUM_SPANS; x++) {
|
||||
if (pris[x].trunkgroup == trunkgroup) {
|
||||
pri = pris + x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pri) {
|
||||
start = pri->crvs;
|
||||
lock = &pri->lock;
|
||||
} else {
|
||||
ast_cli(fd, "No such trunk group %d\n", trunkgroup);
|
||||
return RESULT_FAILURE;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
if (!strcasecmp(argv[3], "group")) {
|
||||
targetnum = atoi(argv[4]);
|
||||
if ((targetnum < 0) || (targetnum > 63))
|
||||
return RESULT_SHOWUSAGE;
|
||||
targetnum = 1 << targetnum;
|
||||
filtertype = 1;
|
||||
} else if (!strcasecmp(argv[3], "context")) {
|
||||
filtertype = 2;
|
||||
}
|
||||
}
|
||||
|
||||
ast_mutex_lock(lock);
|
||||
#ifdef HAVE_PRI
|
||||
ast_cli(fd, FORMAT2, pri ? "CRV" : "Chan", "Extension", "Context", "Language", "MOH Interpret", "Blocked", "State");
|
||||
@@ -10760,6 +10777,24 @@ static int zap_show_channels(int fd, int argc, char **argv)
|
||||
|
||||
tmp = start;
|
||||
while (tmp) {
|
||||
if (filtertype) {
|
||||
switch(filtertype) {
|
||||
case 1: /* zap show channels group <group> */
|
||||
if (tmp->group != targetnum) {
|
||||
tmp = tmp->next;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 2: /* zap show channels context <context> */
|
||||
if (strcasecmp(tmp->context, argv[4])) {
|
||||
tmp = tmp->next;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
}
|
||||
if (tmp->channel > 0) {
|
||||
snprintf(tmps, sizeof(tmps), "%d", tmp->channel);
|
||||
} else
|
||||
@@ -11039,8 +11074,9 @@ static int zap_show_version(int fd, int argc, char *argv[])
|
||||
}
|
||||
|
||||
static const char show_channels_usage[] =
|
||||
"Usage: zap show channels\n"
|
||||
" Shows a list of available channels\n";
|
||||
"Usage: zap show channels [ trunkgroup <trunkgroup> | group <group> | context <context> ]\n"
|
||||
" Shows a list of available channels with optional filtering\n"
|
||||
" <group> must be a number between 0 and 63\n";
|
||||
|
||||
static const char show_channel_usage[] =
|
||||
"Usage: zap show channel <chan num>\n"
|
||||
|
Reference in New Issue
Block a user