4 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include "bluetooth-api.h"
23 #include "bt-internal-types.h"
25 #include "bt-common.h"
26 #include "bt-request-sender.h"
27 #include "bt-event-handler.h"
29 BT_EXPORT_API int bluetooth_obex_server_init(const char *dst_path)
33 bt_user_info_t *user_info;
34 gboolean native_service = TRUE;
35 char path[BT_FILE_PATH_MAX];
37 BT_CHECK_ENABLED(return);
39 if (_bt_get_obex_server_id() != BT_NO_SERVER)
40 return BLUETOOTH_ERROR_AGENT_ALREADY_EXIST;
42 user_info = _bt_get_user_data(BT_COMMON);
43 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
46 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
50 g_strlcpy(path, dst_path, sizeof(path));
51 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
52 g_array_append_vals(in_param2, &native_service, sizeof(gboolean));
53 g_array_append_vals(in_param3, &app_pid, sizeof(int));
55 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ALLOCATE,
56 in_param1, in_param2, in_param3, in_param4, &out_param);
58 if (result == BLUETOOTH_ERROR_NONE) {
59 _bt_set_obex_server_id(BT_NATIVE_SERVER);
60 _bt_register_event(BT_OPP_SERVER_EVENT, user_info->cb,
61 user_info->user_data);
63 BT_ERR("Fail to send request");
66 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
71 BT_EXPORT_API int bluetooth_obex_server_deinit(void)
75 gboolean native_service = TRUE;
77 BT_CHECK_ENABLED(return);
79 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
80 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
83 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
87 g_array_append_vals(in_param1, &native_service, sizeof(gboolean));
88 g_array_append_vals(in_param2, &app_pid, sizeof(int));
90 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_DEALLOCATE,
91 in_param1, in_param2, in_param3, in_param4, &out_param);
93 _bt_set_obex_server_id(BT_NO_SERVER);
94 _bt_unregister_event(BT_OPP_SERVER_EVENT);
96 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
101 BT_EXPORT_API int bluetooth_obex_server_init_without_agent(const char *dst_path)
105 bt_user_info_t *user_info;
106 gboolean native_service = FALSE;
107 char path[BT_FILE_PATH_MAX];
109 BT_CHECK_ENABLED(return);
111 if (_bt_get_obex_server_id() != BT_NO_SERVER)
112 return BLUETOOTH_ERROR_AGENT_ALREADY_EXIST;
114 user_info = _bt_get_user_data(BT_COMMON);
115 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
118 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
122 g_strlcpy(path, dst_path, sizeof(path));
123 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
124 g_array_append_vals(in_param2, &native_service, sizeof(gboolean));
125 g_array_append_vals(in_param3, &app_pid, sizeof(int));
127 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ALLOCATE,
128 in_param1, in_param2, in_param3, in_param4, &out_param);
130 if (result == BLUETOOTH_ERROR_NONE) {
131 _bt_set_obex_server_id(BT_CUSTOM_SERVER);
132 _bt_register_event(BT_OPP_SERVER_EVENT, user_info->cb,
133 user_info->user_data);
135 BT_ERR("Fail to send request");
138 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
143 BT_EXPORT_API int bluetooth_obex_server_deinit_without_agent(void)
147 gboolean native_service = FALSE;
149 BT_CHECK_ENABLED(return);
151 /* Can't call this API after using bluetooth_obex_server_init
153 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
154 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
157 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
161 g_array_append_vals(in_param1, &native_service, sizeof(gboolean));
162 g_array_append_vals(in_param2, &app_pid, sizeof(int));
164 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_DEALLOCATE,
165 in_param1, in_param2, in_param3, in_param4, &out_param);
167 _bt_set_obex_server_id(BT_NO_SERVER);
168 _bt_unregister_event(BT_OPP_SERVER_EVENT);
170 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
175 BT_EXPORT_API gboolean bluetooth_obex_server_is_activated(void)
178 gboolean is_activated = FALSE;
181 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
183 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_IS_ACTIVATED,
184 in_param1, in_param2, in_param3, in_param4, &out_param);
186 if (result == BLUETOOTH_ERROR_NONE) {
187 is_activated = g_array_index(out_param, gboolean, 0);
189 BT_ERR("Fail to send request");
192 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
197 BT_EXPORT_API int bluetooth_obex_server_accept_connection(void)
201 /* Can't use this API in native server
202 In native server, bt-agent will control the connection
203 using system popup */
204 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
205 return BLUETOOTH_ERROR_INTERNAL;
208 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
210 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ACCEPT_CONNECTION,
211 in_param1, in_param2, in_param3, in_param4, &out_param);
213 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
218 BT_EXPORT_API int bluetooth_obex_server_reject_connection(void)
222 /* Can't use this API in native server
223 In native server, bt-agent will control the connection
224 using system popup */
225 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
226 return BLUETOOTH_ERROR_INTERNAL;
229 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
231 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_REJECT_CONNECTION,
232 in_param1, in_param2, in_param3, in_param4, &out_param);
234 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
239 BT_EXPORT_API int bluetooth_obex_server_accept_authorize(const char *filename)
242 char name[BT_FILE_PATH_MAX];
244 BT_CHECK_PARAMETER(filename, return);
245 BT_CHECK_ENABLED(return);
247 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
248 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
251 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
253 g_strlcpy(name, filename, sizeof(name));
254 g_array_append_vals(in_param1, name, BT_FILE_PATH_MAX);
256 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ACCEPT_FILE,
257 in_param1, in_param2, in_param3, in_param4, &out_param);
259 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
265 BT_EXPORT_API int bluetooth_obex_server_reject_authorize(void)
269 BT_CHECK_ENABLED(return);
271 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
272 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
275 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
277 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_REJECT_FILE,
278 in_param1, in_param2, in_param3, in_param4, &out_param);
280 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
285 BT_EXPORT_API int bluetooth_obex_server_set_destination_path(const char *dst_path)
289 gboolean native_service = FALSE;
290 char path[BT_FILE_PATH_MAX];
292 BT_CHECK_PARAMETER(dst_path, return);
293 BT_CHECK_ENABLED(return);
295 server_id = _bt_get_obex_server_id();
297 retv_if(server_id == BT_NO_SERVER,
298 BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST);
301 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
303 native_service = (server_id == BT_NATIVE_SERVER) ? TRUE : FALSE;
305 g_strlcpy(path, dst_path, sizeof(path));
306 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
307 g_array_append_vals(in_param2, &native_service, sizeof(native_service));
309 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_SET_PATH,
310 in_param1, in_param2, in_param3, in_param4, &out_param);
312 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
318 BT_EXPORT_API int bluetooth_obex_server_set_root(const char *root)
321 char root_path[BT_FILE_PATH_MAX];
323 BT_CHECK_PARAMETER(root, return);
324 BT_CHECK_ENABLED(return);
326 if (_bt_get_obex_server_id() == BT_NO_SERVER)
327 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
330 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
332 g_strlcpy(root_path, root, sizeof(root_path));
333 g_array_append_vals(in_param1, root_path, BT_FILE_PATH_MAX);
335 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_SET_ROOT,
336 in_param1, in_param2, in_param3, in_param4, &out_param);
338 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
343 BT_EXPORT_API int bluetooth_obex_server_cancel_transfer(int transfer_id)
347 int service_function = BT_OBEX_SERVER_CANCEL_TRANSFER;
349 BT_CHECK_ENABLED(return);
351 server_type = _bt_get_obex_server_id();
353 if (server_type == BT_NO_SERVER)
354 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
355 else if (server_type == BT_CUSTOM_SERVER)
356 service_function = BT_OBEX_SERVER_CANCEL_ALL_TRANSFERS;
359 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
361 g_array_append_vals(in_param1, &transfer_id, sizeof(int));
363 result = _bt_send_request(BT_OBEX_SERVICE, service_function,
364 in_param1, in_param2, in_param3, in_param4, &out_param);
366 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
371 BT_EXPORT_API int bluetooth_obex_server_cancel_all_transfers(void)
375 BT_CHECK_ENABLED(return);
377 if (_bt_get_obex_server_id() == BT_NO_SERVER)
378 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
381 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
383 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_CANCEL_ALL_TRANSFERS,
384 in_param1, in_param2, in_param3, in_param4, &out_param);
386 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
391 BT_EXPORT_API int bluetooth_obex_server_is_receiving(gboolean *is_receiving)
395 *is_receiving = FALSE;
397 BT_CHECK_ENABLED(return);
400 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
402 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_IS_RECEIVING,
403 in_param1, in_param2, in_param3, in_param4, &out_param);
405 if (result == BLUETOOTH_ERROR_NONE) {
406 *is_receiving = g_array_index(out_param, gboolean, 0);
408 BT_ERR("Fail to send request");
411 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);