#ifndef COAP_IO_INTERNAL_H_
#define COAP_IO_INTERNAL_H_
#include "coap_internal.h"
#include <sys/types.h>
#include "coap_address.h"
#ifdef RIOT_VERSION
#include "net/gnrc.h"
#endif
struct coap_socket_t {
#if defined(WITH_LWIP)
struct udp_pcb *pcb;
#elif defined(WITH_CONTIKI)
void *conn;
#else
coap_fd_t fd;
#endif
#if defined(RIOT_VERSION)
gnrc_pktsnip_t *pkt;
#endif
coap_socket_flags_t flags;
coap_session_t *session;
coap_endpoint_t *endpoint;
};
#define COAP_SOCKET_EMPTY 0x0000
#define COAP_SOCKET_NOT_EMPTY 0x0001
#define COAP_SOCKET_BOUND 0x0002
#define COAP_SOCKET_CONNECTED 0x0004
#define COAP_SOCKET_WANT_READ 0x0010
#define COAP_SOCKET_WANT_WRITE 0x0020
#define COAP_SOCKET_WANT_ACCEPT 0x0040
#define COAP_SOCKET_WANT_CONNECT 0x0080
#define COAP_SOCKET_CAN_READ 0x0100
#define COAP_SOCKET_CAN_WRITE 0x0200
#define COAP_SOCKET_CAN_ACCEPT 0x0400
#define COAP_SOCKET_CAN_CONNECT 0x0800
#define COAP_SOCKET_MULTICAST 0x1000
#if COAP_SERVER_SUPPORT
coap_endpoint_t *coap_malloc_endpoint( void );
void coap_mfree_endpoint( coap_endpoint_t *ep );
#endif
const char *coap_socket_format_errno(int error);
#if COAP_CLIENT_SUPPORT
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);
#endif
int
coap_socket_bind_udp(coap_socket_t *sock,
const coap_address_t *listen_addr,
coap_address_t *bound_addr );
void coap_socket_close(coap_socket_t *sock);
ssize_t
coap_socket_send( coap_socket_t *sock, coap_session_t *session,
const uint8_t *data, size_t data_len );
ssize_t
coap_socket_write(coap_socket_t *sock, const uint8_t *data, size_t data_len);
ssize_t
coap_socket_read(coap_socket_t *sock, uint8_t *data, size_t data_len);
void
coap_epoll_ctl_mod(coap_socket_t *sock, uint32_t events, const char *func);
void coap_update_epoll_timer(coap_context_t *context, coap_tick_t delay);
#ifdef WITH_LWIP
ssize_t
coap_socket_send_pdu( coap_socket_t *sock, coap_session_t *session,
coap_pdu_t *pdu );
#endif
ssize_t coap_network_send( coap_socket_t *sock, const coap_session_t *session, const uint8_t *data, size_t datalen );
ssize_t coap_network_read( coap_socket_t *sock, coap_packet_t *packet );
#ifndef coap_mcast_interface
# define coap_mcast_interface(Local) 0
#endif
void coap_packet_get_memmapped(coap_packet_t *packet,
unsigned char **address,
size_t *length);
#ifdef WITH_LWIP
struct pbuf *coap_packet_extract_pbuf(coap_packet_t *packet);
#endif
#if defined(WITH_LWIP)
struct coap_packet_t {
struct pbuf *pbuf;
const coap_endpoint_t *local_interface;
coap_addr_tuple_t addr_info;
int ifindex;
};
#else
struct coap_packet_t {
coap_addr_tuple_t addr_info;
int ifindex;
size_t length;
unsigned char payload[COAP_RXBUFFER_SIZE];
};
#endif
#endif