Apply send_destination_prefix policy#2
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / bluez_hal / src / bt-hal-gatt-server.c
index 3da7597..f35bc0c 100644 (file)
@@ -1437,7 +1437,7 @@ gboolean __bt_hal_gatt_emit_interface_removed(gchar *object_path, gchar *interfa
        g_variant_builder_add(array_builder, "s", interface);
 
        ret = g_dbus_connection_emit_signal(g_conn, NULL, "/",
-                       "org.freedesktop.DBus.ObjectManager",
+                       "org.freedesktop.Dbus.Objectmanager",
                        "InterfacesRemoved",
                        g_variant_new("(oas)",
                                object_path, array_builder),
@@ -1880,89 +1880,6 @@ static bt_status_t gatt_server_close(int server_if, const bt_bdaddr_t *bd_addr,
        return BT_STATUS_SUCCESS;
 }
 
-static void __bt_gatt_close_gdbus_connection(void)
-{
-       GError *err = NULL;
-       DBG("+");
-
-       if (g_conn == NULL)
-               return;
-
-       if (!g_dbus_connection_flush_sync(g_conn, NULL, &err)) {
-               ERR("Fail to flush the connection: %s", err->message);
-               g_error_free(err);
-               err = NULL;
-       }
-
-       if (!g_dbus_connection_close_sync(g_conn, NULL, &err)) {
-               if (err) {
-                       ERR("Fail to close the dbus connection: %s", err->message);
-                       g_error_free(err);
-               }
-       }
-
-       g_object_unref(g_conn);
-       g_conn = NULL;
-       DBG("-");
-}
-
-static GDBusConnection *__bt_gatt_get_gdbus_connection(void)
-{
-       GDBusConnection *local_system_gconn = NULL;
-       char *address;
-       GError *err = NULL;
-
-       if (g_conn == NULL) {
-               address = g_dbus_address_get_for_bus_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
-               if (address == NULL) {
-                       if (err) {
-                               ERR("Failed to get bus address: %s", err->message);
-                               g_clear_error(&err);
-                       }
-                       return NULL;
-               }
-
-               g_conn = g_dbus_connection_new_for_address_sync(address,
-                               G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
-                               G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
-                               NULL, /* GDBusAuthObserver */
-                               NULL,
-                               &err);
-               if (!g_conn) {
-                       if (err) {
-                               ERR("Unable to connect to dbus: %s", err->message);
-                               g_clear_error(&err);
-                       }
-                       return NULL;
-               }
-       } else if (g_dbus_connection_is_closed(g_conn)) {
-               address = g_dbus_address_get_for_bus_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
-               if (address == NULL) {
-                       if (err) {
-                               ERR("Failed to get bus address: %s", err->message);
-                               g_clear_error(&err);
-                       }
-                       return NULL;
-               }
-
-               local_system_gconn = g_dbus_connection_new_for_address_sync(address,
-                               G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
-                               G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
-                               NULL, /* GDBusAuthObserver */
-                               NULL,
-                               &err);
-
-               if (!local_system_gconn) {
-                       ERR("Unable to connect to dbus: %s", err->message);
-                       g_clear_error(&err);
-               }
-
-               g_conn = local_system_gconn;
-       }
-
-       return g_conn;
-}
-
 static char* __bt_hal_convert_uuid_to_string(bt_uuid_t *srvc_id)
 {
        char uuid_buf[5];
@@ -2053,7 +1970,7 @@ int __bt_hal_add_service_to_dbus(char *app_path, int slot, btgatt_srvc_id_t *srv
                        GATT_SERV_INTERFACE, inner_builder);
 
        ret = g_dbus_connection_emit_signal(g_conn, NULL, "/",
-                       "org.freedesktop.DBus.ObjectManager",
+                       "org.freedesktop.Dbus.ObjectManager",
                        "InterfacesAdded",
                        g_variant_new("(oa{sa{sv}})",
                                path, builder),
@@ -2142,43 +2059,45 @@ static void __bt_hal_gatt_deinit(char *app_path)
        if (gatt_server_apps == NULL) {
                INFO("All GATT servers are removed, clean all DBUS resources");
                if (owner_id) {
-                       /* unregister the exported interface for object manager
-                          g_conn and manager_id are common for all GATT servers */
-                       g_dbus_connection_unregister_object(g_conn,
-                                       manager_id);
+                       /* unregister the exported interface for object manager */
+                       g_dbus_connection_unregister_object(g_conn, manager_id);
                        manager_id = 0;
                        g_bus_unown_name(owner_id);
                        owner_id = 0;
 
                        g_object_unref(manager_gproxy);
                        manager_gproxy = NULL;
-
-                       /* Close the GDBUS connection */
-                       __bt_gatt_close_gdbus_connection();
                }
        }
        INFO("-");
 }
 
-int __bt_hal_gatt_init(void)
+static int __bt_hal_gatt_init(void)
 {
-       GDBusConnection *conn = NULL;
        DBG("+");
+
        /* Only once for ALL GATT Servers */
        if (owner_id == 0) {
-               owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
-                               BT_GATT_SERVICE_NAME,
-                               G_BUS_NAME_OWNER_FLAGS_NONE,
-                               NULL, NULL, NULL, NULL, NULL);
-       }
-       INFO("Owner ID [%d]", owner_id);
+               GError *err = NULL;
+               gchar *name = NULL;
 
-       /* Only once for ALL GATT Servers conn = g_conn(global)*/
-       conn = __bt_gatt_get_gdbus_connection();
-       if (!conn) {
-               ERR("Unable to get connection");
-               return BT_STATUS_FAIL;
+               g_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+               if (!g_conn) {
+                       if (err) {
+                               ERR("Unable to connect to gdbus: %s", err->message);
+                               g_clear_error(&err);
+                       }
+                       return BT_STATUS_FAIL;
+               }
+
+               name = g_strdup_printf("%s.p%d", BT_GATT_SERVICE_NAME, getpid());
+               INFO("well-known name: %s", name);
+
+               owner_id = g_bus_own_name_on_connection(g_conn, name,
+                                       G_BUS_NAME_OWNER_FLAGS_NONE,
+                                       NULL, NULL, NULL, NULL);
        }
+       INFO("Owner ID [%d]", owner_id);
 
        /* Only once for ALL GATT Servers */
        if (manager_node_info == NULL) {
@@ -2234,7 +2153,6 @@ static bt_status_t gatt_server_add_service(int server_if, btgatt_srvc_id_t *srvc
        char *app_path = NULL;
        GError *error = NULL;
        int *app_id = NULL;
-       guint manager_id;
 
        int result = BT_STATUS_SUCCESS;
 
@@ -2269,6 +2187,7 @@ static bt_status_t gatt_server_add_service(int server_if, btgatt_srvc_id_t *srvc
                        g_error_free(error);
                        goto failed;
                }
+               INFO("manager_id [%d]", manager_id);
 
                /* For current GATT Server, app_path is created, save it in Table */
                _bt_hal_update_gatt_server_path(server_if, app_path);
@@ -2447,7 +2366,7 @@ static bt_status_t gatt_server_add_characteristic(int slot, int service_handle,
                        inner_builder);
 
        ret = g_dbus_connection_emit_signal(g_conn, NULL, "/",
-                       "org.freedesktop.DBus.ObjectManager",
+                       "org.freedesktop.Dbus.ObjectManager",
                        "InterfacesAdded",
                        g_variant_new("(oa{sa{sv}})",
                                path, builder),
@@ -2613,7 +2532,7 @@ static bt_status_t gatt_server_add_descriptor(int slot, int service_handle, bt_u
                        inner_builder);
 
        g_dbus_connection_emit_signal(g_conn, NULL, "/",
-                       "org.freedesktop.DBus.ObjectManager",
+                       "org.freedesktop.Dbus.ObjectManager",
                        "InterfacesAdded",
                        g_variant_new("(oa{sa{sv}})",
                                path, builder),
@@ -3104,7 +3023,7 @@ static bt_status_t gatt_server_send_response(int conn_id, int trans_id,
 
        /* DEBUG */
        for (i = 0; i < response->attr_value.len; i++)
-               DBG("Resonse [%d] = [0x%x]", response->attr_value.value[i]);
+               DBG("Resonse [%d] = [0x%x]", i, response->attr_value.value[i]);
 
        if (req_info->request_type == BT_HAL_GATT_REQUEST_TYPE_READ) {
                GVariantBuilder *inner_builder = NULL;