MT#55283 move JsonParser into ngbuf

Use ngbuf's free function to destroy the JSON parser instead of the
callback for the bencode_buffer object.

Change-Id: I7eccf7284f55b34ef1a4800017ea1a4519f42bbc
pull/1848/head
Richard Fuchs 2 years ago
parent b1a0aebab5
commit bdd66fe730

@ -301,6 +301,8 @@ static void __ng_buffer_free(void *p) {
bencode_buffer_free(&ngbuf->buffer); bencode_buffer_free(&ngbuf->buffer);
if (ngbuf->ref) if (ngbuf->ref)
obj_put_o(ngbuf->ref); obj_put_o(ngbuf->ref);
if (ngbuf->json)
g_object_unref(ngbuf->json);
} }
ng_buffer *ng_buffer_new(struct obj *ref) { ng_buffer *ng_buffer_new(struct obj *ref) {
@ -346,12 +348,11 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
/* JSON */ /* JSON */
else if (data->s[0] == '{') { else if (data->s[0] == '{') {
parser_ctx.parser = &ng_parser_json; parser_ctx.parser = &ng_parser_json;
JsonParser *json = json_parser_new(); parser_ctx.ngbuf->json = json_parser_new();
bencode_buffer_destroy_add(&parser_ctx.ngbuf->buffer, g_object_unref, json);
errstr = "Failed to parse JSON document"; errstr = "Failed to parse JSON document";
if (!json_parser_load_from_data(json, data->s, data->len, NULL)) if (!json_parser_load_from_data(parser_ctx.ngbuf->json, data->s, data->len, NULL))
goto err_send; goto err_send;
parser_ctx.req = bencode_convert_json(&parser_ctx.ngbuf->buffer, json); parser_ctx.req = bencode_convert_json(&parser_ctx.ngbuf->buffer, parser_ctx.ngbuf->json);
errstr = "Could not decode bencode dictionary"; errstr = "Could not decode bencode dictionary";
if (!parser_ctx.req || parser_ctx.req->type != BENCODE_DICTIONARY) if (!parser_ctx.req || parser_ctx.req->type != BENCODE_DICTIONARY)
goto err_send; goto err_send;

@ -61,6 +61,7 @@ struct ng_buffer {
struct obj obj; struct obj obj;
bencode_buffer_t buffer; bencode_buffer_t buffer;
struct obj *ref; struct obj *ref;
JsonParser *json;
}; };

Loading…
Cancel
Save