net: lwm2m: replace coap_next_block() w/ coap_update_from_block()
We should call coap_update_from_block() which will determine the minimum size of the BLOCK1 SIZE between server/client and update the current offset and total size(if available) accordingly. Signed-off-by: Robert Chou <robert.ch.chou@acer.com>
This commit is contained in:
parent
a37f049e6d
commit
44995e2de0
1 changed files with 13 additions and 10 deletions
|
@ -2393,8 +2393,8 @@ static int handle_request(struct coap_packet *request,
|
|||
int observe = -1; /* default to -1, 0 = ENABLE, 1 = DISABLE */
|
||||
bool discover = false;
|
||||
struct block_context *block_ctx = NULL;
|
||||
size_t block_offset = 0;
|
||||
enum coap_block_size block_size;
|
||||
bool last_block = false;
|
||||
|
||||
/* setup engine context */
|
||||
memset(&context, 0, sizeof(struct lwm2m_engine_context));
|
||||
|
@ -2535,9 +2535,11 @@ static int handle_request(struct coap_packet *request,
|
|||
/* Check for block transfer */
|
||||
r = get_option_int(in.in_cpkt, COAP_OPTION_BLOCK1);
|
||||
if (r > 0) {
|
||||
last_block = !GET_MORE(r);
|
||||
|
||||
/* RFC7252: 4.6. Message Size */
|
||||
block_size = GET_BLOCK_SIZE(r);
|
||||
if (GET_MORE(r) &&
|
||||
if (!last_block &&
|
||||
coap_block_size_to_bytes(block_size) > in.payload_len) {
|
||||
SYS_LOG_DBG("Trailing payload is discarded!");
|
||||
r = -EFBIG;
|
||||
|
@ -2554,13 +2556,14 @@ static int handle_request(struct coap_packet *request,
|
|||
goto error;
|
||||
}
|
||||
|
||||
/* 0 will be returned if it's the last block */
|
||||
block_offset = coap_next_block(in.in_cpkt, &block_ctx->ctx);
|
||||
}
|
||||
r = coap_update_from_block(in.in_cpkt, &block_ctx->ctx);
|
||||
if (r < 0) {
|
||||
SYS_LOG_ERR("Error from block update: %d", r);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Handle blockwise 1 (Part 1): Set response code / free context */
|
||||
if (block_ctx) {
|
||||
if (block_offset > 0) {
|
||||
/* Handle blockwise 1 (Part 1): Set response code */
|
||||
if (!last_block) {
|
||||
msg->code = COAP_RESPONSE_CODE_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
@ -2635,9 +2638,9 @@ static int handle_request(struct coap_packet *request,
|
|||
goto error;
|
||||
}
|
||||
|
||||
/* Handle blockwise 1 (Part 2): Append BLOCK1 option */
|
||||
/* Handle blockwise 1 (Part 2): Append BLOCK1 option / free context */
|
||||
if (block_ctx) {
|
||||
if (block_offset > 0) {
|
||||
if (!last_block) {
|
||||
/* More to come, ack with correspond block # */
|
||||
r = coap_append_block1_option(out.out_cpkt,
|
||||
&block_ctx->ctx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue