|
|
|
@ -847,6 +847,8 @@ struct ast_bridge *bridge_base_init(struct ast_bridge *self, uint32_t capabiliti
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self->creationtime = ast_tvnow();
|
|
|
|
|
|
|
|
|
|
return self;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -5102,8 +5104,8 @@ static char *complete_bridge_stasis(const char *word)
|
|
|
|
|
|
|
|
|
|
static char *handle_bridge_show_all(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
|
|
|
|
{
|
|
|
|
|
#define FORMAT_HDR "%-36s %5s %-15s %s\n"
|
|
|
|
|
#define FORMAT_ROW "%-36s %5u %-15s %s\n"
|
|
|
|
|
#define FORMAT_HDR "%-36s %5s %-15s %-15s %s\n"
|
|
|
|
|
#define FORMAT_ROW "%-36s %5u %-15s %-15s %s\n"
|
|
|
|
|
|
|
|
|
|
RAII_VAR(struct ao2_container *, cached_bridges, NULL, ao2_cleanup);
|
|
|
|
|
struct ao2_iterator iter;
|
|
|
|
@ -5126,17 +5128,21 @@ static char *handle_bridge_show_all(struct ast_cli_entry *e, int cmd, struct ast
|
|
|
|
|
return CLI_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast_cli(a->fd, FORMAT_HDR, "Bridge-ID", "Chans", "Type", "Technology");
|
|
|
|
|
ast_cli(a->fd, FORMAT_HDR, "Bridge-ID", "Chans", "Type", "Technology", "Duration");
|
|
|
|
|
|
|
|
|
|
iter = ao2_iterator_init(cached_bridges, 0);
|
|
|
|
|
for (; (msg = ao2_iterator_next(&iter)); ao2_ref(msg, -1)) {
|
|
|
|
|
struct ast_bridge_snapshot *snapshot = stasis_message_data(msg);
|
|
|
|
|
char print_time[32];
|
|
|
|
|
|
|
|
|
|
ast_format_duration_hh_mm_ss(ast_tvnow().tv_sec - snapshot->creationtime.tv_sec, print_time, sizeof(print_time));
|
|
|
|
|
|
|
|
|
|
ast_cli(a->fd, FORMAT_ROW,
|
|
|
|
|
snapshot->uniqueid,
|
|
|
|
|
snapshot->num_channels,
|
|
|
|
|
S_OR(snapshot->subclass, "<unknown>"),
|
|
|
|
|
S_OR(snapshot->technology, "<unknown>"));
|
|
|
|
|
S_OR(snapshot->technology, "<unknown>"),
|
|
|
|
|
print_time);
|
|
|
|
|
}
|
|
|
|
|
ao2_iterator_destroy(&iter);
|
|
|
|
|
return CLI_SUCCESS;
|
|
|
|
@ -5168,6 +5174,7 @@ static char *handle_bridge_show_specific(struct ast_cli_entry *e, int cmd, struc
|
|
|
|
|
{
|
|
|
|
|
RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
|
|
|
|
|
struct ast_bridge_snapshot *snapshot;
|
|
|
|
|
char print_time[32];
|
|
|
|
|
|
|
|
|
|
switch (cmd) {
|
|
|
|
|
case CLI_INIT:
|
|
|
|
@ -5194,10 +5201,18 @@ static char *handle_bridge_show_specific(struct ast_cli_entry *e, int cmd, struc
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
snapshot = stasis_message_data(msg);
|
|
|
|
|
ast_format_duration_hh_mm_ss(ast_tvnow().tv_sec - snapshot->creationtime.tv_sec, print_time, sizeof(print_time));
|
|
|
|
|
|
|
|
|
|
ast_cli(a->fd, "Id: %s\n", snapshot->uniqueid);
|
|
|
|
|
ast_cli(a->fd, "Type: %s\n", S_OR(snapshot->subclass, "<unknown>"));
|
|
|
|
|
ast_cli(a->fd, "Technology: %s\n", S_OR(snapshot->technology, "<unknown>"));
|
|
|
|
|
ast_cli(a->fd, "Subclass: %s\n", snapshot->subclass);
|
|
|
|
|
ast_cli(a->fd, "Creator: %s\n", snapshot->creator);
|
|
|
|
|
ast_cli(a->fd, "Name: %s\n", snapshot->name);
|
|
|
|
|
ast_cli(a->fd, "Video-Source-Id: %s\n", snapshot->video_source_id);
|
|
|
|
|
ast_cli(a->fd, "Num-Channels: %u\n", snapshot->num_channels);
|
|
|
|
|
ast_cli(a->fd, "Num-Active: %u\n", snapshot->num_active);
|
|
|
|
|
ast_cli(a->fd, "Duration: %s\n", print_time);
|
|
|
|
|
ao2_callback(snapshot->channels, OBJ_NODATA, bridge_show_specific_print_channel, a);
|
|
|
|
|
|
|
|
|
|
return CLI_SUCCESS;
|
|
|
|
|