From 30a84ab5cf2a8ac9b176e2d909828a854ab6c6c4 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 22 Mar 2023 12:42:01 -0400 Subject: [PATCH] MT#56447 refactor rtcup and mediaup events Introduce janus_send_json_async() to send a message to all websockets connected to one session. Change-Id: I8800c4aef58381e31d3f4b6cc7f27136ad086235 --- daemon/janus.c | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/daemon/janus.c b/daemon/janus.c index fe5662914..638c9860a 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -140,6 +140,26 @@ static const char *janus_send_json_msg(struct websocket_message *wm, JsonBuilder } +// frees 'builder' +// sends an asynchronous notification to all websockets connected to a session +// session must be locked already +static void janus_send_json_async(struct janus_session *session, JsonBuilder *builder) { + char *result = janus_json_print(builder); + + GHashTableIter iter; + gpointer value; + g_hash_table_iter_init(&iter, session->websockets); + + while (g_hash_table_iter_next(&iter, NULL, &value)) { + struct websocket_conn *wc = value; + // lock order constraint: janus_session lock first, websocket_conn lock second + websocket_write_text(wc, result, true); + } + + g_free(result); +} + + static void janus_send_ack(struct websocket_message *wm, const char *transaction, uint64_t session_id) { // build and send an early ack JsonBuilder *ack = json_builder_new(); @@ -1046,22 +1066,9 @@ void janus_rtc_up(struct call_monologue *ml) { json_builder_add_int_value(builder, handle); json_builder_end_object(builder); // } - char *result = janus_json_print(builder); - - // lock order constraint: janus_session lock first, websocket_conn lock second - LOCK(&session->lock); - GHashTableIter iter; - gpointer value; - g_hash_table_iter_init(&iter, session->websockets); - - while (g_hash_table_iter_next(&iter, NULL, &value)) { - struct websocket_conn *wc = value; - websocket_write_text(wc, result, true); - } - - g_free(result); + janus_send_json_async(session, builder); } @@ -1101,22 +1108,9 @@ void janus_media_up(struct call_media *media) { json_builder_add_boolean_value(builder, true); json_builder_end_object(builder); // } - char *result = janus_json_print(builder); - - // lock order constraint: janus_session lock first, websocket_conn lock second - LOCK(&session->lock); - GHashTableIter iter; - gpointer value; - g_hash_table_iter_init(&iter, session->websockets); - - while (g_hash_table_iter_next(&iter, NULL, &value)) { - struct websocket_conn *wc = value; - websocket_write_text(wc, result, true); - } - - g_free(result); + janus_send_json_async(session, builder); }