Provide API and VERB name of requests
[src/app-framework-binder.git] / src / afb-hreq.c
index fe5af73..cdc9f23 100644 (file)
 #endif
 
 #include "afb-method.h"
-#include <afb/afb-req-itf.h>
 #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"
 
@@ -317,19 +316,22 @@ static void req_destroy(struct afb_xreq *xreq)
        }
        afb_context_disconnect(&hreq->xreq.context);
        json_object_put(hreq->json);
-       free((char*)hreq->xreq.api);
-       free((char*)hreq->xreq.verb);
+       free((char*)hreq->xreq.request.api);
+       free((char*)hreq->xreq.request.verb);
+       afb_cred_unref(hreq->xreq.cred);
        free(hreq);
 }
 
 void afb_hreq_addref(struct afb_hreq *hreq)
 {
-       afb_xreq_addref(&hreq->xreq);
+       afb_xreq_unhooked_addref(&hreq->xreq);
 }
 
 void afb_hreq_unref(struct afb_hreq *hreq)
 {
-       afb_xreq_unref(&hreq->xreq);
+       if (hreq->replied)
+               hreq->xreq.replied = 1;
+       afb_xreq_unhooked_unref(&hreq->xreq);
 }
 
 /*
@@ -912,15 +914,15 @@ static void req_success(struct afb_xreq *xreq, json_object *obj, const char *inf
 
 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) {
+       hreq->xreq.request.api = strndup(api, lenapi);
+       hreq->xreq.request.verb = strndup(verb, lenverb);
+       if (hreq->xreq.request.api == NULL || hreq->xreq.request.verb == NULL) {
                ERROR("Out of memory");
                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_unhooked_addref(&hreq->xreq);
                afb_xreq_process(&hreq->xreq, apiset);
        }
 }