libcoap 4.3.5-develop-19cef11
|
CoAP context functions. More...
#include "coap3/coap_libcoap_build.h"
#include "coap3/coap_mutex_internal.h"
#include <ctype.h>
#include <stdio.h>
Go to the source code of this file.
Macros | |
#define | INET6_ADDRSTRLEN 40 |
#define | min(a, b) ((a) < (b) ? (a) : (b)) |
#define | FRAC_BITS 6 |
The number of bits for the fractional part of ACK_TIMEOUT and ACK_RANDOM_FACTOR. More... | |
#define | MAX_BITS 8 |
The maximum number of bits for fixed point integers that are used for retransmission time calculation. More... | |
#define | Q(frac, fval) |
creates a Qx.frac from fval in coap_fixed_point_t More... | |
#define | ACK_RANDOM_FACTOR Q(FRAC_BITS, session->ack_random_factor) |
creates a Qx.FRAC_BITS from session's 'ack_random_factor' More... | |
#define | ACK_TIMEOUT Q(FRAC_BITS, session->ack_timeout) |
creates a Qx.FRAC_BITS from session's 'ack_timeout' More... | |
#define | FP1 Q(FRAC_BITS, ((coap_fixed_point_t){1,0})) |
#define | SHR_FP(val, frac) (((val) + (1 << ((frac) - 1))) >> (frac)) |
Functions | |
COAP_STATIC_INLINE coap_queue_t * | coap_malloc_node (void) |
COAP_STATIC_INLINE void | coap_free_node (coap_queue_t *node) |
unsigned int | coap_adjust_basetime (coap_context_t *ctx, coap_tick_t now) |
Set sendqueue_basetime in the given context object ctx to now . More... | |
int | coap_insert_node (coap_queue_t **queue, coap_queue_t *node) |
Adds node to given queue , ordered by variable t in node . More... | |
COAP_API int | coap_delete_node (coap_queue_t *node) |
Destroys specified node . More... | |
int | coap_delete_node_lkd (coap_queue_t *node) |
Destroys specified node . More... | |
void | coap_delete_all (coap_queue_t *queue) |
Removes all items from given queue and frees the allocated storage. More... | |
coap_queue_t * | coap_new_node (void) |
Creates a new node suitable for adding to the CoAP sendqueue. More... | |
coap_queue_t * | coap_peek_next (coap_context_t *context) |
Returns the next pdu to send without removing from sendqeue. More... | |
coap_queue_t * | coap_pop_next (coap_context_t *context) |
Returns the next pdu to send and removes it from the sendqeue. More... | |
COAP_API int | coap_context_set_pki_root_cas (coap_context_t *ctx, const char *ca_file, const char *ca_dir) |
Set the context's default Root CA information for a client or server. More... | |
int | coap_context_set_pki_root_cas_lkd (coap_context_t *ctx, const char *ca_file, const char *ca_dir) |
Set the context's default Root CA information for a client or server. More... | |
void | coap_context_set_keepalive (coap_context_t *context, unsigned int seconds) |
Set the context keepalive timer for sessions. More... | |
int | coap_context_set_cid_tuple_change (coap_context_t *context, uint8_t every) |
Set the Connection ID client tuple frequency change for testing CIDs. More... | |
void | coap_context_set_max_token_size (coap_context_t *context, size_t max_token_size) |
Set the maximum token size (RFC8974). More... | |
void | coap_context_set_max_idle_sessions (coap_context_t *context, unsigned int max_idle_sessions) |
Set the maximum idle sessions count. More... | |
unsigned int | coap_context_get_max_idle_sessions (const coap_context_t *context) |
Get the maximum idle sessions count. More... | |
void | coap_context_set_max_handshake_sessions (coap_context_t *context, unsigned int max_handshake_sessions) |
Set the maximum number of sessions in (D)TLS handshake value. More... | |
unsigned int | coap_context_get_max_handshake_sessions (const coap_context_t *context) |
Get the session timeout value. More... | |
void | coap_context_set_csm_timeout (coap_context_t *context, unsigned int csm_timeout) |
Set the CSM timeout value. More... | |
unsigned int | coap_context_get_csm_timeout (const coap_context_t *context) |
Get the CSM timeout value. More... | |
void | coap_context_set_csm_timeout_ms (coap_context_t *context, unsigned int csm_timeout_ms) |
Set the CSM timeout value. More... | |
unsigned int | coap_context_get_csm_timeout_ms (const coap_context_t *context) |
Get the CSM timeout value. More... | |
void | coap_context_set_csm_max_message_size (coap_context_t *context, uint32_t csm_max_message_size) |
Set the CSM max session size value. More... | |
uint32_t | coap_context_get_csm_max_message_size (const coap_context_t *context) |
Get the CSM max session size value. More... | |
void | coap_context_set_session_timeout (coap_context_t *context, unsigned int session_timeout) |
Set the session timeout value. More... | |
unsigned int | coap_context_get_session_timeout (const coap_context_t *context) |
Get the session timeout value. More... | |
int | coap_context_get_coap_fd (const coap_context_t *context) |
Get the libcoap internal file descriptor for using in an application's select() or returned as an event in an application's epoll_wait() call. More... | |
int | coap_epoll_is_supported (void) |
Determine whether epoll is supported or not. More... | |
int | coap_threadsafe_is_supported (void) |
Determine whether libcoap is threadsafe or not. More... | |
int | coap_ipv4_is_supported (void) |
Check whether IPv4 is available. More... | |
int | coap_ipv6_is_supported (void) |
Check whether IPv6 is available. More... | |
int | coap_client_is_supported (void) |
Check whether Client code is available. More... | |
int | coap_server_is_supported (void) |
Check whether Server code is available. More... | |
int | coap_af_unix_is_supported (void) |
Check whether socket type AF_UNIX is available. More... | |
void | coap_context_set_app_data (coap_context_t *context, void *app_data) |
Stores data with the given context. More... | |
void * | coap_context_get_app_data (const coap_context_t *context) |
Returns any application-specific data that has been stored with context using the function coap_context_set_app_data(). More... | |
coap_context_t * | coap_new_context (const coap_address_t *listen_addr) |
Creates a new coap_context_t object that will hold the CoAP stack status. More... | |
void | coap_set_app_data (coap_context_t *ctx, void *app_data) |
void * | coap_get_app_data (const coap_context_t *ctx) |
COAP_API void | coap_free_context (coap_context_t *context) |
CoAP stack context must be released with coap_free_context(). More... | |
void | coap_free_context_lkd (coap_context_t *context) |
CoAP stack context must be released with coap_free_context_lkd(). More... | |
int | coap_option_check_critical (coap_session_t *session, coap_pdu_t *pdu, coap_opt_filter_t *unknown) |
Verifies that pdu contains no unknown critical options. More... | |
COAP_API coap_mid_t | coap_send_rst (coap_session_t *session, const coap_pdu_t *request) |
Sends an RST message with code 0 for the specified request to dst . More... | |
coap_mid_t | coap_send_rst_lkd (coap_session_t *session, const coap_pdu_t *request) |
Sends an RST message with code 0 for the specified request to dst . More... | |
COAP_API coap_mid_t | coap_send_ack (coap_session_t *session, const coap_pdu_t *request) |
Sends an ACK message with code 0 for the specified request to dst . More... | |
coap_mid_t | coap_send_ack_lkd (coap_session_t *session, const coap_pdu_t *request) |
Sends an ACK message with code 0 for the specified request to dst . More... | |
ssize_t | coap_session_send_pdu (coap_session_t *session, coap_pdu_t *pdu) |
Send a pdu according to the session's protocol. More... | |
static ssize_t | coap_send_pdu (coap_session_t *session, coap_pdu_t *pdu, coap_queue_t *node) |
COAP_API coap_mid_t | coap_send_error (coap_session_t *session, const coap_pdu_t *request, coap_pdu_code_t code, coap_opt_filter_t *opts) |
Sends an error response with code code for request request to dst . More... | |
coap_mid_t | coap_send_error_lkd (coap_session_t *session, const coap_pdu_t *request, coap_pdu_code_t code, coap_opt_filter_t *opts) |
Sends an error response with code code for request request to dst . More... | |
COAP_API coap_mid_t | coap_send_message_type (coap_session_t *session, const coap_pdu_t *request, coap_pdu_type_t type) |
Helper function to create and send a message with type (usually ACK or RST). More... | |
coap_mid_t | coap_send_message_type_lkd (coap_session_t *session, const coap_pdu_t *request, coap_pdu_type_t type) |
Helper function to create and send a message with type (usually ACK or RST). More... | |
unsigned int | coap_calc_timeout (coap_session_t *session, unsigned char r) |
Calculates the initial timeout based on the session CoAP transmission parameters 'ack_timeout', 'ack_random_factor', and COAP_TICKS_PER_SECOND. More... | |
coap_mid_t | coap_wait_ack (coap_context_t *context, coap_session_t *session, coap_queue_t *node) |
int | coap_client_delay_first (coap_session_t *session) |
Delay the sending of the first client request until some other negotiation has completed. More... | |
int | coap_check_code_class (coap_session_t *session, coap_pdu_t *pdu) |
Check whether the pdu contains a valid code class. More... | |
COAP_API coap_mid_t | coap_send (coap_session_t *session, coap_pdu_t *pdu) |
Sends a CoAP message to given peer. More... | |
coap_mid_t | coap_send_lkd (coap_session_t *session, coap_pdu_t *pdu) |
Sends a CoAP message to given peer. More... | |
coap_mid_t | coap_send_internal (coap_session_t *session, coap_pdu_t *pdu) |
Sends a CoAP message to given peer. More... | |
void | coap_send_recv_terminate (void) |
Terminate any active coap_send_recv() sessions. More... | |
COAP_API int | coap_send_recv (coap_session_t *session, coap_pdu_t *request_pdu, coap_pdu_t **response_pdu, uint32_t timeout_ms) |
int | coap_send_recv_lkd (coap_session_t *session, coap_pdu_t *request_pdu, coap_pdu_t **response_pdu, uint32_t timeout_ms) |
coap_mid_t | coap_retransmit (coap_context_t *context, coap_queue_t *node) |
Handles retransmissions of confirmable messages. More... | |
static int | coap_handle_dgram_for_proto (coap_context_t *ctx, coap_session_t *session, coap_packet_t *packet) |
static void | coap_write_session (coap_context_t *ctx, coap_session_t *session, coap_tick_t now) |
void | coap_read_session (coap_context_t *ctx, coap_session_t *session, coap_tick_t now) |
COAP_API void | coap_io_do_io (coap_context_t *ctx, coap_tick_t now) |
Processes any outstanding read, write, accept or connect I/O as indicated in the coap_socket_t structures (COAP_SOCKET_CAN_xxx set) embedded in endpoints or sessions associated with ctx . More... | |
void | coap_io_do_io_lkd (coap_context_t *ctx, coap_tick_t now) |
Processes any outstanding read, write, accept or connect I/O as indicated in the coap_socket_t structures (COAP_SOCKET_CAN_xxx set) embedded in endpoints or sessions associated with ctx . More... | |
COAP_API void | coap_io_do_epoll (coap_context_t *ctx, struct epoll_event *events, size_t nevents) |
Process all the epoll events. More... | |
void | coap_io_do_epoll_lkd (coap_context_t *ctx, struct epoll_event *events, size_t nevents) |
Process all the epoll events. More... | |
int | coap_handle_dgram (coap_context_t *ctx, coap_session_t *session, uint8_t *msg, size_t msg_len) |
Parses and interprets a CoAP datagram with context ctx . More... | |
int | coap_remove_from_queue (coap_queue_t **queue, coap_session_t *session, coap_mid_t id, coap_queue_t **node) |
This function removes the element with given id from the list given list. More... | |
void | coap_cancel_session_messages (coap_context_t *context, coap_session_t *session, coap_nack_reason_t reason) |
Cancels all outstanding messages for session session . More... | |
void | coap_cancel_all_messages (coap_context_t *context, coap_session_t *session, coap_bin_const_t *token) |
Cancels all outstanding messages for session session that have the specified token. More... | |
coap_pdu_t * | coap_new_error_response (const coap_pdu_t *request, coap_pdu_code_t code, coap_opt_filter_t *opts) |
Creates a new ACK PDU with specified error code . More... | |
static int | coap_cancel (coap_context_t *context, const coap_queue_t *sent) |
This function cancels outstanding messages for the session and token specified in sent . More... | |
static void | handle_signaling (coap_context_t *context, coap_session_t *session, coap_pdu_t *pdu) |
static int | check_token_size (coap_session_t *session, const coap_pdu_t *pdu) |
void | coap_dispatch (coap_context_t *context, coap_session_t *session, coap_pdu_t *pdu) |
Dispatches the PDUs from the receive queue in given context. More... | |
static const char * | coap_event_name (coap_event_t event) |
COAP_API int | coap_handle_event (coap_context_t *context, coap_event_t event, coap_session_t *session) |
Invokes the event handler of context for the given event and data . More... | |
int | coap_handle_event_lkd (coap_context_t *context, coap_event_t event, coap_session_t *session) |
Invokes the event handler of context for the given event and data . More... | |
COAP_API int | coap_can_exit (coap_context_t *context) |
Returns 1 if there are no messages to send or to dispatch in the context's queues. More... | |
int | coap_can_exit_lkd (coap_context_t *context) |
Returns 1 if there are no messages to send or to dispatch in the context's queues. More... | |
void | coap_startup (void) |
void | coap_cleanup (void) |
void | coap_register_response_handler (coap_context_t *context, coap_response_handler_t handler) |
Registers a new message handler that is called whenever a response is received. More... | |
void | coap_register_nack_handler (coap_context_t *context, coap_nack_handler_t handler) |
Registers a new message handler that is called whenever a confirmable message (request or response) is dropped after all retries have been exhausted, or a rst message was received, or a network or TLS level event was received that indicates delivering the message is not possible. More... | |
void | coap_register_ping_handler (coap_context_t *context, coap_ping_handler_t handler) |
Registers a new message handler that is called whenever a CoAP Ping message is received. More... | |
void | coap_register_pong_handler (coap_context_t *context, coap_pong_handler_t handler) |
Registers a new message handler that is called whenever a CoAP Pong message is received. More... | |
COAP_API void | coap_register_option (coap_context_t *ctx, uint16_t type) |
Registers the option type type with the given context object ctx . More... | |
void | coap_register_option_lkd (coap_context_t *ctx, uint16_t type) |
Registers the option type type with the given context object ctx . More... | |
Variables | |
static unsigned int | s_csm_timeout = 30 |
static int | send_recv_terminate = 0 |
int | coap_started = 0 |
CoAP context functions.
Definition in file coap_net.c.
creates a Qx.FRAC_BITS from session's 'ack_random_factor'
Definition at line 97 of file coap_net.c.
creates a Qx.FRAC_BITS from session's 'ack_timeout'
Definition at line 101 of file coap_net.c.
#define FP1 Q(FRAC_BITS, ((coap_fixed_point_t){1,0})) |
#define FRAC_BITS 6 |
The number of bits for the fractional part of ACK_TIMEOUT and ACK_RANDOM_FACTOR.
Must be less or equal 8.
Definition at line 80 of file coap_net.c.
#define INET6_ADDRSTRLEN 40 |
Definition at line 69 of file coap_net.c.
#define MAX_BITS 8 |
The maximum number of bits for fixed point integers that are used for retransmission time calculation.
Currently this must be 8
.
Definition at line 86 of file coap_net.c.
#define min | ( | a, | |
b | |||
) | ((a) < (b) ? (a) : (b)) |
Definition at line 73 of file coap_net.c.
#define Q | ( | frac, | |
fval | |||
) |
creates a Qx.frac from fval in coap_fixed_point_t
Definition at line 93 of file coap_net.c.
#define SHR_FP | ( | val, | |
frac | |||
) | (((val) + (1 << ((frac) - 1))) >> (frac)) |
|
static |
Definition at line 3986 of file coap_net.c.
|
static |
This function cancels outstanding messages for the session and token specified in sent
.
Any observation relationship for sent->session and the token are removed. Calling this function is required when receiving an RST message (usually in response to a notification) or a GET request with the Observe option set to 1.
This function returns 0
when the token is unknown with this peer, or a value greater than zero otherwise.
Definition at line 3007 of file coap_net.c.
void coap_cleanup | ( | void | ) |
|
static |
COAP_STATIC_INLINE void coap_free_node | ( | coap_queue_t * | node | ) |
Definition at line 111 of file coap_net.c.
|
static |
Definition at line 2156 of file coap_net.c.
COAP_STATIC_INLINE coap_queue_t * coap_malloc_node | ( | void | ) |
Definition at line 106 of file coap_net.c.
|
static |
Definition at line 1014 of file coap_net.c.
void coap_startup | ( | void | ) |
Definition at line 4616 of file coap_net.c.
|
static |
Definition at line 2197 of file coap_net.c.
|
static |
Definition at line 3913 of file coap_net.c.
int coap_started = 0 |
Definition at line 4606 of file coap_net.c.
|
static |
Definition at line 503 of file coap_net.c.
|
static |
Definition at line 1908 of file coap_net.c.