Loading...
Searching...
No Matches
coap_pdu.h
Go to the documentation of this file.
/*
* coap_pdu.h -- CoAP message structure
*
* Copyright (C) 2010-2014 Olaf Bergmann <bergmann@tzi.org>
* Copyright (C) 2021-2024 Jon Shallow <supjps-libcoap@jpshallow.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*
* This file is part of the CoAP library libcoap. Please see README for terms
* of use.
*/
#ifndef COAP_PDU_H_
#define COAP_PDU_H_
#include "coap_option.h"
#include "coap_uri.h"
#ifdef WITH_LWIP
#include <lwip/pbuf.h>
#endif
#include <stdint.h>
#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 */
#ifndef COAP_DEFAULT_MTU
#define COAP_DEFAULT_MTU 1152
#endif /* COAP_DEFAULT_MTU */
#define COAP_BERT_BASE 1152
#ifndef COAP_DEFAULT_HOP_LIMIT
#define COAP_DEFAULT_HOP_LIMIT 16
#endif /* COAP_DEFAULT_HOP_LIMIT */
#define COAP_DEFAULT_SCHEME "coap" /* the default scheme for CoAP URIs */
#define COAP_DEFAULT_URI_WELLKNOWN ".well-known/core"
/* Extended Token constants */
#define COAP_TOKEN_DEFAULT_MAX 8
#if (UINT_MAX > 65804UL)
#define COAP_TOKEN_EXT_MAX 65804UL /* 13 + 256 + 65535 */
#else /* UINT_MAX < 65804UL */
#define COAP_TOKEN_EXT_MAX 4096
#endif /* UINT_MAX < 65804UL */
/* CoAP message types */
typedef enum coap_pdu_type_t {
COAP_MESSAGE_CON, /* 0 confirmable message (requires ACK/RST) */
COAP_MESSAGE_NON, /* 1 non-confirmable message (one-shot message) */
COAP_MESSAGE_ACK, /* 2 used to acknowledge confirmable messages */
COAP_MESSAGE_RST /* 3 indicates error in received messages */
} coap_pdu_type_t;
typedef enum coap_request_t {
COAP_REQUEST_GET = 1,
COAP_REQUEST_POST, /* 2 */
COAP_REQUEST_PUT, /* 3 */
COAP_REQUEST_DELETE, /* 4 */
COAP_REQUEST_FETCH, /* 5 RFC 8132 */
COAP_REQUEST_PATCH, /* 6 RFC 8132 */
COAP_REQUEST_IPATCH, /* 7 RFC 8132 */
} coap_request_t;
/*
* CoAP option numbers (be sure to update coap_option_check_critical() and
* coap_add_option() when adding options
*/
/*
* The C, U, and N flags indicate the properties
* Critical, Unsafe, and NoCacheKey, respectively.
* If U is set, then N has no meaning as per
* https://rfc-editor.org/rfc/rfc7252#section-5.10
* and is set to a -.
*
* Separately, R is for the options that can be repeated
*
* The least significant byte of the option is set as followed
* as per https://rfc-editor.org/rfc/rfc7252#section-5.4.6
*
* 0 1 2 3 4 5 6 7
* --+---+---+---+---+---+---+---+
* | NoCacheKey| U | C |
* --+---+---+---+---+---+---+---+
*
* https://rfc-editor.org/rfc/rfc8613#section-4 goes on to define E, I and U
* properties Encrypted and Integrity Protected, Integrity Protected Only, and
* Unprotected respectively. Integrity Protected Only is not currently used.
*
* An Option is tagged with CUNREIU with any of the letters replaced with _ if
* not set, or - for N if U is set (see above) for aiding understanding of the
* Option.
*/
#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
/* COAP_OPTION_MAXAGE default 60 seconds if not set */
#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 */
#if (UINT_MAX > 65535)
#define COAP_MAX_OPT 65535
#else /* UINT_MAX <= 65535 */
#define COAP_MAX_OPT 65534
#endif /* UINT_MAX <= 65535 */
/* CoAP result codes (HTTP-Code / 100 * 40 + HTTP-Code % 100) */
/* As of draft-ietf-core-coap-04, response codes are encoded to base
* 32, i.e. the three upper bits determine the response class while
* the remaining five fine-grained information specific to that class.
*/
#define COAP_RESPONSE_CODE(N) (((N)/100 << 5) | (N)%100)
/* Determines the class of response code C */
#define COAP_RESPONSE_CLASS(C) (((C) >> 5) & 0xFF)
#ifndef SHORT_ERROR_RESPONSE
const char *coap_response_phrase(unsigned char code);
#define COAP_ERROR_PHRASE_LENGTH 32
#else
#define coap_response_phrase(x) ((char *)NULL)
#define COAP_ERROR_PHRASE_LENGTH 0
#endif /* SHORT_ERROR_RESPONSE */
#define COAP_SIGNALING_CODE(N) (((N)/100 << 5) | (N)%100)
typedef 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),
} coap_pdu_signaling_proto_t;
/* Applies to COAP_SIGNALING_CSM */
#define COAP_SIGNALING_OPTION_MAX_MESSAGE_SIZE 2
#define COAP_SIGNALING_OPTION_BLOCK_WISE_TRANSFER 4
#define COAP_SIGNALING_OPTION_EXTENDED_TOKEN_LENGTH 6
/* Applies to COAP_SIGNALING_PING / COAP_SIGNALING_PONG */
#define COAP_SIGNALING_OPTION_CUSTODY 2
/* Applies to COAP_SIGNALING_RELEASE */
#define COAP_SIGNALING_OPTION_ALTERNATIVE_ADDRESS 2
#define COAP_SIGNALING_OPTION_HOLD_OFF 4
/* Applies to COAP_SIGNALING_ABORT */
#define COAP_SIGNALING_OPTION_BAD_CSM_OPTION 2
/* CoAP media type encoding */
#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 */
/* Content formats from RFC 7390 */
#define COAP_MEDIATYPE_APPLICATION_COAP_GROUP_JSON 256 /* application/coap-group+json */
/* Content formats from RFC 8152 */
#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 */
/* Content formats from RFC 8428 */
#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 */
/* Content formats from RFC 8782 */
#define COAP_MEDIATYPE_APPLICATION_DOTS_CBOR 271 /* application/dots+cbor */
/* Content formats from RFC 9200 */
#define COAP_MEDIATYPE_APPLICATION_ACE_CBOR 19 /* application/ace+cbor */
/* Content formats from RFC9177 */
#define COAP_MEDIATYPE_APPLICATION_MB_CBOR_SEQ 272 /* application/missing-blocks+cbor-seq */
/* Content formats from RFC 8613 */
#define COAP_MEDIATYPE_APPLICATION_OSCORE 10001 /* application/oscore */
typedef int coap_mid_t;
#define COAP_INVALID_MID -1
#define COAP_INVALID_TID COAP_INVALID_MID
COAP_DEPRECATED typedef struct {
uint16_t key; /* the option key (no delta coding) */
unsigned int length;
} coap_option;
#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))
#ifdef WITH_LWIP
coap_pdu_t *coap_pdu_from_pbuf(struct pbuf *pbuf);
#endif
typedef 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_proto_t;
typedef 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
} coap_pdu_code_t;
coap_pdu_t *coap_pdu_init(coap_pdu_type_t type, coap_pdu_code_t code,
coap_mid_t mid, size_t size);
COAP_API coap_pdu_t *coap_new_pdu(coap_pdu_type_t type, coap_pdu_code_t code,
coap_session_t *session);
void coap_delete_pdu(coap_pdu_t *pdu);
COAP_API 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);
int coap_pdu_parse(coap_proto_t proto,
const uint8_t *data,
size_t length,
coap_pdu_t *pdu);
int coap_add_token(coap_pdu_t *pdu,
size_t len,
const uint8_t *data);
size_t coap_add_option(coap_pdu_t *pdu,
coap_option_num_t number,
size_t len,
const uint8_t *data);
int coap_add_data(coap_pdu_t *pdu,
size_t len,
const uint8_t *data);
uint8_t *coap_add_data_after(coap_pdu_t *pdu, size_t len);
int coap_get_data(const coap_pdu_t *pdu,
size_t *len,
const uint8_t **data);
int coap_get_data_large(const coap_pdu_t *pdu,
size_t *len,
const uint8_t **data,
size_t *offset,
size_t *total);
coap_pdu_code_t coap_pdu_get_code(const coap_pdu_t *pdu);
void coap_pdu_set_code(coap_pdu_t *pdu, coap_pdu_code_t code);
coap_pdu_type_t coap_pdu_get_type(const coap_pdu_t *pdu);
void coap_pdu_set_type(coap_pdu_t *pdu, coap_pdu_type_t type);
coap_bin_const_t coap_pdu_get_token(const coap_pdu_t *pdu);
coap_mid_t coap_pdu_get_mid(const coap_pdu_t *pdu);
void coap_pdu_set_mid(coap_pdu_t *pdu, coap_mid_t mid);
#endif /* COAP_PDU_H_ */
COAP_API
#define COAP_API
Definition coap_libcoap_build.h:41
coap_option.h
Helpers for handling options in CoAP PDUs.
coap_option_num_t
uint16_t coap_option_num_t
Definition coap_option.h:20
coap_uri.h
Helper functions for URI treatment.
coap_pdu_get_code
coap_pdu_code_t coap_pdu_get_code(const coap_pdu_t *pdu)
Gets the PDU code associated with pdu.
Definition coap_pdu.c:1565
coap_response_phrase
const char * coap_response_phrase(unsigned char code)
Returns a human-readable response phrase for the specified CoAP response code.
Definition coap_pdu.c:931
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.
Definition coap_pdu.c:837
coap_delete_pdu
void coap_delete_pdu(coap_pdu_t *pdu)
Dispose of an CoAP PDU and frees associated storage.
Definition coap_pdu.c:179
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.
Definition coap_pdu.c:1570
coap_mid_t
int coap_mid_t
coap_mid_t is used to store the CoAP Message ID of a CoAP PDU.
Definition coap_pdu.h:263
coap_pdu_duplicate
COAP_API 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.
Definition coap_pdu.c:192
coap_request_t
coap_request_t
CoAP PDU Request methods.
Definition coap_pdu.h:78
COAP_RESPONSE_CODE
#define COAP_RESPONSE_CODE(N)
Definition coap_pdu.h:160
COAP_SIGNALING_CODE
#define COAP_SIGNALING_CODE(N)
Definition coap_pdu.h:186
coap_proto_t
coap_proto_t
CoAP protocol types.
Definition coap_pdu.h:312
coap_pdu_code_t
coap_pdu_code_t
Set of codes available for a PDU.
Definition coap_pdu.h:326
coap_pdu_type_t
coap_pdu_type_t
CoAP PDU message type definitions.
Definition coap_pdu.h:68
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.
Definition coap_pdu.c:340
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.
Definition coap_pdu.c:1583
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.
Definition coap_pdu.c:750
coap_pdu_signaling_proto_t
coap_pdu_signaling_proto_t
Definition coap_pdu.h:188
coap_pdu_get_type
coap_pdu_type_t coap_pdu_get_type(const coap_pdu_t *pdu)
Gets the PDU type associated with pdu.
Definition coap_pdu.c:1578
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.
Definition coap_pdu.c:856
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.
Definition coap_pdu.c:1446
coap_pdu_set_mid
void coap_pdu_set_mid(coap_pdu_t *pdu, coap_mid_t mid)
Sets the message id in the pdu.
Definition coap_pdu.c:1599
coap_new_pdu
COAP_API 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.
Definition coap_pdu.c:155
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.
Definition coap_pdu.c:97
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.
Definition coap_pdu.c:864
coap_pdu_get_mid
coap_mid_t coap_pdu_get_mid(const coap_pdu_t *pdu)
Gets the message id associated with pdu.
Definition coap_pdu.c:1594
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.
Definition coap_pdu.c:825
coap_pdu_get_token
coap_bin_const_t coap_pdu_get_token(const coap_pdu_t *pdu)
Gets the token associated with pdu.
Definition coap_pdu.c:1589
COAP_REQUEST_PUT
@ COAP_REQUEST_PUT
Definition coap_pdu.h:81
COAP_REQUEST_DELETE
@ COAP_REQUEST_DELETE
Definition coap_pdu.h:82
COAP_REQUEST_GET
@ COAP_REQUEST_GET
Definition coap_pdu.h:79
COAP_REQUEST_FETCH
@ COAP_REQUEST_FETCH
Definition coap_pdu.h:83
COAP_REQUEST_PATCH
@ COAP_REQUEST_PATCH
Definition coap_pdu.h:84
COAP_REQUEST_IPATCH
@ COAP_REQUEST_IPATCH
Definition coap_pdu.h:85
COAP_REQUEST_POST
@ COAP_REQUEST_POST
Definition coap_pdu.h:80
COAP_PROTO_WS
@ COAP_PROTO_WS
Definition coap_pdu.h:318
COAP_PROTO_DTLS
@ COAP_PROTO_DTLS
Definition coap_pdu.h:315
COAP_PROTO_UDP
@ COAP_PROTO_UDP
Definition coap_pdu.h:314
COAP_PROTO_NONE
@ COAP_PROTO_NONE
Definition coap_pdu.h:313
COAP_PROTO_TLS
@ COAP_PROTO_TLS
Definition coap_pdu.h:317
COAP_PROTO_WSS
@ COAP_PROTO_WSS
Definition coap_pdu.h:319
COAP_PROTO_TCP
@ COAP_PROTO_TCP
Definition coap_pdu.h:316
COAP_PROTO_LAST
@ COAP_PROTO_LAST
Definition coap_pdu.h:320
COAP_RESPONSE_CODE_INTERNAL_ERROR
@ COAP_RESPONSE_CODE_INTERNAL_ERROR
Definition coap_pdu.h:357
COAP_RESPONSE_CODE_HOP_LIMIT_REACHED
@ COAP_RESPONSE_CODE_HOP_LIMIT_REACHED
Definition coap_pdu.h:363
COAP_SIGNALING_CODE_ABORT
@ COAP_SIGNALING_CODE_ABORT
Definition coap_pdu.h:369
COAP_RESPONSE_CODE_PRECONDITION_FAILED
@ COAP_RESPONSE_CODE_PRECONDITION_FAILED
Definition coap_pdu.h:352
COAP_RESPONSE_CODE_NOT_ALLOWED
@ COAP_RESPONSE_CODE_NOT_ALLOWED
Definition coap_pdu.h:348
COAP_RESPONSE_CODE_CHANGED
@ COAP_RESPONSE_CODE_CHANGED
Definition coap_pdu.h:340
COAP_REQUEST_CODE_PUT
@ COAP_REQUEST_CODE_PUT
Definition coap_pdu.h:331
COAP_REQUEST_CODE_POST
@ COAP_REQUEST_CODE_POST
Definition coap_pdu.h:330
COAP_RESPONSE_CODE_NOT_ACCEPTABLE
@ COAP_RESPONSE_CODE_NOT_ACCEPTABLE
Definition coap_pdu.h:349
COAP_SIGNALING_CODE_CSM
@ COAP_SIGNALING_CODE_CSM
Definition coap_pdu.h:365
COAP_REQUEST_CODE_PATCH
@ COAP_REQUEST_CODE_PATCH
Definition coap_pdu.h:334
COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED
@ COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED
Definition coap_pdu.h:362
COAP_RESPONSE_CODE_BAD_REQUEST
@ COAP_RESPONSE_CODE_BAD_REQUEST
Definition coap_pdu.h:343
COAP_SIGNALING_CODE_PING
@ COAP_SIGNALING_CODE_PING
Definition coap_pdu.h:366
COAP_RESPONSE_CODE_INCOMPLETE
@ COAP_RESPONSE_CODE_INCOMPLETE
Definition coap_pdu.h:350
COAP_REQUEST_CODE_DELETE
@ COAP_REQUEST_CODE_DELETE
Definition coap_pdu.h:332
COAP_SIGNALING_CODE_PONG
@ COAP_SIGNALING_CODE_PONG
Definition coap_pdu.h:367
COAP_RESPONSE_CODE_NOT_IMPLEMENTED
@ COAP_RESPONSE_CODE_NOT_IMPLEMENTED
Definition coap_pdu.h:358
COAP_RESPONSE_CODE_NOT_FOUND
@ COAP_RESPONSE_CODE_NOT_FOUND
Definition coap_pdu.h:347
COAP_RESPONSE_CODE_BAD_GATEWAY
@ COAP_RESPONSE_CODE_BAD_GATEWAY
Definition coap_pdu.h:359
COAP_RESPONSE_CODE_BAD_OPTION
@ COAP_RESPONSE_CODE_BAD_OPTION
Definition coap_pdu.h:345
COAP_RESPONSE_CODE_REQUEST_TOO_LARGE
@ COAP_RESPONSE_CODE_REQUEST_TOO_LARGE
Definition coap_pdu.h:353
COAP_RESPONSE_CODE_TOO_MANY_REQUESTS
@ COAP_RESPONSE_CODE_TOO_MANY_REQUESTS
Definition coap_pdu.h:356
COAP_RESPONSE_CODE_CONFLICT
@ COAP_RESPONSE_CODE_CONFLICT
Definition coap_pdu.h:351
COAP_RESPONSE_CODE_DELETED
@ COAP_RESPONSE_CODE_DELETED
Definition coap_pdu.h:338
COAP_RESPONSE_CODE_UNAUTHORIZED
@ COAP_RESPONSE_CODE_UNAUTHORIZED
Definition coap_pdu.h:344
COAP_RESPONSE_CODE_CREATED
@ COAP_RESPONSE_CODE_CREATED
Definition coap_pdu.h:337
COAP_EMPTY_CODE
@ COAP_EMPTY_CODE
Definition coap_pdu.h:327
COAP_RESPONSE_CODE_CONTENT
@ COAP_RESPONSE_CODE_CONTENT
Definition coap_pdu.h:341
COAP_RESPONSE_CODE_UNPROCESSABLE
@ COAP_RESPONSE_CODE_UNPROCESSABLE
Definition coap_pdu.h:355
COAP_RESPONSE_CODE_CONTINUE
@ COAP_RESPONSE_CODE_CONTINUE
Definition coap_pdu.h:342
COAP_RESPONSE_CODE_VALID
@ COAP_RESPONSE_CODE_VALID
Definition coap_pdu.h:339
COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT
@ COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT
Definition coap_pdu.h:354
COAP_REQUEST_CODE_GET
@ COAP_REQUEST_CODE_GET
Definition coap_pdu.h:329
COAP_SIGNALING_CODE_RELEASE
@ COAP_SIGNALING_CODE_RELEASE
Definition coap_pdu.h:368
COAP_REQUEST_CODE_FETCH
@ COAP_REQUEST_CODE_FETCH
Definition coap_pdu.h:333
COAP_RESPONSE_CODE_GATEWAY_TIMEOUT
@ COAP_RESPONSE_CODE_GATEWAY_TIMEOUT
Definition coap_pdu.h:361
COAP_REQUEST_CODE_IPATCH
@ COAP_REQUEST_CODE_IPATCH
Definition coap_pdu.h:335
COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE
@ COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE
Definition coap_pdu.h:360
COAP_RESPONSE_CODE_FORBIDDEN
@ COAP_RESPONSE_CODE_FORBIDDEN
Definition coap_pdu.h:346
COAP_MESSAGE_NON
@ COAP_MESSAGE_NON
Definition coap_pdu.h:70
COAP_MESSAGE_ACK
@ COAP_MESSAGE_ACK
Definition coap_pdu.h:71
COAP_MESSAGE_CON
@ COAP_MESSAGE_CON
Definition coap_pdu.h:69
COAP_MESSAGE_RST
@ COAP_MESSAGE_RST
Definition coap_pdu.h:72
COAP_SIGNALING_RELEASE
@ COAP_SIGNALING_RELEASE
Definition coap_pdu.h:192
COAP_SIGNALING_CSM
@ COAP_SIGNALING_CSM
Definition coap_pdu.h:189
COAP_SIGNALING_PONG
@ COAP_SIGNALING_PONG
Definition coap_pdu.h:191
COAP_SIGNALING_PING
@ COAP_SIGNALING_PING
Definition coap_pdu.h:190
COAP_SIGNALING_ABORT
@ COAP_SIGNALING_ABORT
Definition coap_pdu.h:193
COAP_DEPRECATED
#define COAP_DEPRECATED
Definition libcoap.h:62
coap_bin_const_t
CoAP binary data definition with const data.
Definition coap_str.h:64
coap_opt_filter_t
Definition coap_option.h:101
coap_option
Definition coap_pdu.h:281
coap_option::length
unsigned int length
Definition coap_pdu.h:283
coap_option::key
uint16_t key
Definition coap_pdu.h:282
coap_pdu_t
structure for CoAP PDUs
Definition coap_pdu_internal.h:135
coap_session_t
Abstraction of virtual session that can be attached to coap_context_t (client) or coap_endpoint_t (se...
Definition coap_session_internal.h:68