X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-apis.c;h=9b2df3f30f1176d4a9e2fc89afa91ddce4b346d1;hb=e6298876fdbf457b6dd61556472060a9fa652c82;hp=7634dca176ab09c43dbc1427d2faa09ffbbdc144;hpb=04331cc45e03325c6470bc5285d5c09843b24afd;p=src%2Fapp-framework-binder.git diff --git a/src/afb-apis.c b/src/afb-apis.c index 7634dca1..9b2df3f3 100644 --- a/src/afb-apis.c +++ b/src/afb-apis.c @@ -41,9 +41,12 @@ #include "afb-plugin.h" #include "afb-req-itf.h" +#include "afb-poll-itf.h" + #include "session.h" #include "afb-apis.h" #include "verbose.h" +#include "utils-upoll.h" struct api_desc { struct AFB_plugin *plugin; /* descriptor */ @@ -59,6 +62,14 @@ static int apis_count = 0; static const char plugin_register_function[] = "pluginRegister"; +static const struct afb_poll_itf upoll_itf = { + .on_readable = (void*)upoll_on_readable, + .on_writable = (void*)upoll_on_writable, + .on_hangup = (void*)upoll_on_hangup, + .close = (void*)upoll_close +}; + + int afb_apis_count() { return apis_count; @@ -76,6 +87,15 @@ void afb_apis_free_context(int apiidx, void *context) free(context); } +static struct afb_poll itf_poll_open(int fd, void *closure) +{ + struct afb_poll result; + result.data = upoll_open(fd, closure); + result.itf = result.data ? &upoll_itf : NULL; + return result; +} + + int afb_apis_add_plugin(const char *path) { struct api_desc *apis; @@ -117,6 +137,7 @@ int afb_apis_add_plugin(const char *path) } interface->verbosity = 0; interface->mode = AFB_MODE_LOCAL; + interface->poll_open = itf_poll_open; /* init the plugin */ plugin = pluginRegisterFct(interface); @@ -290,6 +311,7 @@ static void trapping_handle(struct afb_req req, void(*cb)(struct afb_req)) timerset = 1; /* TODO: check statuses */ sevp.sigev_notify = SIGEV_THREAD_ID; sevp.sigev_signo = SIGALRM; + sevp.sigev_value.sival_ptr = NULL; #if defined(sigev_notify_thread_id) sevp.sigev_notify_thread_id = (pid_t)syscall(SYS_gettid); #else @@ -348,9 +370,8 @@ int afb_apis_handle(struct afb_req req, struct AFB_clientCtx *context, const cha v = a->plugin->apis; for (j = 0 ; v->name ; j++, v++) { if (!strncasecmp(v->name, verb, lenverb) && !v->name[lenverb]) { - req.context = context->contexts[i]; + req.context = &context->contexts[i]; handle(req, v); - context->contexts[i] = req.context; return 1; } }