X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Frest-api.c;h=83bb2d22e1a4c4fbcbdd91a9bf0200130215a98d;hb=d00571d3c5365f40e7ec2ec3ab0f636afa0db480;hp=4f06066e8cb20a95ad44f04e54d5075febbe5842;hpb=e7c246a1b0d30b8156c7033061a61ecb5d2bdfc8;p=src%2Fapp-framework-binder.git diff --git a/src/rest-api.c b/src/rest-api.c index 4f06066e..83bb2d22 100644 --- a/src/rest-api.c +++ b/src/rest-api.c @@ -37,7 +37,7 @@ static json_object *afbJsonType; // Sample Generic Ping Debug API -PUBLIC json_object* apiPingTest(AFB_request *request) { +PUBLIC json_object* apiPingTest(AFB_request *request, void *pluginHandle) { static pingcount = 0; json_object *response; char query [512]; @@ -51,8 +51,8 @@ PUBLIC json_object* apiPingTest(AFB_request *request) { if (request->post == NULL) request->post="NoData"; // return response to caller - response = jsonNewMessage(AFB_SUCCESS, "Ping Binder Daemon count=%d CtxtId=%d Loa=%d query={%s} PostData: \'%s\' " - , pingcount++, request->client->cid, request->loa, query, request->post); + response = jsonNewMessage(AFB_SUCCESS, "Ping Binder Daemon count=%d CtxtId=%d Loa=%d query={%s} Handle=0x%x PostData: \'%s\' " + , pingcount++, request->client->cid, request->loa, query, request->post, pluginHandle); return (response); } @@ -154,7 +154,7 @@ STATIC AFB_error callPluginApi(AFB_plugin *plugin, AFB_request *request) { ctxClientGet(request); // Effectively call the API with a subset of the context - jresp = plugin->apis[idx].callback(request); + jresp = plugin->apis[idx].callback(request, plugin->handle); // API should return NULL of a valid Json Object if (jresp == NULL) { @@ -278,11 +278,11 @@ PUBLIC int doRestApi(struct MHD_Connection *connection, AFB_session *session, co // build request structure memset(&request, 0, sizeof (request)); request.connection = connection; - request.config = session->config; - request.url = url; + request.config = session->config; + request.url = url; request.plugin = baseurl; - request.api = baseapi; - request.jresp = json_object_new_object(); + request.api = baseapi; + request.jresp = json_object_new_object(); // increase reference count and add jtype to response json_object_get (afbJsonType); @@ -312,7 +312,7 @@ PUBLIC int doRestApi(struct MHD_Connection *connection, AFB_session *session, co free(urlcpy1); // client did not pass token on URI let's use cookies - if (!request.restfull) { + if ((!request.restfull) && (request.client != NULL)) { char cookie[64]; snprintf (cookie, sizeof (cookie), "%s=%s", COOKIE_NAME, request.client->uuid); MHD_add_response_header (webResponse, MHD_HTTP_HEADER_SET_COOKIE, cookie); @@ -339,12 +339,12 @@ ExitOnError: // Loop on plugins. Check that they have the right type, prepare a JSON object with prefix -STATIC AFB_plugin ** RegisterPlugins(AFB_plugin **plugins) { +STATIC AFB_plugin ** RegisterJsonPlugins(AFB_plugin **plugins) { int idx, jdx; for (idx = 0; plugins[idx] != NULL; idx++) { - if (plugins[idx]->type != AFB_PLUGIN) { - fprintf(stderr, "ERROR: AFSV plugin[%d] invalid type=%d != %d\n", idx, AFB_PLUGIN, plugins[idx]->type); + if (plugins[idx]->type != AFB_PLUGIN_JSON) { + fprintf(stderr, "ERROR: AFSV plugin[%d] invalid type=%d != %d\n", idx, AFB_PLUGIN_JSON, plugins[idx]->type); } else { // some sanity controls if ((plugins[idx]->prefix == NULL) || (plugins[idx]->info == NULL) || (plugins[idx]->apis == NULL)) { @@ -356,10 +356,6 @@ STATIC AFB_plugin ** RegisterPlugins(AFB_plugin **plugins) { if (verbose) fprintf(stderr, "Loading plugin[%d] prefix=[%s] info=%s\n", idx, plugins[idx]->prefix, plugins[idx]->info); - // register private to plugin global context [cid=0] - plugins[idx]->ctxGlobal= malloc (sizeof (AFB_clientCtx)); - plugins[idx]->ctxGlobal->cid=0; - // Prebuild plugin jtype to boost API response plugins[idx]->jtype = json_object_new_string(plugins[idx]->prefix); json_object_get(plugins[idx]->jtype); // increase reference count to make it permanent @@ -370,8 +366,8 @@ STATIC AFB_plugin ** RegisterPlugins(AFB_plugin **plugins) { for (jdx = 0; plugins[idx]->apis[jdx].name != NULL; jdx++) { AFB_privateApi *private = malloc (sizeof (AFB_privateApi)); if (plugins[idx]->apis[jdx].private != NULL) { - fprintf (stderr, "WARNING: plugin=%s api=%s private handle should be NULL\n" - ,plugins[idx]->prefix,plugins[idx]->apis[jdx].name); + fprintf (stderr, "WARNING: plugin=%s api=%s private handle should be NULL=0x%x\n" + ,plugins[idx]->prefix,plugins[idx]->apis[jdx].name, plugins[idx]->apis[jdx].private); } private->len = strlen (plugins[idx]->apis[jdx].name); private->jtype=json_object_new_string(plugins[idx]->apis[jdx].name); @@ -397,5 +393,5 @@ void initPlugins(AFB_session *session) { plugins[i++] = NULL; // complete plugins and save them within current sessions - session->plugins = RegisterPlugins(plugins); + session->plugins = RegisterJsonPlugins(plugins); }