X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service-adaptation%2Fservices%2Fbt-request-handler.c;h=b4520dcb6dee1a6d8c69db5248b2b542690a67d8;hb=e8e5b1ab3fa909f922a6a10540e39e0a45619b07;hp=12d6f0f72a8742291941b664b6f37a823eaa9959;hpb=8898d956897af53f2e76b6626b59411df58b178c;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service-adaptation/services/bt-request-handler.c b/bt-service-adaptation/services/bt-request-handler.c index 12d6f0f..b4520dc 100644 --- a/bt-service-adaptation/services/bt-request-handler.c +++ b/bt-service-adaptation/services/bt-request-handler.c @@ -203,6 +203,7 @@ static gboolean __bt_is_sync_function(int service_function) || service_function == BT_GET_IS_ALIAS_SET || service_function == BT_GET_CONNECTED_LINK_TYPE || service_function == BT_IS_SERVICE_USED + || service_function == BT_RFCOMM_LISTEN_AND_ACCEPT || service_function == BT_RFCOMM_LISTEN || service_function == BT_HDP_REGISTER_SINK_APP || service_function == BT_HDP_UNREGISTER_SINK_APP @@ -229,9 +230,9 @@ static gboolean __bt_is_sync_function(int service_function) || service_function == BT_GATT_GET_INCLUDED_SERVICES || service_function == BT_GATT_GET_CHARACTERISTIC_PROPERTIES || service_function == BT_GATT_WATCH_CHARACTERISTIC + || service_function == BT_GATT_ACQUIRE_WRITE #endif - || service_function == BT_AUDIO_SELECT_ROLE - || service_function == BT_OBEX_SERVER_ACCEPT_CONNECTION) + || service_function == BT_AUDIO_SELECT_ROLE) return TRUE; else return FALSE; @@ -1311,6 +1312,25 @@ int __bt_bluez_request(int function_name, result = BLUETOOTH_ERROR_NONE; break; } + case BT_RFCOMM_LISTEN_AND_ACCEPT: { + char *uuid; + int socket_fd = -1; + + sender = (char *)g_dbus_method_invocation_get_sender(context); + uuid = (char *)g_variant_get_data(in_param1); + + result = _bt_rfcomm_socket_listen(sender, uuid, true); + if (result > 0) { + BT_ERR("BT_RFCOMM_LISTEN_AND_ACCEPT success, save context"); + + result = BLUETOOTH_ERROR_NONE; + _bt_save_invocation_context(context, + result, sender, function_name, NULL); + } else { + g_array_append_vals(*out_param1, &socket_fd, sizeof(int)); + } + break; + } case BT_RFCOMM_LISTEN: { char *uuid; int socket_fd = -1; @@ -1318,7 +1338,7 @@ int __bt_bluez_request(int function_name, sender = (char *)g_dbus_method_invocation_get_sender(context); uuid = (char *)g_variant_get_data(in_param1); - result = _bt_rfcomm_socket_listen(sender, uuid); + result = _bt_rfcomm_socket_listen(sender, uuid, false); if (result > 0) { BT_ERR("BT_RFCOMM_LISTEN success, save context"); @@ -1613,6 +1633,17 @@ int __bt_bluez_request(int function_name, result = _bt_avrcp_control_cmd(key_code); break; } + case BT_AVRCP_HANDLE_CONTROL_TO_DEST: { + int key_code; + bluetooth_device_address_t address = { { 0 } }; + + __bt_service_get_parameters(in_param1, &key_code, sizeof(int)); + __bt_service_get_parameters(in_param2, + &address, sizeof(bluetooth_device_address_t)); + + result = _bt_avrcp_control_cmd_to_dest(key_code, &address); + break; + } case BT_AVRCP_CONTROL_SET_PROPERTY: { int type; unsigned int value; @@ -1818,6 +1849,33 @@ int __bt_bluez_request(int function_name, break; } + case BT_LE_OOB_READ_LOCAL_DATA: { + bt_oob_data_t local_oob_data; + + memset(&local_oob_data, 0x00, sizeof(bt_oob_data_t)); + result = _bt_le_oob_read_local_data(&local_oob_data); + + g_array_append_vals(*out_param1, &local_oob_data, + sizeof(bt_oob_data_t)); + + break; + } + case BT_LE_OOB_ADD_REMOTE_DATA: { + bluetooth_device_address_t address = { {0} }; + unsigned short address_type; + bt_oob_data_t remote_oob_data; + + __bt_service_get_parameters(in_param1, + &address, sizeof(bluetooth_device_address_t)); + __bt_service_get_parameters(in_param2, + &address_type, sizeof(unsigned short)); + __bt_service_get_parameters(in_param3, + &remote_oob_data, sizeof(bt_oob_data_t)); + + result = _bt_oob_add_remote_data(&address, address_type, &remote_oob_data); + + break; + } case BT_AVRCP_SET_TRACK_INFO: { media_metadata_t data; media_metadata_attributes_t meta_data; @@ -1897,10 +1955,10 @@ int __bt_bluez_request(int function_name, __bt_service_get_parameters(in_param1, adv_handle, sizeof(int)); - __bt_service_get_parameters(in_param2, - &adv, sizeof(bluetooth_advertising_data_t)); __bt_service_get_parameters(in_param3, &length, sizeof(int)); + __bt_service_get_parameters(in_param2, + &adv, length); __bt_service_get_parameters(in_param4, &use_reserved_slot, sizeof(gboolean)); result = _bt_set_advertising_data(app, *adv_handle, @@ -1926,10 +1984,10 @@ int __bt_bluez_request(int function_name, __bt_service_get_parameters(in_param1, adv_handle, sizeof(int)); - __bt_service_get_parameters(in_param2, - &rsp, sizeof(bluetooth_scan_resp_data_t)); __bt_service_get_parameters(in_param3, &length, sizeof(int)); + __bt_service_get_parameters(in_param2, + &rsp, length); __bt_service_get_parameters(in_param4, &use_reserved_slot, sizeof(gboolean)); @@ -1991,9 +2049,9 @@ int __bt_bluez_request(int function_name, __bt_service_get_parameters(in_param4, &use_reserved_slot, sizeof(gboolean)); - BT_DBG("bluetooth_advertising_params_t [%f %f %d %d]", + BT_DBG("bluetooth_advertising_params_t [%f %f %d %d %d]", adv_params.interval_min, adv_params.interval_max, - adv_params.filter_policy, adv_params.type); + adv_params.filter_policy, adv_params.type, adv_params.tx_power_level); result = _bt_set_custom_advertising(app, *adv_handle, enable, &adv_params, use_reserved_slot); if (result != BLUETOOTH_ERROR_NONE) { @@ -2256,6 +2314,72 @@ int __bt_bluez_request(int function_name, break; } + case BT_GATT_SERVER_ACQURE_WRITE_RESPONSE: { + + bluetooth_gatt_server_acquire_response_params_t param; + char *app; + GDBusMessage *msg; + msg = g_dbus_method_invocation_get_message(context); + GUnixFDList *fd_list; + int fd = -1;; + int *fd_list_array; + int len; + + BT_ERR("sending acquire write respose \n"); + + fd_list = g_dbus_message_get_unix_fd_list(msg); + + memset(¶m, 0x00, sizeof(bluetooth_gatt_server_acquire_response_params_t)); + + app = (char*)g_dbus_method_invocation_get_sender(context); + + __bt_service_get_parameters(in_param1, ¶m, + sizeof(bluetooth_gatt_server_acquire_response_params_t)); + + BT_ERR("sending acquire write respose sent \n "); + + fd_list_array = (int *)g_unix_fd_list_peek_fds(fd_list, &len); + BT_INFO("Num fds in fd_list is : %d, fd_list[0]: %d", len, fd_list_array[0]); + fd = fd_list_array[0]; + + param.fd = fd; + result = _bt_gatt_server_acquire_send_response(app, ¶m, fd_list); + + break; + } + case BT_GATT_SERVER_ACQUIRE_NOTIFY_RESPONSE: { + + bluetooth_gatt_server_acquire_response_params_t param; + char *app; + GDBusMessage *msg; + msg = g_dbus_method_invocation_get_message(context); + GUnixFDList *fd_list; + int fd = -1; + int *fd_list_array; + int len; + + BT_ERR("sending acquire write respose \n"); + + fd_list = g_dbus_message_get_unix_fd_list(msg); + + memset(¶m, 0x00, sizeof(bluetooth_gatt_server_acquire_response_params_t)); + + app = (char*)g_dbus_method_invocation_get_sender(context); + + __bt_service_get_parameters(in_param1, ¶m, + sizeof(bluetooth_gatt_server_acquire_response_params_t)); + + BT_ERR("sending acquire write respose sent \n "); + + fd_list_array = (int *)g_unix_fd_list_peek_fds(fd_list, &len); + BT_INFO("Num fds in fd_list is : %d, fd_list[0]: %d", len, fd_list_array[0]); + fd = fd_list_array[0]; + + param.fd = fd; + result = _bt_gatt_server_acquire_send_response(app, ¶m, fd_list); + + break; + } case BT_GATT_SERVER_SEND_INDICATION: { bluetooth_gatt_server_indication_params_t param; bluetooth_gatt_att_data_t data; @@ -2311,6 +2435,16 @@ int __bt_bluez_request(int function_name, } break; } + case BT_SET_LE_STATIC_RANDOM_ADDRESS: { + gboolean is_enable; + + __bt_service_get_parameters(in_param1, &is_enable, + sizeof(gboolean)); + + result = _bt_set_le_static_random_address(is_enable); + + break; + } #ifdef TIZEN_GATT_CLIENT /* Local Async */ case BT_GATT_CLIENT_REGISTER: { @@ -2348,6 +2482,48 @@ int __bt_bluez_request(int function_name, } /* Async: Remote Interaction */ + case BT_GATT_ACQUIRE_WRITE: { + + int fd = -1; + int mtu = -1; + bluetooth_gatt_client_char_prop_info_t param; + + BT_INFO("GATT Client ACQUIRE WRITE recived"); + + sender = (char*)g_dbus_method_invocation_get_sender(context); + + __bt_service_get_parameters(in_param1, ¶m, + sizeof(bluetooth_gatt_client_char_prop_info_t)); + + + result = _bt_gatt_acquire_write(¶m , &fd, &mtu); + + g_array_append_vals(*out_param1, &mtu, sizeof(int)); + + if (BLUETOOTH_ERROR_NONE == result) + BT_INFO("GATT Client: Save Invocation data for characteristic props app[%s] fd[ %d]", sender, fd); + else { + BT_ERR("Gatt Client Acqure Write"); + break; + } + + GUnixFDList *fd_list = NULL; + GError *error = NULL; + + /* Add socket fd to unix_fd_list */ + fd_list = g_unix_fd_list_new(); + g_unix_fd_list_append(fd_list, fd, &error); + g_assert_no_error(error); + + _bt_service_method_return_with_unix_fd_list( + context, *out_param1, result, fd_list); + + close(fd); + g_object_unref(fd_list); + + break; + } + /* Async: Remote Interaction */ case BT_CONNECT_LE: { bluetooth_device_address_t address = { {0} }; gboolean auto_connect; @@ -2574,6 +2750,67 @@ int __bt_bluez_request(int function_name, } break; } + /* Local Async */ + case BT_GATT_WATCH_CHARACTERISTIC: { + bluetooth_gatt_client_char_prop_info_t param; + int client_id; + gboolean is_notify; + int fd = -1; + int mtu = 0; + gboolean is_indicate; + + + memset(¶m, 0x00, sizeof(bluetooth_gatt_client_char_prop_info_t)); + + sender = (char*)g_dbus_method_invocation_get_sender(context); + + __bt_service_get_parameters(in_param1, ¶m, + sizeof(bluetooth_gatt_client_char_prop_info_t)); + __bt_service_get_parameters(in_param2, &client_id, + sizeof(int)); + __bt_service_get_parameters(in_param3, &is_notify, + sizeof(gboolean)); + __bt_service_get_parameters(in_param4, &is_indicate, + sizeof(gboolean)); + +#ifdef TIZEN_FEATURE_BT_GATT_CLIENT_FD_DISABLE + goto normal; +#endif + + if (is_indicate == false) { + result = _bt_gatt_acquire_notify(¶m , &fd, &mtu); + if (BLUETOOTH_ERROR_NONE == result && fd > -1) { + BT_INFO("GATT Client: Save Invocation data for characteristic props app[%s] fd[ %d]", sender, fd); + + GUnixFDList *fd_list = NULL; + GError *error = NULL; + + g_array_append_vals(*out_param1, &mtu, sizeof(int)); + /* Add socket fd to unix_fd_list */ + fd_list = g_unix_fd_list_new(); + g_unix_fd_list_append(fd_list, fd, &error); + g_assert_no_error(error); + close(fd); + _bt_service_method_return_with_unix_fd_list( + context, *out_param1, result, fd_list); + + g_object_unref(fd_list); + } else + goto normal; + } else { + +normal: + result = _bt_gatt_watch_characteristic(¶m , client_id, is_notify); + if (BLUETOOTH_ERROR_NONE == result) { + BT_INFO("GATT Client: Save Invocation data for characteristic props app[%s]", sender); + + /* Save the informations to invocation */ + _bt_save_invocation_context(context, result, sender, function_name, + (gpointer)g_memdup(¶m, sizeof(bluetooth_gatt_client_char_prop_info_t))); + } + } + break; + } case BT_GATT_WATCH_SERVICE_CHANGED_INDICATION: { gboolean is_enabled; bluetooth_device_address_t address; @@ -2638,13 +2875,22 @@ int __bt_bluez_request(int function_name, } case BT_SET_SCAN_PARAMETERS: { bluetooth_le_scan_params_t scan_params; - __bt_service_get_parameters(in_param1, &scan_params, sizeof(bluetooth_le_scan_params_t)); + BT_DBG("bluetooth_le_scan_params_t [%f %f %d]", scan_params.interval, scan_params.window, scan_params.type); - result = _bt_set_scan_parameters(&scan_params); + + result = _bt_prepare_scan_parameters(&scan_params, 0); + break; + } + case BT_SET_SCAN_TYPE: { + int scan_type = 0; + __bt_service_get_parameters(in_param1, &scan_type, sizeof(int)); + + BT_DBG("bluetooth_le_scan_type [%d]", scan_type); + result = _bt_prepare_scan_parameters(NULL, scan_type); break; } #ifdef TIZEN_FEATURE_BT_PAN_NAP @@ -2728,6 +2974,20 @@ int __bt_bluez_request(int function_name, sizeof(gboolean)); break; } + case BT_IS_LE_2M_PHY_SUPPORTED: { + gboolean is_2m_phy_supported = FALSE; + + is_2m_phy_supported = _bt_is_le_2m_phy_supported(); + g_array_append_vals(*out_param1, &is_2m_phy_supported, sizeof(gboolean)); + break; + } + case BT_IS_LE_CODED_PHY_SUPPORTED: { + gboolean is_coded_phy_supported = FALSE; + + is_coded_phy_supported = _bt_is_le_coded_phy_supported(); + g_array_append_vals(*out_param1, &is_coded_phy_supported, sizeof(gboolean)); + break; + } default: BT_INFO("UnSupported function [%d]", function_name); result = BLUETOOTH_ERROR_NOT_SUPPORT; @@ -2774,7 +3034,7 @@ int __bt_obexd_request(int function_name, BT_DBG("BT_OPP_PUSH_FILES"); int i; bluetooth_device_address_t address = { {0} }; - bt_file_path_t path; + bt_file_path_t *path; char **file_path; int file_count; GArray *param2; @@ -2790,8 +3050,8 @@ int __bt_obexd_request(int function_name, __bt_fill_garray_from_variant(in_param2, param2); for (i = 0; i < file_count; i++) { - path = g_array_index(param2, bt_file_path_t, i); - file_path[i] = g_strdup(path.path); + path = &g_array_index(param2, bt_file_path_t, i); + file_path[i] = g_strdup(path->path); } BT_DBG("_bt_opp_client_push_files"); result = _bt_opp_client_push_files(request_id, context, @@ -3225,7 +3485,7 @@ int __bt_core_request(int function_name, case BT_ENABLE_ADAPTER: { bt_status_t status; - + _bt_set_adapter_request_state(TRUE); status = _bt_adapter_get_status(); if (status == BT_ACTIVATING) { @@ -3236,10 +3496,6 @@ int __bt_core_request(int function_name, result = BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED; } else { _bt_adapter_set_status(BT_ACTIVATING); - -#if TODO_40 /* Need to add this function */ - _bt_adapter_start_enable_timer(); -#endif result = BLUETOOTH_ERROR_NONE; } @@ -3248,7 +3504,6 @@ int __bt_core_request(int function_name, case BT_DISABLE_ADAPTER: { bt_status_t status; - status = _bt_adapter_get_status(); if (status == BT_DEACTIVATING) { BT_DBG("Disabling in progress"); @@ -3266,7 +3521,7 @@ int __bt_core_request(int function_name, case BT_ENABLE_ADAPTER_LE: { bt_le_status_t le_status; - + _bt_set_le_request_state(TRUE); le_status = _bt_adapter_get_le_status(); if (le_status == BT_LE_ACTIVATING) { BT_DBG("Enabling in progress"); @@ -3276,10 +3531,6 @@ int __bt_core_request(int function_name, result = BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED; } else { _bt_adapter_set_le_status(BT_LE_ACTIVATING); - -#if TODO_40 /* Need to add this function */ - _bt_adapter_start_le_enable_timer(); -#endif result = BLUETOOTH_ERROR_NONE; } @@ -3367,12 +3618,14 @@ gboolean __bt_service_check_privilege(int function_name, case BT_CANCEL_DISCOVERY: case BT_OOB_ADD_REMOTE_DATA: case BT_OOB_REMOVE_REMOTE_DATA: + case BT_OOB_READ_LOCAL_DATA: case BT_SET_ADVERTISING: case BT_SET_CUSTOM_ADVERTISING: case BT_SET_ADVERTISING_PARAMETERS: case BT_START_LE_DISCOVERY: case BT_STOP_LE_DISCOVERY: case BT_SET_SCAN_PARAMETERS: + case BT_SET_SCAN_TYPE: case BT_BOND_DEVICE: case BT_CANCEL_BONDING: @@ -3504,6 +3757,7 @@ gboolean __bt_service_check_privilege(int function_name, #ifdef TIZEN_GATT_CLIENT case BT_GATT_READ_DESCRIPTOR_VALUE: /* GATT Client */ case BT_GATT_WRITE_CHARACTERISTIC_VALUE_BY_TYPE: /* GATT Client */ + case BT_GATT_ACQUIRE_WRITE: case BT_GATT_WRITE_DESCRIPTOR_VALUE: /* GATT Client */ case BT_GATT_WATCH_CHARACTERISTIC: /* GATT Client */ case BT_GATT_CLIENT_REGISTER: /* GATT Client */ @@ -3522,10 +3776,13 @@ gboolean __bt_service_check_privilege(int function_name, case BT_GATT_SERVER_STOP_SERVICE: case BT_GATT_SERVER_DELETE_SERVICE: case BT_GATT_SERVER_SEND_RESPONSE: + case BT_GATT_SERVER_ACQURE_WRITE_RESPONSE: + case BT_GATT_SERVER_ACQUIRE_NOTIFY_RESPONSE: case BT_GATT_SERVER_SEND_INDICATION: case BT_GATT_SERVER_UPDATE_VALUE: case BT_GATT_SERVER_DEREGISTER: #endif + case BT_REQ_ATT_MTU: case BT_PBAP_CONNECT: case BT_PBAP_DISCONNECT: case BT_PBAP_GET_PHONEBOOK_SIZE: @@ -3534,6 +3791,8 @@ gboolean __bt_service_check_privilege(int function_name, case BT_PBAP_PULL_VCARD: case BT_PBAP_PHONEBOOK_SEARCH: + case BT_RFCOMM_LISTEN_AND_ACCEPT: + ret_val = cynara_check(p_cynara, client_creds, client_session, user_creds, BT_PRIVILEGE_PUBLIC); @@ -3580,7 +3839,7 @@ gboolean __bt_service_check_privilege(int function_name, case BT_AVRCP_CONTROL_GET_PROPERTY: case BT_AVRCP_GET_TRACK_INFO: case BT_AVRCP_TRANSPORT_SET_PROPERTY: - + case BT_AVRCP_HANDLE_CONTROL_TO_DEST: case BT_SET_CONTENT_PROTECT: case BT_BOND_DEVICE_BY_TYPE: @@ -3588,14 +3847,13 @@ gboolean __bt_service_check_privilege(int function_name, case BT_SET_LE_STATIC_RANDOM_ADDRESS: case BT_LE_CONN_UPDATE: case BT_UPDATE_LE_CONNECTION_MODE: - case BT_REQ_ATT_MTU: case BT_GET_DEVICE_IDA: case BT_LE_READ_MAXIMUM_DATA_LENGTH: case BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH: case BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH: case BT_LE_SET_DATA_LENGTH: - - case BT_GET_ATT_MTU: + case BT_LE_OOB_READ_LOCAL_DATA: + case BT_LE_OOB_ADD_REMOTE_DATA: case BT_LE_IPSP_INIT: case BT_LE_IPSP_DEINIT: @@ -3672,16 +3930,18 @@ gboolean __bt_service_check_privilege(int function_name, case BT_GET_PROFILE_TRUSTED: case BT_GET_SPEAKER_GAIN: case BT_SET_SPEAKER_GAIN: - case BT_OOB_READ_LOCAL_DATA: case BT_RFCOMM_CLIENT_IS_CONNECTED: case BT_RFCOMM_IS_UUID_AVAILABLE: case BT_GET_ADVERTISING_DATA: case BT_GET_SCAN_RESPONSE_DATA: case BT_IS_ADVERTISING: + case BT_IS_LE_2M_PHY_SUPPORTED: + case BT_IS_LE_CODED_PHY_SUPPORTED: case BT_REGISTER_SCAN_FILTER: case BT_UNREGISTER_SCAN_FILTER: case BT_UNREGISTER_ALL_SCAN_FILTERS: case BT_IS_SCAN_FILTER_SUPPORTED: + case BT_GET_ATT_MTU: case BT_OBEX_SERVER_ALLOCATE: case BT_OBEX_SERVER_DEALLOCATE: