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
4440
4541/* Internal functions */
4642static 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 );
5244static ssize_t _well_known_core_handler (coap_pkt_t * pdu , uint8_t * buf , size_t len , void * ctx );
5345static 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 = {
109101static kernel_pid_t _pid = KERNEL_PID_UNDEF ;
110102static char _msg_stack [GCOAP_STACK_SIZE ];
111103static 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. */
146160static 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