libcoap  4.3.0rc1
net.c File Reference
#include "coap2/coap_internal.h"
#include <ctype.h>
#include <stdio.h>
#include <errno.h>
+ Include dependency graph for net.c:

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))
 
#define SZX_TO_BYTES(SZX)   ((size_t)(1 << ((SZX) + 4)))
 

Enumerations

enum  respond_t { RESPONSE_DEFAULT , RESPONSE_DROP , RESPONSE_SEND }
 Internal flags to control the treatment of responses (specifically in presence of the No-Response option). More...
 

Functions

COAP_STATIC_INLINE coap_queue_tcoap_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...
 
int coap_delete_node (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_tcoap_new_node (void)
 Creates a new node suitable for adding to the CoAP sendqueue. More...
 
coap_queue_tcoap_peek_next (coap_context_t *context)
 Returns the next pdu to send without removing from sendqeue. More...
 
coap_queue_tcoap_pop_next (coap_context_t *context)
 Returns the next pdu to send and removes it from the sendqeue. More...
 
static size_t coap_get_session_client_psk (const coap_session_t *session, const uint8_t *hint, size_t hint_len, uint8_t *identity, size_t *identity_len, size_t max_identity_len, uint8_t *psk, size_t max_psk_len)
 
static size_t coap_get_context_server_psk (const coap_session_t *session, const uint8_t *identity, size_t identity_len, uint8_t *psk, size_t max_psk_len)
 
static size_t coap_get_context_server_hint (const coap_session_t *session, uint8_t *hint, size_t max_hint_len)
 
int coap_context_set_psk (coap_context_t *ctx, const char *hint, const uint8_t *key, size_t key_len)
 Set the context's default PSK hint and/or key for a server. More...
 
int coap_context_set_psk2 (coap_context_t *ctx, coap_dtls_spsk_t *setup_data)
 Set the context's default PSK hint and/or key for a server. More...
 
int coap_context_set_pki (coap_context_t *ctx, const coap_dtls_pki_t *setup_data)
 Set the context's default PKI information for a server. More...
 
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...
 
void coap_context_set_keepalive (coap_context_t *context, unsigned int seconds)
 Set the context keepalive timer for sessions. More...
 
int coap_context_get_coap_fd (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...
 
coap_context_tcoap_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)
 Stores data with the given CoAP context. More...
 
void * coap_get_app_data (const coap_context_t *ctx)
 Returns any application-specific data that has been stored with context using the function coap_set_app_data(). More...
 
void coap_free_context (coap_context_t *context)
 CoAP stack context must be released with coap_free_context(). More...
 
int coap_option_check_critical (coap_context_t *ctx, coap_pdu_t *pdu, coap_opt_filter_t unknown)
 Verifies that pdu contains no unknown critical options. More...
 
coap_mid_t coap_send_ack (coap_session_t *session, 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_mid_t coap_send_error (coap_session_t *session, coap_pdu_t *request, unsigned char code, coap_opt_filter_t *opts)
 Sends an error response with code code for request request to dst. More...
 
coap_mid_t coap_send_message_type (coap_session_t *session, coap_pdu_t *request, unsigned char 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)
 
COAP_STATIC_INLINE int token_match (const uint8_t *a, size_t alen, const uint8_t *b, size_t blen)
 
coap_mid_t coap_send_large (coap_session_t *session, coap_pdu_t *pdu)
 Sends a CoAP message to given peer. More...
 
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_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_connect_session (coap_context_t *ctx, coap_session_t *session, coap_tick_t now)
 
static void coap_write_session (coap_context_t *ctx, coap_session_t *session, coap_tick_t now)
 
static void coap_read_session (coap_context_t *ctx, coap_session_t *session, coap_tick_t now)
 
static int coap_read_endpoint (coap_context_t *ctx, coap_endpoint_t *endpoint, coap_tick_t now)
 
static int coap_write_endpoint (coap_context_t *ctx, coap_endpoint_t *endpoint, coap_tick_t now)
 
static int coap_accept_endpoint (coap_context_t *ctx, coap_endpoint_t *endpoint, coap_tick_t now)
 
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_epoll (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, const uint8_t *token, size_t token_length)
 Cancels all outstanding messages for session session that have the specified token. More...
 
coap_pdu_tcoap_new_error_response (coap_pdu_t *request, unsigned char code, coap_opt_filter_t *opts)
 Creates a new ACK PDU with specified error code. More...
 
COAP_STATIC_INLINE size_t get_wkc_len (coap_context_t *context, coap_opt_t *query_filter)
 Quick hack to determine the size of the resource description for .well-known/core. More...
 
coap_pdu_tcoap_wellknown_response (coap_context_t *context, coap_session_t *session, coap_pdu_t *request)
 Creates a new response for given request with the contents of .well-known/core. 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 enum respond_t no_response (coap_pdu_t *request, coap_pdu_t *response, coap_session_t *session)
 
static void handle_request (coap_context_t *context, coap_session_t *session, coap_pdu_t *pdu)
 
static void handle_response (coap_context_t *context, coap_session_t *session, coap_pdu_t *sent, coap_pdu_t *rcvd)
 
static void handle_signaling (coap_context_t *context, coap_session_t *session, 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...
 
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_can_exit (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)
 
int coap_join_mcast_group_intf (coap_context_t *ctx, const char *group_name, const char *ifname)
 Function interface for joining a multicast group for listening for the currently defined endpoints that are UDP. More...
 

Variables

static coap_str_const_t coap_default_uri_wellknown
 
static int coap_started = 0
 

Macro Definition Documentation

◆ ACK_RANDOM_FACTOR

#define ACK_RANDOM_FACTOR    Q(FRAC_BITS, session->ack_random_factor)

creates a Qx.FRAC_BITS from session's 'ack_random_factor'

Definition at line 89 of file net.c.

◆ ACK_TIMEOUT

#define ACK_TIMEOUT   Q(FRAC_BITS, session->ack_timeout)

creates a Qx.FRAC_BITS from session's 'ack_timeout'

Definition at line 93 of file net.c.

◆ FP1

#define FP1   Q(FRAC_BITS, ((coap_fixed_point_t){1,0}))

◆ FRAC_BITS

#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 72 of file net.c.

◆ INET6_ADDRSTRLEN

#define INET6_ADDRSTRLEN   40

Definition at line 61 of file net.c.

◆ MAX_BITS

#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 78 of file net.c.

◆ min

#define min (   a,
 
)    ((a) < (b) ? (a) : (b))

Definition at line 65 of file net.c.

◆ Q

#define Q (   frac,
  fval 
)
Value:
((uint16_t)(((1 << (frac)) * fval.integer_part) + \
((1 << (frac)) * fval.fractional_part + 500)/1000))

creates a Qx.frac from fval in coap_fixed_point_t

Definition at line 85 of file net.c.

◆ SHR_FP

#define SHR_FP (   val,
  frac 
)    (((val) + (1 << ((frac) - 1))) >> (frac))

◆ SZX_TO_BYTES

#define SZX_TO_BYTES (   SZX)    ((size_t)(1 << ((SZX) + 4)))

Definition at line 2136 of file net.c.

Enumeration Type Documentation

◆ respond_t

enum respond_t

Internal flags to control the treatment of responses (specifically in presence of the No-Response option).

Enumerator
RESPONSE_DEFAULT 
RESPONSE_DROP 
RESPONSE_SEND 

Definition at line 2314 of file net.c.

Function Documentation

◆ coap_accept_endpoint()

static int coap_accept_endpoint ( coap_context_t ctx,
coap_endpoint_t endpoint,
coap_tick_t  now 
)
static

Definition at line 1681 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_adjust_basetime()

unsigned int coap_adjust_basetime ( coap_context_t ctx,
coap_tick_t  now 
)

Set sendqueue_basetime in the given context object ctx to now.

This function returns the number of elements in the queue head that have timed out.

Definition at line 155 of file net.c.

◆ coap_calc_timeout()

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.

The calculation requires 'ack_timeout' and 'ack_random_factor' to be in Qx.FRAC_BITS fixed point notation, whereas the passed parameter r is interpreted as the fractional part of a Q0.MAX_BITS random value.

Parameters
sessionsession timeout is associated with
rrandom value as fractional part of a Q0.MAX_BITS fixed point value
Returns
COAP_TICKS_PER_SECOND * 'ack_timeout' * (1 + ('ack_random_factor' - 1) * r)

Definition at line 899 of file net.c.

+ Here is the caller graph for this function:

◆ coap_can_exit()

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.

Definition at line 3080 of file net.c.

◆ coap_cancel()

static int coap_cancel ( coap_context_t context,
const coap_queue_t sent 
)
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 2292 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_cancel_all_messages()

void coap_cancel_all_messages ( coap_context_t context,
coap_session_t session,
const uint8_t *  token,
size_t  token_length 
)

Cancels all outstanding messages for session session that have the specified token.

Parameters
contextThe context in use.
sessionSession of the messages to remove.
tokenMessage token.
token_lengthActual length of token.

Definition at line 1968 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_cancel_session_messages()

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.

Parameters
contextThe context in use.
sessionSession of the messages to remove.
reasonThe reasion for the session cancellation

Definition at line 1931 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_cleanup()

void coap_cleanup ( void  )

Definition at line 3126 of file net.c.

+ Here is the call graph for this function:

◆ coap_connect_session()

static void coap_connect_session ( coap_context_t ctx,
coap_session_t session,
coap_tick_t  now 
)
static

Definition at line 1402 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_context_get_coap_fd()

int coap_context_get_coap_fd ( 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.

Parameters
contextThe coap_context_t object.
Returns
The libcoap file descriptor or -1 if epoll is not available.

Definition at line 449 of file net.c.

◆ coap_context_set_keepalive()

void coap_context_set_keepalive ( coap_context_t context,
unsigned int  seconds 
)

Set the context keepalive timer for sessions.

A keepalive message will be sent after if a session has been inactive, i.e. no packet sent or received, for the given number of seconds. For unreliable protocols, a CoAP Empty message will be sent. If a CoAP RST is not received, the CoAP Empty messages will get resent based on the Confirmable retry parameters until there is a failure timeout, at which point the session will be considered as disconnected. For reliable protocols, a CoAP PING message will be sent. If a CoAP PONG has not been received before the next PING is due to be sent, the session will be considered as disconnected.

Parameters
contextThe coap_context_t object.
secondsNumber of seconds for the inactivity timer, or zero to disable CoAP-level keepalive messages.

Definition at line 445 of file net.c.

◆ coap_context_set_pki()

int coap_context_set_pki ( coap_context_t context,
const coap_dtls_pki_t setup_data 
)

Set the context's default PKI information for a server.

Parameters
contextThe current coap_context_t object.
setup_dataIf NULL, PKI authentication will fail. Certificate information required.
Returns
1 if successful, else 0.

Definition at line 420 of file net.c.

+ Here is the call graph for this function:

◆ coap_context_set_pki_root_cas()

int coap_context_set_pki_root_cas ( coap_context_t context,
const char *  ca_file,
const char *  ca_dir 
)

Set the context's default Root CA information for a client or server.

Parameters
contextThe current coap_context_t object.
ca_fileIf not NULL, is the full path name of a PEM encoded file containing all the Root CAs to be used.
ca_dirIf not NULL, points to a directory containing PEM encoded files containing all the Root CAs to be used.
Returns
1 if successful, else 0.

Definition at line 435 of file net.c.

+ Here is the call graph for this function:

◆ coap_context_set_psk()

int coap_context_set_psk ( coap_context_t context,
const char *  hint,
const uint8_t *  key,
size_t  key_len 
)

Set the context's default PSK hint and/or key for a server.

Parameters
contextThe current coap_context_t object.
hintThe default PSK server hint sent to a client. If NULL, PSK authentication is disabled. Empty string is a valid hint.
keyThe default PSK key. If NULL, PSK authentication will fail.
key_lenThe default PSK key's length. If 0, PSK authentication will fail.
Returns
1 if successful, else 0.

Definition at line 386 of file net.c.

+ Here is the call graph for this function:

◆ coap_context_set_psk2()

int coap_context_set_psk2 ( coap_context_t context,
coap_dtls_spsk_t setup_data 
)

Set the context's default PSK hint and/or key for a server.

Parameters
contextThe current coap_context_t object.
setup_dataIf NULL, PSK authentication will fail. PSK information required.
Returns
1 if successful, else 0.

Definition at line 406 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_delete_all()

void coap_delete_all ( coap_queue_t queue)

Removes all items from given queue and frees the allocated storage.

Internal function.

Parameters
queueThe queue to delete.

Definition at line 249 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_delete_node()

int coap_delete_node ( coap_queue_t node)

Destroys specified node.

Parameters
nodeNode entry to remove.
Returns
1 node deleted from queue, 0 failure.

Definition at line 229 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_dispatch()

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.

Definition at line 2885 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_free_context()

void coap_free_context ( coap_context_t context)

CoAP stack context must be released with coap_free_context().

This function clears all entries from the receive queue and send queue and deletes the resources that have been registered with context, and frees the attached endpoints.

Parameters
contextThe current coap_context_t object to free off.

Definition at line 585 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_free_node()

COAP_STATIC_INLINE void coap_free_node ( coap_queue_t node)

Definition at line 103 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_get_app_data()

void* coap_get_app_data ( const coap_context_t context)

Returns any application-specific data that has been stored with context using the function coap_set_app_data().

This function will return NULL if no data has been stored.

Parameters
contextThe CoAP context.
Returns
The data previously stored or NULL if not data stored.

Definition at line 579 of file net.c.

◆ coap_get_context_server_hint()

static size_t coap_get_context_server_hint ( const coap_session_t session,
uint8_t *  hint,
size_t  max_hint_len 
)
static

Definition at line 360 of file net.c.

+ Here is the caller graph for this function:

◆ coap_get_context_server_psk()

static size_t coap_get_context_server_psk ( const coap_session_t session,
const uint8_t *  identity,
size_t  identity_len,
uint8_t *  psk,
size_t  max_psk_len 
)
static

Definition at line 332 of file net.c.

+ Here is the caller graph for this function:

◆ coap_get_session_client_psk()

static size_t coap_get_session_client_psk ( const coap_session_t session,
const uint8_t *  hint,
size_t  hint_len,
uint8_t *  identity,
size_t *  identity_len,
size_t  max_identity_len,
uint8_t *  psk,
size_t  max_psk_len 
)
static

Definition at line 296 of file net.c.

+ Here is the caller graph for this function:

◆ coap_handle_dgram()

int coap_handle_dgram ( coap_context_t ctx,
coap_session_t session,
uint8_t *  data,
size_t  data_len 
)

Parses and interprets a CoAP datagram with context ctx.

This function returns 0 if the datagram was handled, or a value less than zero on error.

Parameters
ctxThe current CoAP context.
sessionThe current CoAP session.
dataThe received packet'd data.
data_lenThe received packet'd data length.
Returns
0 if message was handled successfully, or less than zero on error.

Definition at line 1850 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_handle_dgram_for_proto()

static int coap_handle_dgram_for_proto ( coap_context_t ctx,
coap_session_t session,
coap_packet_t packet 
)
static

Definition at line 1383 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_handle_event()

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.

Parameters
contextThe CoAP context whose event handler is to be called.
eventThe event to deliver.
sessionThe session related to event.
Returns
The result from the associated event handler or 0 if none was registered.

Definition at line 3069 of file net.c.

+ Here is the caller graph for this function:

◆ coap_insert_node()

int coap_insert_node ( coap_queue_t **  queue,
coap_queue_t node 
)

Adds node to given queue, ordered by variable t in node.

Parameters
queueQueue to add to.
nodeNode entry to add to Queue.
Returns
1 added to queue, 0 failure.

Definition at line 192 of file net.c.

+ Here is the caller graph for this function:

◆ coap_join_mcast_group_intf()

int coap_join_mcast_group_intf ( coap_context_t ctx,
const char *  groupname,
const char *  ifname 
)

Function interface for joining a multicast group for listening for the currently defined endpoints that are UDP.

Parameters
ctxThe current context.
groupnameThe name of the group that is to be joined for listening.
ifnameNetwork interface to join the group on, or NULL if first appropriate interface is to be chosen by the O/S.
Returns
0 on success, -1 on error

Definition at line 3135 of file net.c.

+ Here is the call graph for this function:

◆ coap_malloc_node()

COAP_STATIC_INLINE coap_queue_t* coap_malloc_node ( void  )

Definition at line 98 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_new_context()

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.

Definition at line 459 of file net.c.

+ Here is the call graph for this function:

◆ coap_new_error_response()

coap_pdu_t* coap_new_error_response ( coap_pdu_t request,
unsigned char  code,
coap_opt_filter_t opts 
)

Creates a new ACK PDU with specified error code.

The options specified by the filter expression opts will be copied from the original request contained in request. Unless SHORT_ERROR_RESPONSE was defined at build time, the textual reason phrase for code will be added as payload, with Content-Type 0. This function returns a pointer to the new response message, or NULL on error. The storage allocated for the new message must be released with coap_free().

Parameters
requestSpecification of the received (confirmable) request.
codeThe error code to set.
optsAn option filter that specifies which options to copy from the original request in node.
Returns
A pointer to the new message or NULL on error.

Definition at line 2009 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_new_node()

coap_queue_t* coap_new_node ( void  )

Creates a new node suitable for adding to the CoAP sendqueue.

Returns
New node entry, or NULL if failure.

Definition at line 258 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_option_check_critical()

int coap_option_check_critical ( coap_context_t ctx,
coap_pdu_t pdu,
coap_opt_filter_t  unknown 
)

Verifies that pdu contains no unknown critical options.

Options must be registered at ctx, using the function coap_register_option(). A basic set of options is registered automatically by coap_new_context(). This function returns 1 if pdu is ok, 0 otherwise. The given filter object unknown will be updated with the unknown options. As only COAP_MAX_OPT options can be signalled this way, remaining options must be examined manually.

coap_opt_filter_t f = COAP_OPT_NONE;
if (coap_option_check_critical(ctx, pdu, f) == 0) {
coap_option_iterator_init(pdu, &opt_iter, f);
while (coap_option_next(&opt_iter)) {
if (opt_iter.type & 0x01) {
... handle unknown critical option in opt_iter ...
}
}
}
coap_opt_t * coap_option_next(coap_opt_iterator_t *oi)
Updates the iterator oi to point to the next option.
Definition: option.c:146
coap_opt_iterator_t * coap_option_iterator_init(const coap_pdu_t *pdu, coap_opt_iterator_t *oi, const coap_opt_filter_t *filter)
Initializes the given option iterator oi to point to the beginning of the pdu's option list.
Definition: option.c:110
int coap_option_check_critical(coap_context_t *ctx, coap_pdu_t *pdu, coap_opt_filter_t unknown)
Verifies that pdu contains no unknown critical options.
Definition: net.c:654
Iterator to run through PDU options.
Definition: option.h:169
uint16_t type
decoded option type
Definition: option.h:171
Parameters
ctxThe context where all known options are registered.
pduThe PDU to check.
unknownThe output filter that will be updated to indicate the unknown critical options found in pdu.
Returns
1 if everything was ok, 0 otherwise.

Definition at line 654 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_peek_next()

coap_queue_t* coap_peek_next ( coap_context_t context)

Returns the next pdu to send without removing from sendqeue.

Definition at line 272 of file net.c.

+ Here is the caller graph for this function:

◆ coap_pop_next()

coap_queue_t* coap_pop_next ( coap_context_t context)

Returns the next pdu to send and removes it from the sendqeue.

Definition at line 280 of file net.c.

+ Here is the caller graph for this function:

◆ coap_read_endpoint()

static int coap_read_endpoint ( coap_context_t ctx,
coap_endpoint_t endpoint,
coap_tick_t  now 
)
static

Definition at line 1630 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_read_session()

static void coap_read_session ( coap_context_t ctx,
coap_session_t session,
coap_tick_t  now 
)
static

Definition at line 1486 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_remove_from_queue()

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.

If id was found, node is updated to point to the removed element. Note that the storage allocated by node is not released. The caller must do this manually using coap_delete_node(). This function returns 1 if the element with id id was found, 0 otherwise. For a return value of 0, the contents of node is undefined.

Parameters
queueThe queue to search for id.
sessionThe session to look for.
idThe message id to look for.
nodeIf found, node is updated to point to the removed node. You must release the storage pointed to by node manually.
Returns
1 if id was found, 0 otherwise.

Definition at line 1887 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_retransmit()

coap_mid_t coap_retransmit ( coap_context_t context,
coap_queue_t node 
)

Handles retransmissions of confirmable messages.

Parameters
contextThe CoAP context.
nodeThe node to retransmit.
Returns
The message id of the sent message or COAP_INVALID_MID on error.

Definition at line 1292 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_send()

coap_mid_t coap_send ( coap_session_t session,
coap_pdu_t pdu 
)

Sends a CoAP message to given peer.

The memory that is allocated for the pdu will be released by coap_send(). The caller must not use the pdu after calling coap_send().

Parameters
sessionThe CoAP session.
pduThe CoAP PDU to send.
Returns
The message id of the sent message or COAP_INVALID_MID on error.

Definition at line 1109 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_send_ack()

coap_mid_t coap_send_ack ( coap_session_t session,
coap_pdu_t request 
)

Sends an ACK message with code 0 for the specified request to dst.

This function returns the corresponding message id if the message was sent or COAP_INVALID_MID on error.

Parameters
sessionThe CoAP session.
requestThe request to be acknowledged.
Returns
The message id if ACK was sent or COAP_INVALID_MID on error.

Definition at line 706 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_send_error()

coap_mid_t coap_send_error ( coap_session_t session,
coap_pdu_t request,
unsigned char  code,
coap_opt_filter_t opts 
)

Sends an error response with code code for request request to dst.

opts will be passed to coap_new_error_response() to copy marked options from the request. This function returns the message id if the message was sent, or COAP_INVALID_MID otherwise.

Parameters
sessionThe CoAP session.
requestThe original request to respond to.
codeThe response code.
optsA filter that specifies the options to copy from the request.
Returns
The message id if the message was sent, or COAP_INVALID_MID otherwise.

Definition at line 855 of file net.c.

+ Here is the call graph for this function:

◆ coap_send_large()

coap_mid_t coap_send_large ( coap_session_t session,
coap_pdu_t pdu 
)

Sends a CoAP message to given peer.

The memory that is allocated for the pdu will be released by coap_send_large(). The caller must not use the pdu after calling coap_send_large().

If the response body is split into multiple payloads using blocks, libcoap will handle asking for the subsequent blocks and any necessary recovery needed.

Parameters
sessionThe CoAP session.
pduThe CoAP PDU to send.
Returns
The message id of the sent message or COAP_INVALID_MID on error.

Definition at line 1009 of file net.c.

+ Here is the call graph for this function:

◆ coap_send_message_type()

coap_mid_t coap_send_message_type ( coap_session_t session,
coap_pdu_t request,
unsigned char  type 
)

Helper function to create and send a message with type (usually ACK or RST).

This function returns COAP_INVALID_MID when the message was not sent, a valid transaction id otherwise.

Parameters
sessionThe CoAP session.
requestThe request that should be responded to.
typeWhich type to set.
Returns
message id on success or COAP_INVALID_MID otherwise.

Definition at line 873 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_send_pdu()

static ssize_t coap_send_pdu ( coap_session_t session,
coap_pdu_t pdu,
coap_queue_t node 
)
static

Definition at line 752 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_session_send_pdu()

ssize_t coap_session_send_pdu ( coap_session_t session,
coap_pdu_t pdu 
)

Send a pdu according to the session's protocol.

This function returns the number of bytes that have been transmitted, or a value less than zero on error.

Parameters
sessionSession to send pdu on.
pduThe pdu to send.
Returns
The number of bytes written on success, or a value less than zero on error.

Definition at line 720 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_set_app_data()

void coap_set_app_data ( coap_context_t context,
void *  data 
)

Stores data with the given CoAP context.

This function overwrites any value that has previously been stored with context.

Parameters
contextThe CoAP context.
dataThe data to store with wih the context. Note that this data must be valid during the lifetime of context.

Definition at line 573 of file net.c.

◆ coap_startup()

void coap_startup ( void  )

Definition at line 3106 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_wait_ack()

coap_mid_t coap_wait_ack ( coap_context_t context,
coap_session_t session,
coap_queue_t node 
)

Definition at line 925 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_wellknown_response()

coap_pdu_t* coap_wellknown_response ( coap_context_t context,
coap_session_t session,
coap_pdu_t request 
)

Creates a new response for given request with the contents of .well-known/core.

The result is NULL on error or a newly allocated PDU that must be either sent with coap_sent() or released by coap_delete_pdu().

Parameters
contextThe current coap context to use.
sessionThe CoAP session.
requestThe request for .well-known/core .
Returns
A new 2.05 response for .well-known/core or NULL on error.

Definition at line 2139 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ coap_write_endpoint()

static int coap_write_endpoint ( coap_context_t ctx,
coap_endpoint_t endpoint,
coap_tick_t  now 
)
static

Definition at line 1673 of file net.c.

+ Here is the caller graph for this function:

◆ coap_write_session()

static void coap_write_session ( coap_context_t ctx,
coap_session_t session,
coap_tick_t  now 
)
static

Definition at line 1439 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_wkc_len()

COAP_STATIC_INLINE size_t get_wkc_len ( coap_context_t context,
coap_opt_t query_filter 
)

Quick hack to determine the size of the resource description for .well-known/core.

Definition at line 2121 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handle_request()

static void handle_request ( coap_context_t context,
coap_session_t session,
coap_pdu_t pdu 
)
static

Definition at line 2434 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handle_response()

static void handle_response ( coap_context_t context,
coap_session_t session,
coap_pdu_t sent,
coap_pdu_t rcvd 
)
static

Definition at line 2803 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handle_signaling()

static void handle_signaling ( coap_context_t context,
coap_session_t session,
coap_pdu_t pdu 
)
static

Definition at line 2844 of file net.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ no_response()

static enum respond_t no_response ( coap_pdu_t request,
coap_pdu_t response,
coap_session_t session 
)
static

Definition at line 2292 of file net.c.

+ Here is the caller graph for this function:

◆ token_match()

COAP_STATIC_INLINE int token_match ( const uint8_t *  a,
size_t  alen,
const uint8_t *  b,
size_t  blen 
)

Definition at line 1003 of file net.c.

+ Here is the caller graph for this function:

Variable Documentation

◆ coap_default_uri_wellknown

coap_str_const_t coap_default_uri_wellknown
static
Initial value:
=
(const uint8_t *)COAP_DEFAULT_URI_WELLKNOWN }
#define COAP_DEFAULT_URI_WELLKNOWN
well-known resources URI
Definition: pdu.h:71

Definition at line 2429 of file net.c.

◆ coap_started

int coap_started = 0
static

Definition at line 3104 of file net.c.