X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fafb-apis.c;h=9dcb18098cec5b8de4942d81747e329e4390cc8e;hb=b75bbfd9bd96ad8bb7174a768ae70cf3e8c5af7a;hp=735649cac5f0399ccd9689d231eddc7a67ac2242;hpb=11d36a9f7e16aa9992835f8ce06f0e1e5297b131;p=src%2Fapp-framework-binder.git diff --git a/src/afb-apis.c b/src/afb-apis.c index 735649ca..9dcb1809 100644 --- a/src/afb-apis.c +++ b/src/afb-apis.c @@ -41,8 +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 */ @@ -58,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; @@ -75,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; @@ -97,7 +118,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 +135,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 +173,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 +206,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 */ @@ -347,9 +369,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; } }