libcoap 4.3.5-develop-19cef11
coap_pdu.h File Reference

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

#include "coap_option.h"
#include "coap_uri.h"
#include <stdint.h>
+ Include dependency graph for coap_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
 

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_TOKEN_DEFAULT_MAX   8
 
#define COAP_TOKEN_EXT_MAX   4096
 
#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_Q_BLOCK1   19 /* CU__E_U, uint, 0-3 B, RFC9177 */
 
#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_Q_BLOCK2   31 /* CU_RE_U, uint, 0-3 B, RFC9177 */
 
#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   65534
 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_EXTENDED_TOKEN_LENGTH   6
 
#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_APPLICATION_MB_CBOR_SEQ   272 /* application/missing-blocks+cbor-seq */
 
#define COAP_MEDIATYPE_APPLICATION_OSCORE   10001 /* application/oscore */
 
#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_PROTO_WS , COAP_PROTO_WSS , COAP_PROTO_LAST
}
 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_API 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_API 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

Pre-defined constants that reflect defaults for CoAP.

Definition in file coap_pdu.h.