@@ -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 */
6161static 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 );
6363static 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 );
6464static 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 );
6565static 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