2c9935e67ec6533f33667ed45310101de09892cf
[src/app-framework-binder.git] / include / afb-plugin.h
1 /*
2  * Copyright 2016 IoT.bzh
3  * Author: José Bollo <jose.bollo@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #pragma once
19
20 struct afb_req;
21
22 /* Plugin Type */
23 enum  AFB_pluginE
24 {
25         AFB_PLUGIN_JSON = 123456789,
26 /*      AFB_PLUGIN_JSCRIPT = 987654321, */
27         AFB_PLUGIN_RAW = 987123546
28 };
29
30 /* Enum for Session/Token/Authentication middleware */
31 enum AFB_sessionE
32 {
33         AFB_SESSION_NONE,
34         AFB_SESSION_CREATE,
35         AFB_SESSION_CLOSE,
36         AFB_SESSION_RENEW,
37         AFB_SESSION_CHECK
38 };
39
40 /* API definition */
41 struct AFB_restapi
42 {
43         const char *name;
44         enum AFB_sessionE session;
45         void (*callback)(struct afb_req req);
46         const char *info;
47 };
48
49 /* Plugin definition */
50 struct AFB_plugin
51 {
52         enum AFB_pluginE type;  
53         const char *info;
54         const char *prefix;
55         const struct AFB_restapi *apis;
56         void (*freeCtxCB)(void*);  // callback to free application context [null for standard free]
57 };
58
59 /* config mode */
60 enum AFB_Mode {
61         AFB_MODE_LOCAL = 0,
62         AFB_MODE_REMOTE,
63         AFB_MODE_GLOBAL
64 };
65
66 struct AFB_interface
67 {
68         int verbosity;
69         enum AFB_Mode mode;
70         const struct afb_pollitf *pollitf;
71         void *pollclosure;
72 };
73
74 extern const struct AFB_plugin *pluginRegister (const struct AFB_interface *interface);
75