diff --git a/CHANGES b/CHANGES index d1dfd5f41a391d0c2f2721284a80bc714aed0ee5..56389dc810c45ffee6424d446d278554a924ebc5 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 8919b7e248e847469c7af1de56d21717490b1bfc..8dd2686fd18fea4cc30425571e7460dd4cd1124a 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)