From aff98962f8c0ac155fa5a8486eda077d6d9fbbd9 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 22 Mar 2023 15:03:06 -0400 Subject: [PATCH] MT#56447 generalise janus_notify_publishers Use a callback function to populate the internal JSON fields. This makes it possible to reuse this function for other, similar notifications. Change-Id: I0127379b26502d88e9af38cc89f77f6b88358018 --- daemon/janus.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/daemon/janus.c b/daemon/janus.c index 6abeeb9e4..afa34e447 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -594,8 +594,19 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan } +// callback function for janus_notify_publishers() +static void janus_notify_publishers_joined(JsonBuilder *event, void *ptr, uint64_t u64, struct janus_room *room, + uint64_t publisher_feed) +{ + json_builder_set_member_name(event, "publishers"); + janus_publishers_list(event, room, publisher_feed); +} + + // global janus_lock is held -static void janus_notify_publishers(uint64_t room_id, uint64_t except) +static void janus_notify_publishers(uint64_t room_id, uint64_t except, void *ptr, uint64_t u64, + void (*callback)(JsonBuilder *event, void *ptr, uint64_t u64, struct janus_room *room, + uint64_t publisher_feed)) { struct janus_room *room = g_hash_table_lookup(janus_rooms, &room_id); if (!room) @@ -639,8 +650,9 @@ static void janus_notify_publishers(uint64_t room_id, uint64_t except) json_builder_add_string_value(event, "event"); json_builder_set_member_name(event, "room"); json_builder_add_int_value(event, room_id); - json_builder_set_member_name(event, "publishers"); - janus_publishers_list(event, room, *feed_id); + + callback(event, ptr, u64, room, *feed_id); + json_builder_end_object(event); // } json_builder_end_object(event); // } json_builder_end_object(event); // } @@ -802,7 +814,7 @@ static const char *janus_videoroom_configure(struct websocket_message *wm, struc else json_builder_add_null_value(builder); - janus_notify_publishers(room_id, handle->id); + janus_notify_publishers(room_id, handle->id, call, 0, janus_notify_publishers_joined); return NULL; }