#include <string.h>
#include <json-c/json.h>
+
#include <afb/afb-binding-v2.h>
#include "afb-api.h"
#include "afb-api-so-v2.h"
#include "afb-ditf.h"
#include "afb-xreq.h"
+#include "afb-trace.h"
#include "verbose.h"
#include "wrap-json.h"
static void get_one_api(struct json_object *resu, const char *name, struct json_object *spec)
{
struct json_object *o;
- struct afb_api api;
- int rc;
- rc = afb_apiset_lookup(main_apiset, name, &api);
- if (!rc) {
- o = api.itf->describe ? api.itf->describe(api.closure) : NULL;
+ o = afb_apiset_describe(main_apiset, name);
+ if (o || afb_apiset_has(main_apiset, name))
json_object_object_add(resu, name, o);
- }
}
/**
afb_req_success(req, NULL, NULL);
}
-#if 0
-static void f_hook(struct afb_xreq *xreq)
+static void *context_create()
{
- struct json_object *o, *v;
+ return afb_trace_create(&datav2.daemon, NULL);
+}
- o = afb_xreq_json(xreq);
- if (json_object_object_get_ex(o, _verbosity_, &v)) {
- set_verbosity(v);
- }
+static void context_destroy(void *pointer)
+{
+ struct afb_trace *trace = pointer;
+ afb_trace_unref(trace);
+}
- if (!xreq->replied)
- afb_xreq_success(xreq, NULL, NULL);
+static void f_trace(struct afb_req req)
+{
+ int rc;
+ struct json_object *add = NULL;
+ struct json_object *drop = NULL;
+ struct afb_trace *trace;
+
+ trace = afb_req_context(req, context_create, context_destroy);
+ wrap_json_unpack(afb_req_json(req), "{s?o s?o}", "add", &add, "drop", &drop);
+ if (add) {
+ rc = afb_trace_add(req, add, trace);
+ if (rc)
+ goto end;
+ }
+ if (drop) {
+ rc = afb_trace_drop(req, drop, trace);
+ if (rc)
+ goto end;
+ }
+ afb_req_success(req, NULL, NULL);
+end:
+ afb_apiset_update_hooks(main_apiset, NULL);
}
-#endif