X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service%2Fbt-service-device.c;h=4709e9d4437e5242f7bbef441e4768370ea3db51;hb=ada9ae03059e4bd38ced9b3af20dbc5a5ef78757;hp=21cf6918bd709141dbc2d6fbfcf906bb411b4658;hpb=9c054eb0f1fb1f354c7ea7603f7e7fa2719d488c;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service/bt-service-device.c b/bt-service/bt-service-device.c index 21cf691..4709e9d 100644 --- a/bt-service/bt-service-device.c +++ b/bt-service/bt-service-device.c @@ -122,9 +122,6 @@ static guint pending_le_conn_timer_id = 0; static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); -static int __bt_retry_bond(void); - - /*static void __bt_decline_pair_request() { GVariant *out_param1; @@ -691,81 +688,6 @@ static int __bt_cancel_bonding(void) return BLUETOOTH_ERROR_NONE; } -static int __bt_retry_bond(void) -{ - BT_CHECK_PARAMETER(bonding_info, return); - BT_CHECK_PARAMETER(bonding_info->addr, return); - - g_dbus_proxy_call(bonding_info->device_proxy, "Pair", - g_variant_new("(y)", bonding_info->conn_type), - G_DBUS_CALL_FLAGS_NONE, - BT_MAX_DBUS_TIMEOUT, - NULL, - (GAsyncReadyCallback)__bt_bond_device_cb, - NULL); - - return BLUETOOTH_ERROR_NONE; -} - - -static int __bt_remove_and_bond(void) -{ - GDBusProxy *adapter_proxy; - GVariant *result = NULL; - GError *err = NULL; - char *device_path = NULL; - - BT_CHECK_PARAMETER(bonding_info, return); - BT_CHECK_PARAMETER(bonding_info->addr, return); - - adapter_proxy = _bt_get_adapter_proxy(); - retv_if(adapter_proxy == NULL, BLUETOOTH_ERROR_INTERNAL); - - result = g_dbus_proxy_call_sync(adapter_proxy, "FindDevice", - g_variant_new("(s)", bonding_info->addr), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - NULL); - if (result == NULL) - return BLUETOOTH_ERROR_INTERNAL; - - g_variant_get(result , "(o)", &device_path); - g_variant_unref(result); - - retv_if(device_path == NULL, BLUETOOTH_ERROR_INTERNAL); - - result = g_dbus_proxy_call_sync(adapter_proxy, "UnpairDevice", - g_variant_new("(o)", device_path), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &err); - g_free(device_path); - if (result == NULL) { - if (err != NULL) { - BT_ERR("UnpairDevice Fail: %s", err->message); - g_error_free(err); - } - return BLUETOOTH_ERROR_INTERNAL; - } - - return __bt_retry_bond(); -} - -static int __bt_cancel_and_bond(void) -{ - int ret = BLUETOOTH_ERROR_NONE; - - ret = _bt_agent_reply_cancellation(); - if (ret != BLUETOOTH_ERROR_NONE) { - BT_ERR("Fail to call reply cancellation"); - return ret; - } - return __bt_retry_bond(); -} - - static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { @@ -775,9 +697,6 @@ static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, GVariant *out_param1; request_info_t *req_info; bluetooth_device_info_t dev_info; - bt_remote_dev_info_t *remote_dev_info; - GVariant *manufacture_data; - GVariant *param; /* Terminate ALL system popup */ syspopup_destroy_all(); @@ -807,10 +726,8 @@ static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, BT_ERR("Error occured in CreateBonding [%s]", err->message); if (g_strrstr(err->message, "Already Exists")) { - BT_INFO("Existing Bond, remove and retry"); - ret_if(__bt_remove_and_bond() == BLUETOOTH_ERROR_NONE); - - result = BLUETOOTH_ERROR_PARING_FAILED; + BT_INFO("Existing Bond"); + result = BLUETOOTH_ERROR_ALREADY_CONNECT; } else if (_bt_agent_is_canceled() || g_strrstr(err->message, "Authentication Canceled")) { BT_INFO("Cancelled by USER"); @@ -819,10 +736,8 @@ static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, BT_INFO("REJECTED"); result = BLUETOOTH_ERROR_ACCESS_DENIED; } else if (g_strrstr(err->message, "In Progress")) { - BT_INFO("Bond in progress, cancel and retry"); - ret_if(__bt_cancel_and_bond() == BLUETOOTH_ERROR_NONE); - - result = BLUETOOTH_ERROR_PARING_FAILED; + BT_INFO("Bond in progress"); + result = BLUETOOTH_ERROR_IN_PROGRESS; } else if (g_strrstr(err->message, "Authentication Failed")) { BT_INFO("Authentication Failed"); if (bonding_info->is_autopair == TRUE) { @@ -918,45 +833,6 @@ static void __bt_bond_device_cb(GDBusProxy *proxy, GAsyncResult *res, goto dbus_return; } - remote_dev_info = _bt_get_remote_device_info(bonding_info->addr); - if (!remote_dev_info) - goto dbus_return; - - GVariant *uuids = NULL; - GVariantBuilder *builder = NULL; - int i = 0; - builder = g_variant_builder_new(G_VARIANT_TYPE("as")); - for (i = 0; i < remote_dev_info->uuid_count; i++) { - g_variant_builder_add(builder, "s", - remote_dev_info->uuids[i]); - } - uuids = g_variant_new("as", builder); - g_variant_builder_unref(builder); - manufacture_data = g_variant_new_from_data((const GVariantType *)"ay", - remote_dev_info->manufacturer_data, remote_dev_info->manufacturer_data_len, - TRUE, NULL, NULL); - - param = g_variant_new("(isunsbub@asn@ay)", - result, - bonding_info->addr, - remote_dev_info->class, - remote_dev_info->rssi, - remote_dev_info->name, - remote_dev_info->paired, - remote_dev_info->connected, - remote_dev_info->trust, - uuids, - remote_dev_info->manufacturer_data_len, - manufacture_data); - - - /* Send the event to application */ - _bt_send_event(BT_ADAPTER_EVENT, - BLUETOOTH_EVENT_BONDING_FINISHED, - param); - - _bt_free_device_info(remote_dev_info); - dbus_return: if (req_info->context == NULL) goto done; @@ -2273,6 +2149,47 @@ int _bt_connect_profile(char *address, char *uuid, return BLUETOOTH_ERROR_NONE; } +int _bt_disconnect_all(char *address) +{ + int ret = BLUETOOTH_ERROR_NONE; + char *object_path; + GDBusProxy *proxy; + GDBusConnection *conn; + GVariant *result = NULL; + GError *err = NULL; + + BT_DBG(""); + conn = _bt_gdbus_get_system_gconn(); + retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL); + + object_path = _bt_get_device_object_path(address); + retv_if(object_path == NULL, BLUETOOTH_ERROR_INTERNAL); + + proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE, + NULL, BT_BLUEZ_NAME, + object_path, BT_DEVICE_INTERFACE, NULL, NULL); + g_free(object_path); + retv_if(proxy == NULL, BLUETOOTH_ERROR_INTERNAL); + + result = g_dbus_proxy_call_sync(proxy, "Disconnect", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, + &err); + + if (err != NULL) { + BT_ERR("Dbus Call Error:[%s]", err->message); + g_error_free(err); + ret = BLUETOOTH_ERROR_INTERNAL; + } + + g_object_unref(proxy); + if (result) + g_variant_unref(result); + + return ret; +} + int _bt_disconnect_profile(char *address, char *uuid, void *cb, gpointer func_data) { @@ -2678,7 +2595,7 @@ int _bt_le_conn_update(const char *sender, BT_CHECK_PARAMETER(device_address, return); - BT_INFO("Sender %s, Min interval: %f, Max interval: %f, Latency: %u, Supervision timeout: %u", + BT_DBG("Sender %s, Min interval: %f, Max interval: %f, Latency: %u, Supervision timeout: %u", sender, interval_min, interval_max, latency, time_out); if (interval_min > interval_max || @@ -3416,6 +3333,11 @@ int _bt_get_att_mtu(bluetooth_device_address_t *device_address, BT_DBG("ATT MTU : %d", *mtu); g_variant_unref(value); g_variant_unref(result); + + if (*mtu == 0) { + g_object_unref(device_proxy); + return BLUETOOTH_ERROR_NOT_CONNECTED; + } } g_object_unref(device_proxy);