aboutsummaryrefslogtreecommitdiffstats
path: root/include/afb/afb-binding.h
blob: 69be174a5ac5a8a1b7d9641ccf6538f1fb6ff4a7 (plain)
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
/*
 * Copyright (C) 2016, 2017 "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

#include <stdarg.h>

/*****************************************************************************
 * This files is the main file to include for writing bindings dedicated to
 *
 *                      AFB-DAEMON
 *
 * Functions of bindings of afb-daemon are accessible by authorized clients
 * through the apis module of afb-daemon.
 */

#define AFB_BINDING_LOWER_VERSION     1
#define AFB_BINDING_UPPER_VERSION     2

#ifndef AFB_BINDING_VERSION
#define AFB_BINDING_VERSION   1
#pragma GCC warning "\
\n\
\n\
  AFB_BINDING_VERSION should be defined before including <afb/afb-binding.h>\n\
  AFB_BINDING_VERSION defines the version of binding that you use.\n\
  Currently, known versions are 1 or 2.\n\
  Setting now AFB_BINDING_VERSION to 1 (version 1 by default)\n\
  NOTE THAT VERSION 2 IS NOW RECOMMENDED!\n\
  Consider to add one of the following define before including <afb/afb-binding.h>:\n\
\n\
    #define AFB_BINDING_VERSION 1\n\
    #define AFB_BINDING_VERSION 2\n\
\n\
  Note that in some case it will enforce you to include <stdio.h>\n\
"
#include <stdio.h> /* old version side effect */
#else
#  if AFB_BINDING_VERSION == 1
#    pragma GCC warning "Using binding version 1, consider to switch to version 2"
#  endif
#endif

#if AFB_BINDING_VERSION != 0
# if AFB_BINDING_VERSION < AFB_BINDING_LOWER_VERSION || AFB_BINDING_VERSION > AFB_BINDING_UPPER_VERSION
#  error "Unsupported binding version AFB_BINDING_VERSION " #AFB_BINDING_VERSION
# endif
#endif

/*
 * Some function of the library are exported to afb-daemon.
 */

#include "afb-binding-v1.h"
#include "afb-binding-v2.h"

typedef struct afb_verb_desc_v1         afb_verb_desc_v1;
typedef struct afb_binding_desc_v1      afb_binding_desc_v1;
typedef struct afb_binding_v1           afb_binding_v1;
typedef struct afb_binding_interface_v1 afb_binding_interface_v1;

typedef struct afb_verb_v2              afb_verb_v2;
typedef struct afb_binding_v2           afb_binding_v2;

typedef enum   afb_auth_type            afb_auth_type;
typedef struct afb_auth                 afb_auth;
typedef struct afb_daemon               afb_daemon;
typedef struct afb_event                afb_event;
typedef struct afb_arg                  afb_arg;
typedef struct afb_req                  afb_req;
typedef struct afb_stored_req           afb_stored_req;
typedef struct afb_service              afb_service;

#if 0
/* these typedef's shouldn't be needed */
typedef enum   afb_binding_type_v1      afb_binding_type_v1;
typedef enum   afb_mode_v1              afb_mode_v1;
typedef enum   afb_session_flags_v1     afb_session_flags_v1;
typedef enum   afb_session_flags_v2     afb_session_flags_v2;
typedef struct afb_binding_data_v2      afb_binding_data_v2;
typedef struct afb_daemon_itf           afb_daemon_itf;
typedef struct afb_event_itf            afb_event_itf;
typedef struct afb_req_itf              afb_req_itf;
typedef struct afb_service_itf          afb_service_itf;
#endif

/***************************************************************************************************/

#if AFB_BINDING_VERSION == 1

# define afb_binding		afb_binding_v1
# define afb_binding_interface	afb_binding_interface_v1

# define AFB_SESSION_NONE	AFB_SESSION_NONE_V1
# define AFB_SESSION_CREATE	AFB_SESSION_CREATE_V1
# define AFB_SESSION_CLOSE	AFB_SESSION_CLOSE_V1
# define AFB_SESSION_RENEW	AFB_SESSION_RENEW_V1
# define AFB_SESSION_CHECK	AFB_SESSION_CHECK_V1

# define AFB_SESSION_LOA_GE	AFB_SESSION_LOA_GE_V1
# define AFB_SESSION_LOA_LE	AFB_SESSION_LOA_LE_V1
# define AFB_SESSION_LOA_EQ	AFB_SESSION_LOA_EQ_V1

# define AFB_SESSION_LOA_SHIFT	AFB_SESSION_LOA_SHIFT_V1
# define AFB_SESSION_LOA_MASK	AFB_SESSION_LOA_MASK_V1

# define AFB_SESSION_LOA_0	AFB_SESSION_LOA_0_V1
# define AFB_SESSION_LOA_1	AFB_SESSION_LOA_1_V1
# define AFB_SESSION_LOA_2	AFB_SESSION_LOA_2_V1
# define AFB_SESSION_LOA_3	AFB_SESSION_LOA_3_V1
# define AFB_SESSION_LOA_4	AFB_SESSION_LOA_4_V1

# define AFB_SESSION_LOA_LE_0	AFB_SESSION_LOA_LE_0_V1
# define AFB_SESSION_LOA_LE_1	AFB_SESSION_LOA_LE_1_V1
# define AFB_SESSION_LOA_LE_2	AFB_SESSION_LOA_LE_2_V1
# define AFB_SESSION_LOA_LE_3	AFB_SESSION_LOA_LE_3_V1

# define AFB_SESSION_LOA_EQ_0	AFB_SESSION_LOA_EQ_0_V1
# define AFB_SESSION_LOA_EQ_1	AFB_SESSION_LOA_EQ_1_V1
# define AFB_SESSION_LOA_EQ_2	AFB_SESSION_LOA_EQ_2_V1
# define AFB_SESSION_LOA_EQ_3	AFB_SESSION_LOA_EQ_3_V1

# define AFB_SESSION_LOA_GE_0	AFB_SESSION_LOA_GE_0_V1
# define AFB_SESSION_LOA_GE_1	AFB_SESSION_LOA_GE_1_V1
# define AFB_SESSION_LOA_GE_2	AFB_SESSION_LOA_GE_2_V1
# define AFB_SESSION_LOA_GE_3	AFB_SESSION_LOA_GE_3_V1

# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO)

#  define AFB_ERROR		AFB_ERROR_V1
#  define AFB_WARNING		AFB_WARNING_V1
#  define AFB_NOTICE		AFB_NOTICE_V1
#  define AFB_INFO		AFB_INFO_V1
#  define AFB_DEBUG		AFB_DEBUG_V1

#  define AFB_REQ_ERROR		AFB_REQ_ERROR_V1
#  define AFB_REQ_WARNING	AFB_REQ_WARNING_V1
#  define AFB_REQ_NOTICE	AFB_REQ_NOTICE_V1
#  define AFB_REQ_INFO		AFB_REQ_INFO_V1
#  define AFB_REQ_DEBUG		AFB_REQ_DEBUG_V1

# endif

#define afb_daemon_get_event_loop	afb_daemon_get_event_loop_v1
#define afb_daemon_get_user_bus		afb_daemon_get_user_bus_v1
#define afb_daemon_get_system_bus	afb_daemon_get_system_bus_v1
#define afb_daemon_broadcast_event	afb_daemon_broadcast_event_v1
#define afb_daemon_make_event		afb_daemon_make_event_v1
#define afb_daemon_verbose		afb_daemon_verbose_v1
#define afb_daemon_rootdir_get_fd	afb_daemon_rootdir_get_fd_v1
#define afb_daemon_rootdir_open_locale	afb_daemon_rootdir_open_locale_v1
#define afb_daemon_queue_job		afb_daemon_queue_job_v1
#define afb_daemon_require_api		afb_daemon_require_api_v1

#define afb_service_call		afb_service_call_v1
#define afb_service_call_sync		afb_service_call_sync_v1

#define afb_req_store			afb_req_store_v1
#define afb_req_unstore			afb_req_unstore_v1

#endif

/***************************************************************************************************/

#if AFB_BINDING_VERSION == 2

# define afb_binding		afb_binding_v2
# define afb_get_verbosity	afb_get_verbosity_v2
# define afb_get_daemon		afb_get_daemon_v2
# define afb_get_service	afb_get_service_v2


# define AFB_SESSION_NONE	AFB_SESSION_NONE_V2
# define AFB_SESSION_CLOSE	AFB_SESSION_CLOSE_V2
# define AFB_SESSION_RENEW	AFB_SESSION_REFRESH_V2
# define AFB_SESSION_REFRESH	AFB_SESSION_REFRESH_V2
# define AFB_SESSION_CHECK	AFB_SESSION_CHECK_V2

# define AFB_SESSION_LOA_MASK	AFB_SESSION_LOA_MASK_V2

# define AFB_SESSION_LOA_0	AFB_SESSION_LOA_0_V2
# define AFB_SESSION_LOA_1	AFB_SESSION_LOA_1_V2
# define AFB_SESSION_LOA_2	AFB_SESSION_LOA_2_V2
# define AFB_SESSION_LOA_3	AFB_SESSION_LOA_3_V2

# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO)

#  define AFB_ERROR		AFB_ERROR_V2
#  define AFB_WARNING		AFB_WARNING_V2
#  define AFB_NOTICE		AFB_NOTICE_V2
#  define AFB_INFO		AFB_INFO_V2
#  define AFB_DEBUG		AFB_DEBUG_V2

#  define AFB_REQ_ERROR		AFB_REQ_ERROR_V2
#  define AFB_REQ_WARNING	AFB_REQ_WARNING_V2
#  define AFB_REQ_NOTICE	AFB_REQ_NOTICE_V2
#  define AFB_REQ_INFO		AFB_REQ_INFO_V2
#  define AFB_REQ_DEBUG		AFB_REQ_DEBUG_V2

# endif

#define afb_daemon_get_event_loop	afb_daemon_get_event_loop_v2
#define afb_daemon_get_user_bus		afb_daemon_get_user_bus_v2
#define afb_daemon_get_system_bus	afb_daemon_get_system_bus_v2
#define afb_daemon_broadcast_event	afb_daemon_broadcast_event_v2
#define afb_daemon_make_event		afb_daemon_make_event_v2
#define afb_daemon_verbose		afb_daemon_verbose_v2
#define afb_daemon_rootdir_get_fd	afb_daemon_rootdir_get_fd_v2
#define afb_daemon_rootdir_open_locale	afb_daemon_rootdir_open_locale_v2
#define afb_daemon_queue_job		afb_daemon_queue_job_v2
#define afb_daemon_unstore_req		afb_daemon_unstore_req_v2
#define afb_daemon_require_api		afb_daemon_require_api_v2

#define afb_service_call		afb_service_call_v2
#define afb_service_call_sync		afb_service_call_sync_v2

#define afb_req_store			afb_req_store_v2
#define afb_req_unstore			afb_daemon_unstore_req_v2

#endif

/***************************************************************************************************/

#if AFB_BINDING_VERSION >= 2

# define afb_verbose_error()	(afb_get_verbosity() >= 0)
# define afb_verbose_warning()	(afb_get_verbosity() >= 1)
# define afb_verbose_notice()	(afb_get_verbosity() >= 1)
# define afb_verbose_info()	(afb_get_verbosity() >= 2)
# define afb_verbose_debug()	(afb_get_verbosity() >= 3)

#endif

/***************************************************************************************************/

#if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_UNPREFIX)
# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO)
#  define ERROR			AFB_ERROR
#  define WARNING		AFB_WARNING
#  define NOTICE		AFB_NOTICE
#  define INFO			AFB_INFO
#  define DEBUG			AFB_DEBUG

#  define REQ_ERROR		AFB_REQ_ERROR
#  define REQ_WARNING		AFB_REQ_WARNING
#  define REQ_NOTICE		AFB_REQ_NOTICE
#  define REQ_INFO		AFB_REQ_INFO
#  define REQ_DEBUG		AFB_REQ_DEBUG
# endif
#endif