Skip to content

Commit 6c8f9cd

Browse files
kb2maAiman Ismail
authored andcommitted
net/gcoap: use common names to simplify use of DTLS at tranport layer
1 parent 96e3a68 commit 6c8f9cd

File tree

1 file changed

+45
-63
lines changed
  • sys/net/application_layer/gcoap

1 file changed

+45
-63
lines changed

sys/net/application_layer/gcoap/gcoap.c

Lines changed: 45 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@
3030
#include "random.h"
3131
#include "thread.h"
3232

33-
#ifdef MODULE_SOCK_DTLS
34-
#include "net/sock/dtls.h"
35-
#endif
36-
3733
#define ENABLE_DEBUG (0)
3834
#include "debug.h"
3935

@@ -44,11 +40,7 @@
4440

4541
/* Internal functions */
4642
static void *_event_loop(void *arg);
47-
#ifdef MODULE_SOCK_DTLS
48-
static void _listen(sock_dtls_t *sock);
49-
#else
50-
static void _listen(sock_udp_t *sock);
51-
#endif
43+
static void _listen(coap_tl_sock_t *sock);
5244
static ssize_t _well_known_core_handler(coap_pkt_t* pdu, uint8_t *buf, size_t len, void *ctx);
5345
static size_t _handle_req(coap_pkt_t *pdu, uint8_t *buf, size_t len,
5446
sock_udp_ep_t *remote);
@@ -64,9 +56,9 @@ static void _find_obs_memo_resource(gcoap_observe_memo_t **memo,
6456
const coap_resource_t *resource);
6557

6658
#ifdef MODULE_SOCK_DTLS
67-
static ssize_t _dtls_send(sock_dtls_t *sock, const void *data, size_t len,
59+
static ssize_t _tl_send(sock_dtls_t *sock, const void *data, size_t len,
6860
const sock_udp_ep_t *remote);
69-
static ssize_t _dtls_recv(sock_dtls_t *sock, void *data, size_t max_len,
61+
static ssize_t _tl_recv(sock_dtls_t *sock, void *data, size_t max_len,
7062
uint32_t timeout, sock_udp_ep_t *remote);
7163
#endif
7264

@@ -109,10 +101,15 @@ static gcoap_state_t _coap_state = {
109101
static kernel_pid_t _pid = KERNEL_PID_UNDEF;
110102
static char _msg_stack[GCOAP_STACK_SIZE];
111103
static msg_t _msg_queue[GCOAP_MSG_QUEUE_SIZE];
112-
static sock_udp_t _sock;
113-
static sock_dtls_t _dtls_sock;
114104

115-
static ssize_t _dtls_send(sock_dtls_t *sock, const void *data, size_t len,
105+
/* Use _tl_sock as the common name for the top-level sock object for either
106+
* DTLS or non-DTLS context. _udp_sock is just a synonym for it in non-DTLS case.
107+
* Use _tl_send() and _tl_recv() as the common names for send/recv functions. */
108+
#ifdef MODULE_SOCK_DTLS
109+
static sock_udp_t _udp_sock;
110+
static sock_dtls_t _tl_sock;
111+
112+
static ssize_t _tl_send(sock_dtls_t *sock, const void *data, size_t len,
116113
const sock_udp_ep_t *remote)
117114
{
118115
sock_dtls_session_t session;
@@ -129,7 +126,7 @@ static ssize_t _dtls_send(sock_dtls_t *sock, const void *data, size_t len,
129126
return res;
130127
}
131128

132-
static ssize_t _dtls_recv(sock_dtls_t *sock, void *data, size_t max_len,
129+
static ssize_t _tl_recv(sock_dtls_t *sock, void *data, size_t max_len,
133130
uint32_t timeout, sock_udp_ep_t *remote)
134131
{
135132
sock_dtls_session_t rcvd_session;
@@ -141,6 +138,23 @@ static ssize_t _dtls_recv(sock_dtls_t *sock, void *data, size_t max_len,
141138
memcpy(remote, &rcvd_session.remote_ep, sizeof(sock_udp_ep_t));
142139
return res;
143140
}
141+
#else
142+
/* provide synonyms for structs and functions when no DTLS */
143+
static sock_udp_t _tl_sock;
144+
#define _udp_sock (_tl_sock)
145+
146+
static inline ssize_t _tl_send(sock_udp_t *sock, const void *data, size_t len,
147+
const sock_udp_ep_t *remote)
148+
{
149+
return sock_udp_send(sock, data, len, remote);
150+
}
151+
152+
static inline ssize_t _tl_recv(sock_udp_t *sock, void *data, size_t len,
153+
uint32_t timeout, sock_udp_ep_t *remote)
154+
{
155+
return sock_udp_recv(sock, data, len, timeout, remote);
156+
}
157+
#endif
144158

145159
/* Event/Message loop for gcoap _pid thread. */
146160
static void *_event_loop(void *arg)
@@ -156,7 +170,7 @@ static void *_event_loop(void *arg)
156170
local.netif = SOCK_ADDR_ANY_NETIF;
157171
local.port = GCOAP_PORT;
158172

159-
int res = sock_udp_create(&_sock, &local, NULL, 0);
173+
int res = sock_udp_create(&_udp_sock, &local, NULL, 0);
160174
if (res < 0) {
161175
DEBUG("gcoap: cannot create sock: %d\n", res);
162176
return 0;
@@ -169,12 +183,12 @@ static void *_event_loop(void *arg)
169183
(void)queue_array;
170184
(void)rcv_session;
171185

172-
res = sock_dtls_create(&_dtls_sock, &_sock, 0);
186+
res = sock_dtls_create(&_tl_sock, &_udp_sock, 0);
173187
if (res < 0) {
174188
DEBUG("gcoap: cannot create dtls sock: %d\n", res);
175189
return 0;
176190
}
177-
sock_dtls_init_server(&_dtls_sock, &queue, queue_array, 5);
191+
sock_dtls_init_server(&_tl_sock, &queue, queue_array, 5);
178192
#endif
179193

180194
while(1) {
@@ -204,16 +218,10 @@ static void *_event_loop(void *arg)
204218
timeout = random_uint32_range(timeout, timeout + variance);
205219
#endif
206220

207-
#ifdef MODULE_SOCK_DTLS
208-
ssize_t bytes = _dtls_send(&_dtls_sock,
209-
memo->msg.data.pdu_buf,
210-
memo->msg.data.pdu_len,
211-
&memo->remote_ep);
212-
#else
213-
ssize_t bytes = sock_udp_send(&_sock, memo->msg.data.pdu_buf,
214-
memo->msg.data.pdu_len,
215-
&memo->remote_ep);
216-
#endif
221+
ssize_t bytes = _tl_send(&_tl_sock,
222+
memo->msg.data.pdu_buf,
223+
memo->msg.data.pdu_len,
224+
&memo->remote_ep);
217225
if (bytes > 0) {
218226
xtimer_set_msg(&memo->response_timer, timeout,
219227
&memo->timeout_msg, _pid);
@@ -230,22 +238,14 @@ static void *_event_loop(void *arg)
230238
}
231239
}
232240

233-
#ifdef MODULE_SOCK_DTLS
234-
_listen(&_dtls_sock);
235-
#else
236-
_listen(&_sock);
237-
#endif
241+
_listen(&_tl_sock);
238242
}
239243

240244
return 0;
241245
}
242246

243247
/* Listen for an incoming CoAP message. */
244-
#ifdef MODULE_SOCK_DTLS
245-
static void _listen(sock_dtls_t *sock)
246-
#else
247-
static void _listen(sock_udp_t *sock)
248-
#endif
248+
static void _listen(coap_tl_sock_t *sock)
249249
{
250250
coap_pkt_t pdu;
251251
uint8_t buf[GCOAP_PDU_BUF_SIZE];
@@ -258,15 +258,9 @@ static void _listen(sock_udp_t *sock)
258258
* request is outstanding, sock_udp_recv() is called here with limited
259259
* waiting so the request's timeout can be handled in a timely manner in
260260
* _event_loop(). */
261-
#ifdef MODULE_SOCK_DTLS
262-
ssize_t res = _dtls_recv(sock, buf, sizeof(buf),
263-
open_reqs > 0 ? GCOAP_RECV_TIMEOUT : SOCK_NO_TIMEOUT,
264-
&remote);
265-
#else
266-
ssize_t res = sock_udp_recv(sock, buf, sizeof(buf),
267-
open_reqs > 0 ? GCOAP_RECV_TIMEOUT : SOCK_NO_TIMEOUT,
268-
&remote);
269-
#endif
261+
ssize_t res = _tl_recv(sock, buf, sizeof(buf),
262+
open_reqs > 0 ? GCOAP_RECV_TIMEOUT : SOCK_NO_TIMEOUT,
263+
&remote);
270264
if (res <= 0) {
271265
#if ENABLE_DEBUG
272266
if (res < 0 && res != -ETIMEDOUT) {
@@ -296,11 +290,7 @@ static void _listen(sock_udp_t *sock)
296290
|| coap_get_type(&pdu) == COAP_TYPE_CON) {
297291
size_t pdu_len = _handle_req(&pdu, buf, sizeof(buf), &remote);
298292
if (pdu_len > 0) {
299-
#ifdef MODULE_SOCK_DTLS
300-
ssize_t bytes = _dtls_send(sock, buf, pdu_len, &remote);
301-
#else
302-
ssize_t bytes = sock_udp_send(sock, buf, pdu_len, &remote);
303-
#endif
293+
ssize_t bytes = _tl_send(sock, buf, pdu_len, &remote);
304294
if (bytes <= 0) {
305295
DEBUG("gcoap: send response failed: %d\n", (int)bytes);
306296
}
@@ -879,11 +869,7 @@ size_t gcoap_req_send(const uint8_t *buf, size_t len,
879869
}
880870

881871
/* Memos complete; send msg and start timer */
882-
#ifdef MODULE_SOCK_DTLS
883-
ssize_t res = _dtls_send(&_dtls_sock, buf, len, remote);
884-
#else
885-
ssize_t res = sock_udp_send(&_sock, buf, len, remote);
886-
#endif
872+
ssize_t res = _tl_send(&_tl_sock, buf, len, remote);
887873

888874
/* timeout may be zero for non-confirmable */
889875
if ((memo != NULL) && (res > 0) && (timeout > 0)) {
@@ -898,7 +884,7 @@ size_t gcoap_req_send(const uint8_t *buf, size_t len,
898884
msg_t mbox_msg;
899885
mbox_msg.type = GCOAP_MSG_TYPE_INTR;
900886
mbox_msg.content.value = 0;
901-
if (mbox_try_put(&_sock.reg.mbox, &mbox_msg)) {
887+
if (mbox_try_put(&_udp_sock.reg.mbox, &mbox_msg)) {
902888
/* start response wait timer on the gcoap thread */
903889
memo->timeout_msg.type = GCOAP_MSG_TYPE_TIMEOUT;
904890
memo->timeout_msg.content.ptr = (char *)memo;
@@ -983,11 +969,7 @@ size_t gcoap_obs_send(const uint8_t *buf, size_t len,
983969
_find_obs_memo_resource(&memo, resource);
984970

985971
if (memo) {
986-
#ifdef MODULE_SOCK_DTLS
987-
ssize_t bytes = _dtls_send(&_dtls_sock, buf, len, memo->observer);
988-
#else
989-
ssize_t bytes = sock_udp_send(&_sock, buf, len, memo->observer);
990-
#endif
972+
ssize_t bytes = _tl_send(&_tl_sock, buf, len, memo->observer);
991973
return (size_t)((bytes > 0) ? bytes : 0);
992974
}
993975
else {

0 commit comments

Comments
 (0)