}
#endif
+static bool is_set_adv_data_flag(uint8_t *data, int data_len)
+{
+ int adv_type;
+ for (int i = 0; i < data_len; i++) {
+ adv_type = data[i + 1];
+ if (adv_type == EIR_FLAGS)
+ return true;
+ else
+ i = i + data[i];
+ }
+ return false;
+}
+
static int set_adv_data_flag(uint8_t *adv_data, uint8_t *data, int data_len, void *user_data)
{
struct btd_adapter *adapter = user_data;
+ if (is_set_adv_data_flag(data, data_len))
+ return data_len;
+
adv_data[0] = 2;
adv_data[1] = EIR_FLAGS;
adv_data[2] = EIR_GEN_DISC | EIR_CONTROLLER |
EIR_SIM_HOST | EIR_BREDR_UNSUP;
else {
-#ifdef TIZEN_FEATURE_BLUEZ_MODIFY
if (TIZEN_FEATURE_BLUEZ_DA) {
DBG("Disable LE General Discoverable Mode");
adv_data[2] = EIR_CONTROLLER | EIR_SIM_HOST;
} else
-#endif
adv_data[2] = EIR_GEN_DISC | EIR_CONTROLLER | EIR_SIM_HOST;
}
DBUS_TYPE_INVALID))
return btd_error_invalid_args(msg);
- if (len > ADV_DATA_MAX_LENGTH - 3)
- return btd_error_invalid_args(msg);
+ if (is_set_adv_data_flag(value, len)) {
+ if (len > ADV_DATA_MAX_LENGTH)
+ return btd_error_invalid_args(msg);
+ } else {
+ if (len > ADV_DATA_MAX_LENGTH - 3)
+ return btd_error_invalid_args(msg);
+ }
if (adapter->le_static_addr.b[5] != 0) {
char *ptr = NULL;