Skip to content

Commit 5d60e65

Browse files
authored
Merge pull request #13787 from ristohuhtala/update-mbed-coap-master
Update Mbed CoAP to v5.1.8
2 parents 1b663a3 + 0bb9eb6 commit 5d60e65

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

connectivity/libraries/mbed-coap/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## [v5.1.8](https://github.com/ARMmbed/mbed-coap/releases/tag/v5.1.8)
4+
5+
- Fix to blockwise code. Now uses block size received in packet, not block size defined in code.
6+
37
## [v5.1.7](https://github.com/ARMmbed/mbed-coap/releases/tag/v5.1.7)
48

59
- Removed comparison of IP addresses when validating message resending. This avoids unnessary network errors due to load balancers causing frequent IP address changes.

connectivity/libraries/mbed-coap/source/sn_coap_protocol.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static bool sn_coap_protocol_update_duplicate_package_data_all(
5959

6060
#if SN_COAP_BLOCKWISE_ENABLED || SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE /* If Message blockwising is not enabled, this part of code will not be compiled */
6161
static void sn_coap_protocol_linked_list_blockwise_msg_remove(struct coap_s *handle, coap_blockwise_msg_s *removed_msg_ptr);
62-
static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *handle, sn_nsdl_addr_s *addr_ptr, uint16_t payload_len, uint8_t *payload_ptr, uint8_t *token_ptr, uint8_t token_len, uint32_t block_number, uint32_t size1);
62+
static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *handle, sn_nsdl_addr_s *addr_ptr, uint16_t payload_len, uint8_t *payload_ptr, uint8_t *token_ptr, uint8_t token_len, uint32_t block_number, uint16_t block_size, uint32_t size1);
6363
static uint8_t *sn_coap_protocol_linked_list_blockwise_payload_search(struct coap_s *handle, const sn_nsdl_addr_s *src_addr_ptr, uint16_t *payload_length, const uint8_t *token_ptr, uint8_t token_len);
6464
static coap_blockwise_payload_s *sn_coap_protocol_linked_list_blockwise_search(struct coap_s *handle, const sn_nsdl_addr_s *src_addr_ptr, const uint8_t *token_ptr, uint8_t token_len);
6565
static bool sn_coap_protocol_linked_list_blockwise_payload_search_compare_block_number(struct coap_s *handle, const sn_nsdl_addr_s *src_addr_ptr, const uint8_t *token_ptr, uint8_t token_len, uint32_t block_number);
@@ -1253,6 +1253,7 @@ static void sn_coap_protocol_linked_list_blockwise_msg_remove(struct coap_s *han
12531253
* \param *token_ptr is pointer to stored token
12541254
* \param token_len is length of the stored token
12551255
* \param block_number Block number to be stored
1256+
* \param block_size Size on block to be stored
12561257
* \param size1 Size of the whole incoming message
12571258
*****************************************************************************/
12581259

@@ -1262,6 +1263,7 @@ static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *
12621263
uint8_t *token_ptr,
12631264
uint8_t token_len,
12641265
uint32_t block_number,
1266+
uint16_t block_size,
12651267
uint32_t size1)
12661268
{
12671269
if (!addr_ptr || !payload_len || !payload_ptr) {
@@ -1280,7 +1282,7 @@ static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *
12801282
coap_blockwise_payload_s *stored_blockwise_payload_ptr = sn_coap_protocol_linked_list_blockwise_search(handle, addr_ptr, token_ptr, token_len);
12811283

12821284
if (stored_blockwise_payload_ptr && stored_blockwise_payload_ptr->use_size1) {
1283-
memcpy(stored_blockwise_payload_ptr->payload_ptr + (block_number * handle->sn_coap_block_data_size), payload_ptr, payload_len);
1285+
memcpy(stored_blockwise_payload_ptr->payload_ptr + (block_number * block_size), payload_ptr, payload_len);
12841286
} else if (stored_blockwise_payload_ptr) {
12851287
uint16_t new_len = stored_blockwise_payload_ptr->payload_len + payload_len;
12861288
tr_debug("sn_coap_protocol_linked_list_blockwise_payload_store - reallocate from %d to %d", stored_blockwise_payload_ptr->payload_len, new_len);
@@ -1967,13 +1969,15 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn
19671969
// Store only in success case
19681970
if (src_coap_blockwise_ack_msg_ptr->msg_code != COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE &&
19691971
src_coap_blockwise_ack_msg_ptr->msg_code != COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE) {
1972+
uint16_t block_size = 1u << ((received_coap_msg_ptr->options_list_ptr->block1 & 0x07) + 4);
19701973
sn_coap_protocol_linked_list_blockwise_payload_store(handle,
19711974
src_addr_ptr,
19721975
received_coap_msg_ptr->payload_len,
19731976
received_coap_msg_ptr->payload_ptr,
19741977
received_coap_msg_ptr->token_ptr,
19751978
received_coap_msg_ptr->token_len,
19761979
block_number,
1980+
block_size,
19771981
received_coap_msg_ptr->options_list_ptr->size1);
19781982
}
19791983

@@ -1989,14 +1993,15 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn
19891993

19901994
/* * * This is the last block when whole Blockwise payload from received * * */
19911995
/* * * blockwise messages is gathered and returned to User * * */
1992-
1996+
uint16_t block_size = 1u << ((received_coap_msg_ptr->options_list_ptr->block1 & 0x07) + 4);
19931997
sn_coap_protocol_linked_list_blockwise_payload_store(handle,
19941998
src_addr_ptr,
19951999
received_coap_msg_ptr->payload_len,
19962000
received_coap_msg_ptr->payload_ptr,
19972001
received_coap_msg_ptr->token_ptr,
19982002
received_coap_msg_ptr->token_len,
19992003
block_number,
2004+
block_size,
20002005
received_coap_msg_ptr->options_list_ptr->size1);
20012006

20022007
if (!sn_coap_handle_last_blockwise(handle, src_addr_ptr, received_coap_msg_ptr)) {
@@ -2018,13 +2023,15 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn
20182023
uint32_t block_number = 0;
20192024
/* Store blockwise payload to Linked list */
20202025
//todo: add block number to stored values - just to make sure all packets are in order
2026+
uint16_t block_size = 1u << ((received_coap_msg_ptr->options_list_ptr->block1 & 0x07) + 4);
20212027
sn_coap_protocol_linked_list_blockwise_payload_store(handle,
20222028
src_addr_ptr,
20232029
received_coap_msg_ptr->payload_len,
20242030
received_coap_msg_ptr->payload_ptr,
20252031
received_coap_msg_ptr->token_ptr,
20262032
received_coap_msg_ptr->token_len,
20272033
received_coap_msg_ptr->options_list_ptr->block2 >> 4,
2034+
block_size,
20282035
received_coap_msg_ptr->options_list_ptr->size1);
20292036
/* If not last block (more value is set) */
20302037
if (received_coap_msg_ptr->options_list_ptr->block2 & 0x08) {

0 commit comments

Comments
 (0)