X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service%2Fbt-request-handler.c;h=18c99e00e91f4611623f084f941344164cc0471f;hb=d3072a95f5ef23bf7749832d5873a5ee200aaffb;hp=e1a036290af1f783dae74c965506693e0a03a89e;hpb=a7ea002971e8c1b8d0b522678409413cc00efdc3;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service/bt-request-handler.c b/bt-service/bt-request-handler.c index e1a0362..18c99e0 100644 --- a/bt-service/bt-request-handler.c +++ b/bt-service/bt-request-handler.c @@ -70,7 +70,7 @@ static const gchar bt_service_introspection_xml[] = " " ""; -GDBusNodeInfo *node_info = NULL; +static gboolean name_acquired = FALSE; static char *current_sender_playing = NULL; @@ -292,7 +292,6 @@ fail: g_variant_unref(param3); g_variant_unref(param4); g_variant_unref(param5); -// g_free(sender); } FN_END; @@ -473,7 +472,6 @@ int __bt_bluez_request(int function_name, case BT_REGISTER_SCAN_FILTER: { char *sender = NULL; bluetooth_le_scan_filter_t scan_filter; - int slot_id; sender = (char *)g_dbus_method_invocation_get_sender(context); __bt_service_get_parameters(in_param1, &scan_filter, @@ -482,31 +480,7 @@ int __bt_bluez_request(int function_name, scan_filter.added_features); result = _bt_register_scan_filter(sender, - &scan_filter, &slot_id); - - g_array_append_vals(*out_param1, &slot_id, sizeof(int)); - break; - } - case BT_UNREGISTER_SCAN_FILTER:{ - char *sender = NULL; - int slot_id; - - sender = (char *)g_dbus_method_invocation_get_sender(context); - __bt_service_get_parameters(in_param1, &slot_id, sizeof(int)); - BT_DBG("Remove scan filter [Slot ID : %d]", slot_id); - - result = _bt_unregister_scan_filter(sender, slot_id); - - break; - } - case BT_UNREGISTER_ALL_SCAN_FILTERS:{ - char *sender = NULL; - - sender = (char *)g_dbus_method_invocation_get_sender(context); - - BT_DBG("Remove all scan filters [Sender : %s]", sender); - - result = _bt_unregister_all_scan_filters(sender); + &scan_filter); break; } @@ -614,9 +588,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(sender, adv_handle, enable, &adv_params, use_reserved_slot); break; @@ -703,19 +677,31 @@ int __bt_bluez_request(int function_name, 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; } case BT_LE_CONN_UPDATE: { + char *sender = NULL; bluetooth_device_address_t local_address = { {0} }; bluetooth_le_connection_param_t parameters = {0}; + sender = (char *)g_dbus_method_invocation_get_sender(context); + __bt_service_get_parameters(in_param1, &local_address, sizeof(bluetooth_device_address_t)); __bt_service_get_parameters(in_param2, ¶meters, sizeof(bluetooth_le_connection_param_t)); - result = _bt_le_conn_update(local_address.addr, + result = _bt_le_conn_update(sender, + local_address.addr, parameters.interval_min, parameters.interval_max, parameters.latency, @@ -808,6 +794,17 @@ int __bt_bluez_request(int function_name, break; } + case BT_DISCONNECT_DEVICE: { + bluetooth_device_address_t addr = { {0} }; + char address[BLUETOOTH_ADDRESS_STRING_LENGTH + 1]; + + __bt_service_get_parameters(in_param1, + &addr, sizeof(bluetooth_device_address_t)); + _bt_convert_addr_type_to_string(address, addr.addr); + + result = _bt_disconnect_all(address); + break; + } case BT_BOND_DEVICE: { bluetooth_device_address_t address = { {0} }; @@ -960,6 +957,7 @@ int __bt_bluez_request(int function_name, break; } case BT_UPDATE_LE_CONNECTION_MODE: { + char *sender = NULL; bluetooth_device_address_t remote_address = { { 0 } }; bluetooth_le_connection_param_t param = { 0 }; bluetooth_le_connection_mode_t mode = BLUETOOTH_LE_CONNECTION_MODE_BALANCED; @@ -973,7 +971,10 @@ int __bt_bluez_request(int function_name, if (result != BLUETOOTH_ERROR_NONE) break; - result = _bt_le_conn_update(remote_address.addr, + sender = (char *)g_dbus_method_invocation_get_sender(context); + + result = _bt_le_conn_update(sender, + remote_address.addr, param.interval_min, param.interval_max, param.latency, @@ -1300,6 +1301,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; @@ -2200,7 +2228,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; @@ -2216,8 +2244,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, @@ -2682,6 +2710,7 @@ gboolean __bt_service_check_privilege(int function_name, 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: @@ -2804,6 +2833,8 @@ gboolean __bt_service_check_privilege(int function_name, case BT_GATT_REGISTER_APPLICATION: case BT_GATT_REGISTER_SERVICE: case BT_GATT_SEND_RESPONSE: + + case BT_REQ_ATT_MTU: case BT_PBAP_CONNECT: case BT_PBAP_DISCONNECT: case BT_PBAP_GET_PHONEBOOK_SIZE: @@ -2811,6 +2842,7 @@ gboolean __bt_service_check_privilege(int function_name, case BT_PBAP_GET_LIST: case BT_PBAP_PULL_VCARD: case BT_PBAP_PHONEBOOK_SEARCH: + case BT_AUDIO_SELECT_ROLE: ret_val = cynara_check(p_cynara, client_creds, client_session, user_creds, BT_PRIVILEGE_PUBLIC); @@ -2845,28 +2877,40 @@ gboolean __bt_service_check_privilege(int function_name, case BT_REMOVE_WHITE_LIST: case BT_CLEAR_WHITE_LIST: case BT_SET_MANUFACTURER_DATA: + case BT_SET_PASSKEY_NOTIFICATION: case BT_SET_PROFILE_RESTRICTED: + case BT_DISCONNECT_DEVICE: case BT_CANCEL_SEARCH_SERVICE: case BT_ENABLE_RSSI: case BT_RFCOMM_ACCEPT_CONNECTION: case BT_RFCOMM_REJECT_CONNECTION: case BT_RFCOMM_LISTEN: + case BT_RFCOMM_CREATE_SOCKET_EX: + case BT_RFCOMM_REMOVE_SOCKET_EX: + + case BT_HID_ENABLE_BARCODE_FEATURE: case BT_AVRCP_CONTROL_GET_PROPERTY: case BT_AVRCP_GET_TRACK_INFO: + case BT_AVRCP_TRANSPORT_SET_PROPERTY: + case BT_SET_CONTENT_PROTECT: case BT_BOND_DEVICE_BY_TYPE: case BT_SET_LE_PRIVACY: + case BT_SET_LE_STATIC_RANDOM_ADDRESS: case BT_LE_CONN_UPDATE: + case BT_UPDATE_LE_CONNECTION_MODE: + case BT_GET_DEVICE_IDA: + case BT_ENABLE_FORCE_HCI_DUMP: 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: @@ -2899,9 +2943,15 @@ gboolean __bt_service_check_privilege(int function_name, case BT_IS_LE_DISCOVERYING: case BT_IS_CONNECTABLE: case BT_GET_BONDED_DEVICES: + case BT_GET_PROFILE_CONNECTED_DEVICES: case BT_GET_BONDED_DEVICE: + case BT_PASSKEY_REPLY: + case BT_PASSKEY_CONFIRMATION_REPLY: case BT_GET_IS_ALIAS_SET: case BT_IS_DEVICE_CONNECTED: + case BT_GET_CONNECTED_LINK_TYPE: + case BT_SET_PROFILE_TRUSTED: + case BT_GET_PROFILE_TRUSTED: case BT_GET_SPEAKER_GAIN: case BT_SET_SPEAKER_GAIN: case BT_OOB_READ_LOCAL_DATA: @@ -2910,10 +2960,15 @@ gboolean __bt_service_check_privilege(int function_name, case BT_GET_ADVERTISING_DATA: case BT_GET_SCAN_RESPONSE_DATA: case BT_IS_ADVERTISING: + case BT_REGISTER_SCAN_FILTER: + case BT_IS_SCAN_FILTER_SUPPORTED: case BT_GET_PROFILE_RESTRICTED: + case BT_GET_ATT_MTU: case BT_OBEX_SERVER_ALLOCATE: case BT_OBEX_SERVER_DEALLOCATE: + case BT_OBEX_SERVER_IS_ACTIVATED: + case BT_OPP_GET_TRANSFER_PROGRESS: /* Non-privilege control */ break; default: @@ -2979,39 +3034,64 @@ int __bt_service_register_object(GDBusConnection *conn, return 0; } +static void __bt_service_bus_acquired_handler(GDBusConnection *connection, + const gchar *name, gpointer user_data) +{ + GDBusNodeInfo *node_info = NULL; + + BT_INFO("bus acquired"); + + ret_if(connection == NULL); + + node_info = __bt_service_create_method_node_info( + bt_service_introspection_xml); + ret_if(node_info == NULL); + + __bt_service_register_object(connection, node_info, TRUE); + g_dbus_node_info_unref(node_info); + + bt_service_conn = connection; +} + +static void __bt_service_name_acquired_handler(GDBusConnection *connection, + const gchar *name, gpointer user_data) +{ + BT_INFO("name acquired"); + name_acquired = TRUE; +} + +static void __bt_service_name_lost_handler(GDBusConnection *connection, + const gchar *name, gpointer user_data) +{ + BT_INFO("name lost"); + name_acquired = FALSE; +} + +gboolean _is_name_acquired(void) +{ + return name_acquired; +} + int _bt_service_register(void) { GDBusConnection *conn; GError *err = NULL; - int result; conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err); retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL); + bt_service_conn = conn; owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, BT_SERVICE_NAME, G_BUS_NAME_OWNER_FLAGS_NONE, - NULL, NULL, NULL, + __bt_service_bus_acquired_handler, + __bt_service_name_acquired_handler, + __bt_service_name_lost_handler, NULL, NULL); BT_DBG("owner_id is [%d]", owner_id); if (owner_id == 0) goto fail; - node_info = __bt_service_create_method_node_info( - bt_service_introspection_xml); - - if (node_info == NULL) - goto fail; - - result = __bt_service_register_object(conn, node_info, TRUE); - g_dbus_node_info_unref(node_info); - node_info = NULL; - - if (result != BLUETOOTH_ERROR_NONE) - goto fail; - - bt_service_conn = conn; - return BLUETOOTH_ERROR_NONE; fail: @@ -3031,10 +3111,6 @@ void _bt_service_unregister(void) g_object_unref(bt_service_conn); bt_service_conn = NULL; } - if (node_info) { - g_dbus_node_info_unref(node_info); - node_info = NULL; - } if (owner_id > 0) { g_bus_unown_name(owner_id); owner_id = 0;