1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
/*
* Copyright (C) 2018, 2019 "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.
*/
#pragma once
/***************************************************************************************************/
#define afb_dynapi afb_api_x3
#define afb_dynapi_itf afb_api_x3_itf
#define afb_request afb_req_x2
#define afb_request_get_dynapi afb_req_x2_get_api
#define afb_request_get_vcbdata afb_req_x2_get_vcbdata
#define afb_request_get_api afb_req_x2_get_called_api
#define afb_request_get_verb afb_req_x2_get_called_verb
#define afb_request_wants_log_level afb_req_x2_wants_log_level
#define afb_request_get afb_req_x2_get
#define afb_request_value afb_req_x2_value
#define afb_request_path afb_req_x2_path
#define afb_request_json afb_req_x2_json
#define afb_request_reply afb_req_x2_reply
#define afb_request_reply_f afb_req_x2_reply_f
#define afb_request_reply_v afb_req_x2_reply_v
#define afb_request_success(r,o,i) afb_req_x2_reply(r,o,0,i)
#define afb_request_success_f(r,o,...) afb_req_x2_reply_f(r,o,0,__VA_ARGS__)
#define afb_request_success_v(r,o,f,v) afb_req_x2_reply_v(r,o,0,f,v)
#define afb_request_fail(r,e,i) afb_req_x2_reply(r,0,e,i)
#define afb_request_fail_f(r,e,f,...) afb_req_x2_reply_f(r,0,e,f,__VA_ARGS__)
#define afb_request_fail_v(r,e,f,v) afb_req_x2_reply_v(r,0,e,f,v)
#define afb_request_context_get afb_req_x2_context_get
#define afb_request_context_set afb_req_x2_context_set
#define afb_request_context afb_req_x2_context
#define afb_request_context_clear afb_req_x2_context_clear
#define afb_request_addref afb_req_x2_addref
#define afb_request_unref afb_req_x2_unref
#define afb_request_session_close afb_req_x2_session_close
#define afb_request_session_set_LOA afb_req_x2_session_set_LOA
#define afb_request_subscribe afb_req_x2_subscribe
#define afb_request_unsubscribe afb_req_x2_unsubscribe
#define afb_request_subcall afb_req_x2_subcall_legacy
#define afb_request_subcall_sync afb_req_x2_subcall_sync_legacy
#define afb_request_verbose afb_req_x2_verbose
#define afb_request_has_permission afb_req_x2_has_permission
#define afb_request_get_application_id afb_req_x2_get_application_id
#define afb_request_get_uid afb_req_x2_get_uid
#define afb_request_get_client_info afb_req_x2_get_client_info
#define afb_dynapi_name afb_api_x3_name
#define afb_dynapi_get_userdata afb_api_x3_get_userdata
#define afb_dynapi_set_userdata afb_api_x3_set_userdata
#define afb_dynapi_wants_log_level afb_api_x3_wants_log_level
#define afb_dynapi_verbose afb_api_x3_verbose
#define afb_dynapi_vverbose afb_api_x3_vverbose
#define afb_dynapi_get_event_loop afb_api_x3_get_event_loop
#define afb_dynapi_get_user_bus afb_api_x3_get_user_bus
#define afb_dynapi_get_system_bus afb_api_x3_get_system_bus
#define afb_dynapi_rootdir_get_fd afb_api_x3_rootdir_get_fd
#define afb_dynapi_rootdir_open_locale afb_api_x3_rootdir_open_locale
#define afb_dynapi_queue_job afb_api_x3_queue_job
#define afb_dynapi_require_api afb_api_x3_require_api
#define afb_dynapi_rename_api afb_api_x3_add_alias
#define afb_dynapi_broadcast_event afb_api_x3_broadcast_event
#define afb_dynapi_make_eventid afb_api_x3_make_event_x2
#define afb_dynapi_call afb_api_x3_call_legacy
#define afb_dynapi_call_sync afb_api_x3_call_sync_legacy
#define afb_dynapi_new_api(...) (-!afb_api_x3_new_api(__VA_ARGS__))
#define afb_dynapi_set_verbs_v2 afb_api_x3_set_verbs_v2
#define afb_dynapi_add_verb(a,b,c,d,e,f,g) afb_api_x3_add_verb(a,b,c,d,e,f,g,0)
#define afb_dynapi_sub_verb(a,b) afb_api_x3_del_verb(a,b,NULL)
#define afb_dynapi_on_event afb_api_x3_on_event
#define afb_dynapi_on_init afb_api_x3_on_init
#define afb_dynapi_seal afb_api_x3_seal
#define afb_eventid_broadcast afb_event_x2_broadcast
#define afb_eventid_push afb_event_x2_push
#define afb_eventid_name afb_event_x2_name
#define afb_eventid_unref afb_event_x2_unref
#define afb_eventid_addref afb_event_x2_addref
#define afb_eventid afb_event_x2
#define afb_eventid_is_valid afb_event_x2_is_valid
#define afb_eventid_broadcast afb_event_x2_broadcast
#define afb_eventid_push afb_event_x2_push
#define afb_eventid_drop afb_event_x2_unref
#define afb_eventid_name afb_event_x2_name
#define afb_eventid_unref afb_event_x2_unref
#define afb_eventid_addref afb_event_x2_addref
/*
* The function afbBindingVdyn if exported allows to create
* pure dynamic bindings. When the binding is loaded, it receives
* a virtual dynapi that can be used to create apis. The
* given API can not be used except for creating dynamic apis.
*/
extern int afbBindingVdyn(struct afb_dynapi *dynapi);
/*
* Macros for logging messages
*/
/* macro for setting file, line and function automatically */
# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_DETAILS)
#define AFB_REQUEST_VERBOSE(req,level,...) afb_req_x2_verbose(req,level,__FILE__,__LINE__,__func__,__VA_ARGS__)
#else
#define AFB_REQUEST_VERBOSE(req,level,...) afb_req_x2_verbose(req,level,NULL,0,NULL,__VA_ARGS__)
#endif
#if defined(AFB_BINDING_PRAGMA_NO_VERBOSE_DATA)
# define _AFB_DYNAPI_LOGGING_(llevel,dynapi,...) \
do{ \
if(_AFB_SYSLOG_MASK_WANT_(dynapi->logmask,llevel)) {\
if (llevel <= AFB_VERBOSITY_LEVEL_ERROR) \
afb_dynapi_verbose(dynapi,llevel,__FILE__,__LINE__,__func__,__VA_ARGS__); \
else \
afb_dynapi_verbose(dynapi,llevel,__FILE__,__LINE__,NULL,NULL); \
} \
}while(0)
# define _AFB_REQUEST_LOGGING_(llevel,request,...) \
do{ \
if(request->_AFB_SYSLOG_MASK_WANT_(dynapi->logmask,llevel)) \
afb_request_verbose(request,llevel,__FILE__,__LINE__,NULL,NULL); \
}while(0)
#elif defined(AFB_BINDING_PRAGMA_NO_VERBOSE_DETAILS)
# define _AFB_DYNAPI_LOGGING_(llevel,dynapi,...) \
do{ \
if(_AFB_SYSLOG_MASK_WANT_(dynapi->logmask,llevel)) \
afb_dynapi_verbose(dynapi,llevel,NULL,0,NULL,__VA_ARGS__); \
}while(0)
# define _AFB_REQUEST_LOGGING_(llevel,request,...) \
do{ \
if(request->_AFB_SYSLOG_MASK_WANT_(dynapi->logmask,llevel)) \
afb_request_verbose(request,llevel,NULL,0,NULL,__VA_ARGS__); \
}while(0)
#else
# define _AFB_DYNAPI_LOGGING_(llevel,dynapi,...) \
do{ \
if(AFB_SYSLOG_MASK_WANT(dynapi->logmask,llevel)) \
afb_dynapi_verbose(dynapi,llevel,__FILE__,__LINE__,__func__,__VA_ARGS__); \
}while(0)
# define _AFB_REQUEST_LOGGING_(llevel,request,...) \
do{ \
if(AFB_SYSLOG_MASK_WANT(request->api->logmask,llevel)) \
afb_request_verbose(request,llevel,__FILE__,__LINE__,__func__,__VA_ARGS__); \
}while(0)
#endif
#define AFB_DYNAPI_ERROR(...) _AFB_DYNAPI_LOGGING_(AFB_SYSLOG_LEVEL_ERROR,__VA_ARGS__)
#define AFB_DYNAPI_WARNING(...) _AFB_DYNAPI_LOGGING_(AFB_SYSLOG_LEVEL_WARNING,__VA_ARGS__)
#define AFB_DYNAPI_NOTICE(...) _AFB_DYNAPI_LOGGING_(AFB_SYSLOG_LEVEL_NOTICE,__VA_ARGS__)
#define AFB_DYNAPI_INFO(...) _AFB_DYNAPI_LOGGING_(AFB_SYSLOG_LEVEL_INFO,__VA_ARGS__)
#define AFB_DYNAPI_DEBUG(...) _AFB_DYNAPI_LOGGING_(AFB_SYSLOG_LEVEL_DEBUG,__VA_ARGS__)
#define AFB_REQUEST_ERROR(...) _AFB_REQUEST_LOGGING_(AFB_SYSLOG_LEVEL_ERROR,__VA_ARGS__)
#define AFB_REQUEST_WARNING(...) _AFB_REQUEST_LOGGING_(AFB_SYSLOG_LEVEL_WARNING,__VA_ARGS__)
#define AFB_REQUEST_NOTICE(...) _AFB_REQUEST_LOGGING_(AFB_SYSLOG_LEVEL_NOTICE,__VA_ARGS__)
#define AFB_REQUEST_INFO(...) _AFB_REQUEST_LOGGING_(AFB_SYSLOG_LEVEL_INFO,__VA_ARGS__)
#define AFB_REQUEST_DEBUG(...) _AFB_REQUEST_LOGGING_(AFB_SYSLOG_LEVEL_DEBUG,__VA_ARGS__)
typedef struct afb_eventid afb_eventid;
typedef struct afb_dynapi afb_dynapi;
typedef struct afb_request afb_request;
#define _AFB_SYSLOG_LEVEL_EMERGENCY_ AFB_SYSLOG_LEVEL_EMERGENCY
#define _AFB_SYSLOG_LEVEL_ALERT_ AFB_SYSLOG_LEVEL_ALERT
#define _AFB_SYSLOG_LEVEL_CRITICAL_ AFB_SYSLOG_LEVEL_CRITICAL
#define _AFB_SYSLOG_LEVEL_ERROR_ AFB_SYSLOG_LEVEL_ERROR
#define _AFB_SYSLOG_LEVEL_WARNING_ AFB_SYSLOG_LEVEL_WARNING
#define _AFB_SYSLOG_LEVEL_NOTICE_ AFB_SYSLOG_LEVEL_NOTICE
#define _AFB_SYSLOG_LEVEL_INFO_ AFB_SYSLOG_LEVEL_INFO
#define _AFB_SYSLOG_LEVEL_DEBUG_ AFB_SYSLOG_LEVEL_DEBUG
|