Change the adapter state check logic 37/286437/1 accepted/tizen/unified/20230111.174536
authorWootak Jung <wootak.jung@samsung.com>
Fri, 6 Jan 2023 04:58:37 +0000 (13:58 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Fri, 6 Jan 2023 05:00:19 +0000 (14:00 +0900)
Change-Id: If283fa348962eec9a175119ff1e9e2c6880697db
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
bt-api/bt-adapter.c
bt-api/bt-request-sender.c
bt-api/include/bt-request-sender.h
bt-service/services/bt-request-handler.c
include/bt-internal-types.h

index 55d58e0..76ab25e 100644 (file)
@@ -71,91 +71,25 @@ static int __bt_fill_device_list(GArray *out_param2, GPtrArray **dev_list)
        return BLUETOOTH_ERROR_NONE;
 }
 
-static gboolean __bt_get_check_service_available()
+BT_EXPORT_API int bluetooth_check_adapter(void)
 {
-       GDBusConnection *service_gconn;
-       GDBusProxy *proxy;
-       GError *err = NULL;
-       GArray *in_param5 = NULL;
-       GVariant *ret, *param1, *param2, *param3, *param4, *param5;
-
-       service_gconn = _bt_get_system_common_conn();
-       if (!service_gconn)
-               return FALSE;
-
-       /* G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START
-        * method call will be failed not auto activation
-        * if service is unavailble. */
-       proxy = g_dbus_proxy_new_sync(service_gconn,
-                       G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL,
-                       BT_DBUS_NAME,
-                       BT_SERVICE_PATH,
-                       BT_DBUS_NAME,
-                       NULL, &err);
-       if (!proxy) {
-               if (err) {
-                        BT_ERR("Unable to create proxy: %s", err->message);
-                        g_clear_error(&err);
-               }
-
-               return FALSE;
-       }
+#ifndef TIZEN_BLUEDROID_PORTING
+       int result;
+       bluetooth_adapter_state_t state = BLUETOOTH_ADAPTER_DISABLED;
 
        BT_INIT_PARAMS();
        BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
-       in_param5 = g_array_new(TRUE, TRUE, sizeof(gchar));
-
-       param1 = g_variant_new_from_data((const GVariantType *)"ay",
-                       in_param1->data, in_param1->len,
-                       TRUE, NULL, NULL);
-       param2 = g_variant_new_from_data((const GVariantType *)"ay",
-                       in_param2->data, in_param2->len,
-                       TRUE, NULL, NULL);
-       param3 = g_variant_new_from_data((const GVariantType *)"ay",
-                       in_param3->data, in_param3->len,
-                       TRUE, NULL, NULL);
-       param4 = g_variant_new_from_data((const GVariantType *)"ay",
-                       in_param4->data, in_param4->len,
-                       TRUE, NULL, NULL);
-       param5 = g_variant_new_from_data((const GVariantType *)"ay",
-                       in_param5->data, in_param5->len,
-                       TRUE, NULL, NULL);
-
-       ret = g_dbus_proxy_call_sync(proxy, "service_request",
-                       g_variant_new("(iii@ay@ay@ay@ay@ay)",
-                                       BT_BLUEZ_SERVICE, BT_CHECK_AVAILABLE,
-                                       BT_SYNC_REQ, param1,
-                                       param2, param3,
-                                       param4, param5),
-                       G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, &err);
-
-       BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
-       g_array_free(in_param5, TRUE);
+       result = _bt_send_request_not_autostart(BT_BLUEZ_SERVICE, BT_CHECK_ADAPTER,
+               in_param1, in_param2, in_param3, in_param4, &out_param);
 
-       if (ret == NULL) {
-               if (err) {
-                       BT_ERR("D-Bus API failure: errCode[%x], message[%s]",
-                                       err->code, err->message);
-                       g_clear_error(&err);
-               }
-               BT_ERR("bt-service is unavailable");
-               return FALSE;
+       if (result == BLUETOOTH_ERROR_NONE) {
+               state = g_array_index(out_param, bluetooth_adapter_state_t, 0);
        }
 
-       return TRUE;
-}
+       BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
 
-BT_EXPORT_API int bluetooth_check_adapter(void)
-{
-#ifndef TIZEN_BLUEDROID_PORTING
-       int ret;
-       gboolean is_service_avail;
-       ret = _bt_get_adapter_path(_bt_get_system_common_conn(), NULL);
-       is_service_avail = __bt_get_check_service_available();
-       return (ret == BLUETOOTH_ERROR_NONE && is_service_avail) ?
-                       BLUETOOTH_ADAPTER_ENABLED : BLUETOOTH_ADAPTER_DISABLED;
+       return state ? BLUETOOTH_ADAPTER_ENABLED : BLUETOOTH_ADAPTER_DISABLED;
 #else
        int value = VCONFKEY_BT_STATUS_OFF;
 
index bbfd821..d98d939 100644 (file)
@@ -35,6 +35,7 @@
 static GSList *sending_requests;
 
 static GDBusProxy *service_gproxy;
+static GDBusProxy *service_gproxy_not_autostart;
 
 static GDBusProxy *__bt_gdbus_init_service_proxy(void)
 {
@@ -67,11 +68,50 @@ static GDBusProxy *__bt_gdbus_init_service_proxy(void)
        return proxy;
 }
 
+static GDBusProxy *__bt_gdbus_init_service_proxy_not_autostart(void)
+{
+       GDBusConnection *service_gconn;
+       GDBusProxy *proxy;
+       GError *err = NULL;
+
+       service_gconn = _bt_get_system_common_conn();
+
+       if (!service_gconn)
+               return NULL;
+
+       /* G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START
+        * method call will be failed not auto activation
+        * if service is unavailble. */
+       proxy =  g_dbus_proxy_new_sync(service_gconn,
+                       G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL,
+                       BT_DBUS_NAME,
+                       BT_SERVICE_PATH,
+                       BT_DBUS_NAME,
+                       NULL, &err);
+       if (!proxy) {
+               if (err) {
+                        BT_ERR("Unable to create proxy: %s", err->message);
+                        g_clear_error(&err);
+               }
+
+               return NULL;
+       }
+
+       service_gproxy_not_autostart = proxy;
+
+       return proxy;
+}
+
 static GDBusProxy *__bt_gdbus_get_service_proxy(void)
 {
        return (service_gproxy) ? service_gproxy : __bt_gdbus_init_service_proxy();
 }
 
+static GDBusProxy *__bt_gdbus_get_service_proxy_not_autostart(void)
+{
+       return (service_gproxy_not_autostart) ? service_gproxy_not_autostart : __bt_gdbus_init_service_proxy_not_autostart();
+}
+
 void _bt_gdbus_deinit_proxys(void)
 {
        if (service_gproxy) {
@@ -945,3 +985,99 @@ int _bt_sync_send_request_with_unix_fd_list(
 
        return result;
 }
+
+int _bt_sync_send_request_not_autostart(int service_type, int service_function,
+                       GArray *in_param1, GArray *in_param2,
+                       GArray *in_param3, GArray *in_param4,
+                       GArray **out_param1)
+{
+       int result = BLUETOOTH_ERROR_NONE;
+       GError *error = NULL;
+       GArray *in_param5 = NULL;
+//     GArray *out_param2 = NULL;
+
+       GDBusProxy  *proxy;
+       GVariant *ret;
+       GVariant *param1;
+       GVariant *param2;
+       GVariant *param3;
+       GVariant *param4;
+       GVariant *param5;
+
+       switch (service_type) {
+       case BT_BLUEZ_SERVICE:
+       case BT_OBEX_SERVICE:
+       case BT_AGENT_SERVICE:
+       case BT_CHECK_PRIVILEGE:
+               proxy = __bt_gdbus_get_service_proxy_not_autostart();
+               if (!proxy)
+                       return BLUETOOTH_ERROR_INTERNAL;
+
+               in_param5 = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+
+
+               param1 = g_variant_new_from_data((const GVariantType *)"ay",
+                                       in_param1->data, in_param1->len,
+                                       TRUE, NULL, NULL);
+               param2 = g_variant_new_from_data((const GVariantType *)"ay",
+                                       in_param2->data, in_param2->len,
+                                       TRUE, NULL, NULL);
+               param3 = g_variant_new_from_data((const GVariantType *)"ay",
+                                       in_param3->data, in_param3->len,
+                                       TRUE, NULL, NULL);
+               param4 = g_variant_new_from_data((const GVariantType *)"ay",
+                                       in_param4->data, in_param4->len,
+                                       TRUE, NULL, NULL);
+               param5 = g_variant_new_from_data((const GVariantType *)"ay",
+                                       in_param5->data, in_param5->len,
+                                       TRUE, NULL, NULL);
+
+               ret = g_dbus_proxy_call_sync(proxy, "service_request",
+                                       g_variant_new("(iii@ay@ay@ay@ay@ay)",
+                                               service_type, service_function,
+                                               BT_SYNC_REQ, param1,
+                                               param2, param3,
+                                               param4, param5),
+                                       G_DBUS_CALL_FLAGS_NONE, -1,
+                                       NULL, &error);
+
+               g_array_free(in_param5, TRUE);
+
+               if (ret == NULL) {
+                       if (error != NULL)
+                               g_clear_error(&error);
+                       BT_DBG("bt-service is not available");
+                       return BLUETOOTH_ERROR_INTERNAL;
+               }
+
+               param1 = NULL;
+//             param2 = NULL;
+
+               g_variant_get(ret, "(iv)", &result, &param1);
+
+               if (param1) {
+                       *out_param1 = g_array_new(TRUE, TRUE, sizeof(gchar));
+                       __bt_fill_garray_from_variant(param1, *out_param1);
+                       g_variant_unref(param1);
+               }
+
+//             if (param2) {
+//                     out_param2 = g_array_new(TRUE, TRUE, sizeof(gchar));
+//                     __bt_fill_garray_from_variant(param2, out_param2);
+//                     result = g_array_index(out_param2, int, 0);
+//                     g_variant_unref(param2);
+//                     g_array_free(out_param2, TRUE);
+//             } else {
+//                     result = BLUETOOTH_ERROR_INTERNAL;
+//             }
+
+               g_variant_unref(ret);
+               break;
+       default:
+               BT_ERR("Unknown service type");
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       return result;
+}
index bc5599b..647cf82 100644 (file)
@@ -98,6 +98,18 @@ int _bt_async_send_request_with_unix_fd_list(int service_type, int service_funct
        } \
        )
 
+int _bt_sync_send_request_not_autostart(int service_type, int service_function,
+                       GArray *in_param1, GArray *in_param2,
+                       GArray *in_param3, GArray *in_param4,
+                       GArray **out_param1);
+
+/* The caller of this should pass #define macro/enum types as the first two params */
+#define _bt_send_request_not_autostart(a, b, format ...) ( \
+       { \
+       _bt_sync_send_request_not_autostart(a, b, format); \
+       } \
+       )
+
 #ifdef __cplusplus
 }
 #endif
index c088620..9b5d5b2 100644 (file)
@@ -499,11 +499,6 @@ int __bt_bluez_request(int function_name,
        char *sender = NULL;
 
        switch (function_name) {
-       case BT_CHECK_AVAILABLE: {
-               int available = true;
-               g_array_append_vals(*out_param1, &available, sizeof(int));
-               break;
-       }
        case BT_ENABLE_ADAPTER: {
                result = _bt_enable_adapter();
                _bt_adapter_start_enable_timer();
@@ -5722,7 +5717,6 @@ gboolean __bt_service_check_privilege(int function_name,
        break;
 
        case BT_CHECK_ADAPTER:
-       case BT_CHECK_AVAILABLE:
        case BT_GET_RSSI:
 
        case BT_GET_LOCAL_NAME:
index 4b7b8ce..70cc7d3 100644 (file)
@@ -170,7 +170,6 @@ typedef enum {
 
 typedef enum {
        BT_CHECK_ADAPTER = BT_FUNC_BASE,
-       BT_CHECK_AVAILABLE,
        BT_ENABLE_ADAPTER,
        BT_DISABLE_ADAPTER,
        BT_RECOVER_ADAPTER,