#include "jobs.h"
#include "verbose.h"
-extern struct afb_apiset *main_apiset;
/*************************************************************************
* internal types and structures
size_t plen, nlen;
char *event;
struct afb_export *export = closure;
+ struct afb_eventid *eventid;
/* check daemon state */
if (export->state == Api_State_Pre_Init) {
memcpy(event + plen + 1, name, nlen + 1);
/* create the event */
- return afb_evt_create_event(event);
+ eventid = afb_evt_create_event(event);
+ return (struct afb_event){ .itf = eventid ? eventid->itf : NULL, .closure = eventid };
}
static int event_broadcast_cb(void *closure, const char *name, struct json_object *object)
errno = EINVAL;
return -1;
}
- return -!(initialized ? afb_apiset_lookup_started : afb_apiset_lookup)(main_apiset, name, 1);
+ return -!(initialized ? afb_apiset_lookup_started : afb_apiset_lookup)(export->apiset, name, 1);
}
static int rename_api_cb(void *closure, const char *name)
{
struct afb_export *export = closure;
struct afb_event r = event_make_cb(closure, name);
- return afb_hook_ditf_event_make(export, name, r);
+ afb_hook_ditf_event_make(export, name, r.closure);
+ return r;
}
static int hooked_event_broadcast_cb(void *closure, const char *name, struct json_object *object)
struct jobloop *jobloop;
struct json_object *result;
int status;
- int async;
};
/*
callreq->jobloop = NULL;
callreq->callback = callback;
callreq->closure = cbclosure;
- callreq->async = 1;
/* terminates and frees ressources if needed */
afb_xreq_process(&callreq->xreq, export->apiset);
callreq->callback = NULL;
callreq->result = NULL;
callreq->status = 0;
- callreq->async = 0;
afb_xreq_unhooked_addref(&callreq->xreq); /* avoid early callreq destruction */
rc = jobs_enter(NULL, 0, callreq_sync_enter, callreq);
if (rc >= 0)
*************************************************************************************************************
*************************************************************************************************************/
-static struct afb_export *create(const char *apiname, enum afb_api_version version)
+static struct afb_export *create(struct afb_apiset *apiset, const char *apiname, enum afb_api_version version)
{
struct afb_export *export;
export->version = version;
export->state = Api_State_Pre_Init;
export->session = afb_session_addref(common_session);
- export->apiset = afb_apiset_addref(main_apiset);
+ export->apiset = afb_apiset_addref(apiset);
}
return export;
}
}
}
-struct afb_export *afb_export_create_v1(const char *apiname, int (*init)(struct afb_service), void (*onevent)(const char*, struct json_object*))
+struct afb_export *afb_export_create_v1(struct afb_apiset *apiset, const char *apiname, int (*init)(struct afb_service), void (*onevent)(const char*, struct json_object*))
{
- struct afb_export *export = create(apiname, Api_Version_1);
+ struct afb_export *export = create(apiset, apiname, Api_Version_1);
if (export) {
export->init.v1 = init;
export->on_event.v12 = onevent;
return export;
}
-struct afb_export *afb_export_create_v2(const char *apiname, struct afb_binding_data_v2 *data, int (*init)(), void (*onevent)(const char*, struct json_object*))
+struct afb_export *afb_export_create_v2(struct afb_apiset *apiset, const char *apiname, struct afb_binding_data_v2 *data, int (*init)(), void (*onevent)(const char*, struct json_object*))
{
- struct afb_export *export = create(apiname, Api_Version_2);
+ struct afb_export *export = create(apiset, apiname, Api_Version_2);
if (export) {
export->init.v2 = init;
export->on_event.v12 = onevent;
export->export.v2 = data;
+ data->verbosity = verbosity;
data->daemon.closure = export;
data->service.closure = export;
afb_export_update_hook(export);