net: lwm2m: Fix how payload offset is calculated

Instead of manually computing payload offset, let the CoAP library do
the work, and use the payload pointer returned by the
`coap_packet_get_payload()` function instead.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
This commit is contained in:
Robert Lubos 2021-07-06 15:03:56 +02:00 committed by Maureen Helm
commit b369156e28
3 changed files with 11 additions and 5 deletions

View file

@ -760,7 +760,7 @@ const uint8_t *coap_packet_get_payload(const struct coap_packet *cpkt, uint16_t
payload_len = cpkt->offset - cpkt->hdr_len - cpkt->opt_len;
if (payload_len > 1) {
*len = payload_len - 1; /* substract payload marker length */
*len = payload_len - 1; /* subtract payload marker length */
} else {
*len = 0U;
}

View file

@ -3653,6 +3653,7 @@ static int handle_request(struct coap_packet *request,
uint16_t payload_len = 0U;
bool last_block = false;
bool ignore = false;
const uint8_t *payload_start;
/* set CoAP request / message */
msg->in.in_cpkt = request;
@ -3823,8 +3824,12 @@ static int handle_request(struct coap_packet *request,
}
/* setup incoming data */
msg->in.offset = msg->in.in_cpkt->hdr_len + msg->in.in_cpkt->opt_len;
coap_packet_get_payload(msg->in.in_cpkt, &payload_len);
payload_start = coap_packet_get_payload(msg->in.in_cpkt, &payload_len);
if (payload_len > 0) {
msg->in.offset = payload_start - msg->in.in_cpkt->data;
} else {
msg->in.offset = msg->in.in_cpkt->offset;
}
/* Check for block transfer */

View file

@ -211,6 +211,7 @@ do_firmware_transfer_reply_cb(const struct coap_packet *response,
size_t write_buflen;
uint8_t resp_code, *write_buf;
struct coap_block_context received_block_ctx;
const uint8_t *payload_start;
/* token is used to determine a valid ACK vs a separated response */
tkl = coap_header_get_token(check_response, token);
@ -266,9 +267,9 @@ do_firmware_transfer_reply_cb(const struct coap_packet *response,
last_block = !coap_next_block(check_response, &firmware_block_ctx);
/* Process incoming data */
payload_offset = response->hdr_len + response->opt_len;
coap_packet_get_payload(response, &payload_len);
payload_start = coap_packet_get_payload(response, &payload_len);
if (payload_len > 0) {
payload_offset = payload_start - response->data;
LOG_DBG("total: %zd, current: %zd",
firmware_block_ctx.total_size,
firmware_block_ctx.current);