14#ifndef ZEPHYR_INCLUDE_NET_COAP_H_
15#define ZEPHYR_INCLUDE_NET_COAP_H_
87#define COAP_REQUEST_MASK 0x07
89#define COAP_VERSION_1 1U
91#define COAP_OBSERVE_MAX_AGE 0xFFFFFF
134#define COAP_MAKE_RESPONSE_CODE(class, det) ((class << 5) | (det))
202#define COAP_CODE_EMPTY (0)
204#define COAP_TOKEN_MAX_LEN 8UL
228#define GET_BLOCK_NUM(v) ((v) >> 4)
229#define GET_BLOCK_SIZE(v) (((v) & 0x7))
230#define GET_MORE(v) (!!((v) & 0x08))
302#if defined(CONFIG_COAP_KEEP_USER_DATA) || defined(DOXYGEN)
316#if defined(CONFIG_COAP_EXTENDED_OPTIONS_LEN)
667 size_t resources_len,
723 return (1 << (block_size + 4));
void coap_pending_clear(struct coap_pending *pending)
Cancels the pending retransmission, so it again becomes available.
size_t coap_next_block(const struct coap_packet *cpkt, struct coap_block_context *ctx)
Updates ctx so after this is called the current entry indicates the correct offset in the body of dat...
int coap_get_block2_option(const struct coap_packet *cpkt, uint8_t *block_number)
Get values from CoAP block2 option.
struct coap_transmission_parameters coap_get_transmission_parameters(void)
Get currently active CoAP transmission parameters.
coap_response_code
Set of response codes available for a response packet.
Definition: coap.h:141
int coap_get_option_int(const struct coap_packet *cpkt, uint16_t code)
Get the integer representation of a CoAP option.
int coap_packet_append_payload_marker(struct coap_packet *cpkt)
Append payload marker to CoAP packet.
struct coap_observer * coap_observer_next_unused(struct coap_observer *observers, size_t len)
Returns the next available observer representation.
int coap_packet_parse(struct coap_packet *cpkt, uint8_t *data, uint16_t len, struct coap_option *options, uint8_t opt_num)
Parses the CoAP packet in data, validating it and initializing cpkt.
static enum coap_block_size coap_bytes_to_block_size(uint16_t bytes)
Helper for converting block size in bytes to enumeration.
Definition: coap.h:734
const uint8_t * coap_packet_get_payload(const struct coap_packet *cpkt, uint16_t *len)
Returns the data pointer and length of the CoAP packet.
int coap_packet_append_option(struct coap_packet *cpkt, uint16_t code, const uint8_t *value, uint16_t len)
Appends an option to the packet.
bool coap_pending_cycle(struct coap_pending *pending)
After a request is sent, user may want to cycle the pending retransmission so the timeout is updated.
unsigned int coap_option_value_to_int(const struct coap_option *option)
Converts an option to its integer representation.
bool coap_packet_is_request(const struct coap_packet *cpkt)
Check if a CoAP packet is a CoAP request.
bool coap_remove_observer(struct coap_resource *resource, struct coap_observer *observer)
Remove this observer from the list of registered observers of that resource.
int coap_append_block2_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append BLOCK2 option to the packet.
void coap_reply_clear(struct coap_reply *reply)
Cancels awaiting for this reply, so it becomes available again.
int coap_update_from_block(const struct coap_packet *cpkt, struct coap_block_context *ctx)
Retrieves BLOCK{1,2} and SIZE{1,2} from cpkt and updates ctx accordingly.
coap_msgtype
CoAP packets may be of one of these types.
Definition: coap.h:98
bool coap_register_observer(struct coap_resource *resource, struct coap_observer *observer)
After the observer is initialized, associate the observer with an resource.
void coap_observer_init(struct coap_observer *observer, const struct coap_packet *request, const struct sockaddr *addr)
Indicates that the remote device referenced by addr, with request, wants to observe a resource.
struct coap_reply * coap_response_received(const struct coap_packet *response, const struct sockaddr *from, struct coap_reply *replies, size_t len)
After a response is received, call coap_reply_t handler registered in coap_reply structure.
int coap_append_size1_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append SIZE1 option to the packet.
struct coap_observer * coap_find_observer_by_addr(struct coap_observer *observers, size_t len, const struct sockaddr *addr)
Returns the observer that matches address addr.
bool coap_request_is_observe(const struct coap_packet *request)
Returns if this request is enabling observing a resource.
int(* coap_reply_t)(const struct coap_packet *response, struct coap_reply *reply, const struct sockaddr *from)
Helper function to be called when a response matches the a pending request.
Definition: coap.h:333
int coap_next_block_for_option(const struct coap_packet *cpkt, struct coap_block_context *ctx, enum coap_option_num option)
Updates ctx according to option set in cpkt so after this is called the current entry indicates the c...
int coap_append_block1_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append BLOCK1 option to the packet.
int coap_block_transfer_init(struct coap_block_context *ctx, enum coap_block_size block_size, size_t total_size)
Initializes the context of a block-wise transfer.
uint16_t coap_header_get_id(const struct coap_packet *cpkt)
Returns the message id associated with the CoAP packet.
struct coap_reply * coap_reply_next_unused(struct coap_reply *replies, size_t len)
Returns the next available reply struct, so it can be used to track replies and notifications receive...
uint8_t * coap_next_token(void)
Returns a randomly generated array of 8 bytes, that can be used as a message's token.
uint8_t coap_header_get_token(const struct coap_packet *cpkt, uint8_t *token)
Returns the token (if any) in the CoAP packet.
coap_method
Available request methods.
Definition: coap.h:75
int coap_append_option_int(struct coap_packet *cpkt, uint16_t code, unsigned int val)
Appends an integer value option to the packet.
void coap_pendings_clear(struct coap_pending *pendings, size_t len)
Cancels all pending retransmissions, so they become available again.
coap_block_size
Represents the size of each block that will be transferred using block-wise transfers [RFC7959]:
Definition: coap.h:702
int(* coap_method_t)(struct coap_resource *resource, struct coap_packet *request, struct sockaddr *addr, socklen_t addr_len)
Type of the callback being called when a resource's method is invoked by the remote entity.
Definition: coap.h:245
int coap_get_block1_option(const struct coap_packet *cpkt, bool *has_more, uint8_t *block_number)
Get the block size, more flag and block number from the CoAP block1 option.
coap_option_num
Set of CoAP packet options we are aware of.
Definition: coap.h:46
struct coap_pending * coap_pending_next_unused(struct coap_pending *pendings, size_t len)
Returns the next available pending struct, that can be used to track the retransmission status of a r...
int coap_handle_request_len(struct coap_packet *cpkt, struct coap_resource *resources, size_t resources_len, struct coap_option *options, uint8_t opt_num, struct sockaddr *addr, socklen_t addr_len)
When a request is received, call the appropriate methods of the matching resources.
int coap_pending_init(struct coap_pending *pending, const struct coap_packet *request, const struct sockaddr *addr, const struct coap_transmission_parameters *params)
Initialize a pending request with a request.
int coap_handle_request(struct coap_packet *cpkt, struct coap_resource *resources, struct coap_option *options, uint8_t opt_num, struct sockaddr *addr, socklen_t addr_len)
When a request is received, call the appropriate methods of the matching resources.
int coap_append_descriptive_block_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append BLOCK1 or BLOCK2 option to the packet.
bool coap_uri_path_match(const char *const *path, struct coap_option *options, uint8_t opt_num)
Verify if CoAP URI path matches with provided options.
int coap_packet_init(struct coap_packet *cpkt, uint8_t *data, uint16_t max_len, uint8_t ver, uint8_t type, uint8_t token_len, const uint8_t *token, uint8_t code, uint16_t id)
Creates a new CoAP Packet from input data.
int coap_remove_descriptive_block_option(struct coap_packet *cpkt)
Remove BLOCK1 or BLOCK2 option from the packet.
coap_content_format
Set of Content-Format option values for CoAP.
Definition: coap.h:213
struct coap_pending * coap_pending_received(const struct coap_packet *response, struct coap_pending *pendings, size_t len)
After a response is received, returns if there is any matching pending request exits.
struct coap_pending * coap_pending_next_to_expire(struct coap_pending *pendings, size_t len)
Returns the next pending about to expire, pending->timeout informs how many ms to next expiration.
void(* coap_notify_t)(struct coap_resource *resource, struct coap_observer *observer)
Type of the callback being called when a resource's has observers to be informed when an update happe...
Definition: coap.h:254
bool coap_has_descriptive_block_option(struct coap_packet *cpkt)
Check if a descriptive block option is set in the packet.
int coap_packet_set_path(struct coap_packet *cpkt, const char *path)
Parses provided coap path (with/without query) or query and appends that as options to the cpkt.
#define COAP_MAKE_RESPONSE_CODE(class, det)
Utility macro to create a CoAP response code.
Definition: coap.h:134
int coap_packet_remove_option(struct coap_packet *cpkt, uint16_t code)
Remove an option from the packet.
void coap_reply_init(struct coap_reply *reply, const struct coap_packet *request)
Indicates that a reply is expected for request.
int coap_resource_notify(struct coap_resource *resource)
Indicates that this resource was updated and that the notify callback should be called for every regi...
size_t coap_pendings_count(struct coap_pending *pendings, size_t len)
Count number of pending requests.
int coap_packet_append_payload(struct coap_packet *cpkt, const uint8_t *payload, uint16_t payload_len)
Append payload to CoAP packet.
void coap_replies_clear(struct coap_reply *replies, size_t len)
Cancels all replies, so they become available again.
uint16_t coap_next_id(void)
Helper to generate message ids.
struct coap_observer * coap_find_observer_by_token(struct coap_observer *observers, size_t len, const uint8_t *token, uint8_t token_len)
Returns the observer that has token token.
uint8_t coap_header_get_code(const struct coap_packet *cpkt)
Returns the code of the CoAP packet.
int coap_ack_init(struct coap_packet *cpkt, const struct coap_packet *req, uint8_t *data, uint16_t max_len, uint8_t code)
Create a new CoAP Acknowledgment message for given request.
uint8_t coap_header_get_type(const struct coap_packet *cpkt)
Returns the type of the CoAP packet.
int coap_find_options(const struct coap_packet *cpkt, uint16_t code, struct coap_option *options, uint16_t veclen)
Return the values associated with the option of value code.
void coap_set_transmission_parameters(const struct coap_transmission_parameters *params)
Set CoAP transmission parameters.
struct coap_observer * coap_find_observer(struct coap_observer *observers, size_t len, const struct sockaddr *addr, const uint8_t *token, uint8_t token_len)
Returns the observer that matches address addr and has token token.
int coap_append_size2_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append SIZE2 option to the packet.
bool coap_block_has_more(struct coap_packet *cpkt)
Check if BLOCK1 or BLOCK2 option has more flag set.
uint8_t coap_header_get_version(const struct coap_packet *cpkt)
Returns the version present in a CoAP packet.
int coap_header_set_code(const struct coap_packet *cpkt, uint8_t code)
Modifies the code of the CoAP packet.
static uint16_t coap_block_size_to_bytes(enum coap_block_size block_size)
Helper for converting the enumeration to the size expressed in bytes.
Definition: coap.h:720
@ COAP_RESPONSE_CODE_OK
2.00 - OK
Definition: coap.h:143
@ COAP_RESPONSE_CODE_INTERNAL_ERROR
5.00 - Internal Server Error
Definition: coap.h:186
@ COAP_RESPONSE_CODE_PRECONDITION_FAILED
4.12 - Precondition Failed
Definition: coap.h:175
@ COAP_RESPONSE_CODE_NOT_ALLOWED
4.05 - Method Not Allowed
Definition: coap.h:167
@ COAP_RESPONSE_CODE_CHANGED
2.04 - Changed
Definition: coap.h:151
@ COAP_RESPONSE_CODE_NOT_ACCEPTABLE
4.06 - Not Acceptable
Definition: coap.h:169
@ COAP_RESPONSE_CODE_UNPROCESSABLE_ENTITY
4.22 - Unprocessable Entity
Definition: coap.h:182
@ COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED
5.05 - Proxying Not Supported
Definition: coap.h:196
@ COAP_RESPONSE_CODE_BAD_REQUEST
4.00 - Bad Request
Definition: coap.h:157
@ COAP_RESPONSE_CODE_INCOMPLETE
4.08 - Request Entity Incomplete
Definition: coap.h:171
@ COAP_RESPONSE_CODE_NOT_IMPLEMENTED
5.01 - Not Implemented
Definition: coap.h:188
@ COAP_RESPONSE_CODE_NOT_FOUND
4.04 - Not Found
Definition: coap.h:165
@ COAP_RESPONSE_CODE_BAD_GATEWAY
5.02 - Bad Gateway
Definition: coap.h:190
@ COAP_RESPONSE_CODE_BAD_OPTION
4.02 - Bad Option
Definition: coap.h:161
@ COAP_RESPONSE_CODE_REQUEST_TOO_LARGE
4.13 - Request Entity Too Large
Definition: coap.h:177
@ COAP_RESPONSE_CODE_TOO_MANY_REQUESTS
4.29 - Too Many Requests
Definition: coap.h:184
@ COAP_RESPONSE_CODE_CONFLICT
4.12 - Precondition Failed
Definition: coap.h:173
@ COAP_RESPONSE_CODE_DELETED
2.02 - Deleted
Definition: coap.h:147
@ COAP_RESPONSE_CODE_UNAUTHORIZED
4.01 - Unauthorized
Definition: coap.h:159
@ COAP_RESPONSE_CODE_CREATED
2.01 - Created
Definition: coap.h:145
@ COAP_RESPONSE_CODE_CONTENT
2.05 - Content
Definition: coap.h:153
@ COAP_RESPONSE_CODE_CONTINUE
2.31 - Continue
Definition: coap.h:155
@ COAP_RESPONSE_CODE_VALID
2.03 - Valid
Definition: coap.h:149
@ COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT
4.15 - Unsupported Content-Format
Definition: coap.h:179
@ COAP_RESPONSE_CODE_GATEWAY_TIMEOUT
5.04 - Gateway Timeout
Definition: coap.h:194
@ COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE
5.03 - Service Unavailable
Definition: coap.h:192
@ COAP_RESPONSE_CODE_FORBIDDEN
4.03 - Forbidden
Definition: coap.h:163
@ COAP_TYPE_RESET
Reset.
Definition: coap.h:125
@ COAP_TYPE_NON_CON
Non-confirmable message.
Definition: coap.h:112
@ COAP_TYPE_CON
Confirmable message.
Definition: coap.h:105
@ COAP_TYPE_ACK
Acknowledge.
Definition: coap.h:118
@ COAP_METHOD_GET
GET.
Definition: coap.h:76
@ COAP_METHOD_IPATCH
IPATCH.
Definition: coap.h:82
@ COAP_METHOD_PUT
PUT.
Definition: coap.h:78
@ COAP_METHOD_POST
POST.
Definition: coap.h:77
@ COAP_METHOD_PATCH
PATCH.
Definition: coap.h:81
@ COAP_METHOD_DELETE
DELETE.
Definition: coap.h:79
@ COAP_METHOD_FETCH
FETCH.
Definition: coap.h:80
@ COAP_BLOCK_128
128-byte block size
Definition: coap.h:706
@ COAP_BLOCK_32
32-byte block size
Definition: coap.h:704
@ COAP_BLOCK_1024
1024-byte block size
Definition: coap.h:709
@ COAP_BLOCK_64
64-byte block size
Definition: coap.h:705
@ COAP_BLOCK_16
16-byte block size
Definition: coap.h:703
@ COAP_BLOCK_256
256-byte block size
Definition: coap.h:707
@ COAP_BLOCK_512
512-byte block size
Definition: coap.h:708
@ COAP_OPTION_OBSERVE
Observe (RFC 7641)
Definition: coap.h:51
@ COAP_OPTION_IF_NONE_MATCH
If-None-Match.
Definition: coap.h:50
@ COAP_OPTION_ETAG
ETag.
Definition: coap.h:49
@ COAP_OPTION_SIZE2
Size2 (RFC 7959)
Definition: coap.h:62
@ COAP_OPTION_REQUEST_TAG
Request-Tag (RFC 9175)
Definition: coap.h:67
@ COAP_OPTION_PROXY_SCHEME
Proxy-Scheme.
Definition: coap.h:64
@ COAP_OPTION_URI_PORT
Uri-Port.
Definition: coap.h:52
@ COAP_OPTION_URI_HOST
Uri-Host.
Definition: coap.h:48
@ COAP_OPTION_BLOCK2
Block2 (RFC 7959)
Definition: coap.h:60
@ COAP_OPTION_IF_MATCH
If-Match.
Definition: coap.h:47
@ COAP_OPTION_SIZE1
Size1.
Definition: coap.h:65
@ COAP_OPTION_ECHO
Echo (RFC 9175)
Definition: coap.h:66
@ COAP_OPTION_BLOCK1
Block1 (RFC 7959)
Definition: coap.h:61
@ COAP_OPTION_URI_PATH
Uri-Path.
Definition: coap.h:54
@ COAP_OPTION_MAX_AGE
Max-Age.
Definition: coap.h:56
@ COAP_OPTION_CONTENT_FORMAT
Content-Format.
Definition: coap.h:55
@ COAP_OPTION_LOCATION_QUERY
Location-Query.
Definition: coap.h:59
@ COAP_OPTION_URI_QUERY
Uri-Query.
Definition: coap.h:57
@ COAP_OPTION_PROXY_URI
Proxy-Uri.
Definition: coap.h:63
@ COAP_OPTION_LOCATION_PATH
Location-Path.
Definition: coap.h:53
@ COAP_OPTION_ACCEPT
Accept.
Definition: coap.h:58
@ COAP_CONTENT_FORMAT_APP_JSON_PATCH_JSON
application/json-patch+json
Definition: coap.h:220
@ COAP_CONTENT_FORMAT_APP_LINK_FORMAT
application/link-format
Definition: coap.h:215
@ COAP_CONTENT_FORMAT_APP_MERGE_PATCH_JSON
application/merge-patch+json
Definition: coap.h:221
@ COAP_CONTENT_FORMAT_APP_EXI
application/exi
Definition: coap.h:218
@ COAP_CONTENT_FORMAT_APP_CBOR
application/cbor
Definition: coap.h:222
@ COAP_CONTENT_FORMAT_APP_OCTET_STREAM
application/octet-stream
Definition: coap.h:217
@ COAP_CONTENT_FORMAT_APP_JSON
application/json
Definition: coap.h:219
@ COAP_CONTENT_FORMAT_APP_XML
application/xml
Definition: coap.h:216
@ COAP_CONTENT_FORMAT_TEXT_PLAIN
text/plain;charset=utf-8
Definition: coap.h:214
size_t socklen_t
Length of a socket address.
Definition: net_ip.h:168
struct _slist sys_slist_t
Single-linked list structure.
Definition: slist.h:49
struct _snode sys_snode_t
Single-linked list node structure.
Definition: slist.h:39
IPv6 and IPv4 definitions.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT64_TYPE__ int64_t
Definition: stdint.h:75
Represents the current state of a block-wise transaction.
Definition: coap.h:750
size_t total_size
Total size of the block-wise transaction.
Definition: coap.h:752
enum coap_block_size block_size
Block size.
Definition: coap.h:756
size_t current
Current size of the block-wise transaction.
Definition: coap.h:754
Represents a remote device that is observing a local resource.
Definition: coap.h:281
sys_snode_t list
Observer list node.
Definition: coap.h:283
uint8_t token[8]
Observer token.
Definition: coap.h:287
uint8_t tkl
Extended token length.
Definition: coap.h:289
struct sockaddr addr
Observer connection end point information.
Definition: coap.h:285
Representation of a CoAP option.
Definition: coap.h:314
uint8_t len
Option length.
Definition: coap.h:320
uint16_t delta
Option delta.
Definition: coap.h:315
uint8_t value[12]
Option value.
Definition: coap.h:321
Representation of a CoAP Packet.
Definition: coap.h:295
uint16_t offset
CoAP lib maintains offset while adding data.
Definition: coap.h:297
uint16_t max_len
Max CoAP packet data length.
Definition: coap.h:298
uint8_t * data
User allocated buffer.
Definition: coap.h:296
uint16_t delta
Used for delta calculation in CoAP packet.
Definition: coap.h:301
uint8_t hdr_len
CoAP header length.
Definition: coap.h:299
uint16_t opt_len
Total options length (delta + len + value)
Definition: coap.h:300
Represents a request awaiting for an acknowledgment (ACK).
Definition: coap.h:352
struct coap_transmission_parameters params
Transmission parameters.
Definition: coap.h:360
uint8_t * data
User allocated buffer.
Definition: coap.h:357
uint16_t len
Length of the CoAP packet.
Definition: coap.h:358
uint8_t retries
Number of times the request has been sent.
Definition: coap.h:359
uint16_t id
Message id.
Definition: coap.h:356
int64_t t0
Time when the request was sent.
Definition: coap.h:354
uint32_t timeout
Timeout in ms.
Definition: coap.h:355
struct sockaddr addr
Remote address.
Definition: coap.h:353
Represents the handler for the reply of a request, it is also used when observing resources.
Definition: coap.h:367
uint8_t tkl
Extended token length.
Definition: coap.h:379
uint8_t token[8]
Reply token.
Definition: coap.h:377
coap_reply_t reply
CoAP reply callback.
Definition: coap.h:369
uint16_t id
Reply id.
Definition: coap.h:375
void * user_data
User specific opaque data.
Definition: coap.h:371
int age
Reply age.
Definition: coap.h:373
Description of CoAP resource.
Definition: coap.h:263
coap_method_t post
Definition: coap.h:265
void * user_data
User specific opaque data.
Definition: coap.h:271
coap_method_t put
Definition: coap.h:265
coap_notify_t notify
Notify function to call.
Definition: coap.h:267
sys_slist_t observers
List of resource observers.
Definition: coap.h:273
coap_method_t fetch
Definition: coap.h:265
coap_method_t ipatch
Definition: coap.h:265
coap_method_t del
Definition: coap.h:265
coap_method_t patch
Definition: coap.h:265
const char *const * path
Resource path.
Definition: coap.h:269
int age
Resource age.
Definition: coap.h:275
coap_method_t get
Which function to be called for each CoAP method.
Definition: coap.h:265
CoAP transmission parameters.
Definition: coap.h:340
uint8_t max_retransmission
Maximum number of retransmissions.
Definition: coap.h:346
uint16_t coap_backoff_percent
Set CoAP retry backoff factor.
Definition: coap.h:344
uint32_t ack_timeout
Initial ACK timeout.
Definition: coap.h:342
Generic sockaddr struct.
Definition: net_ip.h:385