Add container handling logic 51/266051/1 submit/tizen_6.5/20211105.042605
authorWootak Jung <wootak.jung@samsung.com>
Thu, 4 Nov 2021 04:07:47 +0000 (13:07 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Thu, 4 Nov 2021 23:44:51 +0000 (08:44 +0900)
bt-service is running in host only
All requests received from container will re-direct to host
Don't read vconf to check bt status

Change-Id: If2d42cde897c8f90f700aa5279232d8ab8f8a523

bt-api/bt-adapter.c
bt-api/bt-common.c
bt-service/services/bt-service-main.c
include/bt-internal-types.h

index c760552..ec9f7f3 100644 (file)
@@ -73,13 +73,13 @@ static int __bt_fill_device_list(GArray *out_param2, GPtrArray **dev_list)
 
 BT_EXPORT_API int bluetooth_check_adapter(void)
 {
-       int value = VCONFKEY_BT_STATUS_OFF;
+#ifndef TIZEN_BLUEDROID_PORTING
        int ret;
-
        ret = _bt_get_adapter_path(_bt_get_system_common_conn(), NULL);
-
-       if (ret != BLUETOOTH_ERROR_NONE)
-               return BLUETOOTH_ADAPTER_DISABLED;
+       return ret == BLUETOOTH_ERROR_NONE ? BLUETOOTH_ADAPTER_ENABLED :
+                                               BLUETOOTH_ADAPTER_DISABLED;
+#else
+       int value = VCONFKEY_BT_STATUS_OFF;
 
        /* check VCONFKEY_BT_STATUS */
        if (vconf_get_int(VCONFKEY_BT_STATUS, &value) != 0) {
@@ -89,6 +89,7 @@ BT_EXPORT_API int bluetooth_check_adapter(void)
 
        return value == VCONFKEY_BT_STATUS_OFF ? BLUETOOTH_ADAPTER_DISABLED :
                                                BLUETOOTH_ADAPTER_ENABLED;
+#endif
 }
 
 BT_EXPORT_API int bluetooth_enable_adapter(void)
index d82e921..1e8345d 100644 (file)
@@ -95,7 +95,13 @@ GDBusConnection *_bt_get_system_common_conn(void)
 {
        if (system_common_conn == NULL) {
                GError *error = NULL;
-               system_common_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+               if (access(CONTAINER_FILE, F_OK) == 0)
+                       system_common_conn = g_dbus_connection_new_for_address_sync(
+                                       DBUS_HOST_SYSTEM_BUS_ADDRESS,
+                                       G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
+                                       NULL, NULL, &error);
+               else
+                       system_common_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
                if (error) {
                        BT_ERR("GDBus connection Error : %s \n", error->message);
                        g_clear_error(&error);
@@ -109,7 +115,13 @@ GDBusConnection *_bt_get_system_shared_conn(void)
 {
        if (system_shared_conn == NULL) {
                GError *error = NULL;
-               system_shared_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+               if (access(CONTAINER_FILE, F_OK) == 0)
+                       system_shared_conn = g_dbus_connection_new_for_address_sync(
+                                       DBUS_HOST_SYSTEM_BUS_ADDRESS,
+                                       G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
+                                       NULL, NULL, &error);
+               else
+                       system_shared_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
                if (error) {
                        BT_ERR("GDBus connection Error : %s \n", error->message);
                        g_clear_error(&error);
index 7ee8782..5ce987f 100644 (file)
@@ -378,6 +378,11 @@ int main(void)
                return 0;
        }
 
+       if (access(CONTAINER_FILE, F_OK) == 0) {
+               BT_INFO("bt-service is not running in container");
+               return 0;
+       }
+
        memset(&sa, 0, sizeof(sa));
        sa.sa_sigaction = __bt_sigterm_handler;
        sa.sa_flags = SA_SIGINFO;
index decd303..58e7b95 100644 (file)
@@ -923,6 +923,9 @@ static inline bool get_tizen_feature_supported(char *feature)
 #define TIZEN_FEATURE_PBAP_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_PBAP) == true)
 #define TIZEN_FEATURE_ROBOT_REFERENCE ((get_tizen_model()) == _MODEL_ROBOT)
 
+#define CONTAINER_FILE "/run/systemd/container"
+#define DBUS_HOST_SYSTEM_BUS_ADDRESS "unix:path=/run/host/dbus/system_bus_socket"
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */