[asterisk-commits] moy: branch moy/dahdi-tap-trunk r221968 - /team/moy/dahdi-tap-trunk/main/cli.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Oct 2 10:03:21 CDT 2009


Author: moy
Date: Fri Oct  2 10:03:17 2009
New Revision: 221968

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=221968
Log:
this commit is unrelated to PRI monitorig, just adds a new CLI command in main/cli.c that is already in the bug tracker to be able to hangup all channels with a single command

Modified:
    team/moy/dahdi-tap-trunk/main/cli.c

Modified: team/moy/dahdi-tap-trunk/main/cli.c
URL: http://svnview.digium.com/svn/asterisk/team/moy/dahdi-tap-trunk/main/cli.c?view=diff&rev=221968&r1=221967&r2=221968
==============================================================================
--- team/moy/dahdi-tap-trunk/main/cli.c (original)
+++ team/moy/dahdi-tap-trunk/main/cli.c Fri Oct  2 10:03:17 2009
@@ -919,9 +919,11 @@
 	case CLI_INIT:
 		e->command = "channel request hangup";
 		e->usage =
-			"Usage: channel request hangup <channel>\n"
+			"Usage: channel request hangup <channel>|<all>\n"
 			"       Request that a channel be hung up. The hangup takes effect\n"
-			"       the next time the driver reads or writes from the channel\n";
+			"       the next time the driver reads or writes from the channel.\n"
+			"       if 'all' is specified instead of a channel name, all channels\n"
+			"       will see the hangup request.\n";
 		return NULL;
 	case CLI_GENERATE:
 		return ast_complete_channels(a->line, a->word, a->pos, a->n, e->args);
@@ -931,7 +933,19 @@
 		return CLI_SHOWUSAGE;
 	}
 
-	if ((c = ast_channel_get_by_name(a->argv[3]))) {
+	if (!strcasecmp(a->argv[3], "all")) {
+		struct ast_channel_iterator *iter = NULL;
+		if (!(iter = ast_channel_iterator_all_new(0))) {
+			return CLI_FAILURE;
+		}
+		for (; iter && (c = ast_channel_iterator_next(iter)); ast_channel_unref(c)) {
+			ast_channel_lock(c);
+			ast_cli(a->fd, "Requested Hangup on channel '%s'\n", c->name);
+			ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT);
+			ast_channel_unlock(c);
+		}
+		ast_channel_iterator_destroy(iter);
+	} else if ((c = ast_channel_get_by_name(a->argv[3]))) {
 		ast_channel_lock(c);
 		ast_cli(a->fd, "Requested Hangup on channel '%s'\n", c->name);
 		ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT);




More information about the asterisk-commits mailing list