From a2ffa18d6c662777d30231174c1fed7020e21c44 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 7 Jan 2025 14:08:06 -0400 Subject: [PATCH] MT#61822 add CLI command to list media cache Change-Id: I41d388abefa1b356d7fecf7b1dc662d899a8f9ac --- daemon/cli.c | 26 ++++++++++++++++++++++++++ daemon/media_player.c | 20 ++++++++++++++++++++ include/media_player.h | 2 ++ utils/rtpengine-ctl | 3 +++ 4 files changed, 51 insertions(+) diff --git a/daemon/cli.c b/daemon/cli.c index 06bc89596..18d00408e 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -109,6 +109,9 @@ static void cli_incoming_tag_info(str *instr, struct cli_writer *cw, const cli_h static void cli_incoming_tag_delay(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_tag_detdtmf(str *instr, struct cli_writer *cw, const cli_handler_t *); +static void cli_incoming_media_list_files(str *instr, struct cli_writer *cw, const cli_handler_t *); +static void cli_incoming_media_list_dbs(str *instr, struct cli_writer *cw, const cli_handler_t *); + static void cli_incoming_media_reload_file(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_reload_files(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_reload_db(str *instr, struct cli_writer *cw, const cli_handler_t *); @@ -191,6 +194,11 @@ static const cli_handler_t cli_params_handlers[] = { { NULL, }, }; #ifdef WITH_TRANSCODING +static const cli_handler_t cli_media_list_handlers[] = { + { "files", cli_incoming_media_list_files, NULL }, + { "dbs", cli_incoming_media_list_dbs, NULL }, + { NULL, }, +}; static const cli_handler_t cli_media_reload_handlers[] = { { "file", cli_incoming_media_reload_file, NULL }, { "files", cli_incoming_media_reload_files, NULL }, @@ -206,6 +214,7 @@ static const cli_handler_t cli_media_evict_handlers[] = { { NULL, }, }; static const cli_handler_t cli_media_handlers[] = { + { "list", cli_generic_handler, cli_media_list_handlers }, { "reload", cli_generic_handler, cli_media_reload_handlers }, { "evict", cli_generic_handler, cli_media_evict_handlers }, { NULL, }, @@ -1793,6 +1802,23 @@ static void cli_incoming_set_controltos(str *instr, struct cli_writer *cw, const } #ifdef WITH_TRANSCODING +static void cli_incoming_media_list_files(str *instr, struct cli_writer *cw, const cli_handler_t *handler) { + str_q list = media_player_list_files(); + while (list.head) { + str *name = t_queue_pop_head(&list); + cw->cw_printf(cw, STR_FORMAT "\n", STR_FMT(name)); + str_free(name); + } +} + +static void cli_incoming_media_list_dbs(str *instr, struct cli_writer *cw, const cli_handler_t *handler) { + GQueue list = media_player_list_dbs(); + while (list.head) { + void *id = g_queue_pop_head(&list); + cw->cw_printf(cw, "%llu\n", (unsigned long long) GPOINTER_TO_UINT(id)); + } +} + static void cli_incoming_media_reload_file(str *instr, struct cli_writer *cw, const cli_handler_t *handler) { if (instr->len == 0) { cw->cw_printf(cw, "More parameters required.\n"); diff --git a/daemon/media_player.c b/daemon/media_player.c index c93e2e538..dc874c216 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -2354,3 +2354,23 @@ unsigned int media_player_evict_db_medias(void) { return ret; } + +str_q media_player_list_files(void) { + str_q ret = TYPED_GQUEUE_INIT; +#ifdef WITH_TRANSCODING + RWLOCK_R(&media_player_media_files_names_lock); + for (__auto_type l = media_player_media_files_names.head; l; l = l->next) + t_queue_push_tail(&ret, str_dup(l->data)); +#endif + return ret; +} + +GQueue media_player_list_dbs(void) { + GQueue ret = G_QUEUE_INIT; +#ifdef WITH_TRANSCODING + RWLOCK_R(&media_player_db_media_ids_lock); + for (GList *l = media_player_db_media_ids.head; l; l = l->next) + g_queue_push_tail(&ret, l->data); +#endif + return ret; +} diff --git a/include/media_player.h b/include/media_player.h index 87c3dffd3..da0e28b07 100644 --- a/include/media_player.h +++ b/include/media_player.h @@ -161,6 +161,8 @@ bool media_player_evict_file(str *name); unsigned int media_player_evict_files(void); bool media_player_evict_db_media(unsigned long long); unsigned int media_player_evict_db_medias(void); +str_q media_player_list_files(void); +GQueue media_player_list_dbs(void); struct send_timer *send_timer_new(struct packet_stream *); void send_timer_push(struct send_timer *, struct codec_packet *); diff --git a/utils/rtpengine-ctl b/utils/rtpengine-ctl index 143446924..2371ad201 100755 --- a/utils/rtpengine-ctl +++ b/utils/rtpengine-ctl @@ -164,6 +164,9 @@ sub showusage { print " debug : set debugging flag for given call\n"; print "\n"; print " media