405 #if IS_USED(MODULE_GCOAP_DTLS)
425 #ifndef CONFIG_GCOAP_PORT
426 #define CONFIG_GCOAP_PORT (5683)
431 #ifndef CONFIG_GCOAPS_PORT
432 #define CONFIG_GCOAPS_PORT (5684)
438 #ifndef CONFIG_GCOAP_DTLS_HANDSHAKE_TIMEOUT_MSEC
439 #define CONFIG_GCOAP_DTLS_HANDSHAKE_TIMEOUT_MSEC (3 * MS_PER_SEC)
447 #ifndef CONFIG_GCOAP_DTLS_MINIMUM_AVAILABLE_SESSIONS
448 #define CONFIG_GCOAP_DTLS_MINIMUM_AVAILABLE_SESSIONS (1)
455 #ifndef CONFIG_GCOAP_DTLS_MINIMUM_AVAILABLE_SESSIONS_TIMEOUT_MSEC
456 #define CONFIG_GCOAP_DTLS_MINIMUM_AVAILABLE_SESSIONS_TIMEOUT_MSEC (15 * MS_PER_SEC)
462 #ifndef CONFIG_GCOAP_PDU_BUF_SIZE
463 #define CONFIG_GCOAP_PDU_BUF_SIZE (128)
469 #ifndef CONFIG_GCOAP_REQ_WAITING_MAX
470 #define CONFIG_GCOAP_REQ_WAITING_MAX (2)
477 #define GCOAP_TOKENLEN_MAX (8)
482 #define GCOAP_HEADER_MAXLEN (sizeof(coap_hdr_t) + GCOAP_TOKENLEN_MAX)
490 #ifndef CONFIG_GCOAP_TOKENLEN
491 #define CONFIG_GCOAP_TOKENLEN (2)
497 #define GCOAP_PAYLOAD_MARKER (0xFF)
505 #ifndef CONFIG_GCOAP_NO_AUTO_INIT
506 #define CONFIG_GCOAP_NO_AUTO_INIT 0
513 #define GCOAP_MEMO_UNUSED (0)
514 #define GCOAP_MEMO_RETRANSMIT (1)
515 #define GCOAP_MEMO_WAIT (2)
516 #define GCOAP_MEMO_RESP (3)
517 #define GCOAP_MEMO_TIMEOUT (4)
518 #define GCOAP_MEMO_ERR (5)
519 #define GCOAP_MEMO_RESP_TRUNC (6)
526 #define GCOAP_SEND_LIMIT_NON (-1)
538 #define CONFIG_GCOAP_NO_RETRANS_BACKOFF
547 #ifndef CONFIG_GCOAP_NON_TIMEOUT_MSEC
548 #define CONFIG_GCOAP_NON_TIMEOUT_MSEC (5000U)
559 #ifndef CONFIG_GCOAP_OBS_CLIENTS_MAX
560 #define CONFIG_GCOAP_OBS_CLIENTS_MAX (2)
572 #ifndef CONFIG_GCOAP_OBS_NOTIFIERS_MAX
573 #define CONFIG_GCOAP_OBS_NOTIFIERS_MAX (2)
584 #ifndef CONFIG_GCOAP_OBS_REGISTRATIONS_MAX
585 #define CONFIG_GCOAP_OBS_REGISTRATIONS_MAX (2)
592 #define GCOAP_OBS_MEMO_UNUSED (0)
593 #define GCOAP_OBS_MEMO_IDLE (1)
594 #define GCOAP_OBS_MEMO_PENDING (2)
617 #ifndef CONFIG_GCOAP_OBS_VALUE_WIDTH
618 #define CONFIG_GCOAP_OBS_VALUE_WIDTH (3)
624 #if (CONFIG_GCOAP_OBS_VALUE_WIDTH == 3)
625 #define GCOAP_OBS_TICK_EXPONENT (0)
626 #elif (CONFIG_GCOAP_OBS_VALUE_WIDTH == 2)
627 #define GCOAP_OBS_TICK_EXPONENT (6)
628 #elif (CONFIG_GCOAP_OBS_VALUE_WIDTH == 1)
629 #define GCOAP_OBS_TICK_EXPONENT (14)
636 #define GCOAP_OBS_INIT_OK (0)
637 #define GCOAP_OBS_INIT_ERR (-1)
638 #define GCOAP_OBS_INIT_UNUSED (-2)
645 #ifndef GCOAP_DTLS_EXTRA_STACKSIZE
646 #if IS_USED(MODULE_GCOAP_DTLS)
647 #define GCOAP_DTLS_EXTRA_STACKSIZE (THREAD_STACKSIZE_DEFAULT)
649 #define GCOAP_DTLS_EXTRA_STACKSIZE (0)
656 #if IS_USED(MODULE_GCOAP_FILESERVER)
658 #define GCOAP_VFS_EXTRA_STACKSIZE (VFS_DIR_BUFFER_SIZE + VFS_FILE_BUFFER_SIZE)
660 #define GCOAP_VFS_EXTRA_STACKSIZE (0)
663 #ifndef GCOAP_STACK_SIZE
664 #define GCOAP_STACK_SIZE (THREAD_STACKSIZE_DEFAULT + DEBUG_EXTRA_STACKSIZE \
665 + sizeof(coap_pkt_t) + GCOAP_DTLS_EXTRA_STACKSIZE \
666 + GCOAP_VFS_EXTRA_STACKSIZE)
674 #ifndef CONFIG_GCOAP_RESEND_BUFS_MAX
675 #define CONFIG_GCOAP_RESEND_BUFS_MAX (1)
683 #define COAP_LINK_FLAG_INIT_RESLIST (1)
716 #define GCOAP_RESOURCE_FOUND (0)
717 #define GCOAP_RESOURCE_WRONG_METHOD (1)
718 #define GCOAP_RESOURCE_NO_PATH (2)
719 #define GCOAP_RESOURCE_ERROR (3)
762 #if IS_USED(MODULE_GCOAP_DTLS) || defined(DOXYGEN)
766 #if IS_USED(MODULE_GCOAP_DTLS) || defined(DOXYGEN)
847 #if IS_USED(MODULE_NANOCOAP_CACHE) || DOXYGEN
912 const char *uri_path);
941 unsigned code,
const char *path,
969 unsigned code,
const char *path)
972 (path) ? strlen(path) : 0U);
988 unsigned code,
char *path)
991 if (
IS_USED(MODULE_NANOCOAP_CACHE)) {
1054 size_t len,
unsigned code)
1179 #if IS_USED(MODULE_GCOAP_DTLS) || defined(DOXYGEN)
Provides a callback-with-argument event type.
int16_t kernel_pid_t
Unique process identifier.
int gcoap_req_init_path_buffer(coap_pkt_t *pdu, uint8_t *buf, size_t len, unsigned code, const char *path, size_t path_len)
Initializes a CoAP request PDU on a buffer.
int gcoap_get_resource_list(void *buf, size_t maxlen, uint8_t cf, gcoap_socket_type_t tl_type)
Get the resource list, currently only CoRE Link Format (COAP_FORMAT_LINK) supported.
int gcoap_resp_init(coap_pkt_t *pdu, uint8_t *buf, size_t len, unsigned code)
Initializes a CoAP response packet on a buffer.
ssize_t(* gcoap_link_encoder_t)(const coap_resource_t *resource, char *buf, size_t maxlen, coap_link_encoder_ctx_t *context)
Handler function to write a resource link.
void gcoap_register_listener(gcoap_listener_t *listener)
Starts listening for resource paths.
static int gcoap_req_init(coap_pkt_t *pdu, uint8_t *buf, size_t len, unsigned code, const char *path)
Initializes a CoAP request PDU on a buffer.
#define GCOAP_TOKENLEN_MAX
Maximum length in bytes for a token.
gcoap_socket_type_t
CoAP socket types.
int gcoap_obs_init(coap_pkt_t *pdu, uint8_t *buf, size_t len, const coap_resource_t *resource)
Initializes a CoAP Observe notification packet on a buffer, for the observer registered for a resourc...
ssize_t gcoap_req_send(const uint8_t *buf, size_t len, const sock_udp_ep_t *remote, const sock_udp_ep_t *local, gcoap_resp_handler_t resp_handler, void *context, gcoap_socket_type_t tl_type)
Sends a buffer containing a CoAP request to the provided endpoint.
sock_dtls_t * gcoap_get_sock_dtls(void)
Get the underlying DTLS socket of gcoap.
#define GCOAP_HEADER_MAXLEN
Maximum length in bytes for a header, including the token.
const coap_resource_t * gcoap_get_resource_by_path_iterator(const gcoap_listener_t **last_listener, const coap_resource_t *last_resource, const char *uri_path)
Iterate through all registered listeners and check for a resource, matching by uri_path.
void(* gcoap_resp_handler_t)(const gcoap_request_memo_t *memo, coap_pkt_t *pdu, const sock_udp_ep_t *remote)
Handler function for a server response, including the state for the originating request.
#define GCOAP_SEND_LIMIT_NON
Value for send_limit in request memo when non-confirmable type.
ssize_t gcoap_encode_link(const coap_resource_t *resource, char *buf, size_t maxlen, coap_link_encoder_ctx_t *context)
Writes a resource in CoRE Link Format to a provided buffer.
size_t gcoap_obs_send(const uint8_t *buf, size_t len, const coap_resource_t *resource)
Sends a buffer containing a CoAP Observe notification to the observer registered for a resource.
int gcoap_obs_req_forget(const sock_udp_ep_t *remote, const uint8_t *token, size_t tokenlen)
Forgets (invalidates) an existing observe request.
static ssize_t gcoap_response(coap_pkt_t *pdu, uint8_t *buf, size_t len, unsigned code)
Writes a complete CoAP response PDU when there is no payload.
int(* gcoap_request_matcher_t)(gcoap_listener_t *listener, const coap_resource_t **resource, coap_pkt_t *pdu)
Handler function for the request matcher strategy.
kernel_pid_t gcoap_init(void)
Initializes the gcoap thread and device.
uint8_t gcoap_op_state(void)
Provides important operational statistics.
static coap_hdr_t * gcoap_request_memo_get_hdr(const gcoap_request_memo_t *memo)
Get the header of a request from a gcoap_request_memo_t.
static ssize_t gcoap_request(coap_pkt_t *pdu, uint8_t *buf, size_t len, unsigned code, char *path)
Writes a complete CoAP request PDU when there is not a payload.
@ GCOAP_SOCKET_TYPE_UDP
Unencrypted UDP transport.
@ GCOAP_SOCKET_TYPE_UNDEF
undefined
@ GCOAP_SOCKET_TYPE_DTLS
DTLS-over-UDP transport.
#define CONFIG_NANOCOAP_CACHE_KEY_LENGTH
The length of the cache key in bytes.
#define COAP_OPT_FINISH_NONE
no special handling required
ssize_t coap_opt_remove(coap_pkt_t *pkt, uint16_t optnum)
Removes an option previously added with function in the coap_opt_add_...() group.
ssize_t coap_opt_finish(coap_pkt_t *pkt, uint16_t flags)
Finalizes options as required and prepares for payload.
int socket(int domain, int type, int protocol)
Create an endpoint for communication.
Definitions for IPv6 addresses.
#define IS_USED(module)
Checks whether a module is being used or not.
Common IP-based transport layer end point.
Raw CoAP PDU header structure.
Context information required to write a resource link.
unsigned content_format
link format
size_t link_pos
position of link within listener
uint16_t flags
encoder switches; see COAP_LINK_FLAG_ constants
CoAP PDU parsing context structure.
Type for CoAP resource entry.
Callback Event structure definition.
A modular collection of resources for a server.
gcoap_link_encoder_t link_encoder
Writes a link for a resource.
struct gcoap_listener * next
Next listener in list.
size_t resources_len
Length of array.
gcoap_socket_type_t tl_type
Transport type for the listener.
const coap_resource_t * resources
First element in the array of resources.
gcoap_request_matcher_t request_matcher
Function that picks a suitable request handler from a request.
Memo for Observe registration and notifications.
unsigned token_len
Actual length of token attribute.
gcoap_socket_t socket
Transport type to observer.
const coap_resource_t * resource
Entity being observed.
sock_udp_ep_t * notifier
Local endpoint to send notifications.
uint16_t last_msgid
Message ID of last notification.
sock_udp_ep_t * observer
Client endpoint; unused if null.
Memo to handle a response for a request.
void * context
ptr to user defined context data
union gcoap_request_memo::@359 msg
Request message data; if confirmable, supports resending message.
gcoap_resp_handler_t resp_handler
Callback for the response.
event_callback_t resp_tmout_cb
Callback for response timeout.
unsigned state
State of this memo, a GCOAP_MEMO...
int send_limit
Remaining resends, 0 if none; GCOAP_SEND_LIMIT_NON if non-confirmable.
gcoap_resend_t data
Endpoint and PDU buffer, for resend.
uint8_t cache_key[CONFIG_NANOCOAP_CACHE_KEY_LENGTH]
Cache key for the request.
sock_udp_ep_t remote_ep
Remote endpoint.
gcoap_socket_t socket
Transport type to remote endpoint.
uint8_t hdr_buf[GCOAP_HEADER_MAXLEN]
Copy of PDU header, if no resends.
event_timeout_t resp_evt_tmout
Limits wait for response.
Extends request memo for resending a confirmable request.
uint8_t * pdu_buf
Buffer containing the PDU.
size_t pdu_len
Length of pdu_buf.
CoAP socket to handle multiple transport types.
gcoap_socket_type_t type
Type of stored socket.
sock_dtls_session_t ctx_dtls_session
Session object for the stored socket.
Information about remote client connected to the server.
Information about DTLS sock.
Provides functionality to trigger events after timeout.
Utility library for comparing and computing timestamps.