MT#56447 add glib_json_print()

Convenience function for a common use case.

Change-Id: Ie4e0aeedf5e3a8f361d2f839269dfd3a6480827b
pull/1642/head
Richard Fuchs 2 years ago
parent a9e5c95b29
commit 6cb8285cfe

@ -7,6 +7,7 @@
#include <string.h>
#include <ctype.h>
#include <json-glib/json-glib.h>
#include "aux.h"
/* set to 0 for alloc debugging, e.g. through valgrind */
#define BENCODE_MIN_BUFFER_PIECE_LEN 512
@ -964,19 +965,10 @@ str *bencode_collapse_str_json(bencode_item_t *root, str *out) {
JsonBuilder *builder = json_builder_new();
if (!bencode_collapse_json_item(root, builder))
goto err;
JsonGenerator *gen = json_generator_new();
JsonNode *json = json_builder_get_root(builder);
json_generator_set_root(gen, json);
char *result = json_generator_to_data(gen, NULL);
json_node_free(json);
g_object_unref(gen);
if (!result)
goto err;
char *result = glib_json_print(builder);
out->s = result;
out->len = strlen(result);
bencode_buffer_destroy_add(root->buffer, free, result);
g_object_unref(builder);
return out;
err:

@ -102,25 +102,10 @@ static struct call_monologue *janus_get_monologue(uint64_t handle_id, struct cal
}
// frees 'builder', returns g_malloc'd string
static char *janus_json_print(JsonBuilder *builder) {
JsonGenerator *gen = json_generator_new();
JsonNode *root = json_builder_get_root(builder);
json_generator_set_root(gen, root);
char *result = json_generator_to_data(gen, NULL);
json_node_free(root);
g_object_unref(gen);
g_object_unref(builder);
return result;
}
// frees 'builder'
// sends a single final response message to a received websocket message. requires a response code
static void janus_send_json_sync_response(struct websocket_message *wm, JsonBuilder *builder, int code) {
char *result = janus_json_print(builder);
char *result = glib_json_print(builder);
if (wm->method == M_WEBSOCKET)
websocket_write_text(wm->wc, result, true);
@ -137,7 +122,7 @@ static void janus_send_json_sync_response(struct websocket_message *wm, JsonBuil
// 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);
char *result = glib_json_print(builder);
GHashTableIter iter;
gpointer value;

@ -522,17 +522,7 @@ INLINE JsonBuilder *__mqtt_timer_intro(void) {
}
INLINE void __mqtt_timer_outro(JsonBuilder *json) {
json_builder_end_object(json);
JsonGenerator *gen = json_generator_new();
JsonNode *root = json_builder_get_root(json);
json_generator_set_root(gen, root);
char *result = json_generator_to_data(gen, NULL);
mqtt_publish(result);
json_node_free(root);
g_object_unref(gen);
g_object_unref(json);
mqtt_publish(glib_json_print(json));
}
void mqtt_timer_run_media(struct call *call, struct call_media *media) {
JsonBuilder *json = __mqtt_timer_intro();

@ -2656,16 +2656,7 @@ char* redis_encode_json(struct call *c) {
}
json_builder_end_object(builder);
JsonGenerator *gen = json_generator_new();
JsonNode *root = json_builder_get_root(builder);
json_generator_set_root(gen, root);
char* result = json_generator_to_data(gen, NULL);
json_node_free(root);
g_object_unref(gen);
g_object_unref(builder);
return result;
return glib_json_print(builder);
}

@ -18,6 +18,7 @@
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
#include <json-glib/json-glib.h>
#include "compat.h"
#include "auxlib.h"
@ -133,6 +134,22 @@ g_list_insert_before_link (GList *list,
#endif
/* GLIB-JSON */
// frees 'builder', returns g_malloc'd string
INLINE char *glib_json_print(JsonBuilder *builder) {
JsonGenerator *gen = json_generator_new();
JsonNode *root = json_builder_get_root(builder);
json_generator_set_root(gen, root);
char *result = json_generator_to_data(gen, NULL);
json_node_free(root);
g_object_unref(gen);
g_object_unref(builder);
return result;
}
/* GQUEUE */

Loading…
Cancel
Save