@@ -59,7 +59,7 @@ static bool sn_coap_protocol_update_duplicate_package_data_all(
59
59
60
60
#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 */
61
61
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 );
63
63
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 );
64
64
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 );
65
65
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
1253
1253
* \param *token_ptr is pointer to stored token
1254
1254
* \param token_len is length of the stored token
1255
1255
* \param block_number Block number to be stored
1256
+ * \param block_size Size on block to be stored
1256
1257
* \param size1 Size of the whole incoming message
1257
1258
*****************************************************************************/
1258
1259
@@ -1262,6 +1263,7 @@ static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *
1262
1263
uint8_t * token_ptr ,
1263
1264
uint8_t token_len ,
1264
1265
uint32_t block_number ,
1266
+ uint16_t block_size ,
1265
1267
uint32_t size1 )
1266
1268
{
1267
1269
if (!addr_ptr || !payload_len || !payload_ptr ) {
@@ -1280,7 +1282,7 @@ static void sn_coap_protocol_linked_list_blockwise_payload_store(struct coap_s *
1280
1282
coap_blockwise_payload_s * stored_blockwise_payload_ptr = sn_coap_protocol_linked_list_blockwise_search (handle , addr_ptr , token_ptr , token_len );
1281
1283
1282
1284
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 );
1284
1286
} else if (stored_blockwise_payload_ptr ) {
1285
1287
uint16_t new_len = stored_blockwise_payload_ptr -> payload_len + payload_len ;
1286
1288
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
1967
1969
// Store only in success case
1968
1970
if (src_coap_blockwise_ack_msg_ptr -> msg_code != COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE &&
1969
1971
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 );
1970
1973
sn_coap_protocol_linked_list_blockwise_payload_store (handle ,
1971
1974
src_addr_ptr ,
1972
1975
received_coap_msg_ptr -> payload_len ,
1973
1976
received_coap_msg_ptr -> payload_ptr ,
1974
1977
received_coap_msg_ptr -> token_ptr ,
1975
1978
received_coap_msg_ptr -> token_len ,
1976
1979
block_number ,
1980
+ block_size ,
1977
1981
received_coap_msg_ptr -> options_list_ptr -> size1 );
1978
1982
}
1979
1983
@@ -1989,14 +1993,15 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn
1989
1993
1990
1994
/* * * This is the last block when whole Blockwise payload from received * * */
1991
1995
/* * * 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 );
1993
1997
sn_coap_protocol_linked_list_blockwise_payload_store (handle ,
1994
1998
src_addr_ptr ,
1995
1999
received_coap_msg_ptr -> payload_len ,
1996
2000
received_coap_msg_ptr -> payload_ptr ,
1997
2001
received_coap_msg_ptr -> token_ptr ,
1998
2002
received_coap_msg_ptr -> token_len ,
1999
2003
block_number ,
2004
+ block_size ,
2000
2005
received_coap_msg_ptr -> options_list_ptr -> size1 );
2001
2006
2002
2007
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
2018
2023
uint32_t block_number = 0 ;
2019
2024
/* Store blockwise payload to Linked list */
2020
2025
//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 );
2021
2027
sn_coap_protocol_linked_list_blockwise_payload_store (handle ,
2022
2028
src_addr_ptr ,
2023
2029
received_coap_msg_ptr -> payload_len ,
2024
2030
received_coap_msg_ptr -> payload_ptr ,
2025
2031
received_coap_msg_ptr -> token_ptr ,
2026
2032
received_coap_msg_ptr -> token_len ,
2027
2033
received_coap_msg_ptr -> options_list_ptr -> block2 >> 4 ,
2034
+ block_size ,
2028
2035
received_coap_msg_ptr -> options_list_ptr -> size1 );
2029
2036
/* If not last block (more value is set) */
2030
2037
if (received_coap_msg_ptr -> options_list_ptr -> block2 & 0x08 ) {
0 commit comments