Anjay Lite
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
anj_net_wrapper.h
Go to the documentation of this file.
1/*
2 * Copyright 2023-2025 AVSystem <avsystem@avsystem.com>
3 * AVSystem Anjay Lite LwM2M SDK
4 * All rights reserved.
5 *
6 * Licensed under AVSystem Anjay Lite LwM2M Client SDK - Non-Commercial License.
7 * See the attached LICENSE file for details.
8 */
9
10#ifndef ANJ_NET_WRAPPER_H
11#define ANJ_NET_WRAPPER_H
12
13#include <anj/anj_config.h>
14
16#ifdef ANJ_NET_WITH_UDP
18#endif // ANJ_NET_WITH_UDP
19#ifdef ANJ_NET_WITH_TCP
21#endif // ANJ_NET_WITH_TCP
22#ifdef ANJ_WITH_DTLS_BINDING
24#endif // ANJ_WITH_DTLS_BINDING
25#ifdef ANJ_WITH_TLS_BINDING
27#endif // ANJ_WITH_TLS_BINDING
28#ifdef ANJ_WITH_NON_IP_BINDING
30#endif // ANJ_WITH_NON_IP_BINDING
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
43
44// Wrapper for get_system_socket
46 anj_net_ctx_t *ctx) {
47 switch (type) {
48#if defined(ANJ_NET_WITH_UDP)
50 return anj_udp_get_system_socket(ctx);
51#endif // defined(ANJ_NET_WITH_UDP)
52#if defined(ANJ_NET_WITH_TCP)
54 return anj_tcp_get_system_socket(ctx);
55#endif // defined(ANJ_NET_WITH_TCP)
56#if defined(ANJ_WITH_DTLS_BINDING)
58 return anj_dtls_get_system_socket(ctx);
59#endif // defined(ANJ_WITH_DTLS_BINDING)
60#if defined(ANJ_WITH_TLS_BINDING)
62 return anj_tls_get_system_socket(ctx);
63#endif // defined(ANJ_WITH_TLS_BINDING)
64#if defined(ANJ_WITH_NON_IP_BINDING)
66 return anj_non_ip_get_system_socket(ctx);
67#endif // defined(ANJ_WITH_TLS_BINDING)
68 default:
69 return NULL;
70 }
71}
72
73// Wrapper for create_ctx
75 anj_net_ctx_t **ctx,
76 const anj_net_config_t *config) {
77 switch (type) {
78#if defined(ANJ_NET_WITH_UDP)
80 return anj_udp_create_ctx(ctx, config);
81#endif // defined(ANJ_NET_WITH_UDP)
82#if defined(ANJ_NET_WITH_TCP)
84 return anj_tcp_create_ctx(ctx, config);
85#endif // defined(ANJ_NET_WITH_TCP)
86#if defined(ANJ_WITH_DTLS_BINDING)
88 return anj_dtls_create_ctx(ctx, config);
89#endif // defined(ANJ_WITH_DTLS_BINDING)
90#if defined(ANJ_WITH_TLS_BINDING)
92 return anj_tls_create_ctx(ctx, config);
93#endif // defined(ANJ_WITH_TLS_BINDING)
94#if defined(ANJ_WITH_NON_IP_BINDING)
96 return anj_non_ip_create_ctx(ctx, config);
97#endif // defined(ANJ_WITH_NON_IP_BINDING)
98 default:
99 return ANJ_NET_ENOTSUP;
100 }
101}
102
103// Wrapper for connect
105 anj_net_ctx_t *ctx,
106 const char *hostname,
107 const char *port) {
108 switch (type) {
109#if defined(ANJ_NET_WITH_UDP)
111 return anj_udp_connect(ctx, hostname, port);
112#endif // defined(ANJ_NET_WITH_UDP)
113#if defined(ANJ_NET_WITH_TCP)
115 return anj_tcp_connect(ctx, hostname, port);
116#endif // defined(ANJ_NET_WITH_TCP)
117#if defined(ANJ_WITH_DTLS_BINDING)
119 return anj_dtls_connect(ctx, hostname, port);
120#endif // defined(ANJ_WITH_DTLS_BINDING)
121#if defined(ANJ_WITH_TLS_BINDING)
123 return anj_tls_connect(ctx, hostname, port);
124#endif // defined(ANJ_WITH_TLS_BINDING)
125#if defined(ANJ_WITH_NON_IP_BINDING)
127 return anj_non_ip_connect(ctx, hostname, port);
128#endif // defined(ANJ_WITH_NON_IP_BINDING)
129 default:
130 return ANJ_NET_ENOTSUP;
131 }
132}
133
134// Wrapper for send
136 anj_net_ctx_t *ctx,
137 size_t *bytes_sent,
138 const uint8_t *buf,
139 size_t length) {
140 switch (type) {
141#if defined(ANJ_NET_WITH_UDP)
143 return anj_udp_send(ctx, bytes_sent, buf, length);
144#endif // defined(ANJ_NET_WITH_UDP)
145#if defined(ANJ_NET_WITH_TCP)
147 return anj_tcp_send(ctx, bytes_sent, buf, length);
148#endif // defined(ANJ_NET_WITH_TCP)
149#if defined(ANJ_WITH_DTLS_BINDING)
151 return anj_dtls_send(ctx, bytes_sent, buf, length);
152#endif // defined(ANJ_WITH_DTLS_BINDING)
153#if defined(ANJ_WITH_TLS_BINDING)
155 return anj_tls_send(ctx, bytes_sent, buf, length);
156#endif // defined(ANJ_WITH_TLS_BINDING)
157#if defined(ANJ_WITH_NON_IP_BINDING)
159 return anj_non_ip_send(ctx, bytes_sent, buf, length);
160#endif // defined(ANJ_WITH_NON_IP_BINDING)
161 default:
162 return ANJ_NET_ENOTSUP;
163 }
164}
165
166// Wrapper for recv
168 anj_net_ctx_t *ctx,
169 size_t *bytes_received,
170 uint8_t *buf,
171 size_t length) {
172 switch (type) {
173#if defined(ANJ_NET_WITH_UDP)
175 return anj_udp_recv(ctx, bytes_received, buf, length);
176#endif // defined(ANJ_NET_WITH_UDP)
177#if defined(ANJ_NET_WITH_TCP)
179 return anj_tcp_recv(ctx, bytes_received, buf, length);
180#endif // defined(ANJ_NET_WITH_TCP)
181#if defined(ANJ_WITH_DTLS_BINDING)
183 return anj_dtls_recv(ctx, bytes_received, buf, length);
184#endif // defined(ANJ_WITH_DTLS_BINDING)
185#if defined(ANJ_WITH_TLS_BINDING)
187 return anj_tls_recv(ctx, bytes_received, buf, length);
188#endif // defined(ANJ_WITH_TLS_BINDING)
189#if defined(ANJ_WITH_NON_IP_BINDING)
191 return anj_non_ip_recv(ctx, bytes_received, buf, length);
192#endif // defined(ANJ_WITH_NON_IP_BINDING)
193 default:
194 return ANJ_NET_ENOTSUP;
195 }
196}
197
198// Wrapper for close
200 anj_net_ctx_t *ctx) {
201 switch (type) {
202#if defined(ANJ_NET_WITH_UDP)
204 return anj_udp_close(ctx);
205#endif // defined(ANJ_NET_WITH_UDP)
206#if defined(ANJ_NET_WITH_TCP)
208 return anj_tcp_close(ctx);
209#endif // defined(ANJ_NET_WITH_TCP)
210#if defined(ANJ_WITH_DTLS_BINDING)
212 return anj_dtls_close(ctx);
213#endif // defined(ANJ_WITH_DTLS_BINDING)
214#if defined(ANJ_WITH_TLS_BINDING)
216 return anj_tls_close(ctx);
217#endif // defined(ANJ_WITH_TLS_BINDING)
218#if defined(ANJ_WITH_NON_IP_BINDING)
220 return anj_non_ip_close(ctx);
221#endif // defined(ANJ_WITH_NON_IP_BINDING)
222 default:
223 return ANJ_NET_ENOTSUP;
224 }
225}
226
227// Wrapper for shutdown
229 anj_net_ctx_t *ctx) {
230 switch (type) {
231#if defined(ANJ_NET_WITH_UDP)
233 return anj_udp_shutdown(ctx);
234#endif // defined(ANJ_NET_WITH_UDP)
235#if defined(ANJ_NET_WITH_TCP)
237 return anj_tcp_shutdown(ctx);
238#endif // defined(ANJ_NET_WITH_TCP)
239#if defined(ANJ_WITH_DTLS_BINDING)
241 return anj_dtls_shutdown(ctx);
242#endif // defined(ANJ_WITH_DTLS_BINDING)
243#if defined(ANJ_WITH_TLS_BINDING)
245 return anj_tls_shutdown(ctx);
246#endif // defined(ANJ_WITH_TLS_BINDING)
247#if defined(ANJ_WITH_NON_IP_BINDING)
249 return anj_non_ip_shutdown(ctx);
250#endif // defined(ANJ_WITH_NON_IP_BINDING)
251 default:
252 return ANJ_NET_ENOTSUP;
253 }
254}
255
256// Wrapper for cleanup_ctx
258 anj_net_ctx_t **ctx) {
259 switch (type) {
260#if defined(ANJ_NET_WITH_UDP)
262 return anj_udp_cleanup_ctx(ctx);
263#endif // defined(ANJ_NET_WITH_UDP)
264#if defined(ANJ_NET_WITH_TCP)
266 return anj_tcp_cleanup_ctx(ctx);
267#endif // defined(ANJ_NET_WITH_TCP)
268#if defined(ANJ_WITH_DTLS_BINDING)
270 return anj_dtls_cleanup_ctx(ctx);
271#endif // defined(ANJ_WITH_DTLS_BINDING)
272#if defined(ANJ_WITH_TLS_BINDING)
274 return anj_tls_cleanup_ctx(ctx);
275#endif // defined(ANJ_WITH_TLS_BINDING)
276#if defined(ANJ_WITH_NON_IP_BINDING)
278 return anj_non_ip_cleanup_ctx(ctx);
279#endif // defined(ANJ_WITH_NON_IP_BINDING)
280 default:
281 return ANJ_NET_ENOTSUP;
282 }
283}
284
285// Wrapper for reuse_last_port
287 anj_net_ctx_t *ctx) {
288 switch (type) {
289#if defined(ANJ_NET_WITH_UDP)
291 return anj_udp_reuse_last_port(ctx);
292#endif // defined(ANJ_NET_WITH_UDP)
293#if defined(ANJ_NET_WITH_TCP)
295 return anj_tcp_reuse_last_port(ctx);
296#endif // defined(ANJ_NET_WITH_TCP)
297#if defined(ANJ_WITH_DTLS_BINDING)
299 return anj_dtls_reuse_last_port(ctx);
300#endif // defined(ANJ_WITH_DTLS_BINDING)
301#if defined(ANJ_WITH_TLS_BINDING)
303 return anj_tls_reuse_last_port(ctx);
304#endif // defined(ANJ_WITH_TLS_BINDING)
305#if defined(ANJ_WITH_NON_IP_BINDING)
307 return ANJ_NET_ENOTSUP;
308#endif // defined(ANJ_WITH_NON_IP_BINDING)
309 default:
310 return ANJ_NET_ENOTSUP;
311 }
312}
313
314// Wrapper for get_bytes_received
316 anj_net_ctx_t *ctx,
317 uint64_t *out_value) {
318 switch (type) {
319#if defined(ANJ_NET_WITH_UDP)
321 return anj_udp_get_bytes_received(ctx, out_value);
322#endif // defined(ANJ_NET_WITH_UDP)
323#if defined(ANJ_NET_WITH_TCP)
325 return anj_tcp_get_bytes_received(ctx, out_value);
326#endif // defined(ANJ_NET_WITH_TCP)
327#if defined(ANJ_WITH_DTLS_BINDING)
329 return anj_dtls_get_bytes_received(ctx, out_value);
330#endif // defined(ANJ_WITH_DTLS_BINDING)
331#if defined(ANJ_WITH_TLS_BINDING)
333 return anj_tls_get_bytes_received(ctx, out_value);
334#endif // defined(ANJ_WITH_TLS_BINDING)
335#if defined(ANJ_WITH_NON_IP_BINDING)
337 return anj_non_ip_get_bytes_received(ctx, out_value);
338#endif // defined(ANJ_WITH_NON_IP_BINDING)
339 default:
340 return ANJ_NET_ENOTSUP;
341 }
342}
343
344// Wrapper for get_bytes_sent
346 anj_net_ctx_t *ctx,
347 uint64_t *out_value) {
348 switch (type) {
349#if defined(ANJ_NET_WITH_UDP)
351 return anj_udp_get_bytes_sent(ctx, out_value);
352#endif // defined(ANJ_NET_WITH_UDP)
353#if defined(ANJ_NET_WITH_TCP)
355 return anj_tcp_get_bytes_sent(ctx, out_value);
356#endif // defined(ANJ_NET_WITH_TCP)
357#if defined(ANJ_WITH_DTLS_BINDING)
359 return anj_dtls_bytes_sent(ctx, out_value);
360#endif // defined(ANJ_WITH_DTLS_BINDING)
361#if defined(ANJ_WITH_TLS_BINDING)
363 return anj_tls_bytes_sent(ctx, out_value);
364#endif // defined(ANJ_WITH_TLS_BINDING)
365#if defined(ANJ_WITH_NON_IP_BINDING)
367 return anj_non_ip_get_bytes_sent(ctx, out_value);
368#endif // defined(ANJ_WITH_NON_IP_BINDING)
369 default:
370 return ANJ_NET_ENOTSUP;
371 }
372}
373
374// Wrapper for get_inner_mtu
376 anj_net_ctx_t *ctx,
377 int32_t *out_value) {
378 switch (type) {
379#if defined(ANJ_NET_WITH_UDP)
381 return anj_udp_get_inner_mtu(ctx, out_value);
382#endif // defined(ANJ_NET_WITH_UDP)
383#if defined(ANJ_NET_WITH_TCP)
385 return anj_tcp_get_inner_mtu(ctx, out_value);
386#endif // defined(ANJ_NET_WITH_TCP)
387#if defined(ANJ_WITH_DTLS_BINDING)
389 return anj_dtls_get_inner_mtu(ctx, out_value);
390#endif // defined(ANJ_WITH_DTLS_BINDING)
391#if defined(ANJ_WITH_TLS_BINDING)
393 return anj_tls_get_inner_mtu(ctx, out_value);
394#endif // defined(ANJ_WITH_TLS_BINDING)
395#if defined(ANJ_WITH_NON_IP_BINDING)
397 return anj_non_ip_get_inner_mtu(ctx, out_value);
398#endif // defined(ANJ_WITH_NON_IP_BINDING)
399 default:
400 return ANJ_NET_ENOTSUP;
401 }
402}
403
404// Wrapper for get_state
406 anj_net_ctx_t *ctx,
407 anj_net_socket_state_t *out_value) {
408 switch (type) {
409#if defined(ANJ_NET_WITH_UDP)
411 return anj_udp_get_state(ctx, out_value);
412#endif // defined(ANJ_NET_WITH_UDP)
413#if defined(ANJ_NET_WITH_TCP)
415 return anj_tcp_get_state(ctx, out_value);
416#endif // defined(ANJ_NET_WITH_TCP)
417#if defined(ANJ_WITH_DTLS_BINDING)
419 return anj_dtls_get_state(ctx, out_value);
420#endif // defined(ANJ_WITH_DTLS_BINDING)
421#if defined(ANJ_WITH_TLS_BINDING)
423 return anj_tls_get_state(ctx, out_value);
424#endif // defined(ANJ_WITH_TLS_BINDING)
425#if defined(ANJ_WITH_NON_IP_BINDING)
427 return anj_non_ip_get_state(ctx, out_value);
428#endif // defined(ANJ_WITH_NON_IP_BINDING)
429 default:
430 return ANJ_NET_ENOTSUP;
431 }
432}
433
434#ifdef __cplusplus
435}
436#endif
437
438#endif // ANJ_NET_WRAPPER_H
#define ANJ_NET_ENOTSUP
Definition anj_net_api.h:56
struct anj_net_ctx_struct anj_net_ctx_t
Definition anj_net_api.h:378
anj_net_socket_state_t
Definition anj_net_api.h:58
static int anj_net_get_bytes_sent(anj_net_binding_type_t type, anj_net_ctx_t *ctx, uint64_t *out_value)
Definition anj_net_wrapper.h:345
static int anj_net_get_bytes_received(anj_net_binding_type_t type, anj_net_ctx_t *ctx, uint64_t *out_value)
Definition anj_net_wrapper.h:315
static int anj_net_get_state(anj_net_binding_type_t type, anj_net_ctx_t *ctx, anj_net_socket_state_t *out_value)
Definition anj_net_wrapper.h:405
static const void * anj_net_get_system_socket(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:45
anj_net_binding_type_t
Definition anj_net_wrapper.h:36
@ ANJ_NET_BINDING_TCP
Definition anj_net_wrapper.h:38
@ ANJ_NET_BINDING_TLS
Definition anj_net_wrapper.h:40
@ ANJ_NET_BINDING_NON_IP
Definition anj_net_wrapper.h:41
@ ANJ_NET_BINDING_DTLS
Definition anj_net_wrapper.h:39
@ ANJ_NET_BINDING_UDP
Definition anj_net_wrapper.h:37
static int anj_net_create_ctx(anj_net_binding_type_t type, anj_net_ctx_t **ctx, const anj_net_config_t *config)
Definition anj_net_wrapper.h:74
static int anj_net_shutdown(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:228
static int anj_net_cleanup_ctx(anj_net_binding_type_t type, anj_net_ctx_t **ctx)
Definition anj_net_wrapper.h:257
static int anj_net_connect(anj_net_binding_type_t type, anj_net_ctx_t *ctx, const char *hostname, const char *port)
Definition anj_net_wrapper.h:104
static int anj_net_close(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:199
static int anj_net_recv(anj_net_binding_type_t type, anj_net_ctx_t *ctx, size_t *bytes_received, uint8_t *buf, size_t length)
Definition anj_net_wrapper.h:167
static int anj_net_get_inner_mtu(anj_net_binding_type_t type, anj_net_ctx_t *ctx, int32_t *out_value)
Definition anj_net_wrapper.h:375
static int anj_net_send(anj_net_binding_type_t type, anj_net_ctx_t *ctx, size_t *bytes_sent, const uint8_t *buf, size_t length)
Definition anj_net_wrapper.h:135
static int anj_net_reuse_last_port(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:286
anj_net_recv_t anj_tcp_recv
Definition anj_tcp.h:28
anj_net_get_state_t anj_tcp_get_state
Definition anj_tcp.h:36
anj_net_connect_t anj_tcp_connect
Definition anj_tcp.h:25
anj_net_create_ctx_t anj_tcp_create_ctx
Definition anj_tcp.h:26
anj_net_get_system_socket_t anj_tcp_get_system_socket
Definition anj_tcp.h:23
anj_net_get_bytes_sent_t anj_tcp_get_bytes_sent
Definition anj_tcp.h:34
anj_net_get_inner_mtu_t anj_tcp_get_inner_mtu
Definition anj_tcp.h:35
anj_net_close_t anj_tcp_close
Definition anj_tcp.h:24
anj_net_get_bytes_received_t anj_tcp_get_bytes_received
Definition anj_tcp.h:33
anj_net_shutdown_t anj_tcp_shutdown
Definition anj_tcp.h:29
anj_net_send_t anj_tcp_send
Definition anj_tcp.h:27
anj_net_reuse_last_port_t anj_tcp_reuse_last_port
Definition anj_tcp.h:31
anj_net_cleanup_ctx_t anj_tcp_cleanup_ctx
Definition anj_tcp.h:30
anj_net_reuse_last_port_t anj_udp_reuse_last_port
Definition anj_udp.h:31
anj_net_get_bytes_received_t anj_udp_get_bytes_received
Definition anj_udp.h:33
anj_net_send_t anj_udp_send
Definition anj_udp.h:27
anj_net_connect_t anj_udp_connect
Definition anj_udp.h:25
anj_net_get_bytes_sent_t anj_udp_get_bytes_sent
Definition anj_udp.h:34
anj_net_close_t anj_udp_close
Definition anj_udp.h:24
anj_net_get_system_socket_t anj_udp_get_system_socket
Definition anj_udp.h:23
anj_net_create_ctx_t anj_udp_create_ctx
Definition anj_udp.h:26
anj_net_recv_t anj_udp_recv
Definition anj_udp.h:28
anj_net_cleanup_ctx_t anj_udp_cleanup_ctx
Definition anj_udp.h:30
anj_net_get_state_t anj_udp_get_state
Definition anj_udp.h:36
anj_net_shutdown_t anj_udp_shutdown
Definition anj_udp.h:29
anj_net_get_inner_mtu_t anj_udp_get_inner_mtu
Definition anj_udp.h:35
Definition anj_net_api.h:370