From 9b84150f6e5d4c78fa803941c6921280ac1f237d Mon Sep 17 00:00:00 2001 From: chme Date: Sun, 27 Aug 2017 10:42:14 +0200 Subject: [PATCH] [misc_json] New function jparse_obj_from_evbuffer --- src/misc_json.c | 20 ++++++++++++++++++++ src/misc_json.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/misc_json.c b/src/misc_json.c index 2e872971..05616fa6 100644 --- a/src/misc_json.c +++ b/src/misc_json.c @@ -22,6 +22,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include +#include #include #include #include @@ -123,3 +125,21 @@ jparse_str_from_array(json_object *array, int index, const char *key) item = json_object_array_get_idx(array, index); return jparse_str_from_obj(item, key); } + +json_object * +jparse_obj_from_evbuffer(struct evbuffer *evbuf) +{ + char *json_str; + + // 0-terminate for safety + evbuffer_add(evbuf, "", 1); + + json_str = (char *) evbuffer_pullup(evbuf, -1); + if (!json_str || (strlen(json_str) == 0)) + { + DPRINTF(E_LOG, L_MISC, "Failed to parse JSON from input buffer\n"); + return NULL; + } + + return json_tokener_parse(json_str); +} diff --git a/src/misc_json.h b/src/misc_json.h index 0adc34cd..a19e371b 100644 --- a/src/misc_json.h +++ b/src/misc_json.h @@ -27,6 +27,7 @@ #define SRC_MISC_JSON_H_ +#include #include #include #include @@ -53,5 +54,7 @@ jparse_time_from_obj(json_object *haystack, const char *key); const char * jparse_str_from_array(json_object *array, int index, const char *key); +json_object * +jparse_obj_from_evbuffer(struct evbuffer *evbuf); #endif /* SRC_MISC_JSON_H_ */