refactoring in progress (tbf)
authorJosé Bollo <jose.bollo@iot.bzh>
Sat, 2 Apr 2016 13:08:02 +0000 (15:08 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Sat, 2 Apr 2016 13:08:02 +0000 (15:08 +0200)
Change-Id: I090ff42572a56c1d3ed3dbeccddf195d3bc09aa3
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
include/afb-plugin.h [new file with mode: 0644]
src/afb-apis.c
src/local-def.h

diff --git a/include/afb-plugin.h b/include/afb-plugin.h
new file mode 100644 (file)
index 0000000..8ca7270
--- /dev/null
@@ -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 ();
+
index 7dcb101..0a04ed7 100644 (file)
@@ -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;
                                }
                        }
index f46dd97..a1cac53 100644 (file)
@@ -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