diff options
-rw-r--r-- | include/afb-plugin.h | 65 | ||||
-rw-r--r-- | src/afb-apis.c | 32 | ||||
-rw-r--r-- | src/local-def.h | 4 |
3 files changed, 93 insertions, 8 deletions
diff --git a/include/afb-plugin.h b/include/afb-plugin.h new file mode 100644 index 00000000..8ca72704 --- /dev/null +++ b/include/afb-plugin.h @@ -0,0 +1,65 @@ +/* + * Copyright 2016 IoT.bzh + * Author: José Bollo <jose.bollo@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +struct afb_req; + +/* Plugin Type */ +enum AFB_pluginE +{ + AFB_PLUGIN_JSON = 123456789, +/* AFB_PLUGIN_JSCRIPT = 987654321, */ + AFB_PLUGIN_RAW = 987123546 +}; + +/* Enum for Session/Token/Authentication middleware */ +enum AFB_sessionE +{ + AFB_SESSION_NONE, + AFB_SESSION_CREATE, + AFB_SESSION_CLOSE, + AFB_SESSION_RENEW, + AFB_SESSION_CHECK +}; + +/* API definition */ +struct AFB_restapi +{ + const char *name; + enum AFB_sessionE session; + void (*callback)(struct afb_req req); + const char *info; +}; + +/* Plugin definition */ +struct AFB_plugin +{ + enum AFB_pluginE type; + const char *info; + const char *prefix; + const struct AFB_restapi *apis; + void (*freeCtxCB)(void*); // callback to free application context [null for standard free] +}; + +typedef enum AFB_pluginE AFB_pluginE; +typedef enum AFB_sessionE AFB_sessionE; +typedef void (*AFB_apiCB)(struct afb_req); +typedef void (*AFB_freeCtxCB)(void*); +typedef struct AFB_restapi AFB_restapi; +typedef struct AFB_plugin AFB_plugin; + +extern const struct AFB_plugin *pluginRegister (); + diff --git a/src/afb-apis.c b/src/afb-apis.c index 7dcb101a..0a04ed73 100644 --- a/src/afb-apis.c +++ b/src/afb-apis.c @@ -39,6 +39,7 @@ #include "local-def.h" +#include "afb-plugin.h" #include "afb-req-itf.h" #include "afb-apis.h" @@ -72,6 +73,7 @@ void afb_apis_free_context(int apiidx, void *context) free(context); } +/* const struct AFB_restapi *afb_apis_get(int apiidx, int verbidx) { assert(0 <= apiidx && apiidx < apis_count); @@ -90,6 +92,7 @@ int afb_apis_get_verbidx(int apiidx, const char *name) return idx; return -1; } +*/ int afb_apis_get_apiidx(const char *prefix, size_t length) { @@ -327,16 +330,30 @@ static void trapping_handle(struct afb_req req, void(*cb)(struct afb_req)) error_handler = older; } -static void handle(struct afb_req req, const struct api_desc *api, const struct AFB_restapi *verb) +static void handle(struct afb_req req, int idxapi, const struct AFB_restapi *verb) { switch(verb->session) { case AFB_SESSION_CREATE: + /* + req.context = afb_req_session_create(req, idxapi); + if (req.context == NULL) + return; + break; + */ case AFB_SESSION_RENEW: - /*if (check) new*/ + /* + req.context = afb_req_session_check(req, idxapi, 1); + if (req.context == NULL) + return; + */ break; case AFB_SESSION_CLOSE: case AFB_SESSION_CHECK: - /*check*/ + /* + req.context = afb_req_session_check(req, idxapi, 1); + if (req.context == NULL) + return; + */ break; case AFB_SESSION_NONE: default: @@ -345,8 +362,11 @@ static void handle(struct afb_req req, const struct api_desc *api, const struct } trapping_handle(req, verb->callback); - if (verb->session == AFB_SESSION_CLOSE) - /*close*/; + if (verb->session == AFB_SESSION_CLOSE) { + /* + afb_req_session_close(req); + */ + } } int afb_apis_handle(struct afb_req req, const char *api, size_t lenapi, const char *verb, size_t lenverb) @@ -361,7 +381,7 @@ int afb_apis_handle(struct afb_req req, const char *api, size_t lenapi, const ch v = a->plugin->apis; for (j = 0 ; v->name ; j++, v++) { if (!strncasecmp(v->name, verb, lenverb) && !v->name[lenverb]) { - handle(req, a, v); + handle(req, i, v); return 1; } } diff --git a/src/local-def.h b/src/local-def.h index f46dd97c..a1cac538 100644 --- a/src/local-def.h +++ b/src/local-def.h @@ -66,7 +66,7 @@ typedef enum { AFB_FALSE, AFB_TRUE, AFB_FATAL, AFB_FAIL, AFB_WARNING, AFB_EMPTY - +#if 0 // Plugin Type enum AFB_pluginE @@ -113,7 +113,7 @@ typedef struct AFB_restapi AFB_restapi; typedef struct AFB_plugin AFB_plugin; - +#endif |