[asterisk-commits] kmoore: branch 11 r379478 - /branches/11/apps/app_confbridge.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jan 18 15:47:02 CST 2013


Author: kmoore
Date: Fri Jan 18 15:46:58 2013
New Revision: 379478

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=379478
Log:
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
Patch-by: Timo Teras

Modified:
    branches/11/apps/app_confbridge.c

Modified: branches/11/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/apps/app_confbridge.c?view=diff&rev=379478&r1=379477&r2=379478
==============================================================================
--- branches/11/apps/app_confbridge.c (original)
+++ branches/11/apps/app_confbridge.c Fri Jan 18 15:46:58 2013
@@ -2083,6 +2083,16 @@
 	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;
@@ -2109,7 +2119,7 @@
 		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);
@@ -2127,12 +2137,10 @@
 		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);
@@ -2431,6 +2439,27 @@
 	.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");
@@ -2464,23 +2493,11 @@
 	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);
@@ -2530,7 +2547,7 @@
 		"\r\n",
 		id_text,
 		bridge->name,
-		bridge->activeusers,
+		bridge->activeusers + bridge->waitingusers,
 		bridge->markedusers,
 		bridge->locked ? "Yes" : "No"); 
 		ao2_unlock(bridge);




More information about the asterisk-commits mailing list