[svn-commits] dhubbard: trunk r59286 - /trunk/channels/chan_zap.c
svn-commits at lists.digium.com
svn-commits at lists.digium.com
Tue Mar 27 17:09:25 MST 2007
Author: dhubbard
Date: Tue Mar 27 19:09:25 2007
New Revision: 59286
URL: http://svn.digium.com/view/asterisk?view=rev&rev=59286
Log:
added filtering options to 'zap show channels' to implement functionality described in issue 6520
Modified:
trunk/channels/chan_zap.c
Modified: trunk/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_zap.c?view=diff&rev=59286&r1=59285&r2=59286
==============================================================================
--- trunk/channels/chan_zap.c (original)
+++ trunk/channels/chan_zap.c Tue Mar 27 19:09:25 2007
@@ -10714,6 +10714,8 @@
{
#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,27 +10731,42 @@
lock = &iflock;
start = iflist;
+ /* 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 (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)
- return RESULT_SHOWUSAGE;
+ 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
@@ -10760,6 +10777,24 @@
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 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"
More information about the svn-commits
mailing list