Anjay Lite
Loading...
Searching...
No Matches
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#include <anj/init.h>
11
34#ifndef ANJ_NET_WRAPPER_H
35# define ANJ_NET_WRAPPER_H
36
38# ifdef ANJ_NET_WITH_UDP
40# endif // ANJ_NET_WITH_UDP
41# ifdef ANJ_NET_WITH_TCP
43# endif // ANJ_NET_WITH_TCP
44# ifdef ANJ_NET_WITH_DTLS
46# endif // ANJ_NET_WITH_DTLS
47# ifdef ANJ_NET_WITH_TLS
49# endif // ANJ_NET_WITH_TLS
50# ifdef ANJ_NET_WITH_NON_IP_BINDING
52# endif // ANJ_NET_WITH_NON_IP_BINDING
53
54# ifdef __cplusplus
55extern "C" {
56# endif
57
60 anj_net_ctx_t **ctx,
61 const anj_net_config_t *config) {
62 switch (type) {
63# if defined(ANJ_NET_WITH_UDP)
65 return anj_udp_create_ctx(ctx, config);
66# endif // defined(ANJ_NET_WITH_UDP)
67# if defined(ANJ_NET_WITH_TCP)
69 return anj_tcp_create_ctx(ctx, config);
70# endif // defined(ANJ_NET_WITH_TCP)
71# if defined(ANJ_NET_WITH_DTLS)
73 return anj_dtls_create_ctx(ctx, config);
74# endif // defined(ANJ_NET_WITH_DTLS)
75# if defined(ANJ_NET_WITH_TLS)
77 return anj_tls_create_ctx(ctx, config);
78# endif // defined(ANJ_NET_WITH_TLS)
79# if defined(ANJ_NET_WITH_NON_IP_BINDING)
81 return anj_non_ip_create_ctx(ctx, config);
82# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
83 default:
84 return ANJ_NET_ENOTSUP;
85 }
86}
87
90 anj_net_ctx_t *ctx,
91 const char *hostname,
92 const char *port) {
93 switch (type) {
94# if defined(ANJ_NET_WITH_UDP)
96 return anj_udp_connect(ctx, hostname, port);
97# endif // defined(ANJ_NET_WITH_UDP)
98# if defined(ANJ_NET_WITH_TCP)
100 return anj_tcp_connect(ctx, hostname, port);
101# endif // defined(ANJ_NET_WITH_TCP)
102# if defined(ANJ_NET_WITH_DTLS)
104 return anj_dtls_connect(ctx, hostname, port);
105# endif // defined(ANJ_NET_WITH_DTLS)
106# if defined(ANJ_NET_WITH_TLS)
108 return anj_tls_connect(ctx, hostname, port);
109# endif // defined(ANJ_NET_WITH_TLS)
110# if defined(ANJ_NET_WITH_NON_IP_BINDING)
112 return anj_non_ip_connect(ctx, hostname, port);
113# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
114 default:
115 return ANJ_NET_ENOTSUP;
116 }
117}
118
121 anj_net_ctx_t *ctx,
122 size_t *bytes_sent,
123 const uint8_t *buf,
124 size_t length) {
125 switch (type) {
126# if defined(ANJ_NET_WITH_UDP)
128 return anj_udp_send(ctx, bytes_sent, buf, length);
129# endif // defined(ANJ_NET_WITH_UDP)
130# if defined(ANJ_NET_WITH_TCP)
132 return anj_tcp_send(ctx, bytes_sent, buf, length);
133# endif // defined(ANJ_NET_WITH_TCP)
134# if defined(ANJ_NET_WITH_DTLS)
136 return anj_dtls_send(ctx, bytes_sent, buf, length);
137# endif // defined(ANJ_NET_WITH_DTLS)
138# if defined(ANJ_NET_WITH_TLS)
140 return anj_tls_send(ctx, bytes_sent, buf, length);
141# endif // defined(ANJ_NET_WITH_TLS)
142# if defined(ANJ_NET_WITH_NON_IP_BINDING)
144 return anj_non_ip_send(ctx, bytes_sent, buf, length);
145# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
146 default:
147 return ANJ_NET_ENOTSUP;
148 }
149}
150
153 anj_net_ctx_t *ctx,
154 size_t *bytes_received,
155 uint8_t *buf,
156 size_t length) {
157 switch (type) {
158# if defined(ANJ_NET_WITH_UDP)
160 return anj_udp_recv(ctx, bytes_received, buf, length);
161# endif // defined(ANJ_NET_WITH_UDP)
162# if defined(ANJ_NET_WITH_TCP)
164 return anj_tcp_recv(ctx, bytes_received, buf, length);
165# endif // defined(ANJ_NET_WITH_TCP)
166# if defined(ANJ_NET_WITH_DTLS)
168 return anj_dtls_recv(ctx, bytes_received, buf, length);
169# endif // defined(ANJ_NET_WITH_DTLS)
170# if defined(ANJ_NET_WITH_TLS)
172 return anj_tls_recv(ctx, bytes_received, buf, length);
173# endif // defined(ANJ_NET_WITH_TLS)
174# if defined(ANJ_NET_WITH_NON_IP_BINDING)
176 return anj_non_ip_recv(ctx, bytes_received, buf, length);
177# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
178 default:
179 return ANJ_NET_ENOTSUP;
180 }
181}
182
185 anj_net_ctx_t *ctx) {
186 switch (type) {
187# if defined(ANJ_NET_WITH_UDP)
189 return anj_udp_close(ctx);
190# endif // defined(ANJ_NET_WITH_UDP)
191# if defined(ANJ_NET_WITH_TCP)
193 return anj_tcp_close(ctx);
194# endif // defined(ANJ_NET_WITH_TCP)
195# if defined(ANJ_NET_WITH_DTLS)
197 return anj_dtls_close(ctx);
198# endif // defined(ANJ_NET_WITH_DTLS)
199# if defined(ANJ_NET_WITH_TLS)
201 return anj_tls_close(ctx);
202# endif // defined(ANJ_NET_WITH_TLS)
203# if defined(ANJ_NET_WITH_NON_IP_BINDING)
205 return anj_non_ip_close(ctx);
206# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
207 default:
208 return ANJ_NET_ENOTSUP;
209 }
210}
211
214 anj_net_ctx_t *ctx) {
215 switch (type) {
216# if defined(ANJ_NET_WITH_UDP)
218 return anj_udp_shutdown(ctx);
219# endif // defined(ANJ_NET_WITH_UDP)
220# if defined(ANJ_NET_WITH_TCP)
222 return anj_tcp_shutdown(ctx);
223# endif // defined(ANJ_NET_WITH_TCP)
224# if defined(ANJ_NET_WITH_DTLS)
226 return anj_dtls_shutdown(ctx);
227# endif // defined(ANJ_NET_WITH_DTLS)
228# if defined(ANJ_NET_WITH_TLS)
230 return anj_tls_shutdown(ctx);
231# endif // defined(ANJ_NET_WITH_TLS)
232# if defined(ANJ_NET_WITH_NON_IP_BINDING)
234 return anj_non_ip_shutdown(ctx);
235# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
236 default:
237 return ANJ_NET_ENOTSUP;
238 }
239}
240
243 anj_net_ctx_t **ctx) {
244 switch (type) {
245# if defined(ANJ_NET_WITH_UDP)
247 return anj_udp_cleanup_ctx(ctx);
248# endif // defined(ANJ_NET_WITH_UDP)
249# if defined(ANJ_NET_WITH_TCP)
251 return anj_tcp_cleanup_ctx(ctx);
252# endif // defined(ANJ_NET_WITH_TCP)
253# if defined(ANJ_NET_WITH_DTLS)
255 return anj_dtls_cleanup_ctx(ctx);
256# endif // defined(ANJ_NET_WITH_DTLS)
257# if defined(ANJ_NET_WITH_TLS)
259 return anj_tls_cleanup_ctx(ctx);
260# endif // defined(ANJ_NET_WITH_TLS)
261# if defined(ANJ_NET_WITH_NON_IP_BINDING)
263 return anj_non_ip_cleanup_ctx(ctx);
264# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
265 default:
266 return ANJ_NET_ENOTSUP;
267 }
268}
269
272 anj_net_ctx_t *ctx,
273 int32_t *out_value) {
274 switch (type) {
275# if defined(ANJ_NET_WITH_UDP)
277 return anj_udp_get_inner_mtu(ctx, out_value);
278# endif // defined(ANJ_NET_WITH_UDP)
279# if defined(ANJ_NET_WITH_TCP)
281 return anj_tcp_get_inner_mtu(ctx, out_value);
282# endif // defined(ANJ_NET_WITH_TCP)
283# if defined(ANJ_NET_WITH_DTLS)
285 return anj_dtls_get_inner_mtu(ctx, out_value);
286# endif // defined(ANJ_NET_WITH_DTLS)
287# if defined(ANJ_NET_WITH_TLS)
289 return anj_tls_get_inner_mtu(ctx, out_value);
290# endif // defined(ANJ_NET_WITH_TLS)
291# if defined(ANJ_NET_WITH_NON_IP_BINDING)
293 return anj_non_ip_get_inner_mtu(ctx, out_value);
294# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
295 default:
296 return ANJ_NET_ENOTSUP;
297 }
298}
299
302 anj_net_ctx_t *ctx,
303 anj_net_socket_state_t *out_value) {
304 switch (type) {
305# if defined(ANJ_NET_WITH_UDP)
307 return anj_udp_get_state(ctx, out_value);
308# endif // defined(ANJ_NET_WITH_UDP)
309# if defined(ANJ_NET_WITH_TCP)
311 return anj_tcp_get_state(ctx, out_value);
312# endif // defined(ANJ_NET_WITH_TCP)
313# if defined(ANJ_NET_WITH_DTLS)
315 return anj_dtls_get_state(ctx, out_value);
316# endif // defined(ANJ_NET_WITH_DTLS)
317# if defined(ANJ_NET_WITH_TLS)
319 return anj_tls_get_state(ctx, out_value);
320# endif // defined(ANJ_NET_WITH_TLS)
321# if defined(ANJ_NET_WITH_NON_IP_BINDING)
323 return anj_non_ip_get_state(ctx, out_value);
324# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
325 default:
326 return ANJ_NET_ENOTSUP;
327 }
328}
329
332 anj_net_ctx_t *ctx) {
333 switch (type) {
334# if defined(ANJ_NET_WITH_UDP)
336 return anj_udp_queue_mode_rx_off(ctx);
337# endif // defined(ANJ_NET_WITH_UDP)
338# if defined(ANJ_NET_WITH_TCP)
340 return anj_tcp_queue_mode_rx_off(ctx);
341# endif // defined(ANJ_NET_WITH_TCP)
342# if defined(ANJ_NET_WITH_DTLS)
344 return anj_dtls_queue_mode_rx_off(ctx);
345# endif // defined(ANJ_NET_WITH_DTLS)
346# if defined(ANJ_NET_WITH_TLS)
348 return anj_tls_queue_mode_rx_off(ctx);
349# endif // defined(ANJ_NET_WITH_TLS)
350# if defined(ANJ_NET_WITH_NON_IP_BINDING)
352 return anj_non_ip_queue_mode_rx_off(ctx);
353# endif // defined(ANJ_NET_WITH_NON_IP_BINDING)
354 default:
355 return ANJ_NET_ENOTSUP;
356 }
357}
358
359# ifdef __cplusplus
360}
361# endif
362
363#endif // ANJ_NET_WRAPPER_H
Network backend interface for DTLS transport.
anj_net_cleanup_ctx_t anj_dtls_cleanup_ctx
Definition anj_dtls.h:41
anj_net_get_inner_mtu_t anj_dtls_get_inner_mtu
Definition anj_dtls.h:43
anj_net_create_ctx_t anj_dtls_create_ctx
Definition anj_dtls.h:37
anj_net_shutdown_t anj_dtls_shutdown
Definition anj_dtls.h:40
anj_net_recv_t anj_dtls_recv
Definition anj_dtls.h:39
anj_net_get_state_t anj_dtls_get_state
Definition anj_dtls.h:44
anj_net_connect_t anj_dtls_connect
Definition anj_dtls.h:36
anj_net_queue_mode_rx_off_t anj_dtls_queue_mode_rx_off
Definition anj_dtls.h:45
anj_net_send_t anj_dtls_send
Definition anj_dtls.h:38
anj_net_close_t anj_dtls_close
Definition anj_dtls.h:35
Platform hooks for network transport integration.
#define ANJ_NET_ENOTSUP
Definition anj_net_api.h:77
anj_net_binding_type_t
Definition anj_net_api.h:89
@ ANJ_NET_BINDING_TCP
Definition anj_net_api.h:91
@ ANJ_NET_BINDING_TLS
Definition anj_net_api.h:93
@ ANJ_NET_BINDING_NON_IP
Definition anj_net_api.h:94
@ ANJ_NET_BINDING_DTLS
Definition anj_net_api.h:92
@ ANJ_NET_BINDING_UDP
Definition anj_net_api.h:90
struct anj_net_ctx_struct anj_net_ctx_t
Opaque network context handle.
Definition anj_net_api.h:235
anj_net_socket_state_t
Definition anj_net_api.h:97
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:301
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:59
static int anj_net_shutdown(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:213
static int anj_net_cleanup_ctx(anj_net_binding_type_t type, anj_net_ctx_t **ctx)
Definition anj_net_wrapper.h:242
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:89
static int anj_net_queue_mode_rx_off(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:331
static int anj_net_close(anj_net_binding_type_t type, anj_net_ctx_t *ctx)
Definition anj_net_wrapper.h:184
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:152
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:271
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:120
Network backend interface for Non-IP transport.
Network backend interface for TCP transport.
anj_net_recv_t anj_tcp_recv
Definition anj_tcp.h:39
anj_net_get_state_t anj_tcp_get_state
Definition anj_tcp.h:44
anj_net_connect_t anj_tcp_connect
Definition anj_tcp.h:36
anj_net_create_ctx_t anj_tcp_create_ctx
Definition anj_tcp.h:37
anj_net_get_inner_mtu_t anj_tcp_get_inner_mtu
Definition anj_tcp.h:43
anj_net_queue_mode_rx_off_t anj_tcp_queue_mode_rx_off
Definition anj_tcp.h:45
anj_net_close_t anj_tcp_close
Definition anj_tcp.h:35
anj_net_shutdown_t anj_tcp_shutdown
Definition anj_tcp.h:40
anj_net_send_t anj_tcp_send
Definition anj_tcp.h:38
anj_net_cleanup_ctx_t anj_tcp_cleanup_ctx
Definition anj_tcp.h:41
Network backend interface for TLS transport.
Network backend interface for UDP transport.
anj_net_send_t anj_udp_send
Definition anj_udp.h:38
anj_net_connect_t anj_udp_connect
Definition anj_udp.h:36
anj_net_close_t anj_udp_close
Definition anj_udp.h:35
anj_net_create_ctx_t anj_udp_create_ctx
Definition anj_udp.h:37
anj_net_recv_t anj_udp_recv
Definition anj_udp.h:39
anj_net_cleanup_ctx_t anj_udp_cleanup_ctx
Definition anj_udp.h:41
anj_net_get_state_t anj_udp_get_state
Definition anj_udp.h:44
anj_net_queue_mode_rx_off_t anj_udp_queue_mode_rx_off
Definition anj_udp.h:45
anj_net_shutdown_t anj_udp_shutdown
Definition anj_udp.h:40
anj_net_get_inner_mtu_t anj_udp_get_inner_mtu
Definition anj_udp.h:43
Global configuration validation header for Anjay Lite.
Definition anj_net_api.h:214