You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ry...@apache.org on 2020/01/27 15:04:00 UTC
[mynewt-nimble] branch master updated: nimble/host: Fix for
BLE_HS_DBG_ASSERT in adv_set_fields
This is an automated email from the ASF dual-hosted git repository.
rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new de3d69e nimble/host: Fix for BLE_HS_DBG_ASSERT in adv_set_fields
de3d69e is described below
commit de3d69ec2b2ccf6183dce09dbc916d3e72451c80
Author: Ćukasz Rymanowski <lu...@codecoup.pl>
AuthorDate: Mon Jan 27 12:12:32 2020 +0100
nimble/host: Fix for BLE_HS_DBG_ASSERT in adv_set_fields
This is regression after
95833796 nimble/host: Fix checking dst_len in adv_set_fields
Function ble_hs_adv_set_fields_mbuf() does not use dst_len which
triggers the BLE_HS_DBG_ASSERT
For that reason, we have now local variable in the adv_set_fields which
is later copied to dst_len if needed.
---
nimble/host/src/ble_hs_adv.c | 38 +++++++++++++++++++++-----------------
1 file changed, 21 insertions(+), 17 deletions(-)
diff --git a/nimble/host/src/ble_hs_adv.c b/nimble/host/src/ble_hs_adv.c
index 28b041d..1d938b9 100644
--- a/nimble/host/src/ble_hs_adv.c
+++ b/nimble/host/src/ble_hs_adv.c
@@ -235,10 +235,10 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
uint8_t type;
int8_t tx_pwr_lvl;
+ uint8_t dst_len_local;
int rc;
- BLE_HS_DBG_ASSERT(dst_len);
- *dst_len = 0;
+ dst_len_local = 0;
/*** 0x01 - Flags. */
/* The application has two options concerning the flags field:
@@ -250,7 +250,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
*/
if (adv_fields->flags != 0) {
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_FLAGS, 1,
- &adv_fields->flags, dst, dst_len,
+ &adv_fields->flags, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
@@ -267,7 +267,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
}
rc = ble_hs_adv_set_array_uuid16(type, adv_fields->num_uuids16,
- adv_fields->uuids16, dst, dst_len,
+ adv_fields->uuids16, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -283,7 +283,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
}
rc = ble_hs_adv_set_array_uuid32(type, adv_fields->num_uuids32,
- adv_fields->uuids32, dst, dst_len,
+ adv_fields->uuids32, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -299,7 +299,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
}
rc = ble_hs_adv_set_array_uuid128(type, adv_fields->num_uuids128,
- adv_fields->uuids128, dst, dst_len,
+ adv_fields->uuids128, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -315,7 +315,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
}
rc = ble_hs_adv_set_flat_mbuf(type, adv_fields->name_len,
- adv_fields->name, dst, dst_len, max_len,
+ adv_fields->name, dst, &dst_len_local, max_len,
om);
if (rc != 0) {
return rc;
@@ -337,7 +337,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
}
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_TX_PWR_LVL, 1,
- &tx_pwr_lvl, dst, dst_len, max_len, om);
+ &tx_pwr_lvl, dst, &dst_len_local, max_len, om);
if (rc != 0) {
return rc;
}
@@ -348,7 +348,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SLAVE_ITVL_RANGE,
BLE_HS_ADV_SLAVE_ITVL_RANGE_LEN,
adv_fields->slave_itvl_range, dst,
- dst_len, max_len, om);
+ &dst_len_local, max_len, om);
if (rc != 0) {
return rc;
}
@@ -358,7 +358,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
if (adv_fields->svc_data_uuid16 != NULL && adv_fields->svc_data_uuid16_len) {
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID16,
adv_fields->svc_data_uuid16_len,
- adv_fields->svc_data_uuid16, dst, dst_len,
+ adv_fields->svc_data_uuid16, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -372,7 +372,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_PUBLIC_TGT_ADDR,
BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN *
adv_fields->num_public_tgt_addrs,
- adv_fields->public_tgt_addr, dst, dst_len,
+ adv_fields->public_tgt_addr, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -383,7 +383,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
if (adv_fields->appearance_is_present) {
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_APPEARANCE,
BLE_HS_ADV_APPEARANCE_LEN,
- &adv_fields->appearance, dst, dst_len,
+ &adv_fields->appearance, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -393,7 +393,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
/*** 0x1a - Advertising interval. */
if (adv_fields->adv_itvl_is_present) {
rc = ble_hs_adv_set_array16(BLE_HS_ADV_TYPE_ADV_ITVL, 1,
- &adv_fields->adv_itvl, dst, dst_len,
+ &adv_fields->adv_itvl, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -404,7 +404,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
if (adv_fields->svc_data_uuid32 != NULL && adv_fields->svc_data_uuid32_len) {
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID32,
adv_fields->svc_data_uuid32_len,
- adv_fields->svc_data_uuid32, dst, dst_len,
+ adv_fields->svc_data_uuid32, dst, &dst_len_local,
max_len, om);
if (rc != 0) {
return rc;
@@ -416,7 +416,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID128,
adv_fields->svc_data_uuid128_len,
adv_fields->svc_data_uuid128, dst,
- dst_len, max_len, om);
+ &dst_len_local, max_len, om);
if (rc != 0) {
return rc;
}
@@ -425,7 +425,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
/*** 0x24 - URI. */
if (adv_fields->uri != NULL && adv_fields->uri_len) {
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_URI, adv_fields->uri_len,
- adv_fields->uri, dst, dst_len, max_len,
+ adv_fields->uri, dst, &dst_len_local, max_len,
om);
if (rc != 0) {
return rc;
@@ -437,12 +437,16 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_MFG_DATA,
adv_fields->mfg_data_len,
adv_fields->mfg_data,
- dst, dst_len, max_len, om);
+ dst, &dst_len_local, max_len, om);
if (rc != 0) {
return rc;
}
}
+ if (dst_len) {
+ *dst_len = dst_len_local;
+ }
+
return 0;
}