8ca72704f7d3ded5813795b57d1805a3488531c3
[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 struct afb_req;
19
20 /* Plugin Type */
21 enum  AFB_pluginE
22 {
23         AFB_PLUGIN_JSON = 123456789,
24 /*      AFB_PLUGIN_JSCRIPT = 987654321, */
25         AFB_PLUGIN_RAW = 987123546
26 };
27
28 /* Enum for Session/Token/Authentication middleware */
29 enum AFB_sessionE
30 {
31         AFB_SESSION_NONE,
32         AFB_SESSION_CREATE,
33         AFB_SESSION_CLOSE,
34         AFB_SESSION_RENEW,
35         AFB_SESSION_CHECK
36 };
37
38 /* API definition */
39 struct AFB_restapi
40 {
41         const char *name;
42         enum AFB_sessionE session;
43         void (*callback)(struct afb_req req);
44         const char *info;
45 };
46
47 /* Plugin definition */
48 struct AFB_plugin
49 {
50         enum AFB_pluginE type;  
51         const char *info;
52         const char *prefix;
53         const struct AFB_restapi *apis;
54         void (*freeCtxCB)(void*);  // callback to free application context [null for standard free]
55 };
56
57 typedef enum AFB_pluginE AFB_pluginE;
58 typedef enum AFB_sessionE AFB_sessionE;
59 typedef void (*AFB_apiCB)(struct afb_req);
60 typedef void (*AFB_freeCtxCB)(void*);
61 typedef struct AFB_restapi AFB_restapi;
62 typedef struct AFB_plugin AFB_plugin;
63
64 extern const struct AFB_plugin *pluginRegister ();
65