14#ifndef ZEPHYR_INCLUDE_NET_COAP_H_ 
   15#define ZEPHYR_INCLUDE_NET_COAP_H_ 
   81#define COAP_REQUEST_MASK 0x07 
   83#define COAP_VERSION_1 1U 
  118#define coap_make_response_code(class, det) ((class << 5) | (det)) 
  157#define COAP_CODE_EMPTY (0) 
  159#define COAP_TOKEN_MAX_LEN 8UL 
  179#define GET_BLOCK_NUM(v)        ((v) >> 4) 
  180#define GET_BLOCK_SIZE(v)       (((v) & 0x7)) 
  181#define GET_MORE(v)             (!!((v) & 0x08)) 
  242#if defined(CONFIG_COAP_KEEP_USER_DATA) 
  249#if defined(CONFIG_COAP_EXTENDED_OPTIONS_LEN) 
  557        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...
 
coap_response_code
Set of response codes available for a response packet.
Definition: coap.h:125
 
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. data must remain valid while cpk...
 
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.
 
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. User responsibility to free the memor...
 
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:88
 
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:263
 
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.
 
#define coap_make_response_code(class, det)
Definition: coap.h:118
 
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.
 
void coap_remove_observer(struct coap_resource *resource, struct coap_observer *observer)
Remove this observer from the list of registered observers of that resource.
 
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:71
 
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
Definition: coap.h:536
 
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:194
 
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:44
 
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(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.
 
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.
 
coap_content_format
Set of Content-Format option values for CoAP.
Definition: coap.h:166
 
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.
 
int coap_pending_init(struct coap_pending *pending, const struct coap_packet *request, const struct sockaddr *addr, uint8_t retries)
Initialize a pending request with a request.
 
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:203
 
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...
 
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.
 
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.
 
int coap_append_size2_option(struct coap_packet *cpkt, struct coap_block_context *ctx)
Append SIZE2 option to the packet.
 
uint8_t coap_header_get_version(const struct coap_packet *cpkt)
Returns the version present in a 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:554
 
@ COAP_RESPONSE_CODE_OK
Definition: coap.h:126
 
@ COAP_RESPONSE_CODE_INTERNAL_ERROR
Definition: coap.h:148
 
@ COAP_RESPONSE_CODE_PRECONDITION_FAILED
Definition: coap.h:142
 
@ COAP_RESPONSE_CODE_NOT_ALLOWED
Definition: coap.h:138
 
@ COAP_RESPONSE_CODE_CHANGED
Definition: coap.h:130
 
@ COAP_RESPONSE_CODE_NOT_ACCEPTABLE
Definition: coap.h:139
 
@ COAP_RESPONSE_CODE_UNPROCESSABLE_ENTITY
Definition: coap.h:146
 
@ COAP_RESPONSE_CODE_PROXYING_NOT_SUPPORTED
Definition: coap.h:153
 
@ COAP_RESPONSE_CODE_BAD_REQUEST
Definition: coap.h:133
 
@ COAP_RESPONSE_CODE_INCOMPLETE
Definition: coap.h:140
 
@ COAP_RESPONSE_CODE_NOT_IMPLEMENTED
Definition: coap.h:149
 
@ COAP_RESPONSE_CODE_NOT_FOUND
Definition: coap.h:137
 
@ COAP_RESPONSE_CODE_BAD_GATEWAY
Definition: coap.h:150
 
@ COAP_RESPONSE_CODE_BAD_OPTION
Definition: coap.h:135
 
@ COAP_RESPONSE_CODE_REQUEST_TOO_LARGE
Definition: coap.h:143
 
@ COAP_RESPONSE_CODE_TOO_MANY_REQUESTS
Definition: coap.h:147
 
@ COAP_RESPONSE_CODE_CONFLICT
Definition: coap.h:141
 
@ COAP_RESPONSE_CODE_DELETED
Definition: coap.h:128
 
@ COAP_RESPONSE_CODE_UNAUTHORIZED
Definition: coap.h:134
 
@ COAP_RESPONSE_CODE_CREATED
Definition: coap.h:127
 
@ COAP_RESPONSE_CODE_CONTENT
Definition: coap.h:131
 
@ COAP_RESPONSE_CODE_CONTINUE
Definition: coap.h:132
 
@ COAP_RESPONSE_CODE_VALID
Definition: coap.h:129
 
@ COAP_RESPONSE_CODE_UNSUPPORTED_CONTENT_FORMAT
Definition: coap.h:144
 
@ COAP_RESPONSE_CODE_GATEWAY_TIMEOUT
Definition: coap.h:152
 
@ COAP_RESPONSE_CODE_SERVICE_UNAVAILABLE
Definition: coap.h:151
 
@ COAP_RESPONSE_CODE_FORBIDDEN
Definition: coap.h:136
 
@ COAP_TYPE_RESET
Definition: coap.h:115
 
@ COAP_TYPE_NON_CON
Definition: coap.h:102
 
@ COAP_TYPE_CON
Definition: coap.h:95
 
@ COAP_TYPE_ACK
Definition: coap.h:108
 
@ COAP_METHOD_GET
Definition: coap.h:72
 
@ COAP_METHOD_IPATCH
Definition: coap.h:78
 
@ COAP_METHOD_PUT
Definition: coap.h:74
 
@ COAP_METHOD_POST
Definition: coap.h:73
 
@ COAP_METHOD_PATCH
Definition: coap.h:77
 
@ COAP_METHOD_DELETE
Definition: coap.h:75
 
@ COAP_METHOD_FETCH
Definition: coap.h:76
 
@ COAP_BLOCK_128
Definition: coap.h:540
 
@ COAP_BLOCK_32
Definition: coap.h:538
 
@ COAP_BLOCK_1024
Definition: coap.h:543
 
@ COAP_BLOCK_64
Definition: coap.h:539
 
@ COAP_BLOCK_16
Definition: coap.h:537
 
@ COAP_BLOCK_256
Definition: coap.h:541
 
@ COAP_BLOCK_512
Definition: coap.h:542
 
@ COAP_OPTION_OBSERVE
Definition: coap.h:49
 
@ COAP_OPTION_IF_NONE_MATCH
Definition: coap.h:48
 
@ COAP_OPTION_ETAG
Definition: coap.h:47
 
@ COAP_OPTION_SIZE2
Definition: coap.h:60
 
@ COAP_OPTION_PROXY_SCHEME
Definition: coap.h:62
 
@ COAP_OPTION_URI_PORT
Definition: coap.h:50
 
@ COAP_OPTION_URI_HOST
Definition: coap.h:46
 
@ COAP_OPTION_BLOCK2
Definition: coap.h:58
 
@ COAP_OPTION_IF_MATCH
Definition: coap.h:45
 
@ COAP_OPTION_SIZE1
Definition: coap.h:63
 
@ COAP_OPTION_BLOCK1
Definition: coap.h:59
 
@ COAP_OPTION_URI_PATH
Definition: coap.h:52
 
@ COAP_OPTION_MAX_AGE
Definition: coap.h:54
 
@ COAP_OPTION_CONTENT_FORMAT
Definition: coap.h:53
 
@ COAP_OPTION_LOCATION_QUERY
Definition: coap.h:57
 
@ COAP_OPTION_URI_QUERY
Definition: coap.h:55
 
@ COAP_OPTION_PROXY_URI
Definition: coap.h:61
 
@ COAP_OPTION_LOCATION_PATH
Definition: coap.h:51
 
@ COAP_OPTION_ACCEPT
Definition: coap.h:56
 
@ COAP_CONTENT_FORMAT_APP_JSON_PATCH_JSON
Definition: coap.h:173
 
@ COAP_CONTENT_FORMAT_APP_LINK_FORMAT
Definition: coap.h:168
 
@ COAP_CONTENT_FORMAT_APP_MERGE_PATCH_JSON
Definition: coap.h:174
 
@ COAP_CONTENT_FORMAT_APP_EXI
Definition: coap.h:171
 
@ COAP_CONTENT_FORMAT_APP_CBOR
Definition: coap.h:175
 
@ COAP_CONTENT_FORMAT_APP_OCTET_STREAM
Definition: coap.h:170
 
@ COAP_CONTENT_FORMAT_APP_JSON
Definition: coap.h:172
 
@ COAP_CONTENT_FORMAT_APP_XML
Definition: coap.h:169
 
@ COAP_CONTENT_FORMAT_TEXT_PLAIN
Definition: coap.h:167
 
size_t socklen_t
Definition: net_ip.h:168
 
IPv6 and IPv4 definitions.
 
Single-linked list implementation.
 
struct _slist sys_slist_t
Definition: slist.h:40
 
struct _snode sys_snode_t
Definition: slist.h:33
 
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
 
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
 
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
 
Represents the current state of a block-wise transaction.
Definition: coap.h:563
 
size_t total_size
Definition: coap.h:564
 
enum coap_block_size block_size
Definition: coap.h:566
 
size_t current
Definition: coap.h:565
 
Represents a remote device that is observing a local resource.
Definition: coap.h:225
 
sys_snode_t list
Definition: coap.h:226
 
uint8_t token[8]
Definition: coap.h:228
 
uint8_t tkl
Definition: coap.h:229
 
struct sockaddr addr
Definition: coap.h:227
 
uint8_t len
Definition: coap.h:253
 
uint16_t delta
Definition: coap.h:248
 
uint8_t value[12]
Definition: coap.h:254
 
Representation of a CoAP Packet.
Definition: coap.h:235
 
uint16_t offset
Definition: coap.h:237
 
uint16_t max_len
Definition: coap.h:238
 
uint8_t * data
Definition: coap.h:236
 
uint16_t delta
Definition: coap.h:241
 
uint8_t hdr_len
Definition: coap.h:239
 
uint16_t opt_len
Definition: coap.h:240
 
Represents a request awaiting for an acknowledgment (ACK).
Definition: coap.h:270
 
uint8_t * data
Definition: coap.h:275
 
uint16_t len
Definition: coap.h:276
 
uint32_t t0
Definition: coap.h:272
 
uint8_t retries
Definition: coap.h:277
 
uint16_t id
Definition: coap.h:274
 
uint32_t timeout
Definition: coap.h:273
 
struct sockaddr addr
Definition: coap.h:271
 
Represents the handler for the reply of a request, it is also used when observing resources.
Definition: coap.h:284
 
uint8_t tkl
Definition: coap.h:290
 
uint8_t token[8]
Definition: coap.h:289
 
coap_reply_t reply
Definition: coap.h:285
 
uint16_t id
Definition: coap.h:288
 
void * user_data
Definition: coap.h:286
 
int age
Definition: coap.h:287
 
Description of CoAP resource.
Definition: coap.h:212
 
coap_method_t post
Definition: coap.h:214
 
void * user_data
Definition: coap.h:217
 
coap_method_t put
Definition: coap.h:214
 
coap_notify_t notify
Definition: coap.h:215
 
sys_slist_t observers
Definition: coap.h:218
 
coap_method_t fetch
Definition: coap.h:214
 
coap_method_t ipatch
Definition: coap.h:214
 
coap_method_t del
Definition: coap.h:214
 
coap_method_t patch
Definition: coap.h:214
 
const char *const  * path
Definition: coap.h:216
 
int age
Definition: coap.h:219
 
coap_method_t get
Definition: coap.h:214
 
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
 
static const intptr_t user_data[5]
Definition: main.c:588