X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hook.c;h=f59192a7b3be76f5d21bf9502579efece084dc14;hb=9fe2dfd3c4df334607083f989346090e1051a565;hp=f7d3e5b4c8ded5b54e640e086e48056943f8b905;hpb=a38382e89710db2c298f7f101e3ba0cf3681287c;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hook.c b/src/afb-hook.c index f7d3e5b4..f59192a7 100644 --- a/src/afb-hook.c +++ b/src/afb-hook.c @@ -28,7 +28,7 @@ #include "afb-context.h" #include "afb-hook.h" -#include "session.h" +#include "afb-session.h" #include "verbose.h" /* @@ -39,7 +39,7 @@ struct afb_hook { unsigned refcount; /* reference count */ char *api; /* api hooked or NULL for any */ char *verb; /* verb hooked or NULL for any */ - struct AFB_clientCtx *session; /* session hooked or NULL if any */ + struct afb_session *session; /* session hooked or NULL if any */ unsigned flags; /* hook flags */ struct afb_hook_req_itf *reqitf; /* interface of hook */ void *closure; /* closure for callbacks */ @@ -272,25 +272,33 @@ static void hook_req_unref(struct afb_hook_req *tr) } } -static struct afb_hook_req *hook_req_create(struct afb_req req, struct afb_context *context, const char *api, size_t lenapi, const char *verb, size_t lenverb) +static struct afb_hook_req *hook_req_create(struct afb_req req, struct afb_context *context, const char *api, const char *verb) { + int len; + char name[257]; unsigned id; struct afb_hook_req *tr; - tr = malloc(sizeof *tr + 8 + lenapi + lenverb); - if (tr != NULL) { - /* get the call id */ - id = ++hook_count; - if (id == 1000000) - id = hook_count = 1; - - /* init hook */ - tr->observers = NULL; - tr->refcount = 1; - tr->context = context; - tr->req = req; - afb_req_addref(req); - snprintf(tr->name, 9 + lenapi + lenverb, "%06d:%.*s/%.*s", id, (int)lenapi, api, (int)lenverb, verb); + /* get the call id */ + id = ++hook_count; + if (id == 1000000) + id = hook_count = 1; + + /* creates the name */ + len = snprintf(name, sizeof name, "%06d:%s/%s", id, api, verb); + if (len < 0 || (size_t)len >= sizeof name) { + tr = NULL; + } else { + tr = malloc(sizeof *tr + (size_t)len); + if (tr != NULL) { + /* init hook */ + tr->observers = NULL; + tr->refcount = 1; + tr->context = context; + tr->req = req; + afb_req_addref(req); + memcpy(tr->name, name, (size_t)(len + 1)); + } } return tr; } @@ -494,7 +502,7 @@ static struct afb_req_itf req_hook_itf = { * section: *****************************************************************************/ -struct afb_req afb_hook_req_call(struct afb_req req, struct afb_context *context, const char *api, size_t lenapi, const char *verb, size_t lenverb) +struct afb_req afb_hook_req_call(struct afb_req req, struct afb_context *context, const char *api, const char *verb) { int add; struct afb_hook_req *tr; @@ -506,11 +514,11 @@ struct afb_req afb_hook_req_call(struct afb_req req, struct afb_context *context do { add = (hook->flags & afb_hook_flags_req_all) != 0 && (!hook->session || hook->session == context->session) - && (!hook->api || !(memcmp(hook->api, api, lenapi) || hook->api[lenapi])) - && (!hook->verb || !(memcmp(hook->verb, verb, lenverb) || hook->verb[lenverb])); + && (!hook->api || !strcasecmp(hook->api, api)) + && (!hook->verb || !strcasecmp(hook->verb, verb)); if (add) { if (!tr) - tr = hook_req_create(req, context, api, lenapi, verb, lenverb); + tr = hook_req_create(req, context, api, verb); if (tr) hook_req_add_observer(tr, hook); } @@ -526,7 +534,7 @@ struct afb_req afb_hook_req_call(struct afb_req req, struct afb_context *context return req; } -struct afb_hook *afb_hook_req_create(const char *api, const char *verb, struct AFB_clientCtx *session, unsigned flags, struct afb_hook_req_itf *itf, void *closure) +struct afb_hook *afb_hook_req_create(const char *api, const char *verb, struct afb_session *session, unsigned flags, struct afb_hook_req_itf *itf, void *closure) { struct afb_hook *hook; @@ -536,13 +544,13 @@ struct afb_hook *afb_hook_req_create(const char *api, const char *verb, struct A hook->api = api ? strdup(api) : NULL; hook->verb = verb ? strdup(verb) : NULL; - hook->session = session ? ctxClientAddRef(session) : NULL; + hook->session = session ? afb_session_addref(session) : NULL; if ((api && !hook->api) || (verb && !hook->verb)) { free(hook->api); free(hook->verb); if (hook->session) - ctxClientUnref(hook->session); + afb_session_unref(hook->session); free(hook); return NULL; } @@ -577,7 +585,7 @@ void afb_hook_unref(struct afb_hook *hook) free(hook->api); free(hook->verb); if (hook->session) - ctxClientUnref(hook->session); + afb_session_unref(hook->session); free(hook); } }