nanocoap API More...
nanocoap API
Definition in file nanocoap.h.
#include <assert.h>
#include <errno.h>
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include "coap.h"
#include <arpa/inet.h>
Go to the source code of this file.
Data Structures | |
struct | coap_hdr_t |
Raw CoAP PDU header structure. More... | |
struct | coap_optpos_t |
CoAP option array entry. More... | |
struct | coap_pkt_t |
CoAP PDU parsing context structure. More... | |
struct | coap_resource_t |
Type for CoAP resource entry. More... | |
struct | coap_block1_t |
Block1 helper struct. More... | |
struct | coap_block_slicer_t |
Blockwise transfer helper struct. More... | |
Macros | |
#define | COAP_FORMAT_NONE (UINT16_MAX) |
Nanocoap-specific value to indicate no format specified. | |
#define | CONFIG_NANOCOAP_NOPTS_MAX (16) |
Maximum number of Options in a message. | |
#define | CONFIG_NANOCOAP_URI_MAX (64) |
Maximum length of a resource path string read from or written to a message. | |
#define | CONFIG_NANOCOAP_BLOCK_SIZE_EXP_MAX (6) |
Maximum size for a blockwise transfer as a power of 2. | |
#define | CONFIG_NANOCOAP_QS_MAX (64) |
Maximum length of a query string written to a message. | |
#define | COAP_WELL_KNOWN_CORE_DEFAULT_HANDLER |
Resource definition for the default .well-known/core handler. More... | |
Typedefs | |
typedef ssize_t(* | coap_handler_t) (coap_pkt_t *pkt, uint8_t *buf, size_t len, void *context) |
Resource handler type. More... | |
typedef uint16_t | coap_method_flags_t |
Method flag type. More... | |
Functions | |
static ssize_t | coap_get_proxy_uri (const coap_pkt_t *pkt, char **target) |
Convenience function for getting the packet's Proxy-Uri option. More... | |
int | coap_match_path (const coap_resource_t *resource, uint8_t *uri) |
Checks if a CoAP resource path matches a given URI. More... | |
Variables | |
const coap_resource_t | coap_resources [] |
Global CoAP resource list. | |
const unsigned | coap_resources_numof |
Number of entries in global CoAP resource list. | |
Nanocoap specific CoAP method flags used in coap_handlers array | |
#define | COAP_GET (0x01) |
#define | COAP_POST (0x02) |
#define | COAP_PUT (0x04) |
#define | COAP_DELETE (0x08) |
#define | COAP_FETCH (0x10) |
#define | COAP_PATCH (0x20) |
#define | COAP_IPATCH (0x40) |
#define | COAP_MATCH_SUBTREE (0x8000) |
Path is considered as a prefix when matching. | |
coap_opt_finish() flag parameter values | |
Directs packet/buffer updates when user finishes adding options | |
#define | COAP_OPT_FINISH_NONE (0x0000) |
no special handling required | |
#define | COAP_OPT_FINISH_PAYLOAD (0x0001) |
expect a payload to follow | |
Functions – Header Read/Write | |
static uint8_t | coap_code (unsigned cls, unsigned detail) |
Encode given code class and code detail to raw code. More... | |
static unsigned | coap_get_code_class (coap_pkt_t *pkt) |
Get a message's code class (3 most significant bits of code) More... | |
static unsigned | coap_get_code_detail (const coap_pkt_t *pkt) |
Get a message's code detail (5 least significant bits of code) More... | |
static unsigned | coap_get_code (coap_pkt_t *pkt) |
Get a message's code in decimal format ((class * 100) + detail) More... | |
static unsigned | coap_get_code_raw (coap_pkt_t *pkt) |
Get a message's raw code (class + detail) More... | |
static unsigned | coap_get_id (coap_pkt_t *pkt) |
Get the message ID of the given CoAP packet. More... | |
static unsigned | coap_get_token_len (const coap_pkt_t *pkt) |
Get a message's token length [in byte]. More... | |
static unsigned | coap_get_total_hdr_len (const coap_pkt_t *pkt) |
Get the total header length (4-byte header + token length) More... | |
static unsigned | coap_get_type (coap_pkt_t *pkt) |
Get the message type. More... | |
static unsigned | coap_get_ver (coap_pkt_t *pkt) |
Get the CoAP version number. More... | |
static uint8_t * | coap_hdr_data_ptr (coap_hdr_t *hdr) |
Get the start of data after the header. More... | |
static void | coap_hdr_set_code (coap_hdr_t *hdr, uint8_t code) |
Write the given raw message code to given CoAP header. More... | |
static void | coap_hdr_set_type (coap_hdr_t *hdr, unsigned type) |
Set the message type for the given CoAP header. More... | |
Functions – Options Read | |
unsigned | coap_get_content_type (coap_pkt_t *pkt) |
Get content type from packet. More... | |
int | coap_opt_get_uint (const coap_pkt_t *pkt, uint16_t optnum, uint32_t *value) |
Get a uint32 option value. More... | |
ssize_t | coap_opt_get_string (const coap_pkt_t *pkt, uint16_t optnum, uint8_t *target, size_t max_len, char separator) |
Read a full option as null terminated string into the target buffer. More... | |
static ssize_t | coap_get_location_path (const coap_pkt_t *pkt, uint8_t *target, size_t max_len) |
Convenience function for getting the packet's LOCATION_PATH option. More... | |
static ssize_t | coap_get_location_query (const coap_pkt_t *pkt, uint8_t *target, size_t max_len) |
Convenience function for getting the packet's LOCATION_QUERY option. More... | |
static ssize_t | coap_get_uri_path (const coap_pkt_t *pkt, uint8_t *target) |
Convenience function for getting the packet's URI_PATH. More... | |
static ssize_t | coap_get_uri_query (const coap_pkt_t *pkt, uint8_t *target) |
Convenience function for getting the packet's URI_QUERY option. More... | |
ssize_t | coap_opt_get_next (const coap_pkt_t *pkt, coap_optpos_t *opt, uint8_t **value, bool init_opt) |
Iterate over a packet's options. More... | |
ssize_t | coap_opt_get_opaque (const coap_pkt_t *pkt, unsigned opt_num, uint8_t **value) |
Retrieve the value for an option as an opaque array of bytes. More... | |
Functions – Options for Block | |
Read Block1 (POST/PUT request) or Block2 (GET response) options, and generally useful functions to write block options. | |
void | coap_block_object_init (coap_block1_t *block, size_t blknum, size_t blksize, int more) |
Initialize a block struct from content information. More... | |
void | coap_block_finish (coap_block_slicer_t *slicer, uint16_t option) |
Finish a block request (block1 or block2) More... | |
static void | coap_block1_finish (coap_block_slicer_t *slicer) |
Finish a block1 request. More... | |
static void | coap_block2_finish (coap_block_slicer_t *slicer) |
Finish a block2 response. More... | |
void | coap_block2_init (coap_pkt_t *pkt, coap_block_slicer_t *slicer) |
Initialize a block2 slicer struct for writing the payload. More... | |
void | coap_block_slicer_init (coap_block_slicer_t *slicer, size_t blknum, size_t blksize) |
Initialize a block slicer struct from content information. More... | |
size_t | coap_blockwise_put_bytes (coap_block_slicer_t *slicer, uint8_t *bufpos, const uint8_t *c, size_t len) |
Add a byte array to a block2 reply. More... | |
size_t | coap_blockwise_put_char (coap_block_slicer_t *slicer, uint8_t *bufpos, char c) |
Add a single character to a block2 reply. More... | |
int | coap_get_block (coap_pkt_t *pkt, coap_block1_t *block, uint16_t option) |
Block option getter. More... | |
static int | coap_get_block1 (coap_pkt_t *pkt, coap_block1_t *block) |
Block1 option getter. More... | |
static int | coap_get_block2 (coap_pkt_t *pkt, coap_block1_t *block) |
Block2 option getter. More... | |
int | coap_get_blockopt (coap_pkt_t *pkt, uint16_t option, uint32_t *blknum, unsigned *szx) |
Generic block option getter. More... | |
static unsigned | coap_szx2size (unsigned szx) |
Helper to decode SZX value to size in bytes. More... | |
Functions – Options Write Packet API | |
Use a coap_pkt_t struct to manage writing Options to the PDU. The caller must monitor space remaining in the buffer; however, the API will not write past the end of the buffer, and returns -ENOSPC when it is full. | |
ssize_t | coap_opt_add_block (coap_pkt_t *pkt, coap_block_slicer_t *slicer, bool more, uint16_t option) |
Add block option in descriptive use from a slicer object. More... | |
static ssize_t | coap_opt_add_block1 (coap_pkt_t *pkt, coap_block_slicer_t *slicer, bool more) |
Add block1 option in descriptive use from a slicer object. More... | |
static ssize_t | coap_opt_add_block2 (coap_pkt_t *pkt, coap_block_slicer_t *slicer, bool more) |
Add block2 option in descriptive use from a slicer object. More... | |
ssize_t | coap_opt_add_uint (coap_pkt_t *pkt, uint16_t optnum, uint32_t value) |
Encode the given uint option into pkt. More... | |
static ssize_t | coap_opt_add_block1_control (coap_pkt_t *pkt, coap_block1_t *block) |
Encode the given block1 option in control use. More... | |
static ssize_t | coap_opt_add_block2_control (coap_pkt_t *pkt, coap_block1_t *block) |
Encode the given block2 option in control use. More... | |
static ssize_t | coap_opt_add_format (coap_pkt_t *pkt, uint16_t format) |
Append a Content-Format option to the pkt buffer. More... | |
ssize_t | coap_opt_add_opaque (coap_pkt_t *pkt, uint16_t optnum, const uint8_t *val, size_t val_len) |
Encode the given buffer as an opaque data option into pkt. More... | |
ssize_t | coap_opt_add_uri_query2 (coap_pkt_t *pkt, const char *key, size_t key_len, const char *val, size_t val_len) |
Adds a single Uri-Query option in the form 'key=value' into pkt. More... | |
static ssize_t | coap_opt_add_uri_query (coap_pkt_t *pkt, const char *key, const char *val) |
Adds a single Uri-Query option in the form 'key=value' into pkt. More... | |
ssize_t | coap_opt_add_proxy_uri (coap_pkt_t *pkt, const char *uri) |
Adds a single Proxy-URI option into pkt . More... | |
ssize_t | coap_opt_add_chars (coap_pkt_t *pkt, uint16_t optnum, const char *chars, size_t chars_len, char separator) |
Encode the given array of characters as option(s) into pkt. More... | |
static ssize_t | coap_opt_add_string (coap_pkt_t *pkt, uint16_t optnum, const char *string, char separator) |
Encode the given string as option(s) into pkt. More... | |
static ssize_t | coap_opt_add_uri_path (coap_pkt_t *pkt, const char *path) |
Adds one or multiple Uri-Path options in the form '/path' into pkt. More... | |
ssize_t | coap_opt_finish (coap_pkt_t *pkt, uint16_t flags) |
Finalizes options as required and prepares for payload. More... | |
Functions – Options Write Buffer API | |
Write PDU Options directly to the array of bytes for a message. The caller must provide the last option number written as well as the buffer position. The caller is primarily responsible for tracking and managing the space remaining in the buffer. | |
size_t | coap_opt_put_block (uint8_t *buf, uint16_t lastonum, coap_block_slicer_t *slicer, bool more, uint16_t option) |
Insert block option into buffer. More... | |
static size_t | coap_opt_put_block1 (uint8_t *buf, uint16_t lastonum, coap_block_slicer_t *slicer, bool more) |
Insert block1 option into buffer. More... | |
static size_t | coap_opt_put_block2 (uint8_t *buf, uint16_t lastonum, coap_block_slicer_t *slicer, bool more) |
Insert block2 option into buffer. More... | |
size_t | coap_opt_put_uint (uint8_t *buf, uint16_t lastonum, uint16_t onum, uint32_t value) |
Encode the given uint option into buffer. More... | |
static size_t | coap_opt_put_block1_control (uint8_t *buf, uint16_t lastonum, coap_block1_t *block) |
Insert block1 option into buffer in control usage. More... | |
static size_t | coap_opt_put_block2_control (uint8_t *buf, uint16_t lastonum, coap_block1_t *block) |
Insert block2 option into buffer in control usage. More... | |
size_t | coap_opt_put_string (uint8_t *buf, uint16_t lastonum, uint16_t optnum, const char *string, char separator) |
Encode the given string as multi-part option into buffer. More... | |
static size_t | coap_opt_put_location_path (uint8_t *buf, uint16_t lastonum, const char *location) |
Convenience function for inserting LOCATION_PATH option into buffer. More... | |
static size_t | coap_opt_put_location_query (uint8_t *buf, uint16_t lastonum, const char *location) |
Convenience function for inserting LOCATION_QUERY option into buffer. More... | |
static size_t | coap_opt_put_uri_path (uint8_t *buf, uint16_t lastonum, const char *uri) |
Convenience function for inserting URI_PATH option into buffer. More... | |
static size_t | coap_opt_put_uri_query (uint8_t *buf, uint16_t lastonum, const char *uri) |
Convenience function for inserting URI_QUERY option into buffer. More... | |
static size_t | coap_opt_put_proxy_uri (uint8_t *buf, uint16_t lastonum, const char *uri) |
Convenience function for inserting PROXY_URI option into buffer. More... | |
size_t | coap_put_block1_ok (uint8_t *pkt_pos, coap_block1_t *block1, uint16_t lastonum) |
Insert block1 option into buffer (from coap_block1_t) More... | |
size_t | coap_put_option (uint8_t *buf, uint16_t lastonum, uint16_t onum, const uint8_t *odata, size_t olen) |
Insert a CoAP option into buffer. More... | |
static size_t | coap_put_option_block1 (uint8_t *buf, uint16_t lastonum, unsigned blknum, unsigned szx, int more) |
Insert block1 option into buffer. More... | |
static size_t | coap_put_option_ct (uint8_t *buf, uint16_t lastonum, uint16_t content_type) |
Insert content type option into buffer. More... | |
Functions – Messaging | |
ssize_t | coap_block2_build_reply (coap_pkt_t *pkt, unsigned code, uint8_t *rbuf, unsigned rlen, unsigned payload_len, coap_block_slicer_t *slicer) |
Build reply to CoAP block2 request. More... | |
ssize_t | coap_build_hdr (coap_hdr_t *hdr, unsigned type, uint8_t *token, size_t token_len, unsigned code, uint16_t id) |
Builds a CoAP header. More... | |
ssize_t | coap_build_reply (coap_pkt_t *pkt, unsigned code, uint8_t *rbuf, unsigned rlen, unsigned payload_len) |
Build reply to CoAP request. More... | |
ssize_t | coap_handle_req (coap_pkt_t *pkt, uint8_t *resp_buf, unsigned resp_buf_len) |
Handle incoming CoAP request. More... | |
ssize_t | coap_tree_handler (coap_pkt_t *pkt, uint8_t *resp_buf, unsigned resp_buf_len, const coap_resource_t *resources, size_t resources_numof) |
Pass a coap request to a matching handler. More... | |
static coap_method_flags_t | coap_method2flag (unsigned code) |
Convert message code (request method) into a corresponding bit field. More... | |
int | coap_parse (coap_pkt_t *pkt, uint8_t *buf, size_t len) |
Parse a CoAP PDU. More... | |
void | coap_pkt_init (coap_pkt_t *pkt, uint8_t *buf, size_t len, size_t header_len) |
Initialize a packet struct, to build a message buffer. More... | |
static void | coap_payload_advance_bytes (coap_pkt_t *pkt, size_t len) |
Advance the payload pointer. More... | |
ssize_t | coap_payload_put_bytes (coap_pkt_t *pkt, const void *data, size_t len) |
Add payload data to the CoAP request. More... | |
ssize_t | coap_payload_put_char (coap_pkt_t *pkt, char c) |
Add a single character to the payload data of the CoAP request. More... | |
ssize_t | coap_reply_simple (coap_pkt_t *pkt, unsigned code, uint8_t *buf, size_t len, unsigned ct, const uint8_t *payload, uint8_t payload_len) |
Create CoAP reply (convenience function) More... | |
ssize_t | coap_well_known_core_default_handler (coap_pkt_t *pkt, uint8_t *buf, size_t len, void *context) |
Reference to the default .well-known/core handler defined by the application. | |
Functions – gcoap specific | |
static bool | coap_has_observe (coap_pkt_t *pkt) |
Identifies a packet containing an observe option. More... | |
static void | coap_clear_observe (coap_pkt_t *pkt) |
Clears the observe option value from a packet. More... | |
static uint32_t | coap_get_observe (coap_pkt_t *pkt) |
Get the value of the observe option from the given packet. More... | |