Revert "Use Trusted Profiles instead of Restricted Profiles"
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-common.c
old mode 100755 (executable)
new mode 100644 (file)
index 4e15b7f..e416c45
@@ -247,6 +247,7 @@ void _bt_convert_addr_string_to_secure_string(char *addr, const char *address)
        ret_if(len != BT_ADDRESS_STRING_SIZE - 1);
 
        strncpy(addr, address, len);
+       addr[len] = '\0';
 
        addr[len-1] = 'X';
        addr[len-2] = 'X';
@@ -672,7 +673,6 @@ static GDBusConnection *gconn;
 static int latest_id = -1;
 #define BT_RFCOMM_ID_MAX 245
 static gboolean id_used[BT_RFCOMM_ID_MAX];
-GDBusNodeInfo *new_conn_node;
 
 static const gchar rfcomm_agent_xml[] =
 "<node name='/'>"
@@ -860,7 +860,7 @@ static GDBusProxy *__bt_gdbus_get_device_proxy(char *object_path)
                                                BT_DEVICE_INTERFACE,
                                                NULL, &err);
 
-       if (err) {
+       if (device_gproxy == NULL && err) {
                BT_ERR("Unable to create proxy: %s", err->message);
                g_clear_error(&err);
                return NULL;
@@ -883,6 +883,7 @@ void _bt_unregister_gdbus(int object_id)
 int _bt_register_new_conn(const char *path, bt_new_connection_cb cb)
 {
        GDBusConnection *gconn;
+       GDBusNodeInfo *node_info;
        int id;
        GError *error = NULL;
 
@@ -890,16 +891,15 @@ int _bt_register_new_conn(const char *path, bt_new_connection_cb cb)
        if (gconn == NULL)
                return -1;
 
-       if (new_conn_node == NULL)
-               new_conn_node = _bt_get_gdbus_node(rfcomm_agent_xml);
-
-       if (new_conn_node == NULL)
+       node_info = _bt_get_gdbus_node(rfcomm_agent_xml);
+       if (node_info == NULL)
                return -1;
 
        id = g_dbus_connection_register_object(gconn, path,
-                                               new_conn_node->interfaces[0],
+                                               node_info->interfaces[0],
                                                &method_table,
                                                cb, NULL, &error);
+       g_dbus_node_info_unref(node_info);
        if (id == 0) {
                BT_ERR("Failed to register: %s", error->message);
                g_error_free(error);
@@ -983,6 +983,7 @@ fail:
 int _bt_register_new_conn_ex(const char *path, const char *bus_name, bt_new_connection_cb cb)
 {
        GDBusConnection *gconn;
+       GDBusNodeInfo *node_info;
        int id;
        GError *error = NULL;
 
@@ -990,16 +991,16 @@ int _bt_register_new_conn_ex(const char *path, const char *bus_name, bt_new_conn
        if (gconn == NULL)
                return -1;
 
-       if (new_conn_node == NULL)
-               new_conn_node = _bt_get_gdbus_node_ex(rfcomm_agent_xml, bus_name);
+       node_info = _bt_get_gdbus_node_ex(rfcomm_agent_xml, bus_name);
 
-       if (new_conn_node == NULL)
+       if (node_info == NULL)
                return -1;
 
        id = g_dbus_connection_register_object(gconn, path,
-                                               new_conn_node->interfaces[0],
+                                               node_info->interfaces[0],
                                                &method_table,
                                                cb, NULL, &error);
+       g_dbus_node_info_unref(node_info);
        if (id == 0) {
                BT_ERR("Failed to register: %s", error->message);
                g_error_free(error);
@@ -1459,54 +1460,35 @@ int _bt_discover_service_uuids(char *address, char *remote_uuid)
                BT_ERR("DBus Error: [%s]", err->message);
                g_clear_error(&err);
        }
-       ret = g_dbus_proxy_call_sync(proxy, "GetAll",
-                       g_variant_new("(s)", BT_DEVICE_INTERFACE),
-                       G_DBUS_CALL_FLAGS_NONE,
-                       DBUS_TIMEOUT, NULL,
-                       &err);
+       ret = g_dbus_proxy_call_sync(proxy, "Get",
+                       g_variant_new("(ss)", BT_DEVICE_INTERFACE, "UUIDs"),
+                       G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
        if (err) {
                result = BLUETOOTH_ERROR_INTERNAL;
                BT_ERR("DBus Error : %s", err->message);
                g_clear_error(&err);
                goto done;
-       }
-       if (ret == NULL) {
-               BT_ERR("g_dbus_proxy_call_sync function return NULL");
-               result = BLUETOOTH_ERROR_INTERNAL;
-               goto done;
+       } else {
+               g_variant_get(ret, "(v)", &value);
+               uuid_value = (char **)g_variant_get_strv(value, &size);
+               BT_DBG("Size items %d", size);
+               g_variant_unref(value);
+               g_variant_unref(ret);
        }
 
-       g_variant_get(ret, "(@a{sv})", &value);
-       g_variant_unref(ret);
-       if (value) {
-               GVariant *temp_value = g_variant_lookup_value(value, "UUIDs",
-                       G_VARIANT_TYPE_STRING_ARRAY);
-
-               if (temp_value) {
-                       size = g_variant_get_size(temp_value);
-                       if (size > 0) {
-                               uuid_value = (char **)g_variant_get_strv(temp_value, &size);
-                               BT_DBG("Size items %d", size);
-
-                               if (uuid_value) {
-                                       for (i = 0; uuid_value[i] != NULL; i++) {
-                                               BT_DBG("Remote uuids %s", uuid_value[i]);
-                                               if (strcasecmp(uuid_value[i], remote_uuid) == 0) {
-                                                       result = BLUETOOTH_ERROR_NONE;
-                                                       g_variant_unref(temp_value);
-                                                       goto done;
-                                               }
-                                       }
-                               }
+       if (uuid_value) {
+               for (i = 0; uuid_value[i] != NULL; i++) {
+                       BT_DBG("Remote uuids %s", uuid_value[i]);
+                       if (g_ascii_strcasecmp(uuid_value[i], remote_uuid) == 0) {
+                               result = BLUETOOTH_ERROR_NONE;
+                               goto done;
                        }
-                       g_variant_unref(temp_value);
                }
        }
+
 done:
        if (proxy)
                g_object_unref(proxy);
-       if (value)
-               g_variant_unref(value);
        if (uuid_value)
                g_free(uuid_value);
 
@@ -1540,38 +1522,25 @@ int _bt_get_cod_by_address(char *address, bluetooth_device_class_t *dev_class)
                g_clear_error(&err);
        }
 
-       result = g_dbus_proxy_call_sync(proxy, "GetAll",
-                       g_variant_new("(s)", BT_DEVICE_INTERFACE),
-                       G_DBUS_CALL_FLAGS_NONE,
-                       DBUS_TIMEOUT, NULL,
-                       &err);
+       result = g_dbus_proxy_call_sync(proxy, "Get",
+                       g_variant_new("(ss)", BT_DEVICE_INTERFACE, "Class"),
+                       G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
        if (err) {
                ret = BLUETOOTH_ERROR_INTERNAL;
                BT_ERR("DBus Error : %s", err->message);
                g_clear_error(&err);
                goto done;
-       }
-       if (result == NULL) {
-               BT_ERR("g_dbus_proxy_call_sync function return NULL");
-               ret = BLUETOOTH_ERROR_INTERNAL;
-               goto done;
-       }
-       g_variant_get(result, "(@a{sv})", &value);
-       g_variant_unref(result);
-       if (value) {
-               GVariant *temp_value = g_variant_lookup_value(value, "Class",
-                       G_VARIANT_TYPE_UINT32);
-               class = g_variant_get_uint32(temp_value);
+       } else {
+               g_variant_get(result, "(v)", &value);
+               class = g_variant_get_uint32(value);
                _bt_divide_device_class(dev_class, class);
-               if (temp_value)
-                       g_variant_unref(temp_value);
+               g_variant_unref(value);
+               g_variant_unref(result);
        }
 
 done:
        if (proxy)
                g_object_unref(proxy);
-       if (value)
-               g_variant_unref(value);
 
        BT_DBG("-");
        return ret;
@@ -1932,7 +1901,7 @@ GVariant *_bt_get_managed_objects(void)
                        BT_MANAGER_INTERFACE,
                        NULL, &error);
 
-       if (error) {
+       if (manager_proxy == NULL && error) {
                BT_ERR("Unable to create proxy: %s", error->message);
                g_clear_error(&error);
                return NULL;
@@ -2083,6 +2052,25 @@ int _bt_get_uuid_specification_name(const char *uuid, char **name)
        return BLUETOOTH_ERROR_NONE;
 }
 
+int _bt_get_error_value_from_message(const char *error_message)
+{
+       if (error_message == NULL) {
+               BT_ERR("Error message NULL");
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       BT_ERR("Error message = %s", error_message);
+
+       if (g_strrstr(error_message, BT_ERROR_OPERATION_NOT_SUPPORTED))
+               return BLUETOOTH_ERROR_NOT_IN_OPERATION;
+       else if (g_strrstr(error_message, BT_ERROR_OPERATION_NOT_ALLOWED))
+               return BLUETOOTH_ERROR_PERMISSION_DEINED;
+       else if (g_strrstr(error_message, BT_ERROR_ACCESS_DENIED))
+               return BLUETOOTH_ERROR_PERMISSION_DEINED;
+       else
+               return BLUETOOTH_ERROR_INTERNAL;
+}
+
 BT_EXPORT_API int bluetooth_is_supported(void)
 {
        int is_supported = 0;