summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2013-01-18 21:52:18 +0000
committerKinsey Moore <kmoore@digium.com>2013-01-18 21:52:18 +0000
commitceedf6d3b5bb49deaf181e1d1af2f20b990a3da1 (patch)
tree77a3dab12adba9b3647beacf6d111f971b972b0c /apps
parent7bd50bc0c4e27adbbc619a74bd22fb6bf7333321 (diff)
Fix regression in Confbridge user count
When the restructuring work got committed to Confbridge in r375470 to fix many open issues, it caused a regression in the reported count of users when conference information was requested via CLI or manager. This corrects the user count and user information displayed when listing conference information from the CLI and manager. (closes issue ASTERISK-20938) Reported By: Timo Teras Patches: confbridge-list.patch uploaded by Timo Teras (license 5409) ........ Merged revisions 379478 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@379479 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_confbridge.c67
1 files changed, 42 insertions, 25 deletions
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index 687830ba5..6d55a7cc9 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -2092,6 +2092,16 @@ static char *handle_cli_confbridge_kick(struct ast_cli_entry *e, int cmd, struct
return CLI_SUCCESS;
}
+static void handle_cli_confbridge_list_item(struct ast_cli_args *a, struct conference_bridge_user *participant)
+{
+ ast_cli(a->fd, "%-29s ", ast_channel_name(participant->chan));
+ ast_cli(a->fd, "%-17s", participant->u_profile.name);
+ ast_cli(a->fd, "%-17s", participant->b_profile.name);
+ ast_cli(a->fd, "%-17s", participant->menu_name);
+ ast_cli(a->fd, "%-17s", S_COR(ast_channel_caller(participant->chan)->id.number.valid, ast_channel_caller(participant->chan)->id.number.str, "<unknown>"));
+ ast_cli(a->fd, "\n");
+}
+
static char *handle_cli_confbridge_list(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
struct ao2_iterator i;
@@ -2118,7 +2128,7 @@ static char *handle_cli_confbridge_list(struct ast_cli_entry *e, int cmd, struct
ast_cli(a->fd, "================================ ====== ====== ========\n");
i = ao2_iterator_init(conference_bridges, 0);
while ((bridge = ao2_iterator_next(&i))) {
- ast_cli(a->fd, "%-32s %6i %6i %s\n", bridge->name, bridge->activeusers, bridge->markedusers, (bridge->locked ? "locked" : "unlocked"));
+ ast_cli(a->fd, "%-32s %6i %6i %s\n", bridge->name, bridge->activeusers + bridge->waitingusers, bridge->markedusers, (bridge->locked ? "locked" : "unlocked"));
ao2_ref(bridge, -1);
}
ao2_iterator_destroy(&i);
@@ -2136,12 +2146,10 @@ static char *handle_cli_confbridge_list(struct ast_cli_entry *e, int cmd, struct
ast_cli(a->fd, "============================= ================ ================ ================ ================\n");
ao2_lock(bridge);
AST_LIST_TRAVERSE(&bridge->active_list, participant, list) {
- ast_cli(a->fd, "%-29s ", ast_channel_name(participant->chan));
- ast_cli(a->fd, "%-17s", participant->u_profile.name);
- ast_cli(a->fd, "%-17s", participant->b_profile.name);
- ast_cli(a->fd, "%-17s", participant->menu_name);
- ast_cli(a->fd, "%-17s", S_COR(ast_channel_caller(participant->chan)->id.number.valid, ast_channel_caller(participant->chan)->id.number.str, "<unknown>"));
- ast_cli(a->fd, "\n");
+ handle_cli_confbridge_list_item(a, participant);
+ }
+ AST_LIST_TRAVERSE(&bridge->waiting_list, participant, list) {
+ handle_cli_confbridge_list_item(a, participant);
}
ao2_unlock(bridge);
ao2_ref(bridge, -1);
@@ -2440,6 +2448,27 @@ static struct ast_custom_function confbridge_info_function = {
.read = func_confbridge_info,
};
+static void action_confbridgelist_item(struct mansession *s, const char *id_text, struct conference_bridge *bridge, struct conference_bridge_user *participant)
+{
+ astman_append(s,
+ "Event: ConfbridgeList\r\n"
+ "%s"
+ "Conference: %s\r\n"
+ "CallerIDNum: %s\r\n"
+ "CallerIDName: %s\r\n"
+ "Channel: %s\r\n"
+ "Admin: %s\r\n"
+ "MarkedUser: %s\r\n"
+ "\r\n",
+ id_text,
+ bridge->name,
+ S_COR(ast_channel_caller(participant->chan)->id.number.valid, ast_channel_caller(participant->chan)->id.number.str, "<unknown>"),
+ S_COR(ast_channel_caller(participant->chan)->id.name.valid, ast_channel_caller(participant->chan)->id.name.str, "<no name>"),
+ ast_channel_name(participant->chan),
+ ast_test_flag(&participant->u_profile, USER_OPT_ADMIN) ? "Yes" : "No",
+ ast_test_flag(&participant->u_profile, USER_OPT_MARKEDUSER) ? "Yes" : "No");
+}
+
static int action_confbridgelist(struct mansession *s, const struct message *m)
{
const char *actionid = astman_get_header(m, "ActionID");
@@ -2473,23 +2502,11 @@ static int action_confbridgelist(struct mansession *s, const struct message *m)
ao2_lock(bridge);
AST_LIST_TRAVERSE(&bridge->active_list, participant, list) {
total++;
- astman_append(s,
- "Event: ConfbridgeList\r\n"
- "%s"
- "Conference: %s\r\n"
- "CallerIDNum: %s\r\n"
- "CallerIDName: %s\r\n"
- "Channel: %s\r\n"
- "Admin: %s\r\n"
- "MarkedUser: %s\r\n"
- "\r\n",
- id_text,
- bridge->name,
- S_COR(ast_channel_caller(participant->chan)->id.number.valid, ast_channel_caller(participant->chan)->id.number.str, "<unknown>"),
- S_COR(ast_channel_caller(participant->chan)->id.name.valid, ast_channel_caller(participant->chan)->id.name.str, "<no name>"),
- ast_channel_name(participant->chan),
- ast_test_flag(&participant->u_profile, USER_OPT_ADMIN) ? "Yes" : "No",
- ast_test_flag(&participant->u_profile, USER_OPT_MARKEDUSER) ? "Yes" : "No");
+ action_confbridgelist_item(s, id_text, bridge, participant);
+ }
+ AST_LIST_TRAVERSE(&bridge->waiting_list, participant, list) {
+ total++;
+ action_confbridgelist_item(s, id_text, bridge, participant);
}
ao2_unlock(bridge);
ao2_ref(bridge, -1);
@@ -2539,7 +2556,7 @@ static int action_confbridgelistrooms(struct mansession *s, const struct message
"\r\n",
id_text,
bridge->name,
- bridge->activeusers,
+ bridge->activeusers + bridge->waitingusers,
bridge->markedusers,
bridge->locked ? "Yes" : "No");
ao2_unlock(bridge);