afb-evt: prepare futur afb_eventid
[src/app-framework-binder.git] / src / afb-trace.c
index bf8db69..0de501a 100644 (file)
@@ -188,17 +188,17 @@ static const char *verbosity_level_name(int level)
 static void emit(void *closure, const struct afb_hookid *hookid, const char *type, const char *fmt1, const char *fmt2, va_list ap2, ...)
 {
        struct hook *hook = closure;
-       struct json_object *event, *data1, *data2;
+       struct json_object *data, *data1, *data2;
        va_list ap1;
 
-       data1 = data2 = event = NULL;
+       data1 = data2 = data = NULL;
        va_start(ap1, ap2);
        wrap_json_vpack(&data1, fmt1, ap1);
        va_end(ap1);
        if (fmt2)
                wrap_json_vpack(&data2, fmt2, ap2);
 
-       wrap_json_pack(&event, "{so ss ss si so so*}",
+       wrap_json_pack(&data, "{so ss ss si so so*}",
                                        "time", timestamp(hookid),
                                        "tag", hook->tag->tag,
                                        "type", type,
@@ -206,7 +206,7 @@ static void emit(void *closure, const struct afb_hookid *hookid, const char *typ
                                        type, data1,
                                        "data", data2);
 
-       afb_evt_unhooked_push(hook->event->event, event);
+       afb_evt_unhooked_push(hook->event->event, data);
 }
 
 /*******************************************************************************/
@@ -221,6 +221,7 @@ static struct flag xreq_flags[] = { /* must be sorted by names */
                { "common",             afb_hook_flags_req_common },
                { "context",            afb_hook_flags_req_context },
                { "context_get",        afb_hook_flag_req_context_get },
+               { "context_make",       afb_hook_flag_req_context_make },
                { "context_set",        afb_hook_flag_req_context_set },
                { "end",                afb_hook_flag_req_end },
                { "event",              afb_hook_flags_req_event },
@@ -364,7 +365,7 @@ static void hook_xreq_subscribe(void *closure, const struct afb_hookid *hookid,
 {
        hook_xreq(closure, hookid, xreq, "subscribe", "{s{ss si} si}",
                                        "event",
-                                               "name", afb_evt_event_name(event),
+                                               "name", afb_evt_event_fullname(event),
                                                "id", afb_evt_event_id(event),
                                        "result", result);
 }
@@ -373,7 +374,7 @@ static void hook_xreq_unsubscribe(void *closure, const struct afb_hookid *hookid
 {
        hook_xreq(closure, hookid, xreq, "unsubscribe", "{s{ss? si} si}",
                                        "event",
-                                               "name", afb_evt_event_name(event),
+                                               "name", afb_evt_event_fullname(event),
                                                "id", afb_evt_event_id(event),
                                        "result", result);
 }
@@ -472,6 +473,21 @@ static void hook_xreq_get_application_id(void *closure, const struct afb_hookid
                                        "result", result);
 }
 
+static void hook_xreq_context_make(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)
+{
+       char pc[50], pf[50], pv[50], pr[50];
+       snprintf(pc, sizeof pc, "%p", create_value);
+       snprintf(pf, sizeof pf, "%p", free_value);
+       snprintf(pv, sizeof pv, "%p", create_closure);
+       snprintf(pr, sizeof pr, "%p", result);
+       hook_xreq(closure, hookid, xreq, "context_make", "{sb ss ss ss ss}",
+                                       "replace", replace,
+                                       "create", pc,
+                                       "free", pf,
+                                       "closure", pv,
+                                       "result", pr);
+}
+
 static struct afb_hook_xreq_itf hook_xreq_itf = {
        .hook_xreq_begin = hook_xreq_begin,
        .hook_xreq_end = hook_xreq_end,
@@ -497,7 +513,8 @@ static struct afb_hook_xreq_itf hook_xreq_itf = {
        .hook_xreq_subcall_req = hook_xreq_subcall_req,
        .hook_xreq_subcall_req_result = hook_xreq_subcall_req_result,
        .hook_xreq_has_permission = hook_xreq_has_permission,
-       .hook_xreq_get_application_id = hook_xreq_get_application_id
+       .hook_xreq_get_application_id = hook_xreq_get_application_id,
+       .hook_xreq_context_make = hook_xreq_context_make
 };
 
 /*******************************************************************************/
@@ -597,7 +614,7 @@ static void hook_ditf_vverbose(void *closure, const struct afb_hookid *hookid, c
 static void hook_ditf_event_make(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *name, struct afb_event result)
 {
        hook_ditf(closure, hookid, export, "event_make", "{ss ss si}",
-                       "name", name, "event", afb_evt_event_name(result), "id", afb_evt_event_id(result));
+                       "name", name, "event", afb_evt_event_fullname(result), "id", afb_evt_event_id(result));
 }
 
 static void hook_ditf_rootdir_get_fd(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, int result)
@@ -762,6 +779,7 @@ static struct afb_hook_svc_itf hook_svc_itf = {
 /*******************************************************************************/
 
 static struct flag evt_flags[] = { /* must be sorted by names */
+               { "addref",             afb_hook_flag_evt_addref },
                { "all",                afb_hook_flags_evt_all },
                { "broadcast_after",    afb_hook_flag_evt_broadcast_after },
                { "broadcast_before",   afb_hook_flag_evt_broadcast_before },
@@ -772,6 +790,7 @@ static struct flag evt_flags[] = { /* must be sorted by names */
                { "name",               afb_hook_flag_evt_name },
                { "push_after",         afb_hook_flag_evt_push_after },
                { "push_before",        afb_hook_flag_evt_push_before },
+               { "unref",              afb_hook_flag_evt_unref },
 };
 
 /* get the evt value for flag of 'name' */
@@ -818,9 +837,9 @@ static void hook_evt_broadcast_after(void *closure, const struct afb_hookid *hoo
        hook_evt(closure, hookid, evt, id, "broadcast_after", "{sO* si}", "data", obj, "result", result);
 }
 
-static void hook_evt_name(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+static void hook_evt_name(void *closure, const struct afb_hookid *hookid, const char *evt, int id, const char *result)
 {
-       hook_evt(closure, hookid, evt, id, "name", NULL);
+       hook_evt(closure, hookid, evt, id, "name", "{ss}", "result", result);
 }
 
 static void hook_evt_drop(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
@@ -828,6 +847,16 @@ static void hook_evt_drop(void *closure, const struct afb_hookid *hookid, const
        hook_evt(closure, hookid, evt, id, "drop", NULL);
 }
 
+static void hook_evt_addref(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+{
+       hook_evt(closure, hookid, evt, id, "addref", NULL);
+}
+
+static void hook_evt_unref(void *closure, const struct afb_hookid *hookid, const char *evt, int id)
+{
+       hook_evt(closure, hookid, evt, id, "unref", NULL);
+}
+
 static struct afb_hook_evt_itf hook_evt_itf = {
        .hook_evt_create = hook_evt_create,
        .hook_evt_push_before = hook_evt_push_before,
@@ -835,7 +864,9 @@ static struct afb_hook_evt_itf hook_evt_itf = {
        .hook_evt_broadcast_before = hook_evt_broadcast_before,
        .hook_evt_broadcast_after = hook_evt_broadcast_after,
        .hook_evt_name = hook_evt_name,
-       .hook_evt_drop = hook_evt_drop
+       .hook_evt_drop = hook_evt_drop,
+       .hook_evt_addref = hook_evt_addref,
+       .hook_evt_unref = hook_evt_unref
 };
 
 /*******************************************************************************/