14#ifndef ZEPHYR_INCLUDE_NET_COAP_H_
15#define ZEPHYR_INCLUDE_NET_COAP_H_
88#define COAP_REQUEST_MASK 0x07
90#define COAP_VERSION_1 1U
92#define COAP_OBSERVE_MAX_AGE 0xFFFFFF
135#define COAP_MAKE_RESPONSE_CODE(class, det) ((class << 5) | (det))
203#define COAP_CODE_EMPTY (0)
205#define COAP_TOKEN_MAX_LEN 8UL
245#define GET_BLOCK_NUM(v) ((v) >> 4)
246#define GET_BLOCK_SIZE(v) (((v) & 0x7))
247#define GET_MORE(v) (!!((v) & 0x08))
319#if defined(CONFIG_COAP_KEEP_USER_DATA) || defined(DOXYGEN)
333#if defined(CONFIG_COAP_EXTENDED_OPTIONS_LEN)
360#if defined(CONFIG_COAP_RANDOMIZE_ACK_TIMEOUT) || defined(__DOXYGEN__)
706 size_t resources_len,
762 return (1 << (block_size + 4));
void coap_pending_clear(struct coap_pending *pending)
Cancels the pending retransmission, so it again becomes available.
int coap_get_block1_option(const struct coap_packet *cpkt, bool *has_more, uint32_t *block_number)
Get the block size, more flag and block number from the CoAP block1 option.
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, bool *has_more, uint32_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:142
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:773
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.
coap_no_response
Set of No-Response option values for CoAP.
Definition coap.h:232
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:99
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:350
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:76
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:741
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:262
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:214
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.
int coap_rst_init(struct coap_packet *cpkt, const struct coap_packet *req, uint8_t *data, uint16_t max_len)
Create a new CoAP Reset message for given request.
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:271
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:135
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:759
@ COAP_RESPONSE_CODE_OK
2.00 - OK
Definition coap.h:144
@ COAP_RESPONSE_CODE_INTERNAL_ERROR
5.00 - Internal Server Error
Definition coap.h:187
@ COAP_RESPONSE_CODE_PRECONDITION_FAILED
4.12 - Precondition Failed
Definition coap.h:176
@ COAP_RESPONSE_CODE_NOT_ALLOWED
4.05 - Method Not Allowed
Definition coap.h:168
@ COAP_RESPONSE_CODE_CHANGED
2.04 - Changed
Definition coap.h:152
@ COAP_RESPONSE_CODE_NOT_ACCEPTABLE
4.06 - Not Acceptable
Definition coap.h:170
@ COAP_RESPONSE_CODE_UNPROCESSABLE_ENTITY
4.22 - Unprocessable Entity
Definition coap.h:183
@ COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED
5.05 - Proxying Not Supported
Definition coap.h:197
@ COAP_RESPONSE_CODE_BAD_REQUEST
4.00 - Bad Request
Definition coap.h:158
@ COAP_RESPONSE_CODE_INCOMPLETE
4.08 - Request Entity Incomplete
Definition coap.h:172
@ COAP_RESPONSE_CODE_NOT_IMPLEMENTED
5.01 - Not Implemented
Definition coap.h:189
@ COAP_RESPONSE_CODE_NOT_FOUND
4.04 - Not Found
Definition coap.h:166
@ COAP_RESPONSE_CODE_BAD_GATEWAY
5.02 - Bad Gateway
Definition coap.h:191
@ COAP_RESPONSE_CODE_BAD_OPTION
4.02 - Bad Option
Definition coap.h:162
@ COAP_RESPONSE_CODE_REQUEST_TOO_LARGE
4.13 - Request Entity Too Large
Definition coap.h:178
@ COAP_RESPONSE_CODE_TOO_MANY_REQUESTS
4.29 - Too Many Requests
Definition coap.h:185
@ COAP_RESPONSE_CODE_CONFLICT
4.12 - Precondition Failed
Definition coap.h:174
@ COAP_RESPONSE_CODE_DELETED
2.02 - Deleted
Definition coap.h:148
@ COAP_RESPONSE_CODE_UNAUTHORIZED
4.01 - Unauthorized
Definition coap.h:160
@ COAP_RESPONSE_CODE_CREATED
2.01 - Created
Definition coap.h:146
@ COAP_RESPONSE_CODE_CONTENT
2.05 - Content
Definition coap.h:154
@ COAP_RESPONSE_CODE_CONTINUE
2.31 - Continue
Definition coap.h:156
@ COAP_RESPONSE_CODE_VALID
2.03 - Valid
Definition coap.h:150
@ COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT
4.15 - Unsupported Content-Format
Definition coap.h:180
@ COAP_RESPONSE_CODE_GATEWAY_TIMEOUT
5.04 - Gateway Timeout
Definition coap.h:195
@ COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE
5.03 - Service Unavailable
Definition coap.h:193
@ COAP_RESPONSE_CODE_FORBIDDEN
4.03 - Forbidden
Definition coap.h:164
@ COAP_NO_RESPONSE_SUPPRESS_5_XX
Definition coap.h:235
@ COAP_NO_RESPONSE_SUPPRESS_ALL
Definition coap.h:237
@ COAP_NO_RESPONSE_SUPPRESS_4_XX
Definition coap.h:234
@ COAP_NO_RESPONSE_SUPPRESS_2_XX
Definition coap.h:233
@ COAP_TYPE_RESET
Reset.
Definition coap.h:126
@ COAP_TYPE_NON_CON
Non-confirmable message.
Definition coap.h:113
@ COAP_TYPE_CON
Confirmable message.
Definition coap.h:106
@ COAP_TYPE_ACK
Acknowledge.
Definition coap.h:119
@ COAP_METHOD_GET
GET.
Definition coap.h:77
@ COAP_METHOD_IPATCH
IPATCH.
Definition coap.h:83
@ COAP_METHOD_PUT
PUT.
Definition coap.h:79
@ COAP_METHOD_POST
POST.
Definition coap.h:78
@ COAP_METHOD_PATCH
PATCH.
Definition coap.h:82
@ COAP_METHOD_DELETE
DELETE.
Definition coap.h:80
@ COAP_METHOD_FETCH
FETCH.
Definition coap.h:81
@ COAP_BLOCK_128
128-byte block size
Definition coap.h:745
@ COAP_BLOCK_32
32-byte block size
Definition coap.h:743
@ COAP_BLOCK_1024
1024-byte block size
Definition coap.h:748
@ COAP_BLOCK_64
64-byte block size
Definition coap.h:744
@ COAP_BLOCK_16
16-byte block size
Definition coap.h:742
@ COAP_BLOCK_256
256-byte block size
Definition coap.h:746
@ COAP_BLOCK_512
512-byte block size
Definition coap.h:747
@ 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:68
@ 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_NO_RESPONSE
No-Response (RFC 7967)
Definition coap.h:67
@ 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:221
@ COAP_CONTENT_FORMAT_APP_LINK_FORMAT
application/link-format
Definition coap.h:216
@ COAP_CONTENT_FORMAT_APP_MERGE_PATCH_JSON
application/merge-patch+json
Definition coap.h:222
@ COAP_CONTENT_FORMAT_APP_EXI
application/exi
Definition coap.h:219
@ COAP_CONTENT_FORMAT_APP_CBOR
application/cbor
Definition coap.h:223
@ COAP_CONTENT_FORMAT_APP_OCTET_STREAM
application/octet-stream
Definition coap.h:218
@ COAP_CONTENT_FORMAT_APP_JSON
application/json
Definition coap.h:220
@ COAP_CONTENT_FORMAT_APP_XML
application/xml
Definition coap.h:217
@ COAP_CONTENT_FORMAT_TEXT_PLAIN
text/plain;charset=utf-8
Definition coap.h:215
size_t socklen_t
Length of a socket address.
Definition net_ip.h:171
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:789
size_t total_size
Total size of the block-wise transaction.
Definition coap.h:791
enum coap_block_size block_size
Block size.
Definition coap.h:795
size_t current
Current size of the block-wise transaction.
Definition coap.h:793
Represents a remote device that is observing a local resource.
Definition coap.h:298
sys_snode_t list
Observer list node.
Definition coap.h:300
uint8_t token[8]
Observer token.
Definition coap.h:304
uint8_t tkl
Extended token length.
Definition coap.h:306
struct sockaddr addr
Observer connection end point information.
Definition coap.h:302
Representation of a CoAP option.
Definition coap.h:331
uint8_t len
Option length.
Definition coap.h:337
uint16_t delta
Option delta.
Definition coap.h:332
uint8_t value[12]
Option value.
Definition coap.h:338
Representation of a CoAP Packet.
Definition coap.h:312
uint16_t offset
CoAP lib maintains offset while adding data.
Definition coap.h:314
uint16_t max_len
Max CoAP packet data length.
Definition coap.h:315
uint8_t * data
User allocated buffer.
Definition coap.h:313
uint16_t delta
Used for delta calculation in CoAP packet.
Definition coap.h:318
uint8_t hdr_len
CoAP header length.
Definition coap.h:316
uint16_t opt_len
Total options length (delta + len + value)
Definition coap.h:317
Represents a request awaiting for an acknowledgment (ACK).
Definition coap.h:376
struct coap_transmission_parameters params
Transmission parameters.
Definition coap.h:384
uint8_t * data
User allocated buffer.
Definition coap.h:381
uint16_t len
Length of the CoAP packet.
Definition coap.h:382
uint8_t retries
Number of times the request has been sent.
Definition coap.h:383
uint16_t id
Message id.
Definition coap.h:380
int64_t t0
Time when the request was sent.
Definition coap.h:378
uint32_t timeout
Timeout in ms.
Definition coap.h:379
struct sockaddr addr
Remote address.
Definition coap.h:377
Represents the handler for the reply of a request, it is also used when observing resources.
Definition coap.h:391
uint8_t tkl
Extended token length.
Definition coap.h:403
uint8_t token[8]
Reply token.
Definition coap.h:401
coap_reply_t reply
CoAP reply callback.
Definition coap.h:393
uint16_t id
Reply id.
Definition coap.h:399
void * user_data
User specific opaque data.
Definition coap.h:395
int age
Reply age.
Definition coap.h:397
Description of CoAP resource.
Definition coap.h:280
coap_method_t post
Definition coap.h:282
void * user_data
User specific opaque data.
Definition coap.h:288
coap_method_t put
Definition coap.h:282
coap_notify_t notify
Notify function to call.
Definition coap.h:284
sys_slist_t observers
List of resource observers.
Definition coap.h:290
coap_method_t fetch
Definition coap.h:282
coap_method_t ipatch
Definition coap.h:282
coap_method_t del
Definition coap.h:282
coap_method_t patch
Definition coap.h:282
const char *const * path
Resource path.
Definition coap.h:286
int age
Resource age.
Definition coap.h:292
coap_method_t get
Which function to be called for each CoAP method.
Definition coap.h:282
CoAP transmission parameters.
Definition coap.h:357
uint16_t ack_random_percent
Set CoAP ack random factor.
Definition coap.h:365
uint8_t max_retransmission
Maximum number of retransmissions.
Definition coap.h:370
uint16_t coap_backoff_percent
Set CoAP retry backoff factor.
Definition coap.h:368
uint32_t ack_timeout
Initial ACK timeout.
Definition coap.h:359
Generic sockaddr struct.
Definition net_ip.h:388