diff options
Diffstat (limited to 'main/asterisk/ASTERISK-20938.patch')
-rw-r--r-- | main/asterisk/ASTERISK-20938.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/main/asterisk/ASTERISK-20938.patch b/main/asterisk/ASTERISK-20938.patch new file mode 100644 index 0000000000..0b7b1664df --- /dev/null +++ b/main/asterisk/ASTERISK-20938.patch @@ -0,0 +1,104 @@ +diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c +index 687830b..e848cdc 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); |