[svn-commits] lmadsen: trunk r264117 - in /trunk: CHANGES main/cli.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed May 19 10:12:23 CDT 2010


Author: lmadsen
Date: Wed May 19 10:12:18 2010
New Revision: 264117

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=264117
Log:
Add ability to hangup all channels from the CLI.

Added the keyword 'all' to the 'channel hangup request' CLI command
so that you can request all channels to be hungup without having to
restart Asterisk.

(closes issue #16009)
Reported by: moy
Patches:
      hangup-all-rev-221688.patch uploaded by moy (license 222)
Tested by: moy, russell

Modified:
    trunk/CHANGES
    trunk/main/cli.c

Modified: trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/trunk/CHANGES?view=diff&rev=264117&r1=264116&r2=264117
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Wed May 19 10:12:18 2010
@@ -455,6 +455,8 @@
    files it was built from.
  * New 'manager show settings' command showing the current settings loaded from
    manager.conf. 
+ * Added 'all' keyword to the CLI command "channel request hangup" so that you can send
+   the channel hangup request to all channels.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2  -------------

Modified: trunk/main/cli.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/cli.c?view=diff&rev=264117&r1=264116&r2=264117
==============================================================================
--- trunk/main/cli.c (original)
+++ trunk/main/cli.c Wed May 19 10:12:18 2010
@@ -936,9 +936,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);
@@ -948,7 +950,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 svn-commits mailing list