Add 'afb_service_call_sync' function
[src/app-framework-binder.git] / src / afb-hreq.c
index 6589f0f..62b322c 100644 (file)
@@ -37,8 +37,8 @@
 #include "afb-msg-json.h"
 #include "afb-context.h"
 #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 +319,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 +911,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 +982,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;