#include <pthread.h>
#include <json-c/json.h>
+#if !defined(JSON_C_TO_STRING_NOSLASHESCAPE)
+#define JSON_C_TO_STRING_NOSLASHESCAPE 0
+#endif
#define AFB_BINDING_VERSION 3
#include <afb/afb-binding.h>
/* 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 unsigned)((hookid->time.tv_nsec + 500) / 1000));
return json_object_new_double_s(0.0f, ts); /* the real value isn't used */
-#if 0
- return json_object_new_string(ts);
- return json_object_new_double_s(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
}
va_start(ap, format);
emit(closure, hookid, "session", "{ss ss}", format, ap,
- "uuid", session,
+ "uuid", afb_session_uuid(session),
"action", action);
va_end(ap);
}
if (wrap_json_unpack(object, "s", &name))
ctxt_error(&desc->context->errors, "unexpected %s value %s",
abstracting[type].name,
- json_object_to_json_string(object));
+ json_object_to_json_string_ext(object, JSON_C_TO_STRING_NOSLASHESCAPE));
else {
queried = (name[0] == '*' && !name[1]) ? "all" : name;
value = abstracting[type].get_flag(queried);
wrap_json_optarray_for_all(event, add_evt_flags, &desc);
if (session)
- wrap_json_optarray_for_all(event, add_session_flags, &desc);
+ wrap_json_optarray_for_all(session, add_session_flags, &desc);
if (global)
wrap_json_optarray_for_all(global, add_global_flags, &desc);
rc = wrap_json_unpack(object, "s", &name);
if (rc)
- ctxt_error(&context->errors, "unexpected tag value %s", json_object_to_json_string(object));
+ ctxt_error(&context->errors, "unexpected tag value %s", json_object_to_json_string_ext(object, JSON_C_TO_STRING_NOSLASHESCAPE));
else {
tag = trace_get_tag(context->trace, name, 0);
if (!tag)
rc = wrap_json_unpack(object, "s", &name);
if (rc)
- ctxt_error(&context->errors, "unexpected event value %s", json_object_to_json_string(object));
+ ctxt_error(&context->errors, "unexpected event value %s", json_object_to_json_string_ext(object, JSON_C_TO_STRING_NOSLASHESCAPE));
else {
event = trace_get_event(context->trace, name, 0);
if (!event)
rc = wrap_json_unpack(object, "s", &uuid);
if (rc)
- ctxt_error(&context->errors, "unexpected session value %s", json_object_to_json_string(object));
+ ctxt_error(&context->errors, "unexpected session value %s", json_object_to_json_string_ext(object, JSON_C_TO_STRING_NOSLASHESCAPE));
else {
session = trace_get_session_by_uuid(context->trace, uuid, 0);
if (!session)