From 7099aab46b37362f2129ab39c499be3d74c0cb9b Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 30 Sep 2024 14:41:54 -0400 Subject: [PATCH] MT#55283 add glib_json_builder_add_str This is needed to handle non-null terminated strings Change-Id: I83ef0af0b8a3471fadf8d3e53867f53636b11986 --- daemon/janus.c | 22 +++++++++++----------- daemon/mqtt.c | 16 ++++++++-------- include/helpers.h | 8 ++++++++ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/daemon/janus.c b/daemon/janus.c index a3334f40f..21301ddf6 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -335,17 +335,17 @@ static void janus_add_publisher_details(JsonBuilder *builder, struct call_monolo json_builder_set_member_name(builder, "streams"); json_builder_begin_array(builder); - const char *a_codec = NULL, *v_codec = NULL; + const str *a_codec = NULL, *v_codec = NULL; for (unsigned int i = 0; i < ml->medias->len; i++) { struct call_media *media = ml->medias->pdata[i]; if (!media) continue; - const char *codec = NULL; + const str *codec = NULL; for (__auto_type k = media->codecs.codec_prefs.head; k; k = k->next) { rtp_payload_type *pt = k->data; - codec = pt->encoding.s; + codec = &pt->encoding; // XXX check codec support? break; } @@ -353,13 +353,13 @@ static void janus_add_publisher_details(JsonBuilder *builder, struct call_monolo json_builder_begin_object(builder); json_builder_set_member_name(builder, "type"); - json_builder_add_string_value(builder, media->type.s); + glib_json_builder_add_str(builder, &media->type); json_builder_set_member_name(builder, "mindex"); json_builder_add_int_value(builder, media->index - 1); json_builder_set_member_name(builder, "mid"); if (media->media_id.s) - json_builder_add_string_value(builder, media->media_id.s); + glib_json_builder_add_str(builder, &media->media_id); else json_builder_add_null_value(builder); @@ -369,7 +369,7 @@ static void janus_add_publisher_details(JsonBuilder *builder, struct call_monolo } else if (codec) { json_builder_set_member_name(builder, "codec"); - json_builder_add_string_value(builder, codec); + glib_json_builder_add_str(builder, codec); if (media->type_id == MT_AUDIO && !a_codec) a_codec = codec; @@ -384,12 +384,12 @@ static void janus_add_publisher_details(JsonBuilder *builder, struct call_monolo if (a_codec) { json_builder_set_member_name(builder, "audio_codec"); - json_builder_add_string_value(builder, a_codec); + glib_json_builder_add_str(builder, a_codec); } if (v_codec) { json_builder_set_member_name(builder, "video_codec"); - json_builder_add_string_value(builder, v_codec); + glib_json_builder_add_str(builder, v_codec); } // TODO add "display" @@ -1282,11 +1282,11 @@ void janus_media_up(struct call_media *media) { json_builder_add_int_value(builder, handle); json_builder_set_member_name(builder, "mid"); if (media->media_id.s) - json_builder_add_string_value(builder, media->media_id.s); + glib_json_builder_add_str(builder, &media->media_id); else json_builder_add_null_value(builder); json_builder_set_member_name(builder, "type"); - json_builder_add_string_value(builder, media->type.s); + glib_json_builder_add_str(builder, &media->type); json_builder_set_member_name(builder, "receiving"); json_builder_add_boolean_value(builder, true); json_builder_end_object(builder); // } @@ -1539,7 +1539,7 @@ static const char *janus_message(struct websocket_message *wm, JsonReader *reade json_builder_set_member_name(builder, "type"); json_builder_add_string_value(builder, jsep_type_out); json_builder_set_member_name(builder, "sdp"); - json_builder_add_string_value(builder, jsep_sdp_out.s); + glib_json_builder_add_str(builder, &jsep_sdp_out); json_builder_end_object(builder); // } } diff --git a/daemon/mqtt.c b/daemon/mqtt.c index d8dbbc491..f01647b33 100644 --- a/daemon/mqtt.c +++ b/daemon/mqtt.c @@ -156,17 +156,17 @@ void mqtt_publish(char *s) { static void mqtt_call_stats(call_t *call, JsonBuilder *json) { json_builder_set_member_name(json, "call_id"); - json_builder_add_string_value(json, call->callid.s); + glib_json_builder_add_str(json, &call->callid); } static void mqtt_monologue_stats(struct call_monologue *ml, JsonBuilder *json) { json_builder_set_member_name(json, "tag"); - json_builder_add_string_value(json, ml->tag.s); + glib_json_builder_add_str(json, &ml->tag); if (ml->label.len) { json_builder_set_member_name(json, "label"); - json_builder_add_string_value(json, ml->label.s); + glib_json_builder_add_str(json, &ml->label); } #ifdef WITH_TRANSCODING @@ -219,7 +219,7 @@ static void mqtt_ssrc_stats(struct ssrc_ctx *ssrc, JsonBuilder *json, struct cal rtp_payload_type *pt = t_hash_table_lookup(media->codecs.codecs, GUINT_TO_POINTER(prim_pt)); if (pt) { json_builder_set_member_name(json, "codec"); - json_builder_add_string_value(json, pt->encoding.s); + glib_json_builder_add_str(json, &pt->encoding); json_builder_set_member_name(json, "clock_rate"); json_builder_add_int_value(json, pt->clock_rate); @@ -227,12 +227,12 @@ static void mqtt_ssrc_stats(struct ssrc_ctx *ssrc, JsonBuilder *json, struct cal if (pt->encoding_parameters.s) { json_builder_set_member_name(json, "codec_params"); - json_builder_add_string_value(json, pt->encoding_parameters.s); + glib_json_builder_add_str(json, &pt->encoding_parameters); } if (pt->format_parameters.s) { json_builder_set_member_name(json, "codec_format"); - json_builder_add_string_value(json, pt->format_parameters.s); + glib_json_builder_add_str(json, &pt->format_parameters); } } @@ -396,10 +396,10 @@ static void mqtt_media_stats(struct call_media *media, JsonBuilder *json) { json_builder_add_int_value(json, media->index); json_builder_set_member_name(json, "type"); - json_builder_add_string_value(json, media->type.s); + glib_json_builder_add_str(json, &media->type); json_builder_set_member_name(json, "interface"); - json_builder_add_string_value(json, media->logical_intf->name.s); + glib_json_builder_add_str(json, &media->logical_intf->name); if (media->protocol) { json_builder_set_member_name(json, "protocol"); diff --git a/include/helpers.h b/include/helpers.h index 601647f28..fd0ff0b2c 100644 --- a/include/helpers.h +++ b/include/helpers.h @@ -102,6 +102,14 @@ INLINE char *glib_json_print(JsonBuilder *builder) { return result; } +INLINE void glib_json_builder_add_str(JsonBuilder *builder, const str *s) { + // this is not optimal at all, but necessary due to glib's lack of "add_string_len_value" or similar + char *b = g_malloc(s->len + 1); + memcpy(b, s->s, s->len); + b[s->len] = '\0'; + json_builder_add_string_value(builder, b); + g_free(b); +} /* GQUEUE */