X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-xreq.c;h=87e01559c982fe6d4c394b42e2527f094a1996dc;hb=f05bc513bc0e0a977e6393e859cecbec77b420c6;hp=15ebae056a4f140ef0c25ff5d1d0029efa1763fb;hpb=ede362db9ea82b85a531849c21582f1692bf0d4d;p=src%2Fapp-framework-binder.git diff --git a/src/afb-xreq.c b/src/afb-xreq.c index 15ebae05..87e01559 100644 --- a/src/afb-xreq.c +++ b/src/afb-xreq.c @@ -250,6 +250,12 @@ int afb_xreq_unsubscribe(struct afb_xreq *xreq, struct afb_event event) static void xreq_subcall_cb(void *closure, const char *api, const char *verb, struct json_object *args, void (*callback)(void*, int, struct json_object*), void *cb_closure) { struct afb_xreq *xreq = closure; + + afb_xreq_subcall(xreq, api, verb, args, callback, cb_closure); +} + +void afb_xreq_subcall(struct afb_xreq *xreq, const char *api, const char *verb, struct json_object *args, void (*callback)(void*, int, struct json_object*), void *cb_closure) +{ if (xreq->queryitf->subcall) xreq->queryitf->subcall(xreq->query, api, verb, args, callback, cb_closure); else @@ -259,12 +265,7 @@ static void xreq_subcall_cb(void *closure, const char *api, const char *verb, st static int xreq_subcallsync_cb(void *closure, const char *api, const char *verb, struct json_object *args, struct json_object **result) { struct afb_xreq *xreq = closure; -/* - if (xreq->queryitf->subcallsync) - xreq->queryitf->subcall(xreq->query, api, verb, args, callback, cb_closure); - else -*/ - return afb_subcall_sync(xreq, api, verb, args, result); + return afb_subcall_sync(xreq, api, verb, args, result); } void afb_xreq_success_f(struct afb_xreq *xreq, struct json_object *obj, const char *info, ...) @@ -291,11 +292,9 @@ void afb_xreq_fail_f(struct afb_xreq *xreq, const char *status, const char *info free(message); } -static int xcheck(struct afb_xreq *xreq) +static int xcheck(struct afb_xreq *xreq, int sessionflags) { - int stag = xreq->sessionflags; - - if ((stag & (AFB_SESSION_CREATE|AFB_SESSION_CLOSE|AFB_SESSION_RENEW|AFB_SESSION_CHECK|AFB_SESSION_LOA_EQ)) != 0) { + if ((sessionflags & (AFB_SESSION_CREATE|AFB_SESSION_CLOSE|AFB_SESSION_RENEW|AFB_SESSION_CHECK|AFB_SESSION_LOA_EQ)) != 0) { if (!afb_context_check(&xreq->context)) { afb_context_close(&xreq->context); afb_xreq_fail_f(xreq, "failed", "invalid token's identity"); @@ -303,7 +302,7 @@ static int xcheck(struct afb_xreq *xreq) } } - if ((stag & AFB_SESSION_CREATE) != 0) { + if ((sessionflags & AFB_SESSION_CREATE) != 0) { if (afb_context_check_loa(&xreq->context, 1)) { afb_xreq_fail_f(xreq, "failed", "invalid creation state"); return 0; @@ -312,24 +311,24 @@ static int xcheck(struct afb_xreq *xreq) afb_context_refresh(&xreq->context); } - if ((stag & (AFB_SESSION_CREATE | AFB_SESSION_RENEW)) != 0) + if ((sessionflags & (AFB_SESSION_CREATE | AFB_SESSION_RENEW)) != 0) afb_context_refresh(&xreq->context); - if ((stag & AFB_SESSION_CLOSE) != 0) { + if ((sessionflags & AFB_SESSION_CLOSE) != 0) { afb_context_change_loa(&xreq->context, 0); afb_context_close(&xreq->context); } - if ((stag & AFB_SESSION_LOA_GE) != 0) { - int loa = (stag >> AFB_SESSION_LOA_SHIFT) & AFB_SESSION_LOA_MASK; + if ((sessionflags & AFB_SESSION_LOA_GE) != 0) { + int loa = (sessionflags >> AFB_SESSION_LOA_SHIFT) & AFB_SESSION_LOA_MASK; if (!afb_context_check_loa(&xreq->context, loa)) { afb_xreq_fail_f(xreq, "failed", "invalid LOA"); return 0; } } - if ((stag & AFB_SESSION_LOA_LE) != 0) { - int loa = (stag >> AFB_SESSION_LOA_SHIFT) & AFB_SESSION_LOA_MASK; + if ((sessionflags & AFB_SESSION_LOA_LE) != 0) { + int loa = (sessionflags >> AFB_SESSION_LOA_SHIFT) & AFB_SESSION_LOA_MASK; if (afb_context_check_loa(&xreq->context, loa + 1)) { afb_xreq_fail_f(xreq, "failed", "invalid LOA"); return 0; @@ -338,9 +337,9 @@ static int xcheck(struct afb_xreq *xreq) return 1; } -void afb_xreq_call(struct afb_xreq *xreq) +void afb_xreq_call(struct afb_xreq *xreq, int sessionflags, void (*method)(struct afb_req req)) { - if (xcheck(xreq)) - xreq->callback((struct afb_req){ .itf = &xreq_itf, .closure = xreq }); + if (xcheck(xreq, sessionflags)) + method((struct afb_req){ .itf = &xreq_itf, .closure = xreq }); }