net.c File Reference
`#include "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 | 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)))
#define | INET6_ADDRSTRLEN 40

## 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_t * | coap_malloc_node (void)
COAP_STATIC_INLINE void | coap_free_node (coap_queue_t *node)
void | coap_free_endpoint (coap_endpoint_t *ep)
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_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...
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_pki (coap_context_t *ctx, 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_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)
| 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_tid_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_tid_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_tid_t | coap_send_message_type (coap_session_t *session, coap_pdu_t *request, unsigned char type)
| Helper funktion 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_tid_t | coap_wait_ack (coap_context_t *context, coap_session_t *session, coap_queue_t *node)
coap_tid_t | coap_send (coap_session_t *session, coap_pdu_t *pdu)
| Sends a CoAP message to given peer. More...
coap_tid_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_read (coap_context_t *ctx, coap_tick_t now)
| For applications with their own message loop, reads all data from the network. More...
void | coap_io_do_events (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_tid_t id, coap_queue_t **node)
| This function removes the element with given `id` from the list given list. More...
COAP_STATIC_INLINE int | token_match (const uint8_t *a, size_t alen, const uint8_t *b, size_t blen)
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_queue_t * | coap_find_transaction (coap_queue_t *queue, coap_session_t *session, coap_tid_t id)
| Retrieves transaction from the queue. More...
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`. 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_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. 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)
| Checks for No-Response option in given `request` and returns `1` if `response` should be suppressed according to RFC 7967. More...
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 (coap_context_t *ctx, const char *group_name)
| Function interface for joining a multicast group for listening. 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 77 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 81 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 60 of file net.c.

## INET6_ADDRSTRLEN

#define INET6_ADDRSTRLEN 40

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

## min

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

Definition at line 53 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 73 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 1834 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 2016 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 1388 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 145 of file net.c.

Here is the caller graph for this function:

## 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

  session | session timeout is associated with
  r | random 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 862 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 2553 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 1990 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

  context | The context in use.
  session | Session of the messages to remove.
  token | Message token.
  token_length | Actual length of `token`.

Definition at line 1672 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

  context | The context in use.
  session | Session of the messages to remove.
  reason | The reasion for the session cancellation

Definition at line 1635 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 2594 of file net.c.

## coap_connect_session()

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

static

Definition at line 1133 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

  context | The coap_context_t object.

Returns
  The libcoap file descriptor or `-1` if epoll is not available.

Definition at line 413 of file net.c.

Here is the caller graph for this function:

## 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

  context | The coap_context_t object.
  seconds | Number of seconds for the inactivity timer, or zero to disable CoAP-level keepalive messages.

Returns
  1 if successful, else 0

Definition at line 409 of file net.c.

Here is the caller graph for this function:

## coap_context_set_pki()

int coap_context_set_pki | ( | coap_context_t * | context,
|  | coap_dtls_pki_t * | setup_data
| ) |  |

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

Parameters

  context | The current coap_context_t object.
  setup_data | If `NULL`, PKI authentication will fail. Certificate information required.

Returns
  `1` if successful, else `0`.

Definition at line 384 of file net.c.

Here is the call graph for this function:
Here is the caller 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

  context | The current coap_context_t object.
  ca_file | If not `NULL`, is the full path name of a PEM encoded file containing all the Root CAs to be used.
  ca_dir | If 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 399 of file net.c.

Here is the call graph for this function:
Here is the caller 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

  context | The current coap_context_t object.
  hint | The default PSK server hint sent to a client. If `NULL`, PSK authentication is disabled. Empty string is a valid hint.
  key | The default PSK key. If `NULL`, PSK authentication will fail.
  key_len | The default PSK key's length. If `0`, PSK authentication will fail.

Returns
  `1` if successful, else `0`.

Definition at line 341 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.

Parameters

  queue | The queue to delete.

Definition at line 239 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

  node | Node entry to remove.

Returns
  `1` node deleted from queue, `0` failure.

Definition at line 219 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 2373 of file net.c.

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

## coap_find_transaction()

coap_queue_t* coap_find_transaction | ( | coap_queue_t * | queue,
|  | coap_session_t * | session,
|  | coap_tid_t | id
| ) |  |

Retrieves transaction from the queue.

Parameters

  queue | The transaction queue to be searched.
  session | The session to find.
  id | The transaction id to find.

Returns
  A pointer to the transaction object or `NULL` if not found.

Definition at line 1713 of file net.c.

## 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

  context | The current coap_context_t object to free off.

Definition at line 552 of file net.c.

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

## coap_free_endpoint()

void coap_free_endpoint | ( | coap_endpoint_t * | ep | ) |

Definition at line 1006 of file coap_session.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 91 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

  context | The CoAP context.

Returns
  The data previously stored or `NULL` if not data stored.

Definition at line 546 of file net.c.

Here is the caller graph for this function:

## 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 329 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 313 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 286 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

  ctx | The current CoAP context.
  session | The current CoAP session.
  data | The received packet'd data.
  data_len | The received packet'd data length.

Returns
  `0` if message was handled successfully, or less than zero on error.

Definition at line 1557 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 1114 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

  context | The CoAP context whose event handler is to be called.
  event | The event to deliver.
  session | The session related to `event`.

Returns
  The result from the associated event handler or 0 if none was registered.

Definition at line 2542 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

  queue | Queue to add to.
  node | Node entry to add to Queue.

Returns
  `1` added to queue, `0` failure.

Definition at line 182 of file net.c.

Here is the caller graph for this function:

## coap_io_do_events()

void coap_io_do_events | ( | coap_context_t * | ctx,
|  | struct epoll_event * | events,
|  | size_t | nevents
| ) |  |

Process all the epoll events.

Internal function

Parameters

  ctx | The current CoAP context.
  events | The list of events returned from an epoll_wait() call.
  nevents | The number of events.

Definition at line 1458 of file net.c.

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

## coap_join_mcast_group()

int coap_join_mcast_group | ( | coap_context_t * | ctx,
|  | const char * | groupname
| ) |  |

Function interface for joining a multicast group for listening.

Parameters

  ctx | The current context
  groupname | The name of the group that is to be joined for listening

Returns
  0 on success, -1 on error

Definition at line 2602 of file 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 86 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 423 of file net.c.

Here is the call graph for this function:
Here is the caller 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 relased with coap_free().

Parameters

  request | Specification of the received (confirmable) request.
  code | The error code to set.
  opts | An 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 1721 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 248 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;
coap_opt_iterator_t opt_iter;
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 ...
}
}
}

Parameters

  ctx | The context where all known options are registered.
  pdu | The PDU to check.
  unknown | The 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 617 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 262 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 270 of file net.c.

Here is the caller graph for this function:

## coap_read()

void coap_read | ( | coap_context_t * | ctx,
|  | coap_tick_t | now
| ) |  |

For applications with their own message loop, reads all data from the network.

Parameters

  ctx | The CoAP context
  now | Current time

Definition at line 1397 of file net.c.

Here is the call graph for this function:
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 1337 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 1205 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_tid_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

  queue | The queue to search for `id`.
  session | The session to look for.
  id | The transaction id to look for.
  node | If 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 1585 of file net.c.

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

## coap_retransmit()

coap_tid_t coap_retransmit | ( | coap_context_t * | context,
|  | coap_queue_t * | node
| ) |  |

Handles retransmissions of confirmable messages.

Parameters

  context | The CoAP context.
  node | The node to retransmit.

Returns
  The message id of the sent message or `COAP_INVALID_TID` on error.

Definition at line 1021 of file net.c.

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

## coap_send()

coap_tid_t coap_send | ( | coap_session_t * | session,
|  | coap_pdu_t * | pdu
| ) |  |

Sends a CoAP message to given peer.

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

Parameters

  session | The CoAP session.
  pdu | The CoAP PDU to send.

Returns
  The message id of the sent message or `COAP_INVALID_TID` on error.

Definition at line 966 of file net.c.

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

## coap_send_ack()

coap_tid_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 transaction id if the message was sent or `COAP_INVALID_TID` on error.

Parameters

  session | The CoAP session.
  request | The request to be acknowledged.

Returns
  The transaction id if ACK was sent or `COAP_INVALID_TID` on error.

Definition at line 669 of file net.c.

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

## coap_send_error()

coap_tid_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 transaction id if the message was sent, or `COAP_INVALID_TID` otherwise.

Parameters

  session | The CoAP session.
  request | The original request to respond to.
  code | The response code.
  opts | A filter that specifies the options to copy from the `request`.

Returns
  The transaction id if the message was sent, or `COAP_INVALID_TID` otherwise.

Definition at line 818 of file net.c.

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

## coap_send_message_type()

coap_tid_t coap_send_message_type | ( | coap_session_t * | session,
|  | coap_pdu_t * | request,
|  | unsigned char | type
| ) |  |

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

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

Parameters

  session | The CoAP session.
  request | The request that should be responded to.
  type | Which type to set.

Returns
  transaction id on success or `COAP_INVALID_TID` otherwise.

Definition at line 836 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 711 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

  session | Session to send pdu on.
  pdu | The pdu to send.

Returns
  The number of bytes written on success, or a value less than zero on error.

Definition at line 683 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

  context | The CoAP context.
  data | The data to store with wih the context. Note that this data must be valid during the lifetime of `context`.

Definition at line 540 of file net.c.

Here is the caller graph for this function:

## coap_startup()

void coap_startup | ( | void |  | ) |

Definition at line 2575 of file net.c.

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

## coap_wait_ack()

coap_tid_t coap_wait_ack | ( | coap_context_t * | context,
|  | coap_session_t * | session,
|  | coap_queue_t * | node
| ) |  |

Definition at line 888 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

  context | The current coap context to use.
  session | The CoAP session.
  request | The request for ``.well-known/core .

Returns
  A new 2.05 response for ``.well-known/core or NULL on error.

Definition at line 1837 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 1380 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 1162 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 1819 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 2087 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 2315 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 2333 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
| ) |  |

static

Checks for No-Response option in given `request` and returns `1` if `response` should be suppressed according to RFC 7967.

The value of the No-Response option is encoded as follows:

    *  +-------+-----------------------+-----------------------------------+
    *  | Value | Binary Representation |          Description              |
    *  +-------+-----------------------+-----------------------------------+
    *  |   0   |      <empty>          | Interested in all responses.      |
    *  +-------+-----------------------+-----------------------------------+
    *  |   2   |      00000010         | Not interested in 2.xx responses. |
    *  +-------+-----------------------+-----------------------------------+
    *  |   8   |      00001000         | Not interested in 4.xx responses. |
    *  +-------+-----------------------+-----------------------------------+
    *  |  16   |      00010000         | Not interested in 5.xx responses. |
    *  +-------+-----------------------+-----------------------------------+
    *

Parameters

  request | The CoAP request to check for the No-Response option. This parameter must not be NULL.
  response | The response that is potentially suppressed. This parameter must not be NULL.

Returns
  RESPONSE_DEFAULT when no special treatment is requested, RESPONSE_DROP when the response must be discarded, or RESPONSE_SEND when the response must be sent.

Definition at line 2049 of file net.c.

Here is the call graph for this function:
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 1629 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:
=
{ sizeof(COAP_DEFAULT_URI_WELLKNOWN)-1,
(const uint8_t *)COAP_DEFAULT_URI_WELLKNOWN }
COAP_DEFAULT_URI_WELLKNOWN
#define COAP_DEFAULT_URI_WELLKNOWN
well-known resources URI
Definition: pdu.h:68
uint8_t
unsigned char uint8_t
Definition: uthash.h:79

Definition at line 2082 of file net.c.

## coap_started

int coap_started = 0

static

Definition at line 2573 of file net.c.