From 19d8f8c8e4be5c14427e60771202f7bb61b4b91e Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Tue, 16 Jul 2013 22:33:27 +0000 Subject: [PATCH] Add 'kick all' capability to ConfBridge CLI command This patch adds the ability to kick all users out of a conference from the ConfBridge kick CLI command. It is invoked by passing 'all' as the channel parameter to the CLI command, i.e., "confbridge kick all". Note that this patch was modified slightly to conform to trunk. (closes issue ASTERISK-21827) Reported by: dorianlogan patches: kickall-patch_v2.diff uploaded by dorianlogan (License 6504) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@394531 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 6 ++++++ apps/app_confbridge.c | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index d1dfd5f41a..56389dc810 100644 --- a/CHANGES +++ b/CHANGES @@ -26,6 +26,12 @@ AgentMonitorOutgoing * Application removed. It was a holdover from when AgentCallbackLogin was removed. +ConfBridge +------------------ + * All participants in a bridge can now be kicked out of a conference room + by specifying the channel parameter as 'all' in the ConfBridge kick CLI + command, i.e., "confbridge kick all" + ForkCDR ------------------ * ForkCDR no longer automatically resets the forked CDR. See the 'r' option diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c index 8919b7e248..8dd2686fd1 100644 --- a/apps/app_confbridge.c +++ b/apps/app_confbridge.c @@ -2069,6 +2069,7 @@ int conf_handle_dtmf(struct ast_bridge_channel *bridge_channel, static int kick_conference_participant(struct confbridge_conference *conference, const char *channel) { + int res = -1; struct confbridge_user *user = NULL; SCOPED_AO2LOCK(bridge_lock, conference); @@ -2077,6 +2078,10 @@ static int kick_conference_participant(struct confbridge_conference *conference, user->kicked = 1; ast_bridge_remove(conference->bridge, user->chan); return 0; + } else if (!strcasecmp("all", channel)) { + user->kicked = 1; + ast_bridge_remove(conference->bridge, user->chan); + res = 0; } } AST_LIST_TRAVERSE(&conference->waiting_list, user, list) { @@ -2084,10 +2089,14 @@ static int kick_conference_participant(struct confbridge_conference *conference, user->kicked = 1; ast_bridge_remove(conference->bridge, user->chan); return 0; + } else if (!strcasecmp("all", channel)) { + user->kicked = 1; + ast_bridge_remove(conference->bridge, user->chan); + res = 0; } } - return -1; + return res; } static char *complete_confbridge_name(const char *line, const char *word, int pos, int state)