util.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2017 Kaspar Schleiser <kaspar@schleiser.de>
3  * SPDX-FileCopyrightText: 2018 Freie Universität Berlin
4  * SPDX-License-Identifier: LGPL-2.1-only
5  */
6 
7 #pragma once
8 
24 #include <stdbool.h>
25 #include <stdint.h>
26 
27 #include "net/sock/config.h"
28 
29 #if MODULE_GNRC_SOCK_UDP || MODULE_LWIP_SOCK_UDP || DOXYGEN
30 # include "net/sock/udp.h"
31 # define SOCK_HAS_UDP 1
32 #endif
33 #if MODULE_GNRC_SOCK_TCP || MODULE_LWIP_SOCK_TCP || DOXYGEN
34 # include "net/sock/tcp.h"
35 # define SOCK_HAS_TCP 1
36 #endif
37 #ifdef MODULE_SOCK_DTLS
38 # include "net/credman.h"
39 # include "net/sock/dtls.h"
40 #endif
41 
42 #if MODULE_GNRC_SOCK_UDP || MODULE_LWIP_SOCK_UDP ||MODULE_GNRC_SOCK_TCP || MODULE_LWIP_SOCK_TCP || DOXYGEN
43 # define HAVE_SOCK_TL_EP 1
44 #endif
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
70 int sock_urlsplit(const char *url, char *hostport, char *urlpath);
71 
80 const char *sock_urlpath(const char *url);
81 
82 #if HAVE_SOCK_TL_EP
93 int sock_tl_ep_fmt(const struct _sock_tl_ep *endpoint,
94  char *addr_str, uint16_t *port);
95 
96 #if IS_ACTIVE(SOCK_HAS_TCP) || DOXYGEN
107 static inline int sock_tcp_ep_fmt(const sock_tcp_ep_t *endpoint,
108  char *addr_str, uint16_t *port)
109 {
110  return sock_tl_ep_fmt(endpoint, addr_str, port);
111 }
112 #endif
113 
114 #if IS_ACTIVE(SOCK_HAS_UDP) || DOXYGEN
125 static inline int sock_udp_ep_fmt(const sock_udp_ep_t *endpoint,
126  char *addr_str, uint16_t *port)
127 {
128  return sock_tl_ep_fmt(endpoint, addr_str, port);
129 }
130 #endif
131 
144 int sock_tl_str2ep(struct _sock_tl_ep *ep_out, const char *str);
145 
160 int sock_tl_name2ep(struct _sock_tl_ep *ep_out, const char *str);
161 
162 #if IS_ACTIVE(SOCK_HAS_TCP) || DOXYGEN
175 static inline int sock_tcp_str2ep(sock_tcp_ep_t *ep_out, const char *str)
176 {
177  return sock_tl_str2ep(ep_out, str);
178 }
179 
194 static inline int sock_tcp_name2ep(sock_tcp_ep_t *ep_out, const char *str)
195 {
196  return sock_tl_name2ep(ep_out, str);
197 }
198 #endif
199 
200 #if IS_ACTIVE(SOCK_HAS_UDP) || DOXYGEN
213 static inline int sock_udp_str2ep(sock_udp_ep_t *ep_out, const char *str)
214 {
215  return sock_tl_str2ep(ep_out, str);
216 }
217 
232 static inline int sock_udp_name2ep(sock_udp_ep_t *ep_out, const char *str)
233 {
234  return sock_tl_name2ep(ep_out, str);
235 }
236 #endif
237 
251 bool sock_tl_ep_equal(const struct _sock_tl_ep *a,
252  const struct _sock_tl_ep *b);
253 
254 #if IS_ACTIVE(SOCK_HAS_TCP) || DOXYGEN
268 static inline bool sock_tcp_ep_equal(const sock_tcp_ep_t *a,
269  const sock_tcp_ep_t *b)
270 {
271  return sock_tl_ep_equal(a, b);
272 }
273 #endif
274 
275 #if IS_ACTIVE(SOCK_HAS_UDP) || DOXYGEN
289 static inline bool sock_udp_ep_equal(const sock_udp_ep_t *a,
290  const sock_udp_ep_t *b)
291 {
292  return sock_tl_ep_equal(a, b);
293 }
294 #endif
295 #endif
296 
297 #if defined(MODULE_SOCK_DTLS) || DOXYGEN
315  sock_dtls_session_t *session, credman_tag_t tag,
316  sock_udp_ep_t *local, const sock_udp_ep_t *remote,
317  void *work_buf, size_t work_buf_len);
318 #endif
319 
320 #ifdef __cplusplus
321 }
322 #endif
(D)TLS credentials management module definitions
uint16_t credman_tag_t
Tag of the credential.
Definition: credman.h:92
const char * sock_urlpath(const char *url)
Returns a pointer to the path component in url.
bool sock_tl_ep_equal(const struct _sock_tl_ep *a, const struct _sock_tl_ep *b)
Compare the two given common IP-based transport layer endpoints.
static int sock_tcp_ep_fmt(const sock_tcp_ep_t *endpoint, char *addr_str, uint16_t *port)
Format TCP endpoint to string and port.
Definition: util.h:107
int sock_tl_str2ep(struct _sock_tl_ep *ep_out, const char *str)
Convert string to common IP-based transport layer endpoint.
static int sock_udp_name2ep(sock_udp_ep_t *ep_out, const char *str)
Convert string to UDP endpoint If the sock_dns module is used, this will do a DNS lookup if str is no...
Definition: util.h:232
static bool sock_udp_ep_equal(const sock_udp_ep_t *a, const sock_udp_ep_t *b)
Compare the two given UDP endpoints.
Definition: util.h:289
int sock_tl_name2ep(struct _sock_tl_ep *ep_out, const char *str)
Convert string to common IP-based transport layer endpoint If the sock_dns module is used,...
static int sock_udp_ep_fmt(const sock_udp_ep_t *endpoint, char *addr_str, uint16_t *port)
Format UDP endpoint to string and port.
Definition: util.h:125
int sock_dtls_establish_session(sock_udp_t *sock_udp, sock_dtls_t *sock_dtls, sock_dtls_session_t *session, credman_tag_t tag, sock_udp_ep_t *local, const sock_udp_ep_t *remote, void *work_buf, size_t work_buf_len)
Helper function to establish a DTLS connection.
int sock_tl_ep_fmt(const struct _sock_tl_ep *endpoint, char *addr_str, uint16_t *port)
Format common IP-based transport layer endpoint to string and port.
int sock_urlsplit(const char *url, char *hostport, char *urlpath)
Split url to host:port and url path.
static int sock_tcp_str2ep(sock_tcp_ep_t *ep_out, const char *str)
Convert string to TCP endpoint.
Definition: util.h:175
static bool sock_tcp_ep_equal(const sock_tcp_ep_t *a, const sock_tcp_ep_t *b)
Compare the two given TCP endpoints.
Definition: util.h:268
static int sock_udp_str2ep(sock_udp_ep_t *ep_out, const char *str)
Convert string to UDP endpoint.
Definition: util.h:213
static int sock_tcp_name2ep(sock_tcp_ep_t *ep_out, const char *str)
Convert string to TCP endpoint If the sock_dns module is used, this will do a DNS lookup if str is no...
Definition: util.h:194
DTLS sock definitions.
TCP sock definitions.
UDP sock definitions.
Common IP-based transport layer end point.
Definition: sock.h:211
Information about remote client connected to the server.
Information about DTLS sock.
UDP sock type.
Definition: sock_types.h:128