From: Nagaraj D R Date: Fri, 6 Jul 2018 06:22:37 +0000 (+0900) Subject: Fix improper use of "GetAll" D-Bus method X-Git-Tag: submit/tizen/20180710.070923~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=316499e386892867ae4a5429330834f579862a9c Fix improper use of "GetAll" D-Bus method [Problem]Unnecessary use of "GetAll" dbus method on bluetoothd interface where "Get" dbus method could have been used [Cause & Measure]Base code issue. Measure : Replace "GetAll" dbus method with "Get" in places where only a particular property of a D-Bus object is required Change-Id: If68b5a9215e9816baf9209303f13aebb3763867e --- diff --git a/bt-service/bt-service-device.c b/bt-service/bt-service-device.c index eca0775..a97e297 100644 --- a/bt-service/bt-service-device.c +++ b/bt-service/bt-service-device.c @@ -519,20 +519,70 @@ bt_remote_dev_info_t *_bt_get_remote_device_info_by_object_path( return dev_info; } -char *_bt_get_bonded_device_name(char *address) +char *_bt_get_device_name(const char *bdaddress) { - bluetooth_device_address_t device_address = { {0} }; - bluetooth_device_info_t dev_info; + char *device_path = NULL; + const gchar *name = NULL; + gchar *dev_name = NULL; + gsize name_len = 0; + GVariant *result = NULL; + GError *err = NULL; + GDBusProxy *device_proxy; + GDBusConnection *conn; - retv_if(address == NULL, strdup("")); + retv_if(bdaddress == NULL, NULL); - _bt_convert_addr_string_to_type(device_address.addr, address); + device_path = _bt_get_device_object_path((char *)bdaddress); + retv_if(device_path == NULL, NULL); - memset(&dev_info, 0x00, sizeof(bluetooth_device_info_t)); + conn = _bt_gdbus_get_system_gconn(); + retv_if(conn == NULL, NULL); + INFO_SECURE("Device_path %s", device_path); + device_proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE, + NULL, BT_BLUEZ_NAME, device_path, + BT_PROPERTIES_INTERFACE, NULL, &err); - _bt_get_bonded_device_info(&device_address, &dev_info); + g_free(device_path); + retv_if(device_proxy == NULL, NULL); - return g_strdup(dev_info.device_name.name); + result = g_dbus_proxy_call_sync(device_proxy, "Get", + g_variant_new("(ss)", BT_DEVICE_INTERFACE, "Alias"), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err); + if (err) { + BT_ERR("DBus Error : %s", err->message); + g_clear_error(&err); + } else { + GVariant *value; + g_variant_get(result, "(v)", &value); + name = g_variant_get_string(value, &name_len); + INFO_SECURE("Alias Name [%s]", name); + if (name_len) + dev_name = g_strdup(name); + g_variant_unref(value); + g_variant_unref(result); + } + + if (name_len == 0) { + GVariant *value; + result = g_dbus_proxy_call_sync(device_proxy, "Get", + g_variant_new("(ss)", BT_DEVICE_INTERFACE, "Name"), + G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err); + if (err) { + ERR("DBus Error : %s", err->message); + g_clear_error(&err); + } else { + g_variant_get(result, "(v)", &value); + name = g_variant_get_string(value, &name_len); + INFO_SECURE("Name = %s", name); + if (name_len) + dev_name = g_strdup(name); + g_variant_unref(value); + g_variant_unref(result); + } + } + + g_object_unref(device_proxy); + return dev_name; } static gboolean __ignore_auto_pairing_request(const char *address) diff --git a/bt-service/bt-service-event-receiver.c b/bt-service/bt-service-event-receiver.c index d3a550e..a7aeecd 100644 --- a/bt-service/bt-service-event-receiver.c +++ b/bt-service/bt-service-event-receiver.c @@ -1847,7 +1847,7 @@ void _bt_handle_device_event(GVariant *msg, const char *member, const char *path address = g_malloc0(BT_ADDRESS_STRING_SIZE); _bt_convert_device_path_to_address(path, address); - dev_name = _bt_get_bonded_device_name(address); + dev_name = _bt_get_device_name(address); _bt_convert_addr_string_to_secure_string(secure_address, address); BT_INFO("Address : %s Type : %d", secure_address, addr_type); @@ -2279,7 +2279,7 @@ void __bt_set_audio_values(gboolean connected, char *address) /* Set the headset name */ if (connected == TRUE) - name = _bt_get_bonded_device_name(address); + name = _bt_get_device_name(address); else name = g_strdup(""); diff --git a/bt-service/include/bt-service-device.h b/bt-service/include/bt-service-device.h index d918f86..bd1b426 100644 --- a/bt-service/include/bt-service-device.h +++ b/bt-service/include/bt-service-device.h @@ -76,7 +76,7 @@ bt_remote_dev_info_t *_bt_get_remote_device_info(char *address); bt_remote_dev_info_t *_bt_get_remote_device_info_by_object_path(const char *object_path); -char *_bt_get_bonded_device_name(char *address); +char *_bt_get_device_name(const char *address); gboolean _bt_is_bonding_device_address(const char *address);