pdu.h File Reference

Pre-defined constants that reflect defaults for CoAP. More...

`#include "uri.h"`
`#include <stdint.h>`
Include dependency graph for pdu.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | coap_option
struct | coap_pdu_t
| structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload marker (0xff), then the payload if stored inline. More...

## Macros

#define | COAP_DEFAULT_PORT 5683 /* CoAP default UDP/TCP port */
#define | COAPS_DEFAULT_PORT 5684 /* CoAP default UDP/TCP port for secure transmission */
#define | COAP_DEFAULT_MAX_AGE 60 /* default maximum object lifetime in seconds */
#define | COAP_DEFAULT_MTU 1152
#define | COAP_MESSAGE_SIZE_OFFSET_TCP8 13
#define | COAP_MESSAGE_SIZE_OFFSET_TCP16 269 /* 13 + 256 */
#define | COAP_MESSAGE_SIZE_OFFSET_TCP32 65805 /* 269 + 65536 */
#define | COAP_MAX_MESSAGE_SIZE_TCP0 (COAP_MESSAGE_SIZE_OFFSET_TCP8-1) /* 12 */
#define | COAP_MAX_MESSAGE_SIZE_TCP8 (COAP_MESSAGE_SIZE_OFFSET_TCP16-1) /* 268 */
#define | COAP_MAX_MESSAGE_SIZE_TCP16 (COAP_MESSAGE_SIZE_OFFSET_TCP32-1) /* 65804 */
#define | COAP_MAX_MESSAGE_SIZE_TCP32 (COAP_MESSAGE_SIZE_OFFSET_TCP32+0xFFFFFFFF)
#define | COAP_DEFAULT_MAX_PDU_RX_SIZE (8*1024*1024+256)
#define | COAP_DEBUG_BUF_SIZE (8 + 1024 * 2)
#define | COAP_DEFAULT_VERSION 1 /* version of CoAP supported */
#define | COAP_DEFAULT_SCHEME "coap" /* the default scheme for CoAP URIs */
#define | COAP_DEFAULT_URI_WELLKNOWN ".well-known/core"
| well-known resources URI More...
#define | COAP_MESSAGE_CON 0 /* confirmable message (requires ACK/RST) */
#define | COAP_MESSAGE_NON 1 /* non-confirmable message (one-shot message) */
#define | COAP_MESSAGE_ACK 2 /* used to acknowledge confirmable messages */
#define | COAP_MESSAGE_RST 3 /* indicates error in received messages */
#define | COAP_REQUEST_GET 1
#define | COAP_REQUEST_POST 2
#define | COAP_REQUEST_PUT 3
#define | COAP_REQUEST_DELETE 4
#define | COAP_REQUEST_FETCH 5 /* RFC 8132 */
#define | COAP_REQUEST_PATCH 6 /* RFC 8132 */
#define | COAP_REQUEST_IPATCH 7 /* RFC 8132 */
#define | COAP_OPTION_IF_MATCH 1 /* C, opaque, 0-8 B, (none) */
#define | COAP_OPTION_URI_HOST 3 /* C, String, 1-255 B, destination address */
#define | COAP_OPTION_ETAG 4 /* E, opaque, 1-8 B, (none) */
#define | COAP_OPTION_IF_NONE_MATCH 5 /* empty, 0 B, (none) */
#define | COAP_OPTION_URI_PORT 7 /* C, uint, 0-2 B, destination port */
#define | COAP_OPTION_LOCATION_PATH 8 /* E, String, 0-255 B, - */
#define | COAP_OPTION_URI_PATH 11 /* C, String, 0-255 B, (none) */
#define | COAP_OPTION_CONTENT_FORMAT 12 /* E, uint, 0-2 B, (none) */
#define | COAP_OPTION_CONTENT_TYPE COAP_OPTION_CONTENT_FORMAT
#define | COAP_OPTION_MAXAGE 14 /* E, uint, 0--4 B, 60 Seconds */
#define | COAP_OPTION_URI_QUERY 15 /* C, String, 1-255 B, (none) */
#define | COAP_OPTION_ACCEPT 17 /* C, uint, 0-2 B, (none) */
#define | COAP_OPTION_LOCATION_QUERY 20 /* E, String, 0-255 B, (none) */
#define | COAP_OPTION_SIZE2 28 /* E, uint, 0-4 B, (none) */
#define | COAP_OPTION_PROXY_URI 35 /* C, String, 1-1034 B, (none) */
#define | COAP_OPTION_PROXY_SCHEME 39 /* C, String, 1-255 B, (none) */
#define | COAP_OPTION_SIZE1 60 /* E, uint, 0-4 B, (none) */
#define | COAP_OPTION_OBSERVE 6 /* E, empty/uint, 0 B/0-3 B, (none) */
#define | COAP_OPTION_SUBSCRIPTION COAP_OPTION_OBSERVE
#define | COAP_OPTION_BLOCK2 23 /* C, uint, 0--3 B, (none) */
#define | COAP_OPTION_BLOCK1 27 /* C, uint, 0--3 B, (none) */
#define | COAP_OPTION_NORESPONSE 258 /* N, uint, 0--1 B, 0 */
#define | COAP_MAX_OPT 65535
| the highest option number we know More...
#define | COAP_RESPONSE_CODE(N) (((N)/100 << 5) | (N)%100)
#define | COAP_RESPONSE_CLASS(C) (((C) >> 5) & 0xFF)
#define | COAP_ERROR_PHRASE_LENGTH 32
| maximum length of error phrase More...
#define | COAP_RESPONSE_200 COAP_RESPONSE_CODE(200) /* 2.00 OK */
#define | COAP_RESPONSE_201 COAP_RESPONSE_CODE(201) /* 2.01 Created */
#define | COAP_RESPONSE_304 COAP_RESPONSE_CODE(203) /* 2.03 Valid */
#define | COAP_RESPONSE_400 COAP_RESPONSE_CODE(400) /* 4.00 Bad Request */
#define | COAP_RESPONSE_404 COAP_RESPONSE_CODE(404) /* 4.04 Not Found */
#define | COAP_RESPONSE_405 COAP_RESPONSE_CODE(405) /* 4.05 Method Not Allowed */
#define | COAP_RESPONSE_415 COAP_RESPONSE_CODE(415) /* 4.15 Unsupported Media Type */
#define | COAP_RESPONSE_500 COAP_RESPONSE_CODE(500) /* 5.00 Internal Server Error */
#define | COAP_RESPONSE_501 COAP_RESPONSE_CODE(501) /* 5.01 Not Implemented */
#define | COAP_RESPONSE_503 COAP_RESPONSE_CODE(503) /* 5.03 Service Unavailable */
#define | COAP_RESPONSE_504 COAP_RESPONSE_CODE(504) /* 5.04 Gateway Timeout */
#define | COAP_RESPONSE_X_242 COAP_RESPONSE_CODE(402) /* Critical Option not supported */
#define | COAP_SIGNALING_CODE(N) (((N)/100 << 5) | (N)%100)
#define | COAP_SIGNALING_CSM COAP_SIGNALING_CODE(701)
#define | COAP_SIGNALING_PING COAP_SIGNALING_CODE(702)
#define | COAP_SIGNALING_PONG COAP_SIGNALING_CODE(703)
#define | COAP_SIGNALING_RELEASE COAP_SIGNALING_CODE(704)
#define | COAP_SIGNALING_ABORT COAP_SIGNALING_CODE(705)
#define | COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE 2
#define | COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER 4
#define | COAP_SIGNALING_OPTION_CUSTODY 2
#define | COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS 2
#define | COAP_SIGNALING_OPTION_HOLD_OFF 4
#define | COAP_SIGNALING_OPTION_BAD_CSM_OPTION 2
#define | COAP_MEDIATYPE_TEXT_PLAIN 0 /* text/plain (UTF-8) */
#define | COAP_MEDIATYPE_APPLICATION_LINK_FORMAT 40 /* application/link-format */
#define | COAP_MEDIATYPE_APPLICATION_XML 41 /* application/xml */
#define | COAP_MEDIATYPE_APPLICATION_OCTET_STREAM 42 /* application/octet-stream */
#define | COAP_MEDIATYPE_APPLICATION_RDF_XML 43 /* application/rdf+xml */
#define | COAP_MEDIATYPE_APPLICATION_EXI 47 /* application/exi */
#define | COAP_MEDIATYPE_APPLICATION_JSON 50 /* application/json */
#define | COAP_MEDIATYPE_APPLICATION_CBOR 60 /* application/cbor */
#define | COAP_MEDIATYPE_APPLICATION_COSE_SIGN 98 /* application/cose; cose-type="cose-sign" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_SIGN1 18 /* application/cose; cose-type="cose-sign1" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT 96 /* application/cose; cose-type="cose-encrypt" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT0 16 /* application/cose; cose-type="cose-encrypt0" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_MAC 97 /* application/cose; cose-type="cose-mac" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_MAC0 17 /* application/cose; cose-type="cose-mac0" */
#define | COAP_MEDIATYPE_APPLICATION_COSE_KEY 101 /* application/cose-key */
#define | COAP_MEDIATYPE_APPLICATION_COSE_KEY_SET 102 /* application/cose-key-set */
#define | COAP_MEDIATYPE_APPLICATION_SENML_JSON 110 /* application/senml+json */
#define | COAP_MEDIATYPE_APPLICATION_SENSML_JSON 111 /* application/sensml+json */
#define | COAP_MEDIATYPE_APPLICATION_SENML_CBOR 112 /* application/senml+cbor */
#define | COAP_MEDIATYPE_APPLICATION_SENSML_CBOR 113 /* application/sensml+cbor */
#define | COAP_MEDIATYPE_APPLICATION_SENML_EXI 114 /* application/senml-exi */
#define | COAP_MEDIATYPE_APPLICATION_SENSML_EXI 115 /* application/sensml-exi */
#define | COAP_MEDIATYPE_APPLICATION_SENML_XML 310 /* application/senml+xml */
#define | COAP_MEDIATYPE_APPLICATION_SENSML_XML 311 /* application/sensml+xml */
#define | COAP_MEDIATYPE_ANY 0xff /* any media type */
#define | COAP_INVALID_TID -1
| Indicates an invalid transaction id. More...
#define | COAP_DROPPED_RESPONSE -2
| Indicates that a response is suppressed. More...
#define | COAP_PDU_DELAYED -3
#define | COAP_OPT_LONG
#define | COAP_OPT_END 0xF0 /* end marker */
#define | COAP_PAYLOAD_START 0xFF /* payload marker */
#define | COAP_OPTION_KEY(option) (option).key
#define | COAP_OPTION_LENGTH(option) (option).length
#define | COAP_OPTION_DATA(option) ((unsigned char *)&(option) + sizeof(coap_option))
#define | COAP_PDU_IS_EMPTY(pdu) ((pdu)->code == 0)
#define | COAP_PDU_IS_REQUEST(pdu) (!COAP_PDU_IS_EMPTY(pdu) && (pdu)->code < 32)
#define | COAP_PDU_IS_RESPONSE(pdu) ((pdu)->code >= 64 && (pdu)->code < 224)
#define | COAP_PDU_IS_SIGNALING(pdu) ((pdu)->code >= 224)
#define | COAP_PDU_MAX_UDP_HEADER_SIZE 4
#define | COAP_PDU_MAX_TCP_HEADER_SIZE 6
#define | COAP_PROTO_NONE 0
| coap_proto_t values More...
#define | COAP_PROTO_UDP 1
#define | COAP_PROTO_DTLS 2
#define | COAP_PROTO_TCP 3
#define | COAP_PROTO_TLS 4

## Typedefs

typedef int | coap_tid_t
| coap_tid_t is used to store CoAP transaction id, i.e. More...
typedef struct coap_pdu_t | coap_pdu_t
| structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload marker (0xff), then the payload if stored inline. More...
typedef uint8_t | coap_proto_t

## Functions

const char * | coap_response_phrase (unsigned char code)
| Returns a human-readable response phrase for the specified CoAP response `code`. More...
coap_pdu_t * | coap_pdu_init (uint8_t type, uint8_t code, uint16_t tid, size_t size)
| Creates a new CoAP PDU with at least enough storage space for the given `size` maximum message size. More...
int | coap_pdu_resize (coap_pdu_t *pdu, size_t new_size)
| Dynamically grows the size of `pdu` to `new_size`. More...
void | coap_pdu_clear (coap_pdu_t *pdu, size_t size)
| Clears any contents from `pdu` and resets `used_size`, and `data` pointers. More...
coap_pdu_t * | coap_new_pdu (const struct coap_session_t *session)
| Creates a new CoAP PDU. More...
void | coap_delete_pdu (coap_pdu_t *)
| Dispose of an CoAP PDU and frees associated storage. More...
size_t | coap_pdu_parse_header_size (coap_proto_t proto, const uint8_t *data)
| Interprets `data` to determine the number of bytes in the header. More...
size_t | coap_pdu_parse_size (coap_proto_t proto, const uint8_t *data, size_t length)
| Parses `data` to extract the message size. More...
int | coap_pdu_parse_header (coap_pdu_t *pdu, coap_proto_t proto)
| Decode the protocol specific header for the specified PDU. More...
int | coap_pdu_parse_opt (coap_pdu_t *pdu)
| Verify consistency in the given CoAP PDU structure and locate the data. More...
int | coap_pdu_parse (coap_proto_t proto, const uint8_t *data, size_t length, coap_pdu_t *pdu)
| Parses `data` into the CoAP PDU structure given in `result`. More...
int | coap_add_token (coap_pdu_t *pdu, size_t len, const uint8_t *data)
| Adds token of length `len` to `pdu`. More...
size_t | coap_add_option (coap_pdu_t *pdu, uint16_t type, size_t len, const uint8_t *data)
| Adds option of given type to pdu that is passed as first parameter. More...
uint8_t * | coap_add_option_later (coap_pdu_t *pdu, uint16_t type, size_t len)
| Adds option of given type to pdu that is passed as first parameter, but does not write a value. More...
int | coap_add_data (coap_pdu_t *pdu, size_t len, const uint8_t *data)
| Adds given data to the pdu that is passed as first parameter. More...
uint8_t * | coap_add_data_after (coap_pdu_t *pdu, size_t len)
| Adds given data to the pdu that is passed as first parameter but does not copyt it. More...
int | coap_get_data (const coap_pdu_t *pdu, size_t *len, uint8_t **data)
| Retrieves the length and data pointer of specified PDU. More...
size_t | coap_pdu_encode_header (coap_pdu_t *pdu, coap_proto_t proto)
| Compose the protocol specific header for the specified PDU. More...

## Detailed Description

Pre-defined constants that reflect defaults for CoAP.

Definition in file pdu.h.

## Macro Definition Documentation

## COAP_DEBUG_BUF_SIZE

#define COAP_DEBUG_BUF_SIZE (8 + 1024 * 2)

Definition at line 60 of file pdu.h.

## COAP_DEFAULT_MAX_AGE

#define COAP_DEFAULT_MAX_AGE 60 /* default maximum object lifetime in seconds */

Definition at line 30 of file pdu.h.

## COAP_DEFAULT_MAX_PDU_RX_SIZE

#define COAP_DEFAULT_MAX_PDU_RX_SIZE (8*1024*1024+256)

Definition at line 51 of file pdu.h.

## COAP_DEFAULT_MTU

#define COAP_DEFAULT_MTU 1152

Definition at line 32 of file pdu.h.

## COAP_DEFAULT_PORT

#define COAP_DEFAULT_PORT 5683 /* CoAP default UDP/TCP port */

Definition at line 28 of file pdu.h.

## COAP_DEFAULT_SCHEME

#define COAP_DEFAULT_SCHEME "coap" /* the default scheme for CoAP URIs */

Definition at line 65 of file pdu.h.

## COAP_DEFAULT_URI_WELLKNOWN

#define COAP_DEFAULT_URI_WELLKNOWN ".well-known/core"

well-known resources URI

Definition at line 68 of file pdu.h.

## COAP_DEFAULT_VERSION

#define COAP_DEFAULT_VERSION 1 /* version of CoAP supported */

Definition at line 64 of file pdu.h.

## COAP_DROPPED_RESPONSE

#define COAP_DROPPED_RESPONSE -2

Indicates that a response is suppressed.

This will occur for error responses if the request was received via IP multicast.

Definition at line 247 of file pdu.h.

## COAP_ERROR_PHRASE_LENGTH

#define COAP_ERROR_PHRASE_LENGTH 32

maximum length of error phrase

Definition at line 150 of file pdu.h.

## COAP_INVALID_TID

#define COAP_INVALID_TID -1

Indicates an invalid transaction id.

Definition at line 241 of file pdu.h.

## COAP_MAX_MESSAGE_SIZE_TCP0

#define COAP_MAX_MESSAGE_SIZE_TCP0 (COAP_MESSAGE_SIZE_OFFSET_TCP8-1) /* 12 */

Definition at line 41 of file pdu.h.

## COAP_MAX_MESSAGE_SIZE_TCP16

#define COAP_MAX_MESSAGE_SIZE_TCP16 (COAP_MESSAGE_SIZE_OFFSET_TCP32-1) /* 65804 */

Definition at line 43 of file pdu.h.

## COAP_MAX_MESSAGE_SIZE_TCP32

#define COAP_MAX_MESSAGE_SIZE_TCP32 (COAP_MESSAGE_SIZE_OFFSET_TCP32+0xFFFFFFFF)

Definition at line 44 of file pdu.h.

## COAP_MAX_MESSAGE_SIZE_TCP8

#define COAP_MAX_MESSAGE_SIZE_TCP8 (COAP_MESSAGE_SIZE_OFFSET_TCP16-1) /* 268 */

Definition at line 42 of file pdu.h.

## COAP_MAX_OPT

#define COAP_MAX_OPT 65535

the highest option number we know

Definition at line 124 of file pdu.h.

## COAP_MEDIATYPE_ANY

#define COAP_MEDIATYPE_ANY 0xff /* any media type */

Definition at line 231 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_CBOR

#define COAP_MEDIATYPE_APPLICATION_CBOR 60 /* application/cbor */

Definition at line 206 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT

#define COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT 96 /* application/cose; cose-type="cose-encrypt" */

Definition at line 211 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT0

#define COAP_MEDIATYPE_APPLICATION_COSE_ENCRYPT0 16 /* application/cose; cose-type="cose-encrypt0" */

Definition at line 212 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_KEY

#define COAP_MEDIATYPE_APPLICATION_COSE_KEY 101 /* application/cose-key */

Definition at line 216 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_KEY_SET

#define COAP_MEDIATYPE_APPLICATION_COSE_KEY_SET 102 /* application/cose-key-set */

Definition at line 217 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_MAC

#define COAP_MEDIATYPE_APPLICATION_COSE_MAC 97 /* application/cose; cose-type="cose-mac" */

Definition at line 213 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_MAC0

#define COAP_MEDIATYPE_APPLICATION_COSE_MAC0 17 /* application/cose; cose-type="cose-mac0" */

Definition at line 214 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_SIGN

#define COAP_MEDIATYPE_APPLICATION_COSE_SIGN 98 /* application/cose; cose-type="cose-sign" */

Definition at line 209 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_COSE_SIGN1

#define COAP_MEDIATYPE_APPLICATION_COSE_SIGN1 18 /* application/cose; cose-type="cose-sign1" */

Definition at line 210 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_EXI

#define COAP_MEDIATYPE_APPLICATION_EXI 47 /* application/exi */

Definition at line 204 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_JSON

#define COAP_MEDIATYPE_APPLICATION_JSON 50 /* application/json */

Definition at line 205 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_LINK_FORMAT

#define COAP_MEDIATYPE_APPLICATION_LINK_FORMAT 40 /* application/link-format */

Definition at line 200 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_OCTET_STREAM

#define COAP_MEDIATYPE_APPLICATION_OCTET_STREAM 42 /* application/octet-stream */

Definition at line 202 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_RDF_XML

#define COAP_MEDIATYPE_APPLICATION_RDF_XML 43 /* application/rdf+xml */

Definition at line 203 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENML_CBOR

#define COAP_MEDIATYPE_APPLICATION_SENML_CBOR 112 /* application/senml+cbor */

Definition at line 222 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENML_EXI

#define COAP_MEDIATYPE_APPLICATION_SENML_EXI 114 /* application/senml-exi */

Definition at line 224 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENML_JSON

#define COAP_MEDIATYPE_APPLICATION_SENML_JSON 110 /* application/senml+json */

Definition at line 220 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENML_XML

#define COAP_MEDIATYPE_APPLICATION_SENML_XML 310 /* application/senml+xml */

Definition at line 226 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENSML_CBOR

#define COAP_MEDIATYPE_APPLICATION_SENSML_CBOR 113 /* application/sensml+cbor */

Definition at line 223 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENSML_EXI

#define COAP_MEDIATYPE_APPLICATION_SENSML_EXI 115 /* application/sensml-exi */

Definition at line 225 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENSML_JSON

#define COAP_MEDIATYPE_APPLICATION_SENSML_JSON 111 /* application/sensml+json */

Definition at line 221 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_SENSML_XML

#define COAP_MEDIATYPE_APPLICATION_SENSML_XML 311 /* application/sensml+xml */

Definition at line 227 of file pdu.h.

## COAP_MEDIATYPE_APPLICATION_XML

#define COAP_MEDIATYPE_APPLICATION_XML 41 /* application/xml */

Definition at line 201 of file pdu.h.

## COAP_MEDIATYPE_TEXT_PLAIN

#define COAP_MEDIATYPE_TEXT_PLAIN 0 /* text/plain (UTF-8) */

Definition at line 199 of file pdu.h.

## COAP_MESSAGE_ACK

#define COAP_MESSAGE_ACK 2 /* used to acknowledge confirmable messages */

Definition at line 74 of file pdu.h.

## COAP_MESSAGE_CON

#define COAP_MESSAGE_CON 0 /* confirmable message (requires ACK/RST) */

Definition at line 72 of file pdu.h.

## COAP_MESSAGE_NON

#define COAP_MESSAGE_NON 1 /* non-confirmable message (one-shot message) */

Definition at line 73 of file pdu.h.

## COAP_MESSAGE_RST

#define COAP_MESSAGE_RST 3 /* indicates error in received messages */

Definition at line 75 of file pdu.h.

## COAP_MESSAGE_SIZE_OFFSET_TCP16

#define COAP_MESSAGE_SIZE_OFFSET_TCP16 269 /* 13 + 256 */

Definition at line 37 of file pdu.h.

## COAP_MESSAGE_SIZE_OFFSET_TCP32

#define COAP_MESSAGE_SIZE_OFFSET_TCP32 65805 /* 269 + 65536 */

Definition at line 38 of file pdu.h.

## COAP_MESSAGE_SIZE_OFFSET_TCP8

#define COAP_MESSAGE_SIZE_OFFSET_TCP8 13

Definition at line 36 of file pdu.h.

## COAP_OPT_END

#define COAP_OPT_END 0xF0 /* end marker */

Definition at line 253 of file pdu.h.

## COAP_OPT_LONG

#define COAP_OPT_LONG

Value:
0x0F /* OC == 0b1111 indicates that the option list
* in a CoAP message is limited by 0b11110000
* marker */

Definition at line 251 of file pdu.h.

## COAP_OPTION_ACCEPT

#define COAP_OPTION_ACCEPT 17 /* C, uint, 0-2 B, (none) */

Definition at line 103 of file pdu.h.

## COAP_OPTION_BLOCK1

#define COAP_OPTION_BLOCK1 27 /* C, uint, 0--3 B, (none) */

Definition at line 118 of file pdu.h.

## COAP_OPTION_BLOCK2

#define COAP_OPTION_BLOCK2 23 /* C, uint, 0--3 B, (none) */

Definition at line 117 of file pdu.h.

## COAP_OPTION_CONTENT_FORMAT

#define COAP_OPTION_CONTENT_FORMAT 12 /* E, uint, 0-2 B, (none) */

Definition at line 99 of file pdu.h.

## COAP_OPTION_CONTENT_TYPE

#define COAP_OPTION_CONTENT_TYPE COAP_OPTION_CONTENT_FORMAT

Definition at line 100 of file pdu.h.

## COAP_OPTION_DATA

#define COAP_OPTION_DATA | ( |  | option | ) | ((unsigned char *)&(option) + sizeof(coap_option))

Definition at line 271 of file pdu.h.

## COAP_OPTION_ETAG

#define COAP_OPTION_ETAG 4 /* E, opaque, 1-8 B, (none) */

Definition at line 94 of file pdu.h.

## COAP_OPTION_IF_MATCH

#define COAP_OPTION_IF_MATCH 1 /* C, opaque, 0-8 B, (none) */

Definition at line 92 of file pdu.h.

## COAP_OPTION_IF_NONE_MATCH

#define COAP_OPTION_IF_NONE_MATCH 5 /* empty, 0 B, (none) */

Definition at line 95 of file pdu.h.

## COAP_OPTION_KEY

#define COAP_OPTION_KEY | ( |  | option | ) | (option).key

Definition at line 269 of file pdu.h.

## COAP_OPTION_LENGTH

#define COAP_OPTION_LENGTH | ( |  | option | ) | (option).length

Definition at line 270 of file pdu.h.

## COAP_OPTION_LOCATION_PATH

#define COAP_OPTION_LOCATION_PATH 8 /* E, String, 0-255 B, - */

Definition at line 97 of file pdu.h.

## COAP_OPTION_LOCATION_QUERY

#define COAP_OPTION_LOCATION_QUERY 20 /* E, String, 0-255 B, (none) */

Definition at line 104 of file pdu.h.

## COAP_OPTION_MAXAGE

#define COAP_OPTION_MAXAGE 14 /* E, uint, 0--4 B, 60 Seconds */

Definition at line 101 of file pdu.h.

## COAP_OPTION_NORESPONSE

#define COAP_OPTION_NORESPONSE 258 /* N, uint, 0--1 B, 0 */

Definition at line 122 of file pdu.h.

## COAP_OPTION_OBSERVE

#define COAP_OPTION_OBSERVE 6 /* E, empty/uint, 0 B/0-3 B, (none) */

Definition at line 112 of file pdu.h.

## COAP_OPTION_PROXY_SCHEME

#define COAP_OPTION_PROXY_SCHEME 39 /* C, String, 1-255 B, (none) */

Definition at line 107 of file pdu.h.

## COAP_OPTION_PROXY_URI

#define COAP_OPTION_PROXY_URI 35 /* C, String, 1-1034 B, (none) */

Definition at line 106 of file pdu.h.

## COAP_OPTION_SIZE1

#define COAP_OPTION_SIZE1 60 /* E, uint, 0-4 B, (none) */

Definition at line 108 of file pdu.h.

## COAP_OPTION_SIZE2

#define COAP_OPTION_SIZE2 28 /* E, uint, 0-4 B, (none) */

Definition at line 105 of file pdu.h.

## COAP_OPTION_SUBSCRIPTION

#define COAP_OPTION_SUBSCRIPTION COAP_OPTION_OBSERVE

Definition at line 113 of file pdu.h.

## COAP_OPTION_URI_HOST

#define COAP_OPTION_URI_HOST 3 /* C, String, 1-255 B, destination address */

Definition at line 93 of file pdu.h.

## COAP_OPTION_URI_PATH

#define COAP_OPTION_URI_PATH 11 /* C, String, 0-255 B, (none) */

Definition at line 98 of file pdu.h.

## COAP_OPTION_URI_PORT

#define COAP_OPTION_URI_PORT 7 /* C, uint, 0-2 B, destination port */

Definition at line 96 of file pdu.h.

## COAP_OPTION_URI_QUERY

#define COAP_OPTION_URI_QUERY 15 /* C, String, 1-255 B, (none) */

Definition at line 102 of file pdu.h.

## COAP_PAYLOAD_START

#define COAP_PAYLOAD_START 0xFF /* payload marker */

Definition at line 255 of file pdu.h.

## COAP_PDU_DELAYED

#define COAP_PDU_DELAYED -3

Definition at line 249 of file pdu.h.

## COAP_PDU_IS_EMPTY

#define COAP_PDU_IS_EMPTY | ( |  | pdu | ) | ((pdu)->code == 0)

Definition at line 310 of file pdu.h.

## COAP_PDU_IS_REQUEST

#define COAP_PDU_IS_REQUEST | ( |  | pdu | ) | (!COAP_PDU_IS_EMPTY(pdu) && (pdu)->code < 32)

Definition at line 311 of file pdu.h.

## COAP_PDU_IS_RESPONSE

#define COAP_PDU_IS_RESPONSE | ( |  | pdu | ) | ((pdu)->code >= 64 && (pdu)->code < 224)

Definition at line 312 of file pdu.h.

## COAP_PDU_IS_SIGNALING

#define COAP_PDU_IS_SIGNALING | ( |  | pdu | ) | ((pdu)->code >= 224)

Definition at line 313 of file pdu.h.

## COAP_PDU_MAX_TCP_HEADER_SIZE

#define COAP_PDU_MAX_TCP_HEADER_SIZE 6

Definition at line 316 of file pdu.h.

## COAP_PDU_MAX_UDP_HEADER_SIZE

#define COAP_PDU_MAX_UDP_HEADER_SIZE 4

Definition at line 315 of file pdu.h.

## COAP_PROTO_DTLS

#define COAP_PROTO_DTLS 2

Definition at line 343 of file pdu.h.

## COAP_PROTO_NONE

#define COAP_PROTO_NONE 0

coap_proto_t values

Definition at line 341 of file pdu.h.

## COAP_PROTO_TCP

#define COAP_PROTO_TCP 3

Definition at line 344 of file pdu.h.

## COAP_PROTO_TLS

#define COAP_PROTO_TLS 4

Definition at line 345 of file pdu.h.

## COAP_PROTO_UDP

#define COAP_PROTO_UDP 1

Definition at line 342 of file pdu.h.

## COAP_REQUEST_DELETE

#define COAP_REQUEST_DELETE 4

Definition at line 82 of file pdu.h.

## COAP_REQUEST_FETCH

#define COAP_REQUEST_FETCH 5 /* RFC 8132 */

Definition at line 83 of file pdu.h.

## COAP_REQUEST_GET

#define COAP_REQUEST_GET 1

Definition at line 79 of file pdu.h.

## COAP_REQUEST_IPATCH

#define COAP_REQUEST_IPATCH 7 /* RFC 8132 */

Definition at line 85 of file pdu.h.

## COAP_REQUEST_PATCH

#define COAP_REQUEST_PATCH 6 /* RFC 8132 */

Definition at line 84 of file pdu.h.

## COAP_REQUEST_POST

#define COAP_REQUEST_POST 2

Definition at line 80 of file pdu.h.

## COAP_REQUEST_PUT

#define COAP_REQUEST_PUT 3

Definition at line 81 of file pdu.h.

## COAP_RESPONSE_200

#define COAP_RESPONSE_200 COAP_RESPONSE_CODE(200) /* 2.00 OK */

Definition at line 162 of file pdu.h.

## COAP_RESPONSE_201

#define COAP_RESPONSE_201 COAP_RESPONSE_CODE(201) /* 2.01 Created */

Definition at line 163 of file pdu.h.

## COAP_RESPONSE_304

#define COAP_RESPONSE_304 COAP_RESPONSE_CODE(203) /* 2.03 Valid */

Definition at line 164 of file pdu.h.

## COAP_RESPONSE_400

#define COAP_RESPONSE_400 COAP_RESPONSE_CODE(400) /* 4.00 Bad Request */

Definition at line 165 of file pdu.h.

## COAP_RESPONSE_404

#define COAP_RESPONSE_404 COAP_RESPONSE_CODE(404) /* 4.04 Not Found */

Definition at line 166 of file pdu.h.

## COAP_RESPONSE_405

#define COAP_RESPONSE_405 COAP_RESPONSE_CODE(405) /* 4.05 Method Not Allowed */

Definition at line 167 of file pdu.h.

## COAP_RESPONSE_415

#define COAP_RESPONSE_415 COAP_RESPONSE_CODE(415) /* 4.15 Unsupported Media Type */

Definition at line 168 of file pdu.h.

## COAP_RESPONSE_500

#define COAP_RESPONSE_500 COAP_RESPONSE_CODE(500) /* 5.00 Internal Server Error */

Definition at line 169 of file pdu.h.

## COAP_RESPONSE_501

#define COAP_RESPONSE_501 COAP_RESPONSE_CODE(501) /* 5.01 Not Implemented */

Definition at line 170 of file pdu.h.

## COAP_RESPONSE_503

#define COAP_RESPONSE_503 COAP_RESPONSE_CODE(503) /* 5.03 Service Unavailable */

Definition at line 171 of file pdu.h.

## COAP_RESPONSE_504

#define COAP_RESPONSE_504 COAP_RESPONSE_CODE(504) /* 5.04 Gateway Timeout */

Definition at line 172 of file pdu.h.

## COAP_RESPONSE_CLASS

#define COAP_RESPONSE_CLASS | ( |  | C | ) | (((C) >> 5) & 0xFF)

Definition at line 135 of file pdu.h.

## COAP_RESPONSE_CODE

#define COAP_RESPONSE_CODE | ( |  | N | ) | (((N)/100 << 5) | (N)%100)

Definition at line 132 of file pdu.h.

## COAP_RESPONSE_X_242

#define COAP_RESPONSE_X_242 COAP_RESPONSE_CODE(402) /* Critical Option not supported */

Definition at line 177 of file pdu.h.

## COAP_SIGNALING_ABORT

#define COAP_SIGNALING_ABORT COAP_SIGNALING_CODE(705)

Definition at line 184 of file pdu.h.

## COAP_SIGNALING_CODE

#define COAP_SIGNALING_CODE | ( |  | N | ) | (((N)/100 << 5) | (N)%100)

Definition at line 179 of file pdu.h.

## COAP_SIGNALING_CSM

#define COAP_SIGNALING_CSM COAP_SIGNALING_CODE(701)

Definition at line 180 of file pdu.h.

## COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS

#define COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS 2

Definition at line 192 of file pdu.h.

## COAP_SIGNALING_OPTION_BAD_CSM_OPTION

#define COAP_SIGNALING_OPTION_BAD_CSM_OPTION 2

Definition at line 195 of file pdu.h.

## COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER

#define COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER 4

Definition at line 188 of file pdu.h.

## COAP_SIGNALING_OPTION_CUSTODY

#define COAP_SIGNALING_OPTION_CUSTODY 2

Definition at line 190 of file pdu.h.

## COAP_SIGNALING_OPTION_HOLD_OFF

#define COAP_SIGNALING_OPTION_HOLD_OFF 4

Definition at line 193 of file pdu.h.

## COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE

#define COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE 2

Definition at line 187 of file pdu.h.

## COAP_SIGNALING_PING

#define COAP_SIGNALING_PING COAP_SIGNALING_CODE(702)

Definition at line 181 of file pdu.h.

## COAP_SIGNALING_PONG

#define COAP_SIGNALING_PONG COAP_SIGNALING_CODE(703)

Definition at line 182 of file pdu.h.

## COAP_SIGNALING_RELEASE

#define COAP_SIGNALING_RELEASE COAP_SIGNALING_CODE(704)

Definition at line 183 of file pdu.h.

## COAPS_DEFAULT_PORT

#define COAPS_DEFAULT_PORT 5684 /* CoAP default UDP/TCP port for secure transmission */

Definition at line 29 of file pdu.h.

## Typedef Documentation

## coap_pdu_t

typedef struct coap_pdu_t coap_pdu_t

structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload marker (0xff), then the payload if stored inline.

Memory layout is: <—header—>|<—token—><—options—>0xff<—payload—> header is addressed with a negative offset to token, its maximum size is max_hdr_size. options starts at token + token_length payload starts at data, its length is used_size - (data - token)

## coap_proto_t

typedef uint8_t coap_proto_t

Definition at line 337 of file pdu.h.

## coap_tid_t

typedef int coap_tid_t

coap_tid_t is used to store CoAP transaction id, i.e.

a hash value built from the remote transport address and the message id of a CoAP PDU. Valid transaction ids are greater or equal zero.

Definition at line 238 of file pdu.h.

## Function Documentation

## coap_add_data()

int coap_add_data | ( | coap_pdu_t * | pdu,
|  | size_t | len,
|  | const uint8_t * | data
| ) |  |

Adds given data to the pdu that is passed as first parameter.

Note that the PDU's data is destroyed by coap_add_option(). coap_add_data() must be called only once per PDU, otherwise the result is undefined.

Definition at line 288 of file pdu.c.

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

## coap_add_data_after()

uint8_t* coap_add_data_after | ( | coap_pdu_t * | pdu,
|  | size_t | len
| ) |  |

Adds given data to the pdu that is passed as first parameter but does not copyt it.

Note that the PDU's data is destroyed by coap_add_option(). coap_add_data() must be have been called once for this PDU, otherwise the result is undefined. The actual data must be copied at the returned location.

Definition at line 300 of file pdu.c.

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

## coap_add_option()

size_t coap_add_option | ( | coap_pdu_t * | pdu,
|  | uint16_t | type,
|  | size_t | len,
|  | const uint8_t * | data
| ) |  |

Adds option of given type to pdu that is passed as first parameter.

coap_add_option() destroys the PDU's data, so coap_add_data() must be called after all options have been added. As coap_add_token() destroys the options following the token, the token must be added before coap_add_option() is called. This function returns the number of bytes written or `0` on error.

Definition at line 215 of file pdu.c.

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

## coap_add_option_later()

uint8_t* coap_add_option_later | ( | coap_pdu_t * | pdu,
|  | uint16_t | type,
|  | size_t | len
| ) |  |

Adds option of given type to pdu that is passed as first parameter, but does not write a value.

It works like coap_add_option with respect to calling sequence (i.e. after token and before data). This function returns a memory address to which the option data has to be written before the PDU can be sent, or `NULL` on error.

Definition at line 252 of file pdu.c.

Here is the call graph for this function:

## coap_add_token()

int coap_add_token | ( | coap_pdu_t * | pdu,
|  | size_t | len,
|  | const uint8_t * | data
| ) |  |

Adds token of length `len` to `pdu`.

Adding the token destroys any following contents of the pdu. Hence options and data must be added after coap_add_token() has been called. In `pdu`, length is set to `len` + `4`, and max_delta is set to `0`. This function returns `0` on error or a value greater than zero on success.

Parameters

  pdu | The PDU where the token is to be added.
  len | The length of the new token.
  data | The token to add.

Returns
  A value greater than zero on success, or `0` on error.

Definition at line 191 of file pdu.c.

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

## coap_delete_pdu()

void coap_delete_pdu | ( | coap_pdu_t * | pdu | ) |

Dispose of an CoAP PDU and frees associated storage.

Not that in general you should not call this function directly. When a PDU is sent with coap_send(), coap_delete_pdu() will be called automatically for you.

Definition at line 127 of file pdu.c.

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

## coap_get_data()

int coap_get_data | ( | const coap_pdu_t * | pdu,
|  | size_t * | len,
|  | uint8_t ** | data
| ) |  |

Retrieves the length and data pointer of specified PDU.

Returns 0 on error or 1 if *len and *data have correct values. Note that these values are destroyed with the pdu.

Definition at line 318 of file pdu.c.

Here is the caller graph for this function:

## coap_new_pdu()

coap_pdu_t* coap_new_pdu | ( | const struct coap_session_t * | session | ) |

Creates a new CoAP PDU.

Definition at line 119 of file pdu.c.

Here is the call graph for this function:

## coap_pdu_clear()

void coap_pdu_clear | ( | coap_pdu_t * | pdu,
|  | size_t | size
| ) |  |

Clears any contents from `pdu` and resets `used_size`, and `data` pointers.

`max_size` is set to `size`, any other field is set to `0`. Note that `pdu` must be a valid pointer to a coap_pdu_t object created e.g. by coap_pdu_init().

Definition at line 34 of file pdu.c.

Here is the caller graph for this function:

## coap_pdu_encode_header()

size_t coap_pdu_encode_header | ( | coap_pdu_t * | pdu,
|  | coap_proto_t | proto
| ) |  |

Compose the protocol specific header for the specified PDU.

Parameters

  pdu | A newly composed PDU.
  proto | The target wire protocol.

Returns
  Number of header bytes prepended before pdu->token or 0 on error.

Definition at line 568 of file pdu.c.

Here is the caller graph for this function:

## coap_pdu_init()

coap_pdu_t* coap_pdu_init | ( | uint8_t | type,
|  | uint8_t | code,
|  | uint16_t | tid,
|  | size_t | size
| ) |  |

Creates a new CoAP PDU with at least enough storage space for the given `size` maximum message size.

The function returns a pointer to the node coap_pdu_t object on success, or `NULL` on error. The storage allocated for the result must be released with coap_delete_pdu() if coap_send() is not called.

Parameters

  type | The type of the PDU (one of COAP_MESSAGE_CON, COAP_MESSAGE_NON, COAP_MESSAGE_ACK, COAP_MESSAGE_RST).
  code | The message code.
  tid | The transcation id to set or 0 if unknown / not applicable.
  size | The maximum allowed number of byte for the message.

Returns
  A pointer to the new PDU object or `NULL` on error.

Definition at line 79 of file pdu.c.

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

## coap_pdu_parse()

int coap_pdu_parse | ( | coap_proto_t | proto,
|  | const uint8_t * | data,
|  | size_t | length,
|  | coap_pdu_t * | pdu
| ) |  |

Parses `data` into the CoAP PDU structure given in `result`.

The target pdu must be large enough to This function returns `0` on error or a number greater than zero on success.

Parameters

  proto | Session's protocol
  data | The raw data to parse as CoAP PDU.
  length | The actual size of `data`.
  pdu | The PDU structure to fill. Note that the structure must provide space to hold at least the token and options part of the message.

Returns
  1 on success or `0` on error.

Definition at line 543 of file pdu.c.

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

## coap_pdu_parse_header()

int coap_pdu_parse_header | ( | coap_pdu_t * | pdu,
|  | coap_proto_t | proto
| ) |  |

Decode the protocol specific header for the specified PDU.

Parameters

  pdu | A newly received PDU.
  proto | The target wire protocol.

Returns
  1 for success or 0 on error.

Definition at line 460 of file pdu.c.

Here is the caller graph for this function:

## coap_pdu_parse_header_size()

size_t coap_pdu_parse_header_size | ( | coap_proto_t | proto,
|  | const uint8_t * | data
| ) |  |

Interprets `data` to determine the number of bytes in the header.

This function returns `0` on error or a number greater than zero on success.

Parameters

  proto | Session's protocol
  data | The first byte of raw data to parse as CoAP PDU.

Returns
  A value greater than zero on success or `0` on error.

Definition at line 405 of file pdu.c.

Here is the caller graph for this function:

## coap_pdu_parse_opt()

int coap_pdu_parse_opt | ( | coap_pdu_t * | pdu | ) |

Verify consistency in the given CoAP PDU structure and locate the data.

This function returns `0` on error or a number greater than zero on success. This function only parses the token and options, up to the payload start marker.

Parameters

  pdu | The PDU structure to.

Returns
  1 on success or `0` on error.

Definition at line 492 of file pdu.c.

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

## coap_pdu_parse_size()

size_t coap_pdu_parse_size | ( | coap_proto_t | proto,
|  | const uint8_t * | data,
|  | size_t | length
| ) |  |

Parses `data` to extract the message size.

`length` must be at least coap_pdu_parse_header_size(proto, data). This function returns `0` on error or a number greater than zero on success.

Parameters

  proto | Session's protocol
  data | The raw data to parse as CoAP PDU.
  length | The actual size of `data`.

Returns
  A value greater than zero on success or `0` on error.

Definition at line 428 of file pdu.c.

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

## coap_pdu_resize()

int coap_pdu_resize | ( | coap_pdu_t * | pdu,
|  | size_t | new_size
| ) |  |

Dynamically grows the size of `pdu` to `new_size`.

The new size must not exceed the PDU's configure maximum size. On success, this function returns 1, otherwise 0.

Parameters

  pdu | The PDU to resize.
  new_size | The new size in bytes.

Returns
  1 if the operation succeeded, 0 otherwise.

Definition at line 140 of file pdu.c.

Here is the caller graph for this function:

## coap_response_phrase()

const char* coap_response_phrase | ( | unsigned char | code | ) |

Returns a human-readable response phrase for the specified CoAP response `code`.

This function returns `NULL` if not found.

Parameters

  code | The response code for which the literal phrase should be retrieved.

Returns
  A zero-terminated string describing the error, or `NULL` if not found.

Definition at line 370 of file pdu.c.

Here is the caller graph for this function: