libcoap  4.1.2
Data Structures | Macros | Typedefs | Functions
net.h File Reference
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include "coap_io.h"
#include "coap_time.h"
#include "option.h"
#include "pdu.h"
#include "prng.h"
Include dependency graph for net.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  coap_queue_t
 
struct  coap_mid_cache_t
 
struct  coap_context_t
 The CoAP stack's global state is stored in a coap_context_t object. More...
 

Macros

#define COAP_MID_CACHE_SIZE   3
 

Typedefs

typedef struct coap_queue_t coap_queue_t
 
typedef void(* coap_response_handler_t) (struct coap_context_t *, const coap_endpoint_t *local_interface, const coap_address_t *remote, coap_pdu_t *sent, coap_pdu_t *received, const coap_tid_t id)
 Message handler that is used as call-back in coap_context_t. More...
 
typedef struct coap_context_t coap_context_t
 The CoAP stack's global state is stored in a coap_context_t object. More...
 

Functions

int coap_insert_node (coap_queue_t **queue, coap_queue_t *node)
 Adds node to given queue, ordered by node->t. 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...
 
static 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 was received that matches an ongoing transaction. More...
 
static void coap_register_option (coap_context_t *ctx, unsigned char type)
 Registers the option type type with the given context object ctx. More...
 
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...
 
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...
 
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...
 
static unsigned short coap_new_message_id (coap_context_t *context)
 Returns a new message id and updates context->message_id accordingly. More...
 
void coap_free_context (coap_context_t *context)
 CoAP stack context must be released with coap_free_context(). More...
 
coap_tid_t coap_send_confirmed (coap_context_t *context, const coap_endpoint_t *local_interface, const coap_address_t *dst, coap_pdu_t *pdu)
 Sends a confirmed CoAP message to given destination. 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_tid_t coap_send (coap_context_t *context, const coap_endpoint_t *local_interface, const coap_address_t *dst, coap_pdu_t *pdu)
 Sends a non-confirmed CoAP message to given destination. More...
 
coap_tid_t coap_send_error (coap_context_t *context, coap_pdu_t *request, const coap_endpoint_t *local_interface, const coap_address_t *dst, 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_context_t *context, const coap_endpoint_t *local_interface, const coap_address_t *dst, coap_pdu_t *request, unsigned char type)
 Helper funktion to create and send a message with type (usually ACK or RST). More...
 
coap_tid_t coap_send_ack (coap_context_t *context, const coap_endpoint_t *local_interface, const coap_address_t *dst, coap_pdu_t *request)
 Sends an ACK message with code 0 for the specified request to dst. More...
 
static coap_tid_t coap_send_rst (coap_context_t *context, const coap_endpoint_t *local_interface, const coap_address_t *dst, coap_pdu_t *request)
 Sends an RST message with code 0 for the specified request to dst. More...
 
coap_tid_t coap_retransmit (coap_context_t *context, coap_queue_t *node)
 Handles retransmissions of confirmable messages. More...
 
int coap_read (coap_context_t *context)
 Reads data from the network and tries to parse as CoAP PDU. More...
 
int coap_handle_message (coap_context_t *ctx, coap_packet_t *packet)
 Parses and interprets a CoAP message with context ctx. More...
 
void coap_transaction_id (const coap_address_t *peer, const coap_pdu_t *pdu, coap_tid_t *id)
 Calculates a unique transaction id from given arguments peer and pdu. More...
 
int coap_remove_from_queue (coap_queue_t **queue, coap_tid_t id, coap_queue_t **node)
 This function removes the element with given id from the list given list. More...
 
static int coap_remove_transaction (coap_queue_t **queue, coap_tid_t id)
 Removes the transaction identified by id from given queue. More...
 
coap_queue_tcoap_find_transaction (coap_queue_t *queue, coap_tid_t id)
 Retrieves transaction from the queue. More...
 
void coap_cancel_all_messages (coap_context_t *context, const coap_address_t *dst, const unsigned char *token, size_t token_length)
 Cancels all outstanding messages for peer dst that have the specified token. More...
 
void coap_dispatch (coap_context_t *context, coap_queue_t *rcvd)
 Dispatches the PDUs from the receive queue in given context. 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_ticks (coap_tick_t *)
 Returns the current value of an internal tick counter. 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_pdu_tcoap_wellknown_response (coap_context_t *context, coap_pdu_t *request)
 Creates a new response for given request with the contents of .well-known/core. More...
 

Macro Definition Documentation

§ COAP_MID_CACHE_SIZE

#define COAP_MID_CACHE_SIZE   3

Definition at line 69 of file net.h.

Typedef Documentation

§ coap_context_t

The CoAP stack's global state is stored in a coap_context_t object.

§ coap_queue_t

typedef struct coap_queue_t coap_queue_t

§ coap_response_handler_t

typedef void(* coap_response_handler_t) (struct coap_context_t *, const coap_endpoint_t *local_interface, const coap_address_t *remote, coap_pdu_t *sent, coap_pdu_t *received, const coap_tid_t id)

Message handler that is used as call-back in coap_context_t.

Definition at line 62 of file net.h.

Function Documentation

§ 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 180 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 1671 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,
const coap_address_t dst,
const unsigned char *  token,
size_t  token_length 
)

Cancels all outstanding messages for peer dst that have the specified token.

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

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

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

Definition at line 254 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_queue_t rcvd 
)

Dispatches the PDUs from the receive queue in given context.

Definition at line 1564 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_tid_t  id 
)

Retrieves transaction from the queue.

Parameters
queueThe transaction queue to be searched.
idUnique key of the transaction to find.
Returns
A pointer to the transaction object or NULL if not found.

Definition at line 1020 of file net.c.

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.

Definition at line 418 of file net.c.

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

§ coap_handle_message()

int coap_handle_message ( coap_context_t ctx,
coap_packet_t packet 
)

Parses and interprets a CoAP message with context ctx.

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

Parameters
ctxThe current CoAP context.
packetThe received packet.
Returns
0 if message was handled successfully, or less than zero on error.

get debug to work again ** unsigned char addr[INET6_ADDRSTRLEN+8], localaddr[INET6_ADDRSTRLEN+8]; if (coap_print_addr(remote, addr, INET6_ADDRSTRLEN+8) && coap_print_addr(&packet->dst, localaddr, INET6_ADDRSTRLEN+8) ) debug("** received %d bytes from %s on interface %s:\n", (int)msg_len, addr, localaddr);

Definition at line 845 of file net.c.

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

Definition at line 217 of file net.c.

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 333 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
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 1028 of file net.c.

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

§ coap_new_message_id()

static unsigned short coap_new_message_id ( coap_context_t context)
inlinestatic

Returns a new message id and updates context->message_id accordingly.

The message id is returned in network byte order to make it easier to read in tracing tools.

Parameters
contextThe current coap_context_t object.
Returns
Incremented message id in network byte order.

Definition at line 189 of file net.h.

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.

Definition at line 274 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 ...
}
}
}
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 443 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 290 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 298 of file net.c.

Here is the caller graph for this function:

§ coap_read()

int coap_read ( coap_context_t context)

Reads data from the network and tries to parse as CoAP PDU.

On success, 0 is returned and a new node with the parsed PDU is added to the receive queue in the specified context object.

Definition at line 822 of file net.c.

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

§ coap_register_option()

static void coap_register_option ( coap_context_t ctx,
unsigned char  type 
)
inlinestatic

Registers the option type type with the given context object ctx.

Parameters
ctxThe context to use.
typeThe option type to register.

Definition at line 153 of file net.h.

Here is the call graph for this function:

§ coap_register_response_handler()

static void coap_register_response_handler ( coap_context_t context,
coap_response_handler_t  handler 
)
inlinestatic

Registers a new message handler that is called whenever a response was received that matches an ongoing transaction.

Parameters
contextThe context to register the handler for.
handlerThe response handler to register.

Definition at line 141 of file net.h.

§ coap_remove_from_queue()

int coap_remove_from_queue ( coap_queue_t **  queue,
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
queueThe queue to search for id.
idThe node 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 930 of file net.c.

Here is the caller graph for this function:

§ coap_remove_transaction()

static int coap_remove_transaction ( coap_queue_t **  queue,
coap_tid_t  id 
)
inlinestatic

Removes the transaction identified by id from given queue.

This is a convenience function for coap_remove_from_queue() with automatic deletion of the removed node.

Parameters
queueThe queue to search for id.
idThe transaction id.
Returns
1 if node was found, removed and destroyed, 0 otherwise.

Definition at line 424 of file net.h.

Here is the call graph for this function:

§ coap_retransmit()

coap_tid_t coap_retransmit ( coap_context_t context,
coap_queue_t node 
)

Handles retransmissions of confirmable messages.

Definition at line 771 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_context_t context,
const coap_endpoint_t local_interface,
const coap_address_t dst,
coap_pdu_t pdu 
)

Sends a non-confirmed CoAP message to given destination.

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

Parameters
contextThe CoAP context to use.
local_interfaceThe local network interface where the outbound packet is sent.
dstThe address to send to.
pduThe CoAP PDU to send.
Returns
The message id of the sent message or COAP_INVALID_TID on error.

Definition at line 613 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_context_t context,
const coap_endpoint_t local_interface,
const coap_address_t dst,
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
contextThe context to use.
local_interfaceThe local network interface where the outbound packet is sent.
dstThe destination address.
requestThe request to be acknowledged.
Returns
The transaction id if ACK was sent or COAP_INVALID_TID on error.

Definition at line 533 of file net.c.

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

§ coap_send_confirmed()

coap_tid_t coap_send_confirmed ( coap_context_t context,
const coap_endpoint_t local_interface,
const coap_address_t dst,
coap_pdu_t pdu 
)

Sends a confirmed CoAP message to given destination.

The memory that is allocated by pdu will not be released by coap_send_confirmed(). The caller must release the memory.

Parameters
contextThe CoAP context to use.
local_interfaceThe local network interface where the outbound packet is sent.
dstThe address to send to.
pduThe CoAP PDU to send.
Returns
The message id of the sent message or COAP_INVALID_TID on error.

Definition at line 699 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_context_t context,
coap_pdu_t request,
const coap_endpoint_t local_interface,
const coap_address_t dst,
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
contextThe context to use.
requestThe original request to respond to.
local_interfaceThe local network interface where the outbound packet is sent.
dstThe remote peer that sent the request.
codeThe response code.
optsA 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 621 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_context_t context,
const coap_endpoint_t local_interface,
const coap_address_t dst,
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
contextThe CoAP context.
local_interfaceThe local network interface where the outbound packet is sent.
dstWhere to send the context.
requestThe request that should be responded to.
typeWhich type to set.
Returns
transaction id on success or COAP_INVALID_TID otherwise.

Definition at line 643 of file net.c.

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

§ coap_send_rst()

static coap_tid_t coap_send_rst ( coap_context_t context,
const coap_endpoint_t local_interface,
const coap_address_t dst,
coap_pdu_t request 
)
inlinestatic

Sends an RST 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
contextThe context to use.
local_interfaceThe local network interface where the outbound packet is sent.
dstThe destination address.
requestThe request to be reset.
Returns
The transaction id if RST was sent or COAP_INVALID_TID on error.

Definition at line 346 of file net.h.

Here is the call graph for this function:

§ coap_transaction_id()

void coap_transaction_id ( const coap_address_t peer,
const coap_pdu_t pdu,
coap_tid_t id 
)

Calculates a unique transaction id from given arguments peer and pdu.

The id is returned in id.

Parameters
peerThe remote party who sent pdu.
pduThe message that initiated the transaction.
idSet to the new id.

Definition at line 495 of file net.c.

Here is the caller graph for this function:

§ coap_wellknown_response()

coap_pdu_t* coap_wellknown_response ( coap_context_t context,
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 released by coap_delete_pdu().

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

Definition at line 1143 of file net.c.

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