summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/afb-plugin.h65
-rw-r--r--src/afb-apis.c32
-rw-r--r--src/local-def.h4
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