libcoap 4.3.1

API for PDUs. More...

+ Collaboration diagram for PDU:

Data Structures

struct  coap_option
 

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_BERT_BASE   1152
 
#define COAP_DEFAULT_HOP_LIMIT   16
 
#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_OPTION_IF_MATCH   1 /* C__RE__, opaque, 0-8 B, RFC7252 */
 
#define COAP_OPTION_URI_HOST   3 /* CU-___U, String, 1-255 B, RFC7252 */
 
#define COAP_OPTION_ETAG   4 /* ___RE__, opaque, 1-8 B, RFC7252 */
 
#define COAP_OPTION_IF_NONE_MATCH   5 /* C___E__, empty, 0 B, RFC7252 */
 
#define COAP_OPTION_OBSERVE   6 /* _U-_E_U, empty/uint,0/0-3 B, RFC7641 */
 
#define COAP_OPTION_URI_PORT   7 /* CU-___U, uint, 0-2 B, RFC7252 */
 
#define COAP_OPTION_LOCATION_PATH   8 /* ___RE__, String, 0-255 B, RFC7252 */
 
#define COAP_OPTION_OSCORE   9 /* C_____U, *, 0-255 B, RFC8613 */
 
#define COAP_OPTION_URI_PATH   11 /* CU-RE__, String, 0-255 B, RFC7252 */
 
#define COAP_OPTION_CONTENT_FORMAT   12 /* ____E__, uint, 0-2 B, RFC7252 */
 
#define COAP_OPTION_CONTENT_TYPE   COAP_OPTION_CONTENT_FORMAT
 
#define COAP_OPTION_MAXAGE   14 /* _U-_E_U, uint, 0-4 B, RFC7252 */
 
#define COAP_OPTION_URI_QUERY   15 /* CU-RE__, String, 1-255 B, RFC7252 */
 
#define COAP_OPTION_HOP_LIMIT   16 /* ______U, uint, 1 B, RFC8768 */
 
#define COAP_OPTION_ACCEPT   17 /* C___E__, uint, 0-2 B, RFC7252 */
 
#define COAP_OPTION_LOCATION_QUERY   20 /* ___RE__, String, 0-255 B, RFC7252 */
 
#define COAP_OPTION_BLOCK2   23 /* CU-_E_U, uint, 0-3 B, RFC7959 */
 
#define COAP_OPTION_BLOCK1   27 /* CU-_E_U, uint, 0-3 B, RFC7959 */
 
#define COAP_OPTION_SIZE2   28 /* __N_E_U, uint, 0-4 B, RFC7959 */
 
#define COAP_OPTION_PROXY_URI   35 /* CU-___U, String, 1-1034 B, RFC7252 */
 
#define COAP_OPTION_PROXY_SCHEME   39 /* CU-___U, String, 1-255 B, RFC7252 */
 
#define COAP_OPTION_SIZE1   60 /* __N_E_U, uint, 0-4 B, RFC7252 */
 
#define COAP_OPTION_ECHO   252 /* _N__E_U, opaque, 0-40 B, RFC9175 */
 
#define COAP_OPTION_NORESPONSE   258 /* _U-_E_U, uint, 0-1 B, RFC7967 */
 
#define COAP_OPTION_RTAG   292 /* ___RE_U, opaque, 0-8 B, RFC9175 */
 
#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_SIGNALING_CODE(N)   (((N)/100 << 5) | (N)%100)
 
#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_CWT   61 /* application/cwt, RFC 8392 */
 
#define COAP_MEDIATYPE_APPLICATION_COAP_GROUP_JSON   256 /* application/coap-group+json */
 
#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_APPLICATION_DOTS_CBOR   271 /* application/dots+cbor */
 
#define COAP_MEDIATYPE_APPLICATION_ACE_CBOR   19 /* application/ace+cbor */
 
#define COAP_MEDIATYPE_ANY   0xff /* any media type */
 
#define COAP_INVALID_MID   -1
 Indicates an invalid message id. More...
 
#define COAP_INVALID_TID   COAP_INVALID_MID
 Indicates an invalid message id. More...
 
#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))
 

Typedefs

typedef enum coap_pdu_type_t coap_pdu_type_t
 CoAP PDU message type definitions. More...
 
typedef enum coap_request_t coap_request_t
 CoAP PDU Request methods. More...
 
typedef enum coap_pdu_signaling_proto_t coap_pdu_signaling_proto_t
 
typedef int coap_mid_t
 coap_mid_t is used to store the CoAP Message ID of a CoAP PDU. More...
 
typedef enum coap_proto_t coap_proto_t
 CoAP protocol types. More...
 
typedef enum coap_pdu_code_t coap_pdu_code_t
 Set of codes available for a PDU. More...
 

Enumerations

enum  coap_pdu_type_t { COAP_MESSAGE_CON , COAP_MESSAGE_NON , COAP_MESSAGE_ACK , COAP_MESSAGE_RST }
 CoAP PDU message type definitions. More...
 
enum  coap_request_t {
  COAP_REQUEST_GET = 1 , COAP_REQUEST_POST , COAP_REQUEST_PUT , COAP_REQUEST_DELETE ,
  COAP_REQUEST_FETCH , COAP_REQUEST_PATCH , COAP_REQUEST_IPATCH
}
 CoAP PDU Request methods. More...
 
enum  coap_pdu_signaling_proto_t {
  COAP_SIGNALING_CSM = COAP_SIGNALING_CODE(701) , COAP_SIGNALING_PING = COAP_SIGNALING_CODE(702) , COAP_SIGNALING_PONG = COAP_SIGNALING_CODE(703) , COAP_SIGNALING_RELEASE = COAP_SIGNALING_CODE(704) ,
  COAP_SIGNALING_ABORT = COAP_SIGNALING_CODE(705)
}
 
enum  coap_proto_t {
  COAP_PROTO_NONE = 0 , COAP_PROTO_UDP , COAP_PROTO_DTLS , COAP_PROTO_TCP ,
  COAP_PROTO_TLS
}
 CoAP protocol types. More...
 
enum  coap_pdu_code_t {
  COAP_EMPTY_CODE = 0 , COAP_REQUEST_CODE_GET = COAP_REQUEST_GET , COAP_REQUEST_CODE_POST = COAP_REQUEST_POST , COAP_REQUEST_CODE_PUT = COAP_REQUEST_PUT ,
  COAP_REQUEST_CODE_DELETE = COAP_REQUEST_DELETE , COAP_REQUEST_CODE_FETCH = COAP_REQUEST_FETCH , COAP_REQUEST_CODE_PATCH = COAP_REQUEST_PATCH , COAP_REQUEST_CODE_IPATCH = COAP_REQUEST_IPATCH ,
  COAP_RESPONSE_CODE_CREATED = COAP_RESPONSE_CODE(201) , COAP_RESPONSE_CODE_DELETED = COAP_RESPONSE_CODE(202) , COAP_RESPONSE_CODE_VALID = COAP_RESPONSE_CODE(203) , COAP_RESPONSE_CODE_CHANGED = COAP_RESPONSE_CODE(204) ,
  COAP_RESPONSE_CODE_CONTENT = COAP_RESPONSE_CODE(205) , COAP_RESPONSE_CODE_CONTINUE = COAP_RESPONSE_CODE(231) , COAP_RESPONSE_CODE_BAD_REQUEST = COAP_RESPONSE_CODE(400) , COAP_RESPONSE_CODE_UNAUTHORIZED = COAP_RESPONSE_CODE(401) ,
  COAP_RESPONSE_CODE_BAD_OPTION = COAP_RESPONSE_CODE(402) , COAP_RESPONSE_CODE_FORBIDDEN = COAP_RESPONSE_CODE(403) , COAP_RESPONSE_CODE_NOT_FOUND = COAP_RESPONSE_CODE(404) , COAP_RESPONSE_CODE_NOT_ALLOWED = COAP_RESPONSE_CODE(405) ,
  COAP_RESPONSE_CODE_NOT_ACCEPTABLE = COAP_RESPONSE_CODE(406) , COAP_RESPONSE_CODE_INCOMPLETE = COAP_RESPONSE_CODE(408) , COAP_RESPONSE_CODE_CONFLICT = COAP_RESPONSE_CODE(409) , COAP_RESPONSE_CODE_PRECONDITION_FAILED = COAP_RESPONSE_CODE(412) ,
  COAP_RESPONSE_CODE_REQUEST_TOO_LARGE = COAP_RESPONSE_CODE(413) , COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT = COAP_RESPONSE_CODE(415) , COAP_RESPONSE_CODE_UNPROCESSABLE = COAP_RESPONSE_CODE(422) , COAP_RESPONSE_CODE_TOO_MANY_REQUESTS = COAP_RESPONSE_CODE(429) ,
  COAP_RESPONSE_CODE_INTERNAL_ERROR = COAP_RESPONSE_CODE(500) , COAP_RESPONSE_CODE_NOT_IMPLEMENTED = COAP_RESPONSE_CODE(501) , COAP_RESPONSE_CODE_BAD_GATEWAY = COAP_RESPONSE_CODE(502) , COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE = COAP_RESPONSE_CODE(503) ,
  COAP_RESPONSE_CODE_GATEWAY_TIMEOUT = COAP_RESPONSE_CODE(504) , COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED = COAP_RESPONSE_CODE(505) , COAP_RESPONSE_CODE_HOP_LIMIT_REACHED = COAP_RESPONSE_CODE(508) , COAP_SIGNALING_CODE_CSM = COAP_SIGNALING_CSM ,
  COAP_SIGNALING_CODE_PING = COAP_SIGNALING_PING , COAP_SIGNALING_CODE_PONG = COAP_SIGNALING_PONG , COAP_SIGNALING_CODE_RELEASE = COAP_SIGNALING_RELEASE , COAP_SIGNALING_CODE_ABORT = COAP_SIGNALING_ABORT
}
 Set of codes available for a PDU. More...
 

Functions

const char * coap_response_phrase (unsigned char code)
 Returns a human-readable response phrase for the specified CoAP response code. More...
 
coap_pdu_tcoap_pdu_init (coap_pdu_type_t type, coap_pdu_code_t code, coap_mid_t mid, size_t size)
 Creates a new CoAP PDU with at least enough storage space for the given size maximum message size. More...
 
coap_pdu_tcoap_new_pdu (coap_pdu_type_t type, coap_pdu_code_t code, coap_session_t *session)
 Creates a new CoAP PDU. More...
 
void coap_delete_pdu (coap_pdu_t *pdu)
 Dispose of an CoAP PDU and frees associated storage. More...
 
coap_pdu_tcoap_pdu_duplicate (const coap_pdu_t *old_pdu, coap_session_t *session, size_t token_length, const uint8_t *token, coap_opt_filter_t *drop_options)
 Duplicate an existing PDU. 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, coap_option_num_t number, size_t len, const uint8_t *data)
 Adds option of given number to pdu that is passed as first parameter. 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. More...
 
int coap_get_data (const coap_pdu_t *pdu, size_t *len, const uint8_t **data)
 Retrieves the length and data pointer of specified PDU. More...
 
int coap_get_data_large (const coap_pdu_t *pdu, size_t *len, const uint8_t **data, size_t *offset, size_t *total)
 Retrieves the data from a PDU, with support for large bodies of data that spans multiple PDUs. More...
 
coap_pdu_code_t coap_pdu_get_code (const coap_pdu_t *pdu)
 Gets the PDU code associated with pdu. More...
 
void coap_pdu_set_code (coap_pdu_t *pdu, coap_pdu_code_t code)
 Sets the PDU code in the pdu. More...
 
coap_pdu_type_t coap_pdu_get_type (const coap_pdu_t *pdu)
 Gets the PDU type associated with pdu. More...
 
void coap_pdu_set_type (coap_pdu_t *pdu, coap_pdu_type_t type)
 Sets the PDU type in the pdu. More...
 
coap_bin_const_t coap_pdu_get_token (const coap_pdu_t *pdu)
 Gets the token associated with pdu. More...
 
coap_mid_t coap_pdu_get_mid (const coap_pdu_t *pdu)
 Gets the message id associated with pdu. More...
 
void coap_pdu_set_mid (coap_pdu_t *pdu, coap_mid_t mid)
 Sets the message id in the pdu. More...
 

Detailed Description

API for PDUs.

Macro Definition Documentation

◆ COAP_BERT_BASE

#define COAP_BERT_BASE   1152

Definition at line 44 of file pdu.h.

◆ COAP_DEFAULT_HOP_LIMIT

#define COAP_DEFAULT_HOP_LIMIT   16

Definition at line 47 of file pdu.h.

◆ COAP_DEFAULT_MAX_AGE

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

Definition at line 39 of file pdu.h.

◆ COAP_DEFAULT_MTU

#define COAP_DEFAULT_MTU   1152

Definition at line 41 of file pdu.h.

◆ COAP_DEFAULT_PORT

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

Definition at line 37 of file pdu.h.

◆ COAP_DEFAULT_SCHEME

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

Definition at line 50 of file pdu.h.

◆ COAP_DEFAULT_URI_WELLKNOWN

#define COAP_DEFAULT_URI_WELLKNOWN   ".well-known/core"

well-known resources URI

Definition at line 53 of file pdu.h.

◆ COAP_ERROR_PHRASE_LENGTH

#define COAP_ERROR_PHRASE_LENGTH   32

maximum length of error phrase

Definition at line 164 of file pdu.h.

◆ COAP_INVALID_MID

#define COAP_INVALID_MID   -1

Indicates an invalid message id.

Definition at line 246 of file pdu.h.

◆ COAP_INVALID_TID

#define COAP_INVALID_TID   COAP_INVALID_MID

Indicates an invalid message id.

Deprecated:
Use COAP_INVALID_MID instead.

Definition at line 252 of file pdu.h.

◆ COAP_MAX_OPT

#define COAP_MAX_OPT   65535

the highest option number we know

Definition at line 138 of file pdu.h.

◆ COAP_MEDIATYPE_ANY

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

Definition at line 237 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_ACE_CBOR

#define COAP_MEDIATYPE_APPLICATION_ACE_CBOR   19 /* application/ace+cbor */

Definition at line 233 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_CBOR

#define COAP_MEDIATYPE_APPLICATION_CBOR   60 /* application/cbor */

Definition at line 202 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_COAP_GROUP_JSON

#define COAP_MEDIATYPE_APPLICATION_COAP_GROUP_JSON   256 /* application/coap-group+json */

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_CWT

#define COAP_MEDIATYPE_APPLICATION_CWT   61 /* application/cwt, RFC 8392 */

Definition at line 203 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_DOTS_CBOR

#define COAP_MEDIATYPE_APPLICATION_DOTS_CBOR   271 /* application/dots+cbor */

Definition at line 230 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_EXI

#define COAP_MEDIATYPE_APPLICATION_EXI   47 /* application/exi */

Definition at line 200 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_JSON

#define COAP_MEDIATYPE_APPLICATION_JSON   50 /* application/json */

Definition at line 201 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_LINK_FORMAT

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

Definition at line 196 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_OCTET_STREAM

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

Definition at line 198 of file pdu.h.

◆ COAP_MEDIATYPE_APPLICATION_RDF_XML

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

Definition at line 199 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 197 of file pdu.h.

◆ COAP_MEDIATYPE_TEXT_PLAIN

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

Definition at line 195 of file pdu.h.

◆ COAP_OPTION_ACCEPT

#define COAP_OPTION_ACCEPT   17 /* C___E__, uint, 0-2 B, RFC7252 */

Definition at line 126 of file pdu.h.

◆ COAP_OPTION_BLOCK1

#define COAP_OPTION_BLOCK1   27 /* CU-_E_U, uint, 0-3 B, RFC7959 */

Definition at line 129 of file pdu.h.

◆ COAP_OPTION_BLOCK2

#define COAP_OPTION_BLOCK2   23 /* CU-_E_U, uint, 0-3 B, RFC7959 */

Definition at line 128 of file pdu.h.

◆ COAP_OPTION_CONTENT_FORMAT

#define COAP_OPTION_CONTENT_FORMAT   12 /* ____E__, uint, 0-2 B, RFC7252 */

Definition at line 120 of file pdu.h.

◆ COAP_OPTION_CONTENT_TYPE

#define COAP_OPTION_CONTENT_TYPE   COAP_OPTION_CONTENT_FORMAT

Definition at line 121 of file pdu.h.

◆ COAP_OPTION_DATA

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

Definition at line 268 of file pdu.h.

◆ COAP_OPTION_ECHO

#define COAP_OPTION_ECHO   252 /* _N__E_U, opaque, 0-40 B, RFC9175 */

Definition at line 134 of file pdu.h.

◆ COAP_OPTION_ETAG

#define COAP_OPTION_ETAG   4 /* ___RE__, opaque, 1-8 B, RFC7252 */

Definition at line 113 of file pdu.h.

◆ COAP_OPTION_HOP_LIMIT

#define COAP_OPTION_HOP_LIMIT   16 /* ______U, uint, 1 B, RFC8768 */

Definition at line 125 of file pdu.h.

◆ COAP_OPTION_IF_MATCH

#define COAP_OPTION_IF_MATCH   1 /* C__RE__, opaque, 0-8 B, RFC7252 */

Definition at line 111 of file pdu.h.

◆ COAP_OPTION_IF_NONE_MATCH

#define COAP_OPTION_IF_NONE_MATCH   5 /* C___E__, empty, 0 B, RFC7252 */

Definition at line 114 of file pdu.h.

◆ COAP_OPTION_KEY

#define COAP_OPTION_KEY (   option)    (option).key

Definition at line 266 of file pdu.h.

◆ COAP_OPTION_LENGTH

#define COAP_OPTION_LENGTH (   option)    (option).length

Definition at line 267 of file pdu.h.

◆ COAP_OPTION_LOCATION_PATH

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

Definition at line 117 of file pdu.h.

◆ COAP_OPTION_LOCATION_QUERY

#define COAP_OPTION_LOCATION_QUERY   20 /* ___RE__, String, 0-255 B, RFC7252 */

Definition at line 127 of file pdu.h.

◆ COAP_OPTION_MAXAGE

#define COAP_OPTION_MAXAGE   14 /* _U-_E_U, uint, 0-4 B, RFC7252 */

Definition at line 123 of file pdu.h.

◆ COAP_OPTION_NORESPONSE

#define COAP_OPTION_NORESPONSE   258 /* _U-_E_U, uint, 0-1 B, RFC7967 */

Definition at line 135 of file pdu.h.

◆ COAP_OPTION_OBSERVE

#define COAP_OPTION_OBSERVE   6 /* _U-_E_U, empty/uint,0/0-3 B, RFC7641 */

Definition at line 115 of file pdu.h.

◆ COAP_OPTION_OSCORE

#define COAP_OPTION_OSCORE   9 /* C_____U, *, 0-255 B, RFC8613 */

Definition at line 118 of file pdu.h.

◆ COAP_OPTION_PROXY_SCHEME

#define COAP_OPTION_PROXY_SCHEME   39 /* CU-___U, String, 1-255 B, RFC7252 */

Definition at line 132 of file pdu.h.

◆ COAP_OPTION_PROXY_URI

#define COAP_OPTION_PROXY_URI   35 /* CU-___U, String, 1-1034 B, RFC7252 */

Definition at line 131 of file pdu.h.

◆ COAP_OPTION_RTAG

#define COAP_OPTION_RTAG   292 /* ___RE_U, opaque, 0-8 B, RFC9175 */

Definition at line 136 of file pdu.h.

◆ COAP_OPTION_SIZE1

#define COAP_OPTION_SIZE1   60 /* __N_E_U, uint, 0-4 B, RFC7252 */

Definition at line 133 of file pdu.h.

◆ COAP_OPTION_SIZE2

#define COAP_OPTION_SIZE2   28 /* __N_E_U, uint, 0-4 B, RFC7959 */

Definition at line 130 of file pdu.h.

◆ COAP_OPTION_URI_HOST

#define COAP_OPTION_URI_HOST   3 /* CU-___U, String, 1-255 B, RFC7252 */

Definition at line 112 of file pdu.h.

◆ COAP_OPTION_URI_PATH

#define COAP_OPTION_URI_PATH   11 /* CU-RE__, String, 0-255 B, RFC7252 */

Definition at line 119 of file pdu.h.

◆ COAP_OPTION_URI_PORT

#define COAP_OPTION_URI_PORT   7 /* CU-___U, uint, 0-2 B, RFC7252 */

Definition at line 116 of file pdu.h.

◆ COAP_OPTION_URI_QUERY

#define COAP_OPTION_URI_QUERY   15 /* CU-RE__, String, 1-255 B, RFC7252 */

Definition at line 124 of file pdu.h.

◆ COAP_RESPONSE_CLASS

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

Definition at line 149 of file pdu.h.

◆ COAP_RESPONSE_CODE

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

Definition at line 146 of file pdu.h.

◆ COAP_SIGNALING_CODE

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

Definition at line 172 of file pdu.h.

◆ COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS

#define COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS   2

Definition at line 188 of file pdu.h.

◆ COAP_SIGNALING_OPTION_BAD_CSM_OPTION

#define COAP_SIGNALING_OPTION_BAD_CSM_OPTION   2

Definition at line 191 of file pdu.h.

◆ COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER

#define COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER   4

Definition at line 184 of file pdu.h.

◆ COAP_SIGNALING_OPTION_CUSTODY

#define COAP_SIGNALING_OPTION_CUSTODY   2

Definition at line 186 of file pdu.h.

◆ COAP_SIGNALING_OPTION_HOLD_OFF

#define COAP_SIGNALING_OPTION_HOLD_OFF   4

Definition at line 189 of file pdu.h.

◆ COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE

#define COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE   2

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 38 of file pdu.h.

Typedef Documentation

◆ coap_mid_t

typedef int coap_mid_t

coap_mid_t is used to store the CoAP Message ID of a CoAP PDU.

Valid message ids are 0 to 2^16. Negative values are error codes.

Definition at line 243 of file pdu.h.

◆ coap_pdu_code_t

Set of codes available for a PDU.

◆ coap_pdu_signaling_proto_t

◆ coap_pdu_type_t

CoAP PDU message type definitions.

◆ coap_proto_t

typedef enum coap_proto_t coap_proto_t

CoAP protocol types.

◆ coap_request_t

CoAP PDU Request methods.

Enumeration Type Documentation

◆ coap_pdu_code_t

Set of codes available for a PDU.

Enumerator
COAP_EMPTY_CODE 
COAP_REQUEST_CODE_GET 
COAP_REQUEST_CODE_POST 
COAP_REQUEST_CODE_PUT 
COAP_REQUEST_CODE_DELETE 
COAP_REQUEST_CODE_FETCH 
COAP_REQUEST_CODE_PATCH 
COAP_REQUEST_CODE_IPATCH 
COAP_RESPONSE_CODE_CREATED 
COAP_RESPONSE_CODE_DELETED 
COAP_RESPONSE_CODE_VALID 
COAP_RESPONSE_CODE_CHANGED 
COAP_RESPONSE_CODE_CONTENT 
COAP_RESPONSE_CODE_CONTINUE 
COAP_RESPONSE_CODE_BAD_REQUEST 
COAP_RESPONSE_CODE_UNAUTHORIZED 
COAP_RESPONSE_CODE_BAD_OPTION 
COAP_RESPONSE_CODE_FORBIDDEN 
COAP_RESPONSE_CODE_NOT_FOUND 
COAP_RESPONSE_CODE_NOT_ALLOWED 
COAP_RESPONSE_CODE_NOT_ACCEPTABLE 
COAP_RESPONSE_CODE_INCOMPLETE 
COAP_RESPONSE_CODE_CONFLICT 
COAP_RESPONSE_CODE_PRECONDITION_FAILED 
COAP_RESPONSE_CODE_REQUEST_TOO_LARGE 
COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT 
COAP_RESPONSE_CODE_UNPROCESSABLE 
COAP_RESPONSE_CODE_TOO_MANY_REQUESTS 
COAP_RESPONSE_CODE_INTERNAL_ERROR 
COAP_RESPONSE_CODE_NOT_IMPLEMENTED 
COAP_RESPONSE_CODE_BAD_GATEWAY 
COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE 
COAP_RESPONSE_CODE_GATEWAY_TIMEOUT 
COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED 
COAP_RESPONSE_CODE_HOP_LIMIT_REACHED 
COAP_SIGNALING_CODE_CSM 
COAP_SIGNALING_CODE_PING 
COAP_SIGNALING_CODE_PONG 
COAP_SIGNALING_CODE_RELEASE 
COAP_SIGNALING_CODE_ABORT 

Definition at line 303 of file pdu.h.

◆ coap_pdu_signaling_proto_t

Enumerator
COAP_SIGNALING_CSM 
COAP_SIGNALING_PING 
COAP_SIGNALING_PONG 
COAP_SIGNALING_RELEASE 
COAP_SIGNALING_ABORT 

Definition at line 174 of file pdu.h.

◆ coap_pdu_type_t

CoAP PDU message type definitions.

Enumerator
COAP_MESSAGE_CON 
COAP_MESSAGE_NON 
COAP_MESSAGE_ACK 
COAP_MESSAGE_RST 

Definition at line 60 of file pdu.h.

◆ coap_proto_t

CoAP protocol types.

Enumerator
COAP_PROTO_NONE 
COAP_PROTO_UDP 
COAP_PROTO_DTLS 
COAP_PROTO_TCP 
COAP_PROTO_TLS 

Definition at line 292 of file pdu.h.

◆ coap_request_t

CoAP PDU Request methods.

Enumerator
COAP_REQUEST_GET 
COAP_REQUEST_POST 
COAP_REQUEST_PUT 
COAP_REQUEST_DELETE 
COAP_REQUEST_FETCH 
COAP_REQUEST_PATCH 
COAP_REQUEST_IPATCH 

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

This function will fail if data has aready been added to the pdu.

Parameters
pduThe PDU where the data is to be added.
lenThe length of the data.
dataThe data to add.
Returns
1 if success, else 0 if failure.

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

This function will fail if data has aready been added to the pdu.

The actual data must be copied at the returned location.

Parameters
pduThe PDU where the data is to be added.
lenThe length of the data.
Returns
Where to copy the data of len to, or NULL is error.

Definition at line 694 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,
coap_option_num_t  number,
size_t  len,
const uint8_t *  data 
)

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

This function will fail if data has aready been added to the pdu.

Hence data must be added after optional coap_add_option() has been called.

Note: Where possible, the option data needs to be stripped of leading zeros (big endian) to reduce the amount of data needed in the PDU, as well as in some cases the maximum data size of an opton can be exceeded if not stripped and hence be illegal. This is done by using coap_encode_var_safe() or coap_encode_var_safe8().

Parameters
pduThe PDU where the option is to be added.
numberThe number of the new option.
lenThe length of the new option.
dataThe data of the new option.
Returns
The overall length of the option or 0 on failure.

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

This function will fail if a token has already been added to the pdu.

Hence options and data must be added after optional coap_add_token() has been called.

Parameters
pduThe PDU where the token is to be added.
lenThe length of the new token.
dataThe token to add.
Returns
A value greater than zero on success, or 0 on error.

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

Parameters
pduThe PDU for free off.

Definition at line 154 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,
const 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.

Parameters
pduThe specified PDU.
lenReturns the length of the current data
dataReturns the ptr to the current data
Returns
1 if len and data are correctly filled in, else 0 if there is no data.

Definition at line 713 of file pdu.c.

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

◆ coap_get_data_large()

int coap_get_data_large ( const coap_pdu_t pdu,
size_t *  len,
const uint8_t **  data,
size_t *  offset,
size_t *  total 
)

Retrieves the data from a PDU, with support for large bodies of data that spans multiple PDUs.

Note: The data pointed to on return is destroyed when the PDU is destroyed.

Parameters
pduThe specified PDU.
lenReturns the length of the current data
dataReturns the ptr to the current data
offsetReturns the offset of the current data from the start of the body comprising of many blocks (RFC7959)
totalReturns the total size of the body. If offset + length < total, then there is more data to follow.
Returns
1 if len, data, offset and total are correctly filled in, else 0 if there is no data.

Definition at line 721 of file pdu.c.

+ Here is the caller graph for this function:

◆ coap_new_pdu()

coap_pdu_t * coap_new_pdu ( coap_pdu_type_t  type,
coap_pdu_code_t  code,
coap_session_t session 
)

Creates a new CoAP PDU.

Parameters
typeThe type of the PDU (one of COAP_MESSAGE_CON, COAP_MESSAGE_NON, COAP_MESSAGE_ACK, COAP_MESSAGE_RST).
codeThe message code of the PDU.
sessionThe session that will be using this PDU
Returns
The skeletal PDU or NULL if failure.

Definition at line 144 of file pdu.c.

+ Here is the call graph for this function:

◆ coap_pdu_duplicate()

coap_pdu_t * coap_pdu_duplicate ( const coap_pdu_t old_pdu,
coap_session_t session,
size_t  token_length,
const uint8_t *  token,
coap_opt_filter_t drop_options 
)

Duplicate an existing PDU.

Specific options can be ignored and not copied across. The PDU data payload is not copied across.

Parameters
old_pduThe PDU to duplicate
sessionThe session that will be using this PDU.
token_lengthThe length of the token to use in this duplicated PDU.
tokenThe token to use in this duplicated PDU.
drop_optionsA list of options not to copy into the duplicated PDU. If NULL, then all options are copied across.
Returns
The duplicated PDU or NULL if failure.

Definition at line 167 of file pdu.c.

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

◆ coap_pdu_get_code()

coap_pdu_code_t coap_pdu_get_code ( const coap_pdu_t pdu)

Gets the PDU code associated with pdu.

Parameters
pduThe PDU object.
Returns
The PDU code.

Definition at line 1267 of file pdu.c.

◆ coap_pdu_get_mid()

coap_mid_t coap_pdu_get_mid ( const coap_pdu_t pdu)

Gets the message id associated with pdu.

Parameters
pduThe PDU object.
Returns
The message id.

Definition at line 1294 of file pdu.c.

◆ coap_pdu_get_token()

coap_bin_const_t coap_pdu_get_token ( const coap_pdu_t pdu)

Gets the token associated with pdu.

Parameters
pduThe PDU object.
Returns
The token information.

Definition at line 1286 of file pdu.c.

+ Here is the caller graph for this function:

◆ coap_pdu_get_type()

coap_pdu_type_t coap_pdu_get_type ( const coap_pdu_t pdu)

Gets the PDU type associated with pdu.

Parameters
pduThe PDU object.
Returns
The PDU type.

Definition at line 1277 of file pdu.c.

◆ coap_pdu_init()

coap_pdu_t * coap_pdu_init ( coap_pdu_type_t  type,
coap_pdu_code_t  code,
coap_mid_t  mid,
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
typeThe type of the PDU (one of COAP_MESSAGE_CON, COAP_MESSAGE_NON, COAP_MESSAGE_ACK, COAP_MESSAGE_RST).
codeThe message code of the PDU.
midThe message id to set or 0 if unknown / not applicable.
sizeThe maximum allowed number of byte for the message.
Returns
A pointer to the new PDU object or NULL on error.

Definition at line 99 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 hold the token, options and data. This function returns 0 on error or a number greater than zero on success.

Parameters
protoSession's protocol
dataThe raw data to parse as CoAP PDU.
lengthThe actual size of data.
pduThe PDU structure to fill. Note that the structure must provide space to hold the token, optional options and optional data.
Returns
1 on success or 0 on error.

Definition at line 1163 of file pdu.c.

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

◆ coap_pdu_set_code()

void coap_pdu_set_code ( coap_pdu_t pdu,
coap_pdu_code_t  code 
)

Sets the PDU code in the pdu.

Parameters
pduThe PDU object.
codeThe code to set in the PDU.

Definition at line 1272 of file pdu.c.

◆ coap_pdu_set_mid()

void coap_pdu_set_mid ( coap_pdu_t pdu,
coap_mid_t  mid 
)

Sets the message id in the pdu.

Parameters
pduThe PDU object.
midThe message id value to set in the PDU.

Definition at line 1298 of file pdu.c.

◆ coap_pdu_set_type()

void coap_pdu_set_type ( coap_pdu_t pdu,
coap_pdu_type_t  type 
)

Sets the PDU type in the pdu.

Parameters
pduThe PDU object.
typeThe type to set for the PDU.

Definition at line 1281 of file pdu.c.

◆ 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
codeThe 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 788 of file pdu.c.

+ Here is the caller graph for this function: