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