diff --git a/nimble/host/src/ble_att_clt.c b/nimble/host/src/ble_att_clt.c index ddd7fc8a9..cdae470df 100644 --- a/nimble/host/src/ble_att_clt.c +++ b/nimble/host/src/ble_att_clt.c @@ -799,10 +799,17 @@ ble_att_clt_tx_prep_write(uint16_t conn_handle, uint16_t cid, uint16_t handle, goto err; } +#if MYNEWT_VAL(BLE_GATT_BLOB_TRANSFER) + if (OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) { + rc = BLE_HS_EINVAL; + goto err; + } +#else if (offset + OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) { rc = BLE_HS_EINVAL; goto err; } +#endif if (OS_MBUF_PKTLEN(txom) > ble_att_mtu_by_cid(conn_handle, cid) - BLE_ATT_PREP_WRITE_CMD_BASE_SZ) { diff --git a/nimble/host/src/ble_att_svr.c b/nimble/host/src/ble_att_svr.c index aa4ad6b06..21d9ce3fb 100644 --- a/nimble/host/src/ble_att_svr.c +++ b/nimble/host/src/ble_att_svr.c @@ -2348,12 +2348,13 @@ ble_att_svr_prep_validate(struct ble_att_prep_entry_list *prep_list, } } +#if !MYNEWT_VAL(BLE_GATT_BLOB_TRANSFER) cur_len = entry->bape_offset + OS_MBUF_PKTLEN(entry->bape_value); if (cur_len > BLE_ATT_ATTR_MAX_LEN) { *err_handle = entry->bape_handle; return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN; } - +#endif prev = entry; } diff --git a/nimble/syscfg.yml b/nimble/syscfg.yml index f78f631b5..7d5bfe39a 100644 --- a/nimble/syscfg.yml +++ b/nimble/syscfg.yml @@ -141,6 +141,10 @@ syscfg.defs: description: > This enables LE Connection Subrating feature value: 0 + BLE_GATT_BLOB_TRANSFER: + description: > + This enables write blob feature + value: 1 BLE_PHY_2M: description: > diff --git a/porting/examples/linux/include/syscfg/syscfg.h b/porting/examples/linux/include/syscfg/syscfg.h index 79aac47e5..75e45b971 100644 --- a/porting/examples/linux/include/syscfg/syscfg.h +++ b/porting/examples/linux/include/syscfg/syscfg.h @@ -955,6 +955,10 @@ #define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL) #endif +#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER +#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_HOST #define MYNEWT_VAL_BLE_HOST (1) #endif diff --git a/porting/examples/linux_blemesh/include/syscfg/syscfg.h b/porting/examples/linux_blemesh/include/syscfg/syscfg.h index d9b837252..f1d57f03c 100644 --- a/porting/examples/linux_blemesh/include/syscfg/syscfg.h +++ b/porting/examples/linux_blemesh/include/syscfg/syscfg.h @@ -955,6 +955,10 @@ #define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL) #endif +#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER +#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_HOST #define MYNEWT_VAL_BLE_HOST (1) #endif diff --git a/porting/examples/nuttx/include/syscfg/syscfg.h b/porting/examples/nuttx/include/syscfg/syscfg.h index add9dcb9a..819990c6a 100644 --- a/porting/examples/nuttx/include/syscfg/syscfg.h +++ b/porting/examples/nuttx/include/syscfg/syscfg.h @@ -955,6 +955,10 @@ #define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL) #endif +#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER +#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_HOST #define MYNEWT_VAL_BLE_HOST (1) #endif diff --git a/porting/nimble/include/syscfg/syscfg.h b/porting/nimble/include/syscfg/syscfg.h index f8ebdabe6..ca1c079e8 100644 --- a/porting/nimble/include/syscfg/syscfg.h +++ b/porting/nimble/include/syscfg/syscfg.h @@ -908,6 +908,10 @@ #define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL) #endif +#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER +#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_HOST #define MYNEWT_VAL_BLE_HOST (1) #endif diff --git a/porting/npl/riot/include/syscfg/syscfg.h b/porting/npl/riot/include/syscfg/syscfg.h index 85e7946a4..1260a36eb 100644 --- a/porting/npl/riot/include/syscfg/syscfg.h +++ b/porting/npl/riot/include/syscfg/syscfg.h @@ -1751,6 +1751,10 @@ #define MYNEWT_VAL_BLE_GAP_MAX_PENDING_CONN_PARAM_UPDATE (1) #endif +#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER +#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_GATT_DISC_ALL_CHRS #define MYNEWT_VAL_BLE_GATT_DISC_ALL_CHRS (MYNEWT_VAL_BLE_ROLE_CENTRAL) #endif