X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fafb-apis.c;h=7d0feb39b4bd5c0fcbbfd3db27eada2501927710;hb=94014f46d4751492133f65b12f1dea1cfa36d021;hp=735649cac5f0399ccd9689d231eddc7a67ac2242;hpb=11d36a9f7e16aa9992835f8ce06f0e1e5297b131;p=src%2Fapp-framework-binder.git diff --git a/src/afb-apis.c b/src/afb-apis.c index 735649ca..7d0feb39 100644 --- a/src/afb-apis.c +++ b/src/afb-apis.c @@ -37,12 +37,14 @@ #include #include -#include "local-def.h" - #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 */ @@ -58,6 +60,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; @@ -75,6 +85,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; @@ -97,7 +116,7 @@ int afb_apis_add_plugin(const char *path) fprintf(stderr, "[%s] not an AFB plugin, continuing...\n", path); goto error2; } - if (verbose) + if (verbosity) fprintf(stderr, "[%s] is a valid AFB plugin\n", path); /* allocates enough memory */ @@ -114,8 +133,9 @@ int afb_apis_add_plugin(const char *path) fprintf(stderr, "ERROR: plugin [%s] memory missing. continuing...\n", path); goto error2; } - interface->verbose = 0; + interface->verbosity = 0; interface->mode = AFB_MODE_LOCAL; + interface->poll_open = itf_poll_open; /* init the plugin */ plugin = pluginRegisterFct(interface); @@ -151,7 +171,7 @@ int afb_apis_add_plugin(const char *path) } /* record the plugin */ - if (verbose) + if (verbosity) fprintf(stderr, "Loading plugin[%lu] prefix=[%s] info=%s\n", (unsigned long)apis_count, plugin->prefix, plugin->info); apis = &apis_array[apis_count]; apis->plugin = plugin; @@ -184,7 +204,7 @@ static int adddirs(char path[PATH_MAX], size_t end) fprintf(stderr, "ERROR in scanning plugin directory %s, %m\n", path); return -1; } - if (verbose) + if (verbosity) fprintf(stderr, "Scanning dir=[%s] for plugins\n", path); /* scan each entry */ @@ -289,6 +309,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 @@ -347,9 +368,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; } }