X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service-adaptation%2Fservices%2Fbt-request-handler.c;h=05f8c693bbe9bb45cdf7031764c3d49f1e8fd4aa;hb=3cbe2838e509addd55aaa420353f68dfe93d9634;hp=ded26a9bc684d991fa2ff886a83766d29167f2c4;hpb=e8132a5b1e7fc5a1e8feab203393d3f772fbebd2;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 ded26a9..05f8c69 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"); @@ -1897,10 +1917,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 +1946,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)); @@ -2280,7 +2300,7 @@ int __bt_bluez_request(int function_name, BT_ERR("sending acquire write respose sent \n "); - fd_list_array = g_unix_fd_list_peek_fds(fd_list, &len); + 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]; @@ -2313,7 +2333,7 @@ int __bt_bluez_request(int function_name, BT_ERR("sending acquire write respose sent \n "); - fd_list_array = g_unix_fd_list_peek_fds(fd_list, &len); + 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]; @@ -2414,6 +2434,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; @@ -2645,6 +2707,10 @@ int __bt_bluez_request(int function_name, 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)); @@ -2656,15 +2722,44 @@ int __bt_bluez_request(int function_name, sizeof(int)); __bt_service_get_parameters(in_param3, &is_notify, sizeof(gboolean)); + __bt_service_get_parameters(in_param4, &is_indicate, + sizeof(gboolean)); - 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); +#ifdef TIZEN_FEATURE_BT_GATT_CLIENT_FD_DISABLE + goto normal; +#endif - /* 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))); + 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; } @@ -3612,6 +3707,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 */ @@ -3631,10 +3727,12 @@ gboolean __bt_service_check_privilege(int function_name, 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: @@ -3643,6 +3741,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); @@ -3697,15 +3797,12 @@ 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_IPSP_INIT: case BT_LE_IPSP_DEINIT: case BT_LE_IPSP_CONNECT: @@ -3793,6 +3890,7 @@ gboolean __bt_service_check_privilege(int function_name, 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: