Enhance debug message
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-common.c
index 0874e84..df929da 100644 (file)
@@ -483,8 +483,14 @@ void _bt_convert_addr_string_to_secure_string(char *addr,
        strncpy(addr, address, len);
        addr[len] = '\0';
 
-       addr[len-1] = 'X';
-       addr[len-2] = 'X';
+       addr[len-7] = 'X';
+       addr[len-8] = 'X';
+       addr[len-10] = 'X';
+       addr[len-11] = 'X';
+       addr[len-13] = 'X';
+       addr[len-14] = 'X';
+       addr[len-16] = 'X';
+       addr[len-17] = 'X';
 
        return;
 }
@@ -660,30 +666,57 @@ int _bt_set_non_blocking_tty(int sk)
        return BLUETOOTH_ERROR_NONE;
 }
 
+static char *__bt_extract_device_path(GVariantIter *iter, char *address)
+{
+       char *object_path = NULL;
+       char device_address[BT_ADDRESS_STRING_SIZE] = { 0 };
+
+       /* Parse the signature: oa{sa{sv}}} */
+       while (g_variant_iter_loop(iter, "{&oa{sa{sv}}}", &object_path,
+                       NULL)) {
+               if (!object_path) {
+                       BT_ERR("Unable to get object path");
+                       return NULL;
+               }
+               _bt_convert_device_path_to_address(object_path, device_address);
+               if (g_strcmp0(address, device_address) == 0)
+                       return g_strdup(object_path);
+
+       }
+
+       BT_ERR("Unable to get object path");
+       return NULL;
+}
+
 char *_bt_get_device_object_path(char *address)
 {
        char *object_path = NULL;
+       GDBusConnection *conn;
+       GDBusProxy *manager_proxy;
        GVariant *result = NULL;
-       GDBusProxy *proxy;
-       GError *error = NULL;
+       GVariantIter *iter = NULL;
 
-       proxy = _bt_get_adapter_proxy();
-       retv_if(proxy == NULL, NULL);
+       conn = _bt_gdbus_get_system_gconn();
+       retv_if(conn == NULL, NULL);
 
-       result = g_dbus_proxy_call_sync(proxy, "FindDevice",
-                               g_variant_new("(s)", address),
+       manager_proxy = _bt_get_manager_proxy();
+       retv_if(manager_proxy == NULL, NULL);
+
+       result = g_dbus_proxy_call_sync(manager_proxy, "GetManagedObjects",
+                               NULL,
                                G_DBUS_CALL_FLAGS_NONE,
-                               -1, NULL, &error);
-       if (result == NULL) {
-               if (error) {
-                       BT_ERR("FindDevice Fail: %s", error->message);
-                       g_clear_error(&error);
-               }
+                               -1,
+                               NULL,
+                               NULL);
+       if (!result) {
+               BT_ERR("Can't get managed objects");
                return NULL;
        }
 
-       g_variant_get(result, "(o)", &object_path);
-
+       /* signature of GetManagedObjects:  a{oa{sa{sv}}} */
+       g_variant_get(result, "(a{oa{sa{sv}}})", &iter);
+       object_path = __bt_extract_device_path(iter, address);
+       g_variant_iter_free(iter);
        g_variant_unref(result);
        return object_path;
 }
@@ -914,6 +947,7 @@ const char *_bt_convert_uuid_to_string(const char *uuid)
                {"FE53FF98-B259-4337-B56A-0EC9F82C6BAD", "Control Point"},
                {"C2051EE0-804D-4D50-A12C-15E243852100", "Notifications Source"},
                {"1ab7c24d-185a-45b9-90d4-f7ab1a71949a", "Samsung Health Service"},
+               {"ADE3D529-C784-4F63-A987-EB69F70EE816", "IoT OIC Service"},
                {NULL, NULL}
        };
 
@@ -932,6 +966,7 @@ const char *_bt_convert_uuid_to_string(const char *uuid)
                        return (char *)bt_uuid_name[i].specification_name;
        }
 
+       BT_INFO("Unknown uuid : %s", uuid);
        return "Unknown";
 }
 
@@ -1054,6 +1089,24 @@ const char *_bt_convert_disc_reason_to_string(int reason)
        }
 }
 
+const char *_bt_convert_profile_state_to_string(bt_profile_state_t state)
+{
+       switch (state) {
+       case BT_PROFILE_STATE_UNAVAILABLE:
+               return "UNAVAILABLE";
+       case BT_PROFILE_STATE_DISCONNECTED:
+               return "DISCONNECTED";
+       case BT_PROFILE_STATE_CONNECTING:
+               return "CONNECTING";
+       case BT_PROFILE_STATE_CONNECTED:
+               return "CONNECTED";
+       case BT_PROFILE_STATE_DISCONNECTING:
+               return "DISCONNECTING";
+       }
+
+       return NULL;
+}
+
 const char *_bt_convert_service_function_to_string(int function)
 {
        int i;