X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hreq.c;h=389a67e2ebd48d94c8d1caf2f2f397fe4463b1dc;hb=1d24a50bda149604760cdc1fd53f65b988c61f0c;hp=6589f0f46412a3b6f94d8bcfb023aceb29fa77c4;hpb=03f863dd080d32f71c4a0755c02e23c72e4cb342;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hreq.c b/src/afb-hreq.c index 6589f0f4..389a67e2 100644 --- a/src/afb-hreq.c +++ b/src/afb-hreq.c @@ -39,6 +39,7 @@ #include "afb-hreq.h" #include "afb-subcall.h" #include "afb-session.h" +#include "afb-cred.h" #include "verbose.h" #include "locale-root.h" @@ -319,6 +320,7 @@ static void req_destroy(struct afb_xreq *xreq) json_object_put(hreq->json); free((char*)hreq->xreq.api); free((char*)hreq->xreq.verb); + afb_cred_unref(hreq->xreq.cred); free(hreq); } @@ -910,16 +912,19 @@ static void req_success(struct afb_xreq *xreq, json_object *obj, const char *inf req_reply(hreq, MHD_HTTP_OK, "success", info, obj); } -int afb_hreq_init_req_call(struct afb_hreq *hreq, const char *api, size_t lenapi, const char *verb, size_t lenverb) +void afb_hreq_call(struct afb_hreq *hreq, struct afb_apiset *apiset, const char *api, size_t lenapi, const char *verb, size_t lenverb) { hreq->xreq.api = strndup(api, lenapi); hreq->xreq.verb = strndup(verb, lenverb); if (hreq->xreq.api == NULL || hreq->xreq.verb == NULL) { ERROR("Out of memory"); - errno = ENOMEM; - return -1; + afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); + } else if (afb_hreq_init_context(hreq) < 0) { + afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); + } else { + afb_xreq_addref(&hreq->xreq); /* TODO check if needed */ + afb_xreq_process(&hreq->xreq, apiset); } - return afb_hreq_init_context(hreq); } int afb_hreq_init_context(struct afb_hreq *hreq) @@ -978,6 +983,7 @@ struct afb_hreq *afb_hreq_create() if (hreq) { /* init the request */ afb_xreq_init(&hreq->xreq, &afb_hreq_xreq_query_itf); + hreq->xreq.cred = afb_cred_current(); hreq->reqid = ++global_reqids; } return hreq;