[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