summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES6
-rw-r--r--apps/app_confbridge.c11
2 files changed, 16 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index d1dfd5f41..56389dc81 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 <conference> 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 8919b7e24..8dd2686fd 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)