X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service%2Fbt-service-common.c;h=88b8ee4dc99d36e65630bd73b6e537685ade8a6b;hb=b703dc845fadbe8a5827585e802f9b3c425cff52;hp=346d630b7481d518ee9cbe4eca801f5406888166;hpb=d41e97a0b14db61d3d36eb13ca2f69dbecaff394;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service/bt-service-common.c b/bt-service/bt-service-common.c index 346d630..88b8ee4 100644 --- a/bt-service/bt-service-common.c +++ b/bt-service/bt-service-common.c @@ -45,25 +45,23 @@ static void *net_conn; static GDBusProxy *adapter_properties_proxy; -static GDBusConnection *system_gconn = NULL; - GDBusConnection *_bt_gdbus_init_system_gconn(void) { GError *error = NULL; dbus_threads_init_default(); - if (system_gconn != NULL) - return system_gconn; + if (system_conn != NULL) + return system_conn; - system_gconn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); + system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (!system_gconn) { + if (!system_conn) { BT_ERR("Unable to connect to dbus: %s", error->message); g_clear_error(&error); } - return system_gconn; + return system_conn; } GDBusConnection *_bt_gdbus_get_system_gconn(void) @@ -71,10 +69,9 @@ GDBusConnection *_bt_gdbus_get_system_gconn(void) GDBusConnection *local_system_gconn = NULL; GError *error = NULL; - if (system_gconn == NULL) { - system_gconn = _bt_gdbus_init_system_gconn(); - } else if (g_dbus_connection_is_closed(system_gconn)) { - + if (system_conn == NULL) { + system_conn = _bt_gdbus_init_system_gconn(); + } else if (g_dbus_connection_is_closed(system_conn)) { local_system_gconn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); if (!local_system_gconn) { @@ -82,22 +79,66 @@ GDBusConnection *_bt_gdbus_get_system_gconn(void) g_clear_error(&error); } - system_gconn = local_system_gconn; + system_conn = local_system_gconn; + } + + return system_conn; +} + +GDBusConnection *_bt_gdbus_init_session_gconn(void) +{ + GError *error = NULL; + + if (!g_thread_supported()) + g_thread_init(NULL); + + dbus_threads_init_default(); + + if (session_conn != NULL) + return session_conn; + + session_conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); + + if (!session_conn) { + BT_ERR("Unable to connect to dbus: %s", error->message); + g_clear_error(&error); + } + + return session_conn; +} + +GDBusConnection *_bt_gdbus_get_session_gconn(void) +{ + GDBusConnection *local_session_gconn = NULL; + GError *error = NULL; + + if (session_conn == NULL) { + session_conn = _bt_gdbus_init_session_gconn(); + } else if (g_dbus_connection_is_closed(session_conn)) { + local_session_gconn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); + + if (!local_session_gconn) { + BT_ERR("Unable to connect to dbus: %s", error->message); + g_clear_error(&error); + } + + session_conn = local_session_gconn; } - return system_gconn; + return session_conn; } static GDBusProxy *__bt_init_manager_proxy(void) { + GDBusConnection *g_conn; GDBusProxy *proxy; - if (system_conn == NULL) { - system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); - retv_if(system_conn == NULL, NULL); - } + dbus_threads_init_default(); - proxy = g_dbus_proxy_new_sync(system_conn, G_DBUS_PROXY_FLAGS_NONE, + g_conn = _bt_gdbus_get_system_gconn(); + retv_if(g_conn == NULL, NULL); + + proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, BT_BLUEZ_NAME, BT_MANAGER_PATH, BT_MANAGER_INTERFACE, NULL, NULL); @@ -113,14 +154,15 @@ static GDBusProxy *__bt_init_manager_proxy(void) static GDBusProxy *__bt_init_adapter_proxy(void) { + GDBusConnection *g_conn; GDBusProxy *manager_proxy; GDBusProxy *proxy; char *adapter_path = NULL; - if (system_conn == NULL) { - system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); - retv_if(system_conn == NULL, NULL); - } + dbus_threads_init_default(); + + g_conn = _bt_gdbus_get_system_gconn(); + retv_if(g_conn == NULL, NULL); manager_proxy = _bt_get_manager_proxy(); retv_if(manager_proxy == NULL, NULL); @@ -128,7 +170,7 @@ static GDBusProxy *__bt_init_adapter_proxy(void) adapter_path = _bt_get_adapter_path(); retv_if(adapter_path == NULL, NULL); - proxy = g_dbus_proxy_new_sync(system_conn, G_DBUS_PROXY_FLAGS_NONE, + proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, BT_BLUEZ_NAME, adapter_path, BT_ADAPTER_INTERFACE, NULL, NULL); @@ -143,14 +185,15 @@ static GDBusProxy *__bt_init_adapter_proxy(void) static GDBusProxy *__bt_init_adapter_properties_proxy(void) { + GDBusConnection *g_conn; GDBusProxy *manager_proxy; GDBusProxy *proxy; char *adapter_path = NULL; - if (system_conn == NULL) { - system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); - retv_if(system_conn == NULL, NULL); - } + dbus_threads_init_default(); + + g_conn = _bt_gdbus_get_system_gconn(); + retv_if(g_conn == NULL, NULL); manager_proxy = _bt_get_manager_proxy(); retv_if(manager_proxy == NULL, NULL); @@ -158,7 +201,7 @@ static GDBusProxy *__bt_init_adapter_properties_proxy(void) adapter_path = _bt_get_adapter_path(); retv_if(adapter_path == NULL, NULL); - proxy = g_dbus_proxy_new_sync(system_conn, G_DBUS_PROXY_FLAGS_NONE, + proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, BT_BLUEZ_NAME, adapter_path, BT_PROPERTIES_INTERFACE, NULL, NULL); @@ -171,50 +214,6 @@ static GDBusProxy *__bt_init_adapter_properties_proxy(void) return proxy; } -GDBusConnection *__bt_init_system_gconn(void) -{ - if (system_conn == NULL) - system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); - - return system_conn; -} - -GDBusConnection *__bt_init_session_conn(void) -{ - if (session_conn == NULL) - session_conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL); - - return session_conn; -} - -GDBusConnection *_bt_get_session_gconn(void) -{ - return (session_conn) ? session_conn : __bt_init_session_conn(); -} - -GDBusConnection *_bt_get_system_gconn(void) -{ - return (system_conn) ? system_conn : __bt_init_system_gconn(); -} - -GDBusConnection *_bt_get_system_conn(void) -{ - GDBusConnection *g_conn; - - if (system_conn == NULL) { - g_conn = __bt_init_system_gconn(); - } else { - g_conn = system_conn; - } - - if (!g_conn) { - BT_ERR("Unable to get dbus connection"); - return NULL; - } - - return g_conn; -} - GDBusProxy *_bt_get_manager_proxy(void) { if (manager_proxy) { @@ -309,7 +308,7 @@ char *_bt_get_adapter_path(void) GVariantIter *iter = NULL; char *adapter_path = NULL; - conn = _bt_get_system_conn(); + conn = _bt_gdbus_get_system_gconn(); retv_if(conn == NULL, NULL); manager_proxy = _bt_get_manager_proxy(); @@ -390,9 +389,8 @@ void _bt_convert_device_path_to_address(const char *device_path, dev_addr += 4; g_strlcpy(address, dev_addr, sizeof(address)); - while ((pos = strchr(address, '_')) != NULL) { + while ((pos = strchr(address, '_')) != NULL) *pos = ':'; - } g_strlcpy(device_address, address, BT_ADDRESS_STRING_SIZE); } @@ -402,21 +400,21 @@ void _bt_convert_device_path_to_address(const char *device_path, void _bt_convert_addr_string_to_type(unsigned char *addr, const char *address) { - int i; - char *ptr = NULL; + int i; + char *ptr = NULL; ret_if(address == NULL); ret_if(addr == NULL); - for (i = 0; i < BT_ADDRESS_LENGTH_MAX; i++) { - addr[i] = strtol(address, &ptr, 16); - if (ptr[0] != '\0') { - if (ptr[0] != ':') - return; + for (i = 0; i < BT_ADDRESS_LENGTH_MAX; i++) { + addr[i] = strtol(address, &ptr, 16); + if (ptr[0] != '\0') { + if (ptr[0] != ':') + return; - address = ptr + 1; - } - } + address = ptr + 1; + } + } } void _bt_convert_addr_string_to_secure_string(char *addr, @@ -428,7 +426,7 @@ void _bt_convert_addr_string_to_secure_string(char *addr, ret_if(addr == NULL); len = strlen(address); - ret_if(len != BT_ADDRESS_STRING_SIZE- 1); + ret_if(len != BT_ADDRESS_STRING_SIZE - 1); strncpy(addr, address, len); @@ -577,9 +575,8 @@ int _bt_set_socket_non_blocking(int socket_fd) if (arg < 0) return -errno; - if (arg & O_NONBLOCK) { + if (arg & O_NONBLOCK) BT_ERR("Already Non-blocking \n"); - } arg |= O_NONBLOCK; @@ -623,9 +620,9 @@ static char *__bt_extract_device_path(GVariantIter *iter, char *address) return NULL; } _bt_convert_device_path_to_address(object_path, device_address); - if (g_strcmp0(address, device_address) == 0) { + if (g_strcmp0(address, device_address) == 0) return g_strdup(object_path); - } + } BT_ERR("Unable to get object path"); @@ -640,7 +637,7 @@ char *_bt_get_device_object_path(char *address) GVariant *result = NULL; GVariantIter *iter = NULL; - conn = _bt_get_system_conn(); + conn = _bt_gdbus_get_system_gconn(); retv_if(conn == NULL, NULL); manager_proxy = _bt_get_manager_proxy(); @@ -682,6 +679,8 @@ char *_bt_get_profile_uuid128(bt_profile_type_t profile_type) return strdup(NAP_UUID); case BT_PROFILE_CONN_HFG: return strdup(HFP_AG_UUID); + case BT_PROFILE_CONN_PBAP: + return strdup(PBAP_UUID); case BT_PROFILE_CONN_GATT: case BT_PROFILE_CONN_ALL: /* NULL UUID will connect to both the audio profiles*/ default: @@ -774,7 +773,7 @@ char *_bt_convert_error_to_string(int error) char * _bt_convert_disc_reason_to_string(int reason) { - switch(reason) { + switch (reason) { case (int)BLUETOOTH_ERROR_PAGE_TIMEOUT: return "Page timeout"; case (int)BLUETOOTH_ERROR_CONNECTION_TIMEOUT: @@ -888,7 +887,7 @@ int _bt_eventsystem_set_value(const char *event, const char *key, const char *va return ret; } -void __bt_get_auth_info(GVariant *reply, char *auth_info) +void __bt_get_auth_info(GVariant *reply, char *auth_info) { int cursor; GVariant *tmp_value; @@ -899,8 +898,7 @@ void __bt_get_auth_info(GVariant *reply, char *auth_info) guint8 m_value; int i = 0; - - tmp_value = g_variant_lookup_value (reply, "IsAliasSet", + tmp_value = g_variant_lookup_value(reply, "IsAliasSet", G_VARIANT_TYPE_BOOLEAN); if (tmp_value) { is_alias_set = g_variant_get_boolean(tmp_value);