libcoap 4.3.1rc1
coap_io_internal.h
Go to the documentation of this file.
1/*
2 * coap_io.h -- Default network I/O functions for libcoap
3 *
4 * Copyright (C) 2012-2022 Olaf Bergmann <bergmann@tzi.org>
5 *
6 * SPDX-License-Identifier: BSD-2-Clause
7 *
8 * This file is part of the CoAP library libcoap. Please see README for terms
9 * of use.
10 */
11
17#ifndef COAP_IO_INTERNAL_H_
18#define COAP_IO_INTERNAL_H_
19
20#include "coap_internal.h"
21#include <sys/types.h>
22
23#include "coap_address.h"
24
25#ifdef RIOT_VERSION
26#include "net/gnrc.h"
27#endif /* RIOT_VERSION */
28
30#if defined(WITH_LWIP)
31 struct udp_pcb *pcb;
32#elif defined(WITH_CONTIKI)
33 void *conn;
34#else
36#endif /* WITH_LWIP */
37#if defined(RIOT_VERSION)
38 gnrc_pktsnip_t *pkt; /* pointer to received packet for processing */
39#endif /* RIOT_VERSION */
41 coap_session_t *session; /* Used by the epoll logic for an active session. */
42 coap_endpoint_t *endpoint; /* Used by the epoll logic for a listening
43 endpoint. */
44};
45
49#define COAP_SOCKET_EMPTY 0x0000
50#define COAP_SOCKET_NOT_EMPTY 0x0001
51#define COAP_SOCKET_BOUND 0x0002
52#define COAP_SOCKET_CONNECTED 0x0004
53#define COAP_SOCKET_WANT_READ 0x0010
54#define COAP_SOCKET_WANT_WRITE 0x0020
55#define COAP_SOCKET_WANT_ACCEPT 0x0040
56#define COAP_SOCKET_WANT_CONNECT 0x0080
57#define COAP_SOCKET_CAN_READ 0x0100
58#define COAP_SOCKET_CAN_WRITE 0x0200
59#define COAP_SOCKET_CAN_ACCEPT 0x0400
60#define COAP_SOCKET_CAN_CONNECT 0x0800
61#define COAP_SOCKET_MULTICAST 0x1000
63#if COAP_SERVER_SUPPORT
66#endif /* COAP_SERVER_SUPPORT */
67
68const char *coap_socket_format_errno(int error);
69
70#if COAP_CLIENT_SUPPORT
71int
73 const coap_address_t *local_if,
74 const coap_address_t *server,
75 int default_port,
76 coap_address_t *local_addr,
77 coap_address_t *remote_addr);
78#endif /* COAP_CLIENT_SUPPORT */
79
80int
82 const coap_address_t *listen_addr,
83 coap_address_t *bound_addr );
84
86
87ssize_t
89 const uint8_t *data, size_t data_len );
90
91ssize_t
92coap_socket_write(coap_socket_t *sock, const uint8_t *data, size_t data_len);
93
94ssize_t
95coap_socket_read(coap_socket_t *sock, uint8_t *data, size_t data_len);
96
97void
98coap_epoll_ctl_mod(coap_socket_t *sock, uint32_t events, const char *func);
99
107
108#ifdef WITH_LWIP
109ssize_t
110coap_socket_send_pdu( coap_socket_t *sock, coap_session_t *session,
111 coap_pdu_t *pdu );
112#endif
113
126ssize_t coap_network_send( coap_socket_t *sock, const coap_session_t *session, const uint8_t *data, size_t datalen );
127
139ssize_t coap_network_read( coap_socket_t *sock, coap_packet_t *packet );
140
141#ifndef coap_mcast_interface
142# define coap_mcast_interface(Local) 0
143#endif
144
150 unsigned char **address,
151 size_t *length);
152
153#ifdef WITH_LWIP
158struct pbuf *coap_packet_extract_pbuf(coap_packet_t *packet);
159#endif
160
161#if defined(WITH_LWIP)
162/*
163 * This is only included in coap_io.h instead of .c in order to be available for
164 * sizeof in lwippools.h.
165 * Simple carry-over of the incoming pbuf that is later turned into a node.
166 *
167 * Source address data is currently side-banded via ip_current_dest_addr & co
168 * as the packets have limited lifetime anyway.
169 */
170struct coap_packet_t {
171 struct pbuf *pbuf;
172 const coap_endpoint_t *local_interface;
174 int ifindex;
175// uint16_t srcport;
176};
177#else
181 size_t length;
183};
184#endif
185
186#endif /* COAP_IO_INTERNAL_H_ */
Representation of network addresses.
Pulls together all the internal only header files.
uint16_t coap_socket_flags_t
Definition: coap_io.h:53
#define COAP_RXBUFFER_SIZE
Definition: coap_io.h:29
int coap_fd_t
Definition: coap_io.h:47
int coap_socket_connect_udp(coap_socket_t *sock, const coap_address_t *local_if, const coap_address_t *server, int default_port, coap_address_t *local_addr, coap_address_t *remote_addr)
const char * coap_socket_format_errno(int error)
Definition: coap_io.c:1591
ssize_t coap_socket_read(coap_socket_t *sock, uint8_t *data, size_t data_len)
Definition: coap_io.c:537
void coap_socket_close(coap_socket_t *sock)
Definition: coap_io.c:377
ssize_t coap_socket_send(coap_socket_t *sock, coap_session_t *session, const uint8_t *data, size_t data_len)
Definition: coap_io.c:1600
void coap_update_epoll_timer(coap_context_t *context, coap_tick_t delay)
Update the epoll timer fd as to when it is to trigger.
void coap_packet_get_memmapped(coap_packet_t *packet, unsigned char **address, size_t *length)
Given a packet, set msg and msg_len to an address and length of the packet's data in memory.
Definition: coap_io.c:804
ssize_t coap_socket_write(coap_socket_t *sock, const uint8_t *data, size_t data_len)
Definition: coap_io.c:483
ssize_t coap_network_read(coap_socket_t *sock, coap_packet_t *packet)
Function interface for reading data.
Definition: coap_io.c:811
int coap_socket_bind_udp(coap_socket_t *sock, const coap_address_t *listen_addr, coap_address_t *bound_addr)
Definition: coap_io.c:161
ssize_t coap_network_send(coap_socket_t *sock, const coap_session_t *session, const uint8_t *data, size_t datalen)
Function interface for data transmission.
Definition: coap_io.c:630
coap_endpoint_t * coap_malloc_endpoint(void)
void coap_epoll_ctl_mod(coap_socket_t *sock, uint32_t events, const char *func)
void coap_mfree_endpoint(coap_endpoint_t *ep)
uint64_t coap_tick_t
This data type represents internal timer ticks with COAP_TICKS_PER_SECOND resolution.
Definition: coap_time.h:127
multi-purpose address abstraction
Definition: coap_address.h:96
The CoAP stack's global state is stored in a coap_context_t object.
Abstraction of virtual endpoint that can be attached to coap_context_t.
size_t length
length of payload
coap_addr_tuple_t addr_info
local and remote addresses
unsigned char payload[COAP_RXBUFFER_SIZE]
payload
int ifindex
the interface index
structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload mark...
Abstraction of virtual session that can be attached to coap_context_t (client) or coap_endpoint_t (se...
coap_session_t * session
coap_endpoint_t * endpoint
coap_socket_flags_t flags