summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFulup Ar Foll <fulup@iot.bzh>2015-12-24 00:38:41 +0100
committerFulup Ar Foll <fulup@iot.bzh>2015-12-24 00:38:41 +0100
commit06d422d1de5c505366f6a029d8af85548c2b646f (patch)
tree8d37559bff36bcb5237a203b9ac874286fdfe028 /src
parentc6853a55ca911415e6851de27621b7022a665933 (diff)
Fixed Client Session Context by Plugin
Diffstat (limited to 'src')
-rw-r--r--src/rest-api.c12
-rw-r--r--src/session.c4
2 files changed, 8 insertions, 8 deletions
diff --git a/src/rest-api.c b/src/rest-api.c
index c08d18c8..e19e1f2b 100644
--- a/src/rest-api.c
+++ b/src/rest-api.c
@@ -195,9 +195,12 @@ STATIC AFB_error callPluginApi(AFB_request *request, int plugidx, void *context)
}
}
- // Effectively call the API with a subset of the context
+ // Effectively CALL PLUGIN API with a subset of the context
jresp = plugin->apis[idx].callback(request, context);
+ // Store context in case it was updated by plugins
+ clientCtx->contexts[plugidx] = request->context;
+
// handle intermediary Post Iterates out of band
if ((jresp == NULL) && (request->errcode == MHD_HTTP_OK)) return (AFB_SUCCESS);
@@ -345,12 +348,7 @@ STATIC AFB_request *createRequest (struct MHD_Connection *connection, AFB_sessio
request->prefix = strdup (baseurl);
request->api = strdup (baseapi);
request->plugins= session->plugins;
- for (idx = 0; idx < session->config->pluginCount; idx++) {
- if (!strcmp(baseurl, session->plugins[idx]->prefix)) {
- request->plugin = session->plugins[idx];
- break;
- }
- }
+ // note request->handle is fed with request->context in ctxClientGet
Done:
free(urlcpy1);
diff --git a/src/session.c b/src/session.c
index f9f24d21..781ecd94 100644
--- a/src/session.c
+++ b/src/session.c
@@ -330,7 +330,7 @@ STATIC void ctxUuidFreeCB (AFB_clientCtx *client) {
if (client->contexts[idx] != NULL) {
freeCtxCB = client->plugins[idx]->freeCtxCB;
if (freeCtxCB == NULL) free (client->contexts[idx]);
- else if (freeCtxCB != (void*)-1) freeCtxCB(client->contexts[idx], client->plugins[idx]->handle, client->uuid);
+ else if (freeCtxCB != (void*)-1) freeCtxCB(client->contexts[idx], plugins[idx]->handle, client->uuid);
}
}
}
@@ -466,6 +466,7 @@ PUBLIC AFB_clientCtx *ctxClientGet (AFB_request *request, int idx) {
clientCtx=NULL;
} else {
request->context=clientCtx->contexts[idx];
+ request->handle = clientCtx->plugins[idx]->handle;
request->uuid= uuid;
return (clientCtx);
}
@@ -493,6 +494,7 @@ PUBLIC AFB_clientCtx *ctxClientGet (AFB_request *request, int idx) {
// if (verbose) fprintf (stderr, "ctxClientGet New uuid=[%s] token=[%s] timestamp=%d\n", clientCtx->uuid, clientCtx->token, clientCtx->timeStamp);
request->context = clientCtx->contexts[idx];
+ request->handle = clientCtx->plugins[idx]->handle;
request->uuid=clientCtx->uuid;
return(clientCtx);
}