Loading...
Searching...
No Matches
coap_net.c File Reference

CoAP context functions. More...

`#include "coap3/coap_internal.h"`
`#include <ctype.h>`
`#include <stdio.h>`
Include dependency graph for coap_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.
#define | MAX_BITS 8
| The maximum number of bits for fixed point integers that are used for retransmission time calculation.
#define | Q(frac, fval)
| creates a Qx.frac from fval in coap_fixed_point_t
#define | ACK_RANDOM_FACTOR Q(FRAC_BITS, session->ack_random_factor)
| creates a Qx.FRAC_BITS from session's 'ack_random_factor'
#define | ACK_TIMEOUT Q(FRAC_BITS, session->ack_timeout)
| creates a Qx.FRAC_BITS from session's 'ack_timeout'
#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`.
int | coap_insert_node (coap_queue_t **queue, coap_queue_t *node)
| Adds `node` to given `queue`, ordered by variable t in `node`.
int | coap_delete_node (coap_queue_t *node)
| Destroys specified `node`.
void | coap_delete_all (coap_queue_t *queue)
| Removes all items from given `queue` and frees the allocated storage.
coap_queue_t * | coap_new_node (void)
| Creates a new node suitable for adding to the CoAP sendqueue.
coap_queue_t * | coap_peek_next (coap_context_t *context)
| Returns the next pdu to send without removing from sendqeue.
coap_queue_t * | coap_pop_next (coap_context_t *context)
| Returns the next pdu to send and removes it from the sendqeue.
const coap_bin_const_t * | coap_get_session_client_psk_identity (const coap_session_t *session)
| Get the current client's PSK identity.
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.
void | coap_context_set_keepalive (coap_context_t *context, unsigned int seconds)
| Set the context keepalive timer for sessions.
void | coap_context_set_max_token_size (coap_context_t *context, size_t max_token_size)
| Set the maximum token size (RFC8974).
void | coap_context_set_max_idle_sessions (coap_context_t *context, unsigned int max_idle_sessions)
| Set the maximum idle sessions count.
unsigned int | coap_context_get_max_idle_sessions (const coap_context_t *context)
| Get the maximum idle sessions count.
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.
unsigned int | coap_context_get_max_handshake_sessions (const coap_context_t *context)
| Get the session timeout value.
void | coap_context_set_csm_timeout (coap_context_t *context, unsigned int csm_timeout)
| Set the CSM timeout value.
unsigned int | coap_context_get_csm_timeout (const coap_context_t *context)
| Get the CSM timeout value.
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.
uint32_t | coap_context_get_csm_max_message_size (const coap_context_t *context)
| Get the CSM max session size value.
void | coap_context_set_session_timeout (coap_context_t *context, unsigned int session_timeout)
| Set the session timeout value.
unsigned int | coap_context_get_session_timeout (const coap_context_t *context)
| Get the session timeout value.
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.
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.
void | coap_set_app_data (coap_context_t *ctx, void *app_data)
| Stores `data` with the given CoAP context.
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().
void | coap_free_context (coap_context_t *context)
| CoAP stack context must be released with coap_free_context().
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.
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`.
ssize_t | coap_session_send_pdu (coap_session_t *session, coap_pdu_t *pdu)
| Send a pdu according to the session's protocol.
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, 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`.
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).
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.
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.
coap_mid_t | coap_send (coap_session_t *session, coap_pdu_t *pdu)
| Sends a CoAP message to given peer.
coap_mid_t | coap_send_internal (coap_session_t *session, coap_pdu_t *pdu)
| Sends a CoAP message to given peer.
coap_mid_t | coap_retransmit (coap_context_t *context, coap_queue_t *node)
| Handles retransmissions of confirmable messages.
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)
static void | coap_read_session (coap_context_t *ctx, coap_session_t *session, 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`.
void | coap_io_do_epoll (coap_context_t *ctx, struct epoll_event *events, size_t nevents)
| Process all the epoll events.
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`.
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.
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`.
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.
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`.
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`.
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.
static const char * | coap_event_name (coap_event_t 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`.
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.
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.
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.
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.
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.
void | coap_register_option (coap_context_t *ctx, uint16_t type)
| Registers the option type `type` with the given context object `ctx`.

## Variables

int | coap_started = 0

## Detailed Description

CoAP context functions.

Definition in file coap_net.c.

## 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 96 of file coap_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 100 of file coap_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 79 of file coap_net.c.

## INET6_ADDRSTRLEN

#define INET6_ADDRSTRLEN 40

Definition at line 68 of file coap_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 85 of file coap_net.c.

## min

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

Definition at line 72 of file coap_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 92 of file coap_net.c.

## SHR_FP

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

## Function Documentation

## check_token_size()

static int check_token_size | ( | coap_session_t * | session,
|  | const coap_pdu_t * | pdu
| ) |  |

static

Definition at line 3484 of file coap_net.c.

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

## 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 2575 of file coap_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 4039 of file coap_net.c.

Here is the call graph for this function:

## coap_event_name()

static const char * coap_event_name | ( | coap_event_t | event | ) |

static

Definition at line 3856 of file coap_net.c.

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 110 of file coap_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 1710 of file coap_net.c.

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

## coap_malloc_node()

COAP_STATIC_INLINE coap_queue_t * coap_malloc_node | ( | void |  | ) |

Definition at line 105 of file coap_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 1779 of file coap_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 797 of file coap_net.c.

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

## coap_startup()

void coap_startup | ( | void |  | ) |

Definition at line 3992 of file coap_net.c.

Here is the call graph for this function:
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 1751 of file coap_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 3424 of file coap_net.c.

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

## Variable Documentation

## coap_started

int coap_started = 0

Definition at line 3980 of file coap_net.c.