• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* coap_io_riot.c -- Default network I/O functions for libcoap on RIOT
2  *
3  * Copyright (C) 2019 Olaf Bergmann <bergmann@tzi.org>
4  *
5  * SPDX-License-Identifier: BSD-2-Clause
6  *
7  * This file is part of the CoAP library libcoap. Please see
8  * README for terms of use.
9  */
10 
11 /**
12  * @file coap_io_riot.c
13  * @brief RIOT specific I/O functions
14  */
15 
16 #include "coap3/coap_internal.h"
17 
18 #ifdef HAVE_STDIO_H
19 #  include <stdio.h>
20 #endif
21 
22 #ifdef HAVE_SYS_SOCKET_H
23 # include <sys/socket.h>
24 # define OPTVAL_T(t)         (t)
25 # define OPTVAL_GT(t)        (t)
26 #endif
27 #ifdef HAVE_SYS_IOCTL_H
28 #include <sys/ioctl.h>
29 #endif
30 #ifdef HAVE_NETINET_IN_H
31 # include <netinet/in.h>
32 #endif
33 #ifdef HAVE_SYS_UIO_H
34 # include <sys/uio.h>
35 #endif
36 #ifdef HAVE_UNISTD_H
37 # include <unistd.h>
38 #endif
39 
40 #include "net/gnrc.h"
41 #include "net/gnrc/ipv6.h"
42 #include "net/gnrc/netreg.h"
43 #include "net/udp.h"
44 
45 #include "coap3/coap_riot.h"
46 
47 /*
48  * dgram
49  * return +ve Number of bytes written.
50  *         -1 Error error in errno).
51  */
52 ssize_t
coap_socket_send(coap_socket_t * sock,const coap_session_t * session,const uint8_t * data,size_t datalen)53 coap_socket_send(coap_socket_t *sock,
54                  const coap_session_t *session,
55                  const uint8_t *data,
56                  size_t datalen) {
57   ssize_t bytes_written = 0;
58 
59   if (!coap_debug_send_packet()) {
60     bytes_written = (ssize_t)datalen;
61   } else if (sock->flags & COAP_SOCKET_CONNECTED) {
62     bytes_written = send(sock->fd, data, datalen, 0);
63   } else {
64     bytes_written = sendto(sock->fd, data, datalen, 0,
65                            &session->addr_info.remote.addr.sa,
66                            session->addr_info.remote.size);
67   }
68 
69   if (bytes_written < 0)
70     coap_log_crit("coap_socket_send: %s\n", coap_socket_strerror());
71 
72   return bytes_written;
73 }
74 
75 static msg_t _msg_q[LIBCOAP_MSG_QUEUE_SIZE];
76 
77 void
coap_riot_startup(void)78 coap_riot_startup(void) {
79   msg_init_queue(_msg_q, LIBCOAP_MSG_QUEUE_SIZE);
80 }
81