Fix improper use of "GetAll" D-Bus method 16/183516/1
authorNagaraj D R <nagaraj.dr@samsung.com>
Fri, 6 Jul 2018 06:22:37 +0000 (15:22 +0900)
committerinjun.yang <injun.yang@samsung.com>
Fri, 6 Jul 2018 06:22:37 +0000 (15:22 +0900)
[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

bt-service/bt-service-device.c
bt-service/bt-service-event-receiver.c
bt-service/include/bt-service-device.h

index eca0775..a97e297 100644 (file)
@@ -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)
index d3a550e..a7aeecd 100644 (file)
@@ -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("");
 
index d918f86..bd1b426 100644 (file)
@@ -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);