static void __bt_device_handle_bond_removal_event(bt_address_t *bd_addr);
static void __bt_device_handle_bond_failed_event(event_dev_bond_failed_t* bond_fail_event);
static void __bt_handle_ongoing_bond(bt_remote_dev_info_t *remote_dev_info, gboolean incoming_bond);
-static void __bt_device_conn_state_changed_callback(event_dev_conn_status_t *acl_event,
+static void __bt_device_acl_state_changed_callback(event_dev_conn_status_t *acl_event,
gboolean connected, unsigned char type);
static void __bt_free_pairing_info(bt_pairing_data_t **p_info);
BT_DBG("+");
/* Get method invocation context */
- for (l = _bt_get_invocation_list(); l != NULL; l = g_slist_next(l)) {
+ for (l = _bt_get_invocation_list(); l != NULL; ) {
req_info = l->data;
+ l = g_slist_next(l);
if (req_info == NULL || req_info->service_function != service_function)
continue;
#ifdef TIZEN_FEATURE_BT_OBEX
case OPP_SERVICE_ID: {
GVariant *param = NULL;
- char *name = g_strdup(address); /* TODO: Retrieve and send correct name in OBEX conn auth req event */
+ char *name = NULL;
+
+ if (_bt_obex_server_is_custom() == false) {
+ /* Allow the connection for native OPP server */
+ break;
+ }
+
+ name = g_strdup(address);
BT_INFO("Incoming OPP conn Req from device addr [%s]", address);
_bt_obex_server_set_pending_conn_auth_device_addr(address);
case OAL_EVENT_DEVICE_ACL_CONNECTED: {
BT_INFO("ACL Connected event Received");
event_dev_conn_status_t* param = event_data;
- __bt_device_conn_state_changed_callback(param, TRUE, 0);
+ __bt_device_acl_state_changed_callback(param, TRUE, 0);
break;
}
case OAL_EVENT_DEVICE_ACL_DISCONNECTED: {
BT_INFO("ACL Disconnected event Received");
- __bt_device_conn_state_changed_callback((event_dev_conn_status_t *)event_data, FALSE, 0);
+ __bt_device_acl_state_changed_callback((event_dev_conn_status_t *)event_data, FALSE, 0);
break;
}
case OAL_EVENT_DEVICE_LE_CONNECTED: {
BT_INFO("LE Connected event Received");
event_dev_conn_status_t* param = event_data;
- __bt_device_conn_state_changed_callback(param, TRUE, 1);
+ __bt_device_acl_state_changed_callback(param, TRUE, 1);
break;
}
case OAL_EVENT_DEVICE_LE_DISCONNECTED: {
BT_INFO("LE Disconnected event Received");
- __bt_device_conn_state_changed_callback((event_dev_conn_status_t *)event_data, FALSE, 1);
+ __bt_device_acl_state_changed_callback((event_dev_conn_status_t *)event_data, FALSE, 1);
break;
}
case OAL_EVENT_DEVICE_PIN_REQUEST: {
GVariant *param;
char address[BT_ADDRESS_STRING_SIZE];
char pin_code[BLUETOOTH_PIN_CODE_MAX_LENGTH + 1];
+ bool incoming = false;
BT_DBG("+");
_bt_convert_addr_type_to_string(address, pin_req_event->address.addr);
device_accept_pin_request(&pin_req_event->address, str_passkey);
BT_DBG("Send BLUETOOTH_EVENT_KEYBOARD_PASSKEY_DISPLAY");
- param = g_variant_new("(isss)", BLUETOOTH_ERROR_NONE, address, pin_req_event->name, str_passkey);
+
+ if(trigger_bond_info == NULL)
+ incoming = true;
+
+ param = g_variant_new("(bsss)", incoming, address, pin_req_event->name, str_passkey);
_bt_send_event(BT_ADAPTER_EVENT,
BLUETOOTH_EVENT_KEYBOARD_PASSKEY_DISPLAY, param);
BT_DBG("Key board pairing in process");
trigger_pairing_info->is_ssp = FALSE;
BT_DBG("Send BLUETOOTH_EVENT_PIN_REQUEST");
- param = g_variant_new("(iss)", BLUETOOTH_ERROR_NONE, address, pin_req_event->name);
+
+ if(trigger_bond_info == NULL)
+ incoming = true;
+
+ param = g_variant_new("(bss)", incoming, address, pin_req_event->name);
_bt_send_event(BT_ADAPTER_EVENT,
BLUETOOTH_EVENT_PIN_REQUEST, param);
}
gchar address[BT_ADDRESS_STR_LEN];
char *p_addr;
gchar *name;
- int result = BLUETOOTH_ERROR_NONE;
+ bool incoming = false;
+
BT_DBG("+");
_bt_convert_addr_type_to_string(address, dev_info->address.addr);
trigger_pairing_info->addr = g_strdup(address);
trigger_pairing_info->is_ssp = TRUE;
- param = g_variant_new("(iss)", result, p_addr, name);
+ if(trigger_bond_info == NULL)
+ incoming = true;
+
+ param = g_variant_new("(bss)", incoming, p_addr, name);
_bt_send_event(BT_ADAPTER_EVENT,
BLUETOOTH_EVENT_PASSKEY_REQUEST, param);
BT_DBG("-");
char *p_addr;
gchar *name;
char str_passkey[7];
- int result = BLUETOOTH_ERROR_NONE;
+ bool incoming = false; /*Stores if bonding request is incoming(true) or outgoing(false) */
BT_DBG("+");
_bt_convert_addr_type_to_string(address, dev_info->device_info.address.addr);
BT_DBG("Send BLUETOOTH_EVENT_PASSKEY_CONFIRMATION");
snprintf(str_passkey, sizeof(str_passkey), "%.6d", dev_info->pass_key);
- param = g_variant_new("(isss)", result, p_addr, name, str_passkey);
+ /*Storing if bond is incoming or outgoing*/
+ if(trigger_bond_info == NULL)
+ incoming = true;
+
+ param = g_variant_new("(bsss)", incoming, p_addr, name, str_passkey);
_bt_send_event(BT_ADAPTER_EVENT,
BLUETOOTH_EVENT_PASSKEY_CONFIRM_REQUEST, param);
BT_DBG("-");
char *p_addr;
gchar *name;
char str_passkey[7];
- int result = BLUETOOTH_ERROR_NONE;
+ bool incoming = false;
BT_DBG("+");
_bt_convert_addr_type_to_string(address, dev_info->device_info.address.addr);
BT_DBG("Send BLUETOOTH_EVENT_KEYBOARD_PASSKEY_DISPLAY");
snprintf(str_passkey, sizeof(str_passkey), "%06d", dev_info->pass_key);
- param = g_variant_new("(isss)", result, p_addr, name, str_passkey);
+ if(trigger_bond_info == NULL)
+ incoming = true;
+
+ param = g_variant_new("(bsss)", incoming, p_addr, name, str_passkey);
+
if (passkey_watcher) {
BT_INFO("Send passkey to %s", passkey_watcher);
_bt_send_event_to_dest(passkey_watcher, BT_ADAPTER_EVENT,
BT_DBG("-");
}
-static void __bt_device_conn_state_changed_callback(event_dev_conn_status_t *acl_event,
+static int __bt_oal_status_to_bt_error(int oal_status)
+{
+ int ret = 0;
+
+ switch (oal_status) {
+ case OAL_STATUS_SUCCESS:
+ ret = BLUETOOTH_ERROR_NONE;
+ break;
+ case OAL_STATUS_CONN_TIMEOUT:
+ case OAL_STATUS_LINK_LOSS:
+ BT_INFO("Connection Timeout");
+ ret = BLUETOOTH_ERROR_CONNECTION_TIMEOUT;
+ break;
+#ifdef TIZEN_BT_HAL
+ case OAL_STATUS_CONN_TERM_LOCAL_HOST:
+ ret = BLUETOOTH_ERROR_LOCAL_HOST_TERM;
+ break;
+ case OAL_STATUS_CONN_TERM_RMT_HOST:
+ ret = BLUETOOTH_ERROR_REMOTE_USER_TERM;
+ break;
+#endif
+ case OAL_STATUS_INTERNAL_ERROR:
+ ret = BLUETOOTH_ERROR_INTERNAL;
+ break;
+ default:
+ ret = BLUETOOTH_ERROR_INTERNAL;
+ break;
+ }
+ return ret;
+}
+
+static void __bt_device_acl_state_changed_callback(event_dev_conn_status_t *acl_event,
gboolean connected, unsigned char type)
{
gchar address[BT_ADDRESS_STR_LEN];
_bt_logging_connection(connected, type);
+ result = __bt_oal_status_to_bt_error(acl_event->status);
+ BT_INFO("Result [0x%x]", result);
+
if (connected) {
param = g_variant_new("(isy)", result, address, type);
_bt_send_event(BT_DEVICE_EVENT,
return ret;
}
+int _bt_disconnect_device(bluetooth_device_address_t *device_address)
+{
+ int result = OAL_STATUS_SUCCESS;
+
+ BT_DBG("+");
+
+ retv_if(!device_address, BLUETOOTH_ERROR_INVALID_PARAM);
+
+ result = device_disconnect((bt_address_t *)device_address);
+ if (result != OAL_STATUS_SUCCESS) {
+ BT_DBG("Failed to disconnect device");
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+
+ BT_DBG("-");
+ return BLUETOOTH_ERROR_NONE;
+}
+
#endif