Skip to content

Commit c904e22

Browse files
authored
Merge pull request #12866 from teetak01/mbed-coap-v5.1.5
Update mbed-coap to version v5.1.5
2 parents ed6f81d + e254ce9 commit c904e22

File tree

3 files changed

+53
-18
lines changed

3 files changed

+53
-18
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
test/*
2+
test_modules/*
23
unittest/*

features/frameworks/mbed-coap/CHANGELOG.md

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

3+
## [v5.1.5](https://github.com/ARMmbed/mbed-coap/releases/tag/v5.1.5)
4+
5+
- Added handling for duplicate message handling for Block2 messages. Previously CoAP was silently ignoring the duplicate messages. Now proper response will be sent.
6+
- Added extended version of `sn_coap_protocol_update_duplicate_package_data`, `sn_coap_protocol_update_duplicate_package_data_all` which will handle all CoAP data in the list.
7+
38
## [v5.1.4](https://github.com/ARMmbed/mbed-coap/releases/tag/v5.1.4)
49

510
- Add also 4.13 (Request Entity Too Large) responses to duplicate info list.

features/frameworks/mbed-coap/source/sn_coap_protocol.c

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ static coap_duplication_info_s *sn_coap_protocol_linked_list_duplication_info_se
5353
static void sn_coap_protocol_linked_list_duplication_info_remove_old_ones(struct coap_s *handle);
5454
static void sn_coap_protocol_duplication_info_free(struct coap_s *handle, coap_duplication_info_s *duplication_info_ptr);
5555
static bool sn_coap_protocol_update_duplicate_package_data(const struct coap_s *handle, const sn_nsdl_addr_s *dst_addr_ptr, const sn_coap_hdr_s *coap_msg_ptr, const int16_t data_size, const uint8_t *dst_packet_data_ptr);
56+
static bool sn_coap_protocol_update_duplicate_package_data_all(const struct coap_s *handle, const sn_nsdl_addr_s *dst_addr_ptr, const sn_coap_hdr_s *coap_msg_ptr, const int16_t data_size, const uint8_t *dst_packet_data_ptr);
57+
5658
#endif
5759

5860
#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 */
@@ -690,6 +692,8 @@ sn_coap_hdr_s *sn_coap_protocol_parse(struct coap_s *handle, sn_nsdl_addr_s *src
690692
tr_debug("sn_coap_protocol_parse - send ack for duplicate message");
691693
handle->sn_coap_tx_callback(response->packet_ptr,
692694
response->packet_len, response->address, response->param);
695+
} else {
696+
tr_error("sn_coap_protocol_parse - response not yet build");
693697
}
694698
}
695699

@@ -2235,6 +2239,20 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn
22352239
}
22362240

22372241
sn_coap_builder_2(dst_ack_packet_data_ptr, src_coap_blockwise_ack_msg_ptr, handle->sn_coap_block_data_size);
2242+
2243+
#if SN_COAP_DUPLICATION_MAX_MSGS_COUNT
2244+
// copy coap data buffer to duplicate list for resending purposes
2245+
if (!sn_coap_protocol_update_duplicate_package_data_all(handle,
2246+
src_addr_ptr,
2247+
src_coap_blockwise_ack_msg_ptr,
2248+
dst_packed_data_needed_mem,
2249+
dst_ack_packet_data_ptr)) {
2250+
sn_coap_parser_release_allocated_coap_msg_mem(handle, src_coap_blockwise_ack_msg_ptr);
2251+
handle->sn_coap_protocol_free(dst_ack_packet_data_ptr);
2252+
return NULL;
2253+
}
2254+
#endif
2255+
22382256
handle->sn_coap_tx_callback(dst_ack_packet_data_ptr, dst_packed_data_needed_mem, src_addr_ptr, param);
22392257

22402258
handle->sn_coap_protocol_free(dst_ack_packet_data_ptr);
@@ -2434,27 +2452,38 @@ static sn_coap_hdr_s *sn_coap_protocol_copy_header(struct coap_s *handle, const
24342452

24352453
#if SN_COAP_DUPLICATION_MAX_MSGS_COUNT
24362454
static bool sn_coap_protocol_update_duplicate_package_data(const struct coap_s *handle,
2437-
const sn_nsdl_addr_s *dst_addr_ptr,
2438-
const sn_coap_hdr_s *coap_msg_ptr,
2439-
const int16_t data_size,
2440-
const uint8_t *dst_packet_data_ptr)
2455+
const sn_nsdl_addr_s *dst_addr_ptr,
2456+
const sn_coap_hdr_s *coap_msg_ptr,
2457+
const int16_t data_size,
2458+
const uint8_t *dst_packet_data_ptr)
24412459
{
24422460
if (coap_msg_ptr->msg_type == COAP_MSG_TYPE_ACKNOWLEDGEMENT &&
24432461
handle->sn_coap_duplication_buffer_size != 0) {
2444-
coap_duplication_info_s* info = sn_coap_protocol_linked_list_duplication_info_search(handle,
2445-
dst_addr_ptr,
2446-
coap_msg_ptr->msg_id);
2447-
2448-
/* Update package data to duplication info struct if it's not there yet */
2449-
if (info && info->packet_ptr == NULL) {
2450-
info->packet_ptr = handle->sn_coap_protocol_malloc(data_size);
2451-
if (info->packet_ptr) {
2452-
memcpy(info->packet_ptr, dst_packet_data_ptr, data_size);
2453-
info->packet_len = data_size;
2454-
} else {
2455-
tr_error("sn_coap_protocol_update_duplication_package_data - failed to allocate duplication info!");
2456-
return false;
2457-
}
2462+
return sn_coap_protocol_update_duplicate_package_data_all(handle, dst_addr_ptr, coap_msg_ptr, data_size, dst_packet_data_ptr);
2463+
}
2464+
return true;
2465+
}
2466+
2467+
static bool sn_coap_protocol_update_duplicate_package_data_all(const struct coap_s *handle,
2468+
const sn_nsdl_addr_s *dst_addr_ptr,
2469+
const sn_coap_hdr_s *coap_msg_ptr,
2470+
const int16_t data_size,
2471+
const uint8_t *dst_packet_data_ptr)
2472+
{
2473+
coap_duplication_info_s* info = sn_coap_protocol_linked_list_duplication_info_search(handle,
2474+
dst_addr_ptr,
2475+
coap_msg_ptr->msg_id);
2476+
2477+
/* Update package data to duplication info struct if it's not there yet */
2478+
if (info && info->packet_ptr == NULL) {
2479+
info->packet_ptr = handle->sn_coap_protocol_malloc(data_size);
2480+
if (info->packet_ptr) {
2481+
tr_debug("sn_coap_protocol_update_duplication_package_data - added to duplicate list!");
2482+
memcpy(info->packet_ptr, dst_packet_data_ptr, data_size);
2483+
info->packet_len = data_size;
2484+
} else {
2485+
tr_error("sn_coap_protocol_update_duplication_package_data - failed to allocate duplication info!");
2486+
return false;
24582487
}
24592488
}
24602489
return true;

0 commit comments

Comments
 (0)