MT#55283 add glib_json_builder_add_str

This is needed to handle non-null terminated strings

Change-Id: I83ef0af0b8a3471fadf8d3e53867f53636b11986
pull/1870/head
Richard Fuchs 8 months ago
parent 1b4b0d1611
commit 7099aab46b

@ -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); // }
}

@ -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");

@ -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 */

Loading…
Cancel
Save