/*
- * Copyright (C) 2016, 2017, 2018 "IoT.bzh"
+ * Copyright (C) 2016-2019 "IoT.bzh"
* Author José Bollo <jose.bollo@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* limitations under the License.
*/
+#if WITH_AFB_HOOK && WITH_AFB_TRACE
+
#define _GNU_SOURCE
#include <assert.h>
/* struct for tags */
struct tag {
struct tag *next; /* link to the next */
- char tag[1]; /* name of the tag */
+ char tag[]; /* name of the tag */
};
/* struct for events */
/* timestamp */
static struct json_object *timestamp(const struct afb_hookid *hookid)
{
-#if JSON_C_MAJOR_VERSION > 0 || JSON_C_MINOR_VERSION >= 12
- char ts[50];
-
- snprintf(ts, sizeof ts, "%llu.%06lu",
- (long long unsigned)hookid->time.tv_sec,
- (long unsigned)((hookid->time.tv_nsec + 500) / 1000));
-
- return json_object_new_double_s(0.0f, ts); /* the real value isn't used */
-#else
return json_object_new_double((double)hookid->time.tv_sec +
(double)hookid->time.tv_nsec * .000000001);
-#endif
}
/* verbosity level name or NULL */
hook_api(closure, hookid, export, "delete_api", "{si}", "status", result);
}
+static void hook_api_on_event_handler_before(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *event, int event_x2, struct json_object *object, const char *pattern)
+{
+ hook_api(closure, hookid, export, "on_event_handler.before",
+ "{ss ss sO?}", "pattern", pattern, "event", event, "data", object);
+}
+
+static void hook_api_on_event_handler_after(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *event, int event_x2, struct json_object *object, const char *pattern)
+{
+ hook_api(closure, hookid, export, "on_event_handler.after",
+ "{ss ss sO?}", "pattern", pattern, "event", event, "data", object);
+}
+
+static void hook_api_settings(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, struct json_object *object)
+{
+ hook_api(closure, hookid, export, "settings", "{sO}", "settings", object);
+}
+
static struct afb_hook_api_itf hook_api_itf = {
.hook_api_event_broadcast_before = hook_api_event_broadcast_before,
.hook_api_event_broadcast_after = hook_api_event_broadcast_after,
.hook_api_class_provide = hook_api_class_provide,
.hook_api_class_require = hook_api_class_require,
.hook_api_delete_api = hook_api_delete_api,
+ .hook_api_on_event_handler_before = hook_api_on_event_handler_before,
+ .hook_api_on_event_handler_after = hook_api_on_event_handler_after,
+ .hook_api_settings = hook_api_settings,
};
/*******************************************************************************/
static void hook_session_create(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
{
- hook_session(closure, hookid, session, "create", "{ss}", "token", afb_session_token(session));
+ hook_session(closure, hookid, session, "create", NULL);
}
static void hook_session_close(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
hook_session(closure, hookid, session, "destroy", NULL);
}
-static void hook_session_renew(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
-{
- hook_session(closure, hookid, session, "renew", "{ss}", "token", afb_session_token(session));
-}
-
static void hook_session_addref(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
{
hook_session(closure, hookid, session, "addref", NULL);
.hook_session_create = hook_session_create,
.hook_session_close = hook_session_close,
.hook_session_destroy = hook_session_destroy,
- .hook_session_renew = hook_session_renew,
.hook_session_addref = hook_session_addref,
.hook_session_unref = hook_session_unref
};
if (!tag && alloc) {
/* creation if needed */
- tag = malloc(sizeof * tag + strlen(name));
+ tag = malloc(sizeof * tag + 1 + strlen(name));
if (tag) {
strcpy(tag->tag, name);
tag->next = trace->tags;
free(context.errors);
return -1;
}
+
+#endif