X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hsrv.c;fp=src%2Fafb-hsrv.c;h=3bca5839c7caa6ef54fe837ded2ca479fc21624d;hb=7bf0d9c6f807ffae6d9871c606afeccb9b478d3d;hp=6cb0bb45cc6a4faa2fb69d7d943bedbcc931da83;hpb=4521c1e7ae5371ab9d639adc617d17fb4e8ded0c;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hsrv.c b/src/afb-hsrv.c index 6cb0bb45..3bca5839 100644 --- a/src/afb-hsrv.c +++ b/src/afb-hsrv.c @@ -27,6 +27,7 @@ #include #include +#include #include #include "afb-method.h" @@ -154,6 +155,11 @@ static int access_handler( } return MHD_YES; } else if (strcasestr(type, JSON_CONTENT) != NULL) { + hreq->tokener = json_tokener_new(); + if (hreq->tokener == NULL) { + ERROR("Can't create tokener for POST"); + afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); + } return MHD_YES; } else { WARNING("Unsupported media type %s", type); @@ -171,9 +177,15 @@ static int access_handler( afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); return MHD_YES; } - } else { - if (!afb_hreq_post_add(hreq, "", upload_data, *upload_data_size)) { - afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); + } else if (hreq->tokener) { + hreq->json = json_tokener_parse_ex(hreq->tokener, upload_data, (int)*upload_data_size); + switch (json_tokener_get_error(hreq->tokener)) { + case json_tokener_success: + case json_tokener_continue: + break; + default: + ERROR("error in POST json: %s", json_tokener_error_desc(json_tokener_get_error(hreq->tokener))); + afb_hreq_reply_error(hreq, MHD_HTTP_BAD_REQUEST); return MHD_YES; } } @@ -191,6 +203,10 @@ static int access_handler( return MHD_YES; } } + if (hreq->tokener != NULL) { + json_tokener_free(hreq->tokener); + hreq->tokener = NULL; + } if (hreq->scanned != 0) { if (hreq->replied == 0 && hreq->suspended == 0) {