From: Wootak Jung Date: Wed, 11 Oct 2023 03:13:28 +0000 (+0900) Subject: Fix LegacyManufacturerData parsing issue X-Git-Tag: accepted/tizen/8.0/unified/20231103.040832^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6c6c8a0bbb3a13e078656c1721d0925fd753f1ee;hp=abddb0c63a2a528bf9df94877775f3e84292b4d3;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git Fix LegacyManufacturerData parsing issue LegacyManufacturerDataLen is stored as uint16 not uint32 LegacyManufacturerData should be stored with HAL_PROP_DEVICE_MANUFACTURER_DATA not HAL_PROP_DEVICE_BLE_ADV_DATA Change-Id: I6cb7fe979b7c85190383ff318a127b75a4b4357a Signed-off-by: Wootak Jung --- diff --git a/bt-oal/bluez_hal/src/bt-hal-event-receiver.c b/bt-oal/bluez_hal/src/bt-hal-event-receiver.c index 14f2f65..65860c0 100644 --- a/bt-oal/bluez_hal/src/bt-hal-event-receiver.c +++ b/bt-oal/bluez_hal/src/bt-hal-event-receiver.c @@ -1732,7 +1732,6 @@ static void __bt_hal_device_properties_lookup(GVariant *result, char *address) GVariant *tmp_value; GVariant *value; gchar *name; - gchar *manufacturer_data = NULL; DBG("+"); if (result != NULL) { @@ -1875,30 +1874,40 @@ static void __bt_hal_device_properties_lookup(GVariant *result, char *address) g_variant_unref(tmp_value); /* LegacyManufacturerDataLen */ - tmp_value = g_variant_lookup_value(value, "LegacyManufacturerDataLen", G_VARIANT_TYPE_UINT32); - unsigned int manufacturer_data_len = tmp_value ? g_variant_get_uint32(tmp_value) : 0; + tmp_value = g_variant_lookup_value(value, "LegacyManufacturerDataLen", G_VARIANT_TYPE_UINT16); + unsigned int manufacturer_data_len = tmp_value ? g_variant_get_uint16(tmp_value) : 0; if (manufacturer_data_len > BT_HAL_MANUFACTURER_DATA_LENGTH_MAX) { ERR("manufacturer_data_len is too long(len = %d)", manufacturer_data_len); manufacturer_data_len = BT_HAL_MANUFACTURER_DATA_LENGTH_MAX; } if (tmp_value) g_variant_unref(tmp_value); + /*size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_MANUFACTURER_DATA_LEN, sizeof(unsigned int), &manufacturer_data_len); ev->num_props++;*/ DBG("Device Legacy Manufacturer data length [%u]", manufacturer_data_len); /* ManufacturerData */ + GVariantIter *char_value_iter; + GByteArray *manufacturer_data = NULL; + guint8 char_value; + tmp_value = g_variant_lookup_value(value, "LegacyManufacturerData", G_VARIANT_TYPE_BYTESTRING); - manufacturer_data = value ? (gchar *)g_variant_get_bytestring(tmp_value) : NULL; + g_variant_get(tmp_value, "ay", &char_value_iter); + manufacturer_data = g_byte_array_new(); + while (g_variant_iter_loop(char_value_iter, "y", &char_value)) + g_byte_array_append(manufacturer_data, &char_value, 1); + g_variant_iter_free(char_value_iter); + if (manufacturer_data) { if (manufacturer_data_len > 0) { - //size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_MANUFACTURER_DATA, - size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_BLE_ADV_DATA, - manufacturer_data_len, manufacturer_data); + size += __bt_insert_hal_properties(buf + size, HAL_PROP_DEVICE_MANUFACTURER_DATA, + manufacturer_data->len, manufacturer_data->data); ev->num_props++; } } + g_byte_array_free(manufacturer_data, FALSE); if (tmp_value) g_variant_unref(tmp_value);