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