X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-api-so.c;h=89418fb0bc5b6adb40cc40a831ed89e747250a59;hb=82adb27966eace72f810716c19c660efd7c8b15a;hp=c3cb08d724fedb147ba79c266bd6fced4193f65b;hpb=46d9538587a3521caa1e3b20bf337a53ed400777;p=src%2Fapp-framework-binder.git diff --git a/src/afb-api-so.c b/src/afb-api-so.c index c3cb08d7..89418fb0 100644 --- a/src/afb-api-so.c +++ b/src/afb-api-so.c @@ -33,19 +33,19 @@ #include "afb-plugin.h" #include "afb-req-itf.h" -#include "afb-pollmgr-itf.h" #include "afb-evmgr-itf.h" #include "session.h" +#include "afb-common.h" #include "afb-apis.h" #include "afb-api-so.h" #include "verbose.h" -#include "utils-upoll.h" extern __thread sigjmp_buf *error_handler; struct api_so_desc { struct AFB_plugin *plugin; /* descriptor */ + size_t apilength; void *handle; /* context of dlopen */ struct AFB_interface interface; /* interface */ }; @@ -54,17 +54,18 @@ static int api_timeout = 15; static const char plugin_register_function[] = "pluginRegister"; -static const struct afb_pollmgr_itf pollmgr_itf = { - .wait = (void*)upoll_wait, - .open = (void*)upoll_open, - .on_readable = (void*)upoll_on_readable, - .on_writable = (void*)upoll_on_writable, - .on_hangup = (void*)upoll_on_hangup, - .close = (void*)upoll_close -}; - static void afb_api_so_evmgr_push(struct api_so_desc *desc, const char *name, struct json_object *object) { + size_t length; + char *event; + + assert(desc->plugin != NULL); + length = strlen(name); + event = alloca(length + 2 + desc->apilength); + memcpy(event, desc->plugin->prefix, desc->apilength); + event[desc->apilength] = '/'; + memcpy(event + desc->apilength + 1, name, length + 1); + ctxClientEventSend(NULL, event, object); } static const struct afb_evmgr_itf evmgr_itf = { @@ -76,16 +77,14 @@ static struct afb_evmgr afb_api_so_get_evmgr(struct api_so_desc *desc) return (struct afb_evmgr){ .itf = &evmgr_itf, .closure = desc }; } -static struct afb_pollmgr afb_api_so_get_pollmgr(struct api_so_desc *desc) -{ - return (struct afb_pollmgr){ .itf = &pollmgr_itf, .closure = NULL }; -} - static const struct afb_daemon_itf daemon_itf = { .get_evmgr = (void*)afb_api_so_get_evmgr, - .get_pollmgr = (void*)afb_api_so_get_pollmgr + .get_event_loop = (void*)afb_common_get_event_loop, + .get_user_bus = (void*)afb_common_get_user_bus, + .get_system_bus = (void*)afb_common_get_system_bus }; + static void trapping_call(struct afb_req req, void(*cb)(struct afb_req)) { volatile int signum, timerset; @@ -224,6 +223,7 @@ int afb_api_so_add_plugin(const char *path) } /* records the plugin */ + desc->apilength = strlen(desc->plugin->prefix); if (afb_apis_add(desc->plugin->prefix, (struct afb_api){ .closure = desc, .call = (void*)call}) < 0) {