libcoap 4.3.1rc1
coap_block_internal.h
Go to the documentation of this file.
1/*
2 * coap_block_internal.h -- Structures, Enums & Functions that are not
3 * exposed to application programming
4 *
5 * Copyright (C) 2010-2022 Olaf Bergmann <bergmann@tzi.org>
6 * Copyright (C) 2021-2022 Jon Shallow <supjps-libcoap@jpshallow.com>
7 *
8 * SPDX-License-Identifier: BSD-2-Clause
9 *
10 * This file is part of the CoAP library libcoap. Please see README for terms
11 * of use.
12 */
13
19#ifndef COAP_BLOCK_INTERNAL_H_
20#define COAP_BLOCK_INTERNAL_H_
21
22#include "coap_internal.h"
23#include "coap_pdu_internal.h"
24#include "resource.h"
25
33typedef enum {
37
39 uint32_t begin;
40 uint32_t end;
41};
42
43#define COAP_RBLOCK_CNT 4
47typedef struct coap_rblock_t {
48 uint32_t used;
49 uint32_t retry;
53
58typedef struct coap_l_block1_t {
60 uint64_t state_token;
61 size_t bert_size;
62 uint32_t count;
64
69typedef struct coap_l_block2_t {
72 uint64_t etag;
76
82 uint8_t blk_size;
83 uint16_t option;
85 const uint8_t *data;
86 size_t length;
87 size_t offset;
88 union {
91 } b;
97 void *app_ptr;
98};
99
100#if COAP_CLIENT_SUPPORT
106 uint8_t observe[3];
108 uint8_t observe_set;
109 uint8_t szx;
110 uint8_t etag_set;
111 uint8_t etag_length;
112 uint8_t etag[8];
113 uint16_t content_format;
114 uint8_t last_type;
115 uint8_t initial;
116 uint16_t block_option;
117 uint16_t retry_counter;
118 size_t total_len;
121 uint64_t state_token;
125};
126#endif /* COAP_CLIENT_SUPPORT */
127
128#if COAP_SERVER_SUPPORT
134 uint8_t observe[3];
136 uint8_t observe_set;
137 uint8_t rtag_set;
138 uint8_t rtag_length;
139 uint8_t rtag[8];
140 uint16_t content_format;
141 uint8_t last_type;
142 uint8_t szx;
143 size_t total_len;
149 uint8_t last_token[8];
153 uint16_t block_option;
154};
155#endif /* COAP_SERVER_SUPPORT */
156
157#if COAP_CLIENT_SUPPORT
159 coap_pdu_t *pdu);
160
162 coap_lg_crcv_t *lg_crcv);
163
165 coap_tick_t now);
166#endif /* COAP_CLIENT_SUPPORT */
167
168#if COAP_SERVER_SUPPORT
170 coap_lg_srcv_t *lg_srcv);
171
173 coap_tick_t now);
174
176 coap_pdu_t *pdu,
177 coap_pdu_t *response,
179 coap_string_t *query);
180
182 coap_session_t *session,
183 coap_pdu_t *pdu,
184 coap_pdu_t *response,
188 coap_string_t *query,
190 int *added_block);
191#endif /* COAP_SERVER_SUPPORT */
192
193#if COAP_CLIENT_SUPPORT
195 coap_pdu_t *rcvd);
196
198 coap_session_t *session,
199 coap_pdu_t *sent,
200 coap_pdu_t *rcvd,
201 coap_recurse_t recursive);
202#endif /* COAP_CLIENT_SUPPORT */
203
205 coap_lg_xmit_t *lg_xmit);
206
208 coap_tick_t now);
209
220void coap_check_code_lg_xmit(coap_session_t *session, coap_pdu_t *response,
222 coap_pdu_code_t request_method);
223
226#endif /* COAP_BLOCK_INTERNAL_H_ */
Pulls together all the internal only header files.
uint8_t coap_opt_t
Use byte-oriented access methods here because sliding a complex struct coap_opt_t over the data buffe...
Definition: coap_option.h:26
CoAP PDU internal information.
struct coap_rblock_t coap_rblock_t
Structure to keep track of received blocks.
coap_tick_t coap_block_check_lg_srcv_timeouts(coap_session_t *session, coap_tick_t now)
void coap_block_delete_lg_srcv(coap_session_t *session, coap_lg_srcv_t *lg_srcv)
coap_tick_t coap_block_check_lg_xmit_timeouts(coap_session_t *session, coap_tick_t now)
Definition: block.c:866
#define COAP_RBLOCK_CNT
void coap_block_delete_lg_crcv(coap_session_t *session, coap_lg_crcv_t *lg_crcv)
struct coap_l_block1_t coap_l_block1_t
Structure to keep track of block1 specific information (Requests)
int coap_handle_response_get_block(coap_context_t *context, coap_session_t *session, coap_pdu_t *sent, coap_pdu_t *rcvd, coap_recurse_t recursive)
coap_lg_crcv_t * coap_block_new_lg_crcv(coap_session_t *session, coap_pdu_t *pdu)
int coap_handle_response_send_block(coap_session_t *session, coap_pdu_t *sent, coap_pdu_t *rcvd)
struct coap_l_block2_t coap_l_block2_t
Structure to keep track of block2 specific information (Responses)
coap_recurse_t
void coap_block_delete_lg_xmit(coap_session_t *session, coap_lg_xmit_t *lg_xmit)
Definition: block.c:1053
void coap_check_code_lg_xmit(coap_session_t *session, coap_pdu_t *response, coap_resource_t *resource, coap_string_t *query, coap_pdu_code_t request_method)
The function checks that the code in a newly formed lg_xmit created by coap_add_data_large_response()...
Definition: block.c:2344
coap_tick_t coap_block_check_lg_crcv_timeouts(coap_session_t *session, coap_tick_t now)
int coap_handle_request_send_block(coap_session_t *session, coap_pdu_t *pdu, coap_pdu_t *response, coap_resource_t *resource, coap_string_t *query)
int coap_handle_request_put_block(coap_context_t *context, coap_session_t *session, coap_pdu_t *pdu, coap_pdu_t *response, coap_resource_t *resource, coap_string_t *uri_path, coap_opt_t *observe, coap_string_t *query, coap_method_handler_t h, int *added_block)
@ COAP_RECURSE_OK
@ COAP_RECURSE_NO
void(* coap_release_large_data_t)(coap_session_t *session, void *app_ptr)
Callback handler for de-allocating the data based on app_ptr provided to coap_add_data_large_*() func...
Definition: block.h:276
time_t coap_time_t
CoAP time in seconds since epoch.
Definition: coap_time.h:132
uint64_t coap_tick_t
This data type represents internal timer ticks with COAP_TICKS_PER_SECOND resolution.
Definition: coap_time.h:127
void(* coap_method_handler_t)(coap_resource_t *, coap_session_t *, const coap_pdu_t *, const coap_string_t *, coap_pdu_t *)
Definition of message handler function.
Definition: resource.h:43
int coap_mid_t
coap_mid_t is used to store the CoAP Message ID of a CoAP PDU.
Definition: pdu.h:243
coap_pdu_code_t
Set of codes available for a PDU.
Definition: pdu.h:303
Generic resource handling.
CoAP binary data definition.
Definition: str.h:56
The CoAP stack's global state is stored in a coap_context_t object.
Structure to keep track of block1 specific information (Requests)
uint64_t state_token
state token
size_t bert_size
size of last BERT block
uint32_t count
the number of packets sent for payload
coap_binary_t * app_token
original PDU token
Structure to keep track of block2 specific information (Responses)
coap_pdu_code_t request_method
Method used to request this data.
coap_string_t * query
Associated query for the resource.
uint64_t etag
ETag value.
coap_resource_t * resource
associated resource
coap_time_t maxage_expire
When this entry expires.
Structure to hold large body (many blocks) client receive information.
uint16_t block_option
Block option in use.
uint8_t etag[8]
ETag for block checking.
uint8_t etag_length
ETag length.
uint8_t last_type
Last request type (CON/NON)
uint8_t observe_length
Length of observe data.
uint8_t observe[3]
Observe data (if observe_set) (only 24 bits)
uint8_t etag_set
Set if ETag is in receive PDU.
coap_rblock_t rec_blocks
struct coap_lg_crcv_t * next
uint8_t initial
If set, has not been used yet.
uint8_t szx
size of individual blocks
uint16_t content_format
Content format for the set of blocks.
coap_pdu_t pdu
skeletal PDU
coap_tick_t last_used
< list of received blocks
uint64_t state_token
state token (and observe token)
coap_binary_t * app_token
app requesting PDU token
uint16_t retry_counter
Retry counter (part of state token)
coap_binary_t * body_data
Used for re-assembling entire body.
uint8_t observe_set
Set if this is an observe receive PDU.
size_t total_len
Length as indicated by SIZE2 option.
Structure to hold large body (many blocks) server receive information.
uint8_t rtag[8]
RTag for block checking.
coap_mid_t last_mid
Last received mid for this set of packets.
uint8_t last_token[8]
< list of received blocks
uint8_t rtag_set
Set if RTag is in receive PDU.
uint16_t block_option
Block option in use.
size_t total_len
Length as indicated by SIZE1 option.
struct coap_lg_srcv_t * next
uint8_t observe_length
Length of observe data.
coap_rblock_t rec_blocks
set to uri_path if unknown resource
coap_binary_t * body_data
Used for re-assembling entire body.
coap_resource_t * resource
associated resource
size_t last_token_length
length of token
uint8_t observe_set
Set if this is an observe receive PDU.
uint8_t rtag_length
RTag length.
uint8_t last_type
Last request type (CON/NON)
uint8_t szx
size of individual blocks
size_t amount_so_far
Amount of data seen so far.
coap_tick_t last_used
Last time data sent or 0.
uint8_t observe[3]
Observe data (if set) (only 24 bits)
uint16_t content_format
Content format for the set of blocks.
coap_str_const_t * uri_path
Structure to hold large body (many blocks) transmission information.
coap_tick_t last_all_sent
Last time all data sent or 0.
coap_release_large_data_t release_func
large data de-alloc function
uint8_t blk_size
large block transmission size
union coap_lg_xmit_t::@1 b
const uint8_t * data
large data ptr
int last_block
last acknowledged block number
coap_tick_t last_payload
Last time MAX_PAYLOAD was sent or 0.
size_t offset
large data next offset to transmit
coap_pdu_t pdu
skeletal PDU
size_t length
large data length
coap_l_block1_t b1
coap_l_block2_t b2
uint16_t option
large block transmisson CoAP option
struct coap_lg_xmit_t * next
void * app_ptr
applicaton provided ptr for de-alloc function
coap_tick_t last_obs
Last time used (Observe tracking) or 0.
structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload mark...
Structure to keep track of received blocks.
coap_tick_t last_seen
struct coap_lg_range range[COAP_RBLOCK_CNT]
Abstraction of resource that can be attached to coap_context_t.
Abstraction of virtual session that can be attached to coap_context_t (client) or coap_endpoint_t (se...
CoAP string data definition with const data.
Definition: str.h:46
CoAP string data definition.
Definition: str.h:38