--- /dev/null
+/*
+ * 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 ();
+
#include "local-def.h"
+#include "afb-plugin.h"
#include "afb-req-itf.h"
#include "afb-apis.h"
free(context);
}
+/*
const struct AFB_restapi *afb_apis_get(int apiidx, int verbidx)
{
assert(0 <= apiidx && apiidx < apis_count);
return idx;
return -1;
}
+*/
int afb_apis_get_apiidx(const char *prefix, size_t length)
{
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:
}
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)
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;
}
}