Add the function afb_req_get_uid
[src/app-framework-binder.git] / src / afb-hook.c
index 92a4c82..54058de 100644 (file)
@@ -28,8 +28,8 @@
 
 #include <json-c/json.h>
 
-#include <afb/afb-req-common.h>
-#include <afb/afb-event-itf.h>
+#include <afb/afb-req.h>
+#include <afb/afb-event.h>
 
 #include "afb-context.h"
 #include "afb-hook.h"
@@ -207,7 +207,7 @@ static void _hook_xreq_(const struct afb_xreq *xreq, const char *format, ...)
 {
        va_list ap;
        va_start(ap, format);
-       _hook_("xreq-%06d:%s/%s", format, ap, xreq->hookindex, xreq->api, xreq->verb);
+       _hook_("xreq-%06d:%s/%s", format, ap, xreq->hookindex, xreq->request.api, xreq->request.verb);
        va_end(ap);
 }
 
@@ -281,14 +281,14 @@ static void hook_xreq_session_set_LOA_default_cb(void *closure, const struct afb
        _hook_xreq_(xreq, "session_set_LOA(%u) -> %d", level, result);
 }
 
-static void hook_xreq_subscribe_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, struct afb_event event, int result)
+static void hook_xreq_subscribe_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, struct afb_eventid *eventid, int result)
 {
-       _hook_xreq_(xreq, "subscribe(%s:%d) -> %d", afb_evt_event_name(event), afb_evt_event_id(event), result);
+       _hook_xreq_(xreq, "subscribe(%s:%d) -> %d", afb_evt_eventid_fullname(eventid), afb_evt_eventid_id(eventid), result);
 }
 
-static void hook_xreq_unsubscribe_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, struct afb_event event, int result)
+static void hook_xreq_unsubscribe_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, struct afb_eventid *eventid, int result)
 {
-       _hook_xreq_(xreq, "unsubscribe(%s:%d) -> %d", afb_evt_event_name(event), afb_evt_event_id(event), result);
+       _hook_xreq_(xreq, "unsubscribe(%s:%d) -> %d", afb_evt_eventid_fullname(eventid), afb_evt_eventid_id(eventid), result);
 }
 
 static void hook_xreq_subcall_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, const char *api, const char *verb, struct json_object *args)
@@ -354,6 +354,21 @@ static void hook_xreq_has_permission_default_cb(void *closure, const struct afb_
        _hook_xreq_(xreq, "has_permission(%s) -> %d", permission, result);
 }
 
+static void hook_xreq_get_application_id_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, char *result)
+{
+       _hook_xreq_(xreq, "get_application_id() -> %s", result);
+}
+
+static void hook_xreq_context_make_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, int replace, void *(*create_value)(void*), void (*free_value)(void*), void *create_closure, void *result)
+{
+       _hook_xreq_(xreq, "context_make(replace=%s, %p, %p, %p) -> %p", replace?"yes":"no", create_value, free_value, create_closure, result);
+}
+
+static void hook_xreq_get_uid_default_cb(void *closure, const struct afb_hookid *hookid, const struct afb_xreq *xreq, int result)
+{
+       _hook_xreq_(xreq, "get_uid() -> %d", result);
+}
+
 static struct afb_hook_xreq_itf hook_xreq_default_itf = {
        .hook_xreq_begin = hook_xreq_begin_default_cb,
        .hook_xreq_end = hook_xreq_end_default_cb,
@@ -378,7 +393,10 @@ static struct afb_hook_xreq_itf hook_xreq_default_itf = {
        .hook_xreq_unstore = hook_xreq_unstore_default_cb,
        .hook_xreq_subcall_req = hook_xreq_subcall_req_default_cb,
        .hook_xreq_subcall_req_result = hook_xreq_subcall_req_result_default_cb,
-       .hook_xreq_has_permission = hook_xreq_has_permission_default_cb
+       .hook_xreq_has_permission = hook_xreq_has_permission_default_cb,
+       .hook_xreq_get_application_id = hook_xreq_get_application_id_default_cb,
+       .hook_xreq_context_make = hook_xreq_context_make_default_cb,
+       .hook_xreq_get_uid = hook_xreq_get_uid_default_cb,
 };
 
 /******************************************************************************
@@ -395,8 +413,8 @@ static struct afb_hook_xreq_itf hook_xreq_default_itf = {
                if (hook->itf->hook_xreq_##what \
                 && (hook->flags & afb_hook_flag_req_##what) != 0 \
                 && (!hook->session || hook->session == xreq->context.session) \
-                && (!hook->api || !strcasecmp(hook->api, xreq->api)) \
-                && (!hook->verb || !strcasecmp(hook->verb, xreq->verb))) { \
+                && (!hook->api || !strcasecmp(hook->api, xreq->request.api)) \
+                && (!hook->verb || !strcasecmp(hook->verb, xreq->request.verb))) { \
                        hook->itf->hook_xreq_##what(hook->closure, &hookid, __VA_ARGS__); \
                } \
                hook = hook->next; \
@@ -468,15 +486,15 @@ int afb_hook_xreq_session_set_LOA(const struct afb_xreq *xreq, unsigned level, i
        return result;
 }
 
-int afb_hook_xreq_subscribe(const struct afb_xreq *xreq, struct afb_event event, int result)
+int afb_hook_xreq_subscribe(const struct afb_xreq *xreq, struct afb_eventid *eventid, int result)
 {
-       _HOOK_XREQ_(subscribe, xreq, event, result);
+       _HOOK_XREQ_(subscribe, xreq, eventid, result);
        return result;
 }
 
-int afb_hook_xreq_unsubscribe(const struct afb_xreq *xreq, struct afb_event event, int result)
+int afb_hook_xreq_unsubscribe(const struct afb_xreq *xreq, struct afb_eventid *eventid, int result)
 {
-       _HOOK_XREQ_(unsubscribe, xreq, event, result);
+       _HOOK_XREQ_(unsubscribe, xreq, eventid, result);
        return result;
 }
 
@@ -532,6 +550,24 @@ int afb_hook_xreq_has_permission(const struct afb_xreq *xreq, const char *permis
        return result;
 }
 
+char *afb_hook_xreq_get_application_id(const struct afb_xreq *xreq, char *result)
+{
+       _HOOK_XREQ_(get_application_id, xreq, result);
+       return result;
+}
+
+void *afb_hook_xreq_context_make(const struct afb_xreq *xreq, int replace, void *(*create_value)(void*), void (*free_value)(void*), void *create_closure, void *result)
+{
+       _HOOK_XREQ_(context_make, xreq, replace, create_value, free_value, create_closure, result);
+       return result;
+}
+
+int afb_hook_xreq_get_uid(const struct afb_xreq *xreq, int result)
+{
+       _HOOK_XREQ_(get_uid, xreq, result);
+       return result;
+}
+
 /******************************************************************************
  * section: hooking xreqs
  *****************************************************************************/
@@ -552,8 +588,8 @@ void afb_hook_init_xreq(struct afb_xreq *xreq)
                f = hook->flags & afb_hook_flags_req_all;
                add = f != 0
                   && (!hook->session || hook->session == xreq->context.session)
-                  && (!hook->api || !strcasecmp(hook->api, xreq->api))
-                  && (!hook->verb || !strcasecmp(hook->verb, xreq->verb));
+                  && (!hook->api || !strcasecmp(hook->api, xreq->request.api))
+                  && (!hook->verb || !strcasecmp(hook->verb, xreq->request.verb));
                if (add)
                        flags |= f;
                hook = hook->next;
@@ -700,9 +736,9 @@ static void hook_ditf_vverbose_cb(void *closure, const struct afb_hookid *hookid
        }
 }
 
-static void hook_ditf_event_make_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *name, struct afb_event result)
+static void hook_ditf_event_make_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *name, struct afb_eventid *result)
 {
-       _hook_ditf_(export, "event_make(%s) -> %s:%d", name, afb_evt_event_name(result), afb_evt_event_id(result));
+       _hook_ditf_(export, "event_make(%s) -> %s:%d", name, afb_evt_eventid_fullname(result), afb_evt_eventid_id(result));
 }
 
 static void hook_ditf_rootdir_get_fd_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, int result)
@@ -828,7 +864,7 @@ void afb_hook_ditf_vverbose(const struct afb_export *export, int level, const ch
        _HOOK_DITF_(vverbose, export, level, file, line, function, fmt, args);
 }
 
-struct afb_event afb_hook_ditf_event_make(const struct afb_export *export, const char *name, struct afb_event result)
+struct afb_eventid *afb_hook_ditf_event_make(const struct afb_export *export, const char *name, struct afb_eventid *result)
 {
        _HOOK_DITF_(event_make, export, name, result);
        return result;
@@ -1210,14 +1246,19 @@ static void hook_evt_broadcast_after_default_cb(void *closure, const struct afb_
        _hook_evt_(evt, id, "broadcast.after(%s) -> %d", json_object_to_json_string(obj), result);
 }
 
-static void hook_evt_name_default_cb(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+static void hook_evt_name_default_cb(void *closure, const struct afb_hookid *hookid, const char *evt, int id, const char *result)
 {
-       _hook_evt_(evt, id, "name");
+       _hook_evt_(evt, id, "name -> %s", result);
 }
 
-static void hook_evt_drop_default_cb(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+static void hook_evt_addref_default_cb(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
 {
-       _hook_evt_(evt, id, "drop");
+       _hook_evt_(evt, id, "addref");
+}
+
+static void hook_evt_unref_default_cb(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+{
+       _hook_evt_(evt, id, "unref");
 }
 
 static struct afb_hook_evt_itf hook_evt_default_itf = {
@@ -1227,7 +1268,8 @@ static struct afb_hook_evt_itf hook_evt_default_itf = {
        .hook_evt_broadcast_before = hook_evt_broadcast_before_default_cb,
        .hook_evt_broadcast_after = hook_evt_broadcast_after_default_cb,
        .hook_evt_name = hook_evt_name_default_cb,
-       .hook_evt_drop = hook_evt_drop_default_cb
+       .hook_evt_addref = hook_evt_addref_default_cb,
+       .hook_evt_unref = hook_evt_unref_default_cb
 };
 
 /******************************************************************************
@@ -1277,14 +1319,19 @@ int afb_hook_evt_broadcast_after(const char *evt, int id, struct json_object *ob
        return result;
 }
 
-void afb_hook_evt_name(const char *evt, int id)
+void afb_hook_evt_name(const char *evt, int id, const char *result)
+{
+       _HOOK_EVT_(name, evt, id, result);
+}
+
+void afb_hook_evt_addref(const char *evt, int id)
 {
-       _HOOK_EVT_(name, evt, id);
+       _HOOK_EVT_(addref, evt, id);
 }
 
-void afb_hook_evt_drop(const char *evt, int id)
+void afb_hook_evt_unref(const char *evt, int id)
 {
-       _HOOK_EVT_(drop, evt, id);
+       _HOOK_EVT_(unref, evt, id);
 }
 
 /******************************************************************************