X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-api%2Fbt-opp-client.c;h=5d2a53d1c12b36af8c766022d091d88901b432b4;hb=62a00d2e3430ed504bc220bcfe67387dd0507e22;hp=e6e980afa04d71d4dd1d58787f428d47100dd960;hpb=25986f9247de588fc3bb272c5acf6544434f46bf;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-api/bt-opp-client.c b/bt-api/bt-opp-client.c index e6e980a..5d2a53d 100644 --- a/bt-api/bt-opp-client.c +++ b/bt-api/bt-opp-client.c @@ -1,13 +1,11 @@ /* - * bluetooth-frwk - * - * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. + * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -25,7 +23,7 @@ #include "bt-common.h" #include "bt-request-sender.h" #include "bt-event-handler.h" - +#include "bt-dpm.h" static void __bt_get_file_size(char **files, unsigned long *file_size, int *count) { @@ -46,7 +44,7 @@ BT_EXPORT_API int bluetooth_opc_init(void) bt_user_info_t *user_info; user_info = _bt_get_user_data(BT_COMMON); - retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); return _bt_register_event(BT_OPP_CLIENT_EVENT, user_info->cb, user_info->user_data); } @@ -57,7 +55,7 @@ BT_EXPORT_API int bluetooth_opc_deinit(void) } BT_EXPORT_API int bluetooth_opc_push_files(bluetooth_device_address_t *remote_address, - char **file_name_array) + char **file_name_array) { int result; int i; @@ -70,18 +68,53 @@ BT_EXPORT_API int bluetooth_opc_push_files(bluetooth_device_address_t *remote_ad BT_CHECK_PARAMETER(file_name_array, return); BT_CHECK_ENABLED(return); + if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_OPP_PUSH_FILES) + == BLUETOOTH_ERROR_PERMISSION_DEINED) { + BT_ERR("Don't have a privilege to use this API"); + return BLUETOOTH_ERROR_PERMISSION_DEINED; + } + + if (_bt_check_dpm(BT_DPM_ADDRESS, remote_address) == BT_DPM_RESTRICTED) { + BT_ERR("Blacklist device"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } + + if (_bt_check_dpm(BT_DPM_OPP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to send files"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } + + if (_bt_check_dpm(BT_DPM_DESKTOP, NULL) == BT_DPM_RESTRICTED) { + char address[BT_ADDRESS_STRING_SIZE] = { 0 }; + bluetooth_device_class_t dev_class; + + _bt_convert_addr_type_to_string(address, remote_address->addr); + _bt_get_cod_by_address(address, &dev_class); + + if (dev_class.major_class == BLUETOOTH_DEVICE_MAJOR_CLASS_COMPUTER) { + BT_ERR("Reject a authorization due to MDM Policy"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } + } + __bt_get_file_size(file_name_array, &size, &file_count); retv_if(file_count == 0, BLUETOOTH_ERROR_INVALID_PARAM); + user_info = _bt_get_user_data(BT_COMMON); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); + BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); - user_info = _bt_get_user_data(BT_COMMON); - retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL); - g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t)); for (i = 0; i < file_count; i++) { + if (strlen(file_name_array[i]) >= sizeof(filename)) { + BT_ERR("[%s] has too long path.", file_name_array[i]); + BT_FREE_PARAMS(in_param1, in_param2, in_param3, + in_param4, out_param); + return BLUETOOTH_ERROR_INVALID_PARAM; + } g_strlcpy(filename, file_name_array[i], sizeof(filename)); g_array_append_vals(in_param2, filename, BT_FILE_PATH_MAX); } @@ -129,6 +162,7 @@ BT_EXPORT_API gboolean bluetooth_opc_session_is_exist(void) if (result == BLUETOOTH_ERROR_NONE) { exist = g_array_index(out_param, gboolean, 0); + BT_DBG("Exist %d", exist); } else { BT_ERR("Fail to send request"); } @@ -152,14 +186,45 @@ BT_EXPORT_API int bluetooth_opc_is_sending(gboolean *is_sending) result = _bt_send_request(BT_OBEX_SERVICE, BT_OPP_IS_PUSHING_FILES, in_param1, in_param2, in_param3, in_param4, &out_param); - if (result == BLUETOOTH_ERROR_NONE) { + if (result == BLUETOOTH_ERROR_NONE) *is_sending = g_array_index(out_param, gboolean, 0); + else + BT_ERR("Fail to send request"); + + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_opp_get_transfer_progress(bluetooth_opp_transfer_type_t transfer_type, + int transfer_id, unsigned char *progress) +{ + int result; + int direction = transfer_type; + int percentage = 0; + BT_CHECK_ENABLED(return); + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &direction, sizeof(int)); + g_array_append_vals(in_param2, &transfer_id, sizeof(int)); + + result = _bt_send_request(BT_OBEX_SERVICE, BT_OPP_GET_TRANSFER_PROGRESS, + in_param1, in_param2, in_param3, in_param4, &out_param); + + if (result == BLUETOOTH_ERROR_NONE) { + percentage = g_array_index(out_param, guint8, 0); + BT_DBG("Percentage: %d", percentage); } else { BT_ERR("Fail to send request"); } + if (progress) + *progress = percentage; + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); return result; } -