4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hocheol Seo <hocheol.seo@samsung.com>
7 * Girishashok Joshi <girish.joshi@samsung.com>
8 * Chanyeol Park <chanyeol.park@samsung.com>
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
26 #include "bluetooth-api.h"
27 #include "bt-internal-types.h"
29 #include "bt-common.h"
30 #include "bt-request-sender.h"
31 #include "bt-event-handler.h"
33 BT_EXPORT_API int bluetooth_obex_server_init(const char *dst_path)
37 bt_user_info_t *user_info;
38 gboolean native_service = TRUE;
39 char path[BT_FILE_PATH_MAX];
41 BT_CHECK_ENABLED(return);
43 if (_bt_get_obex_server_id() != BT_NO_SERVER)
44 return BLUETOOTH_ERROR_AGENT_ALREADY_EXIST;
46 user_info = _bt_get_user_data(BT_COMMON);
47 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
50 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
54 g_strlcpy(path, dst_path, sizeof(path));
55 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
56 g_array_append_vals(in_param2, &native_service, sizeof(gboolean));
57 g_array_append_vals(in_param3, &app_pid, sizeof(int));
59 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ALLOCATE,
60 in_param1, in_param2, in_param3, in_param4, &out_param);
62 if (result == BLUETOOTH_ERROR_NONE) {
63 _bt_set_obex_server_id(BT_NATIVE_SERVER);
64 _bt_register_event(BT_OPP_SERVER_EVENT, user_info->cb,
65 user_info->user_data);
67 BT_ERR("Fail to send request");
70 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
75 BT_EXPORT_API int bluetooth_obex_server_deinit(void)
79 gboolean native_service = TRUE;
81 BT_CHECK_ENABLED(return);
83 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
84 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
87 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
91 g_array_append_vals(in_param1, &native_service, sizeof(gboolean));
92 g_array_append_vals(in_param2, &app_pid, sizeof(int));
94 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_DEALLOCATE,
95 in_param1, in_param2, in_param3, in_param4, &out_param);
97 _bt_set_obex_server_id(BT_NO_SERVER);
98 _bt_unregister_event(BT_OPP_SERVER_EVENT);
100 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
105 BT_EXPORT_API int bluetooth_obex_server_init_without_agent(const char *dst_path)
109 bt_user_info_t *user_info;
110 gboolean native_service = FALSE;
111 char path[BT_FILE_PATH_MAX];
113 BT_CHECK_ENABLED(return);
115 if (_bt_get_obex_server_id() != BT_NO_SERVER)
116 return BLUETOOTH_ERROR_AGENT_ALREADY_EXIST;
118 user_info = _bt_get_user_data(BT_COMMON);
119 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
122 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
126 g_strlcpy(path, dst_path, sizeof(path));
127 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
128 g_array_append_vals(in_param2, &native_service, sizeof(gboolean));
129 g_array_append_vals(in_param3, &app_pid, sizeof(int));
131 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ALLOCATE,
132 in_param1, in_param2, in_param3, in_param4, &out_param);
134 if (result == BLUETOOTH_ERROR_NONE) {
135 _bt_set_obex_server_id(BT_CUSTOM_SERVER);
136 _bt_register_event(BT_OPP_SERVER_EVENT, user_info->cb,
137 user_info->user_data);
139 BT_ERR("Fail to send request");
142 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
147 BT_EXPORT_API int bluetooth_obex_server_deinit_without_agent(void)
151 gboolean native_service = FALSE;
153 BT_CHECK_ENABLED(return);
155 /* Can't call this API after using bluetooth_obex_server_init
157 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
158 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
161 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
165 g_array_append_vals(in_param1, &native_service, sizeof(gboolean));
166 g_array_append_vals(in_param2, &app_pid, sizeof(int));
168 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_DEALLOCATE,
169 in_param1, in_param2, in_param3, in_param4, &out_param);
171 _bt_set_obex_server_id(BT_NO_SERVER);
172 _bt_unregister_event(BT_OPP_SERVER_EVENT);
174 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
179 BT_EXPORT_API gboolean bluetooth_obex_server_is_activated(void)
182 gboolean is_activated = FALSE;
185 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
187 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_IS_ACTIVATED,
188 in_param1, in_param2, in_param3, in_param4, &out_param);
190 if (result == BLUETOOTH_ERROR_NONE) {
191 is_activated = g_array_index(out_param, gboolean, 0);
193 BT_ERR("Fail to send request");
196 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
201 BT_EXPORT_API int bluetooth_obex_server_accept_connection(void)
205 /* Can't use this API in native server
206 In native server, bt-agent will control the connection
207 using system popup */
208 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
209 return BLUETOOTH_ERROR_INTERNAL;
212 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
214 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ACCEPT_CONNECTION,
215 in_param1, in_param2, in_param3, in_param4, &out_param);
217 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
222 BT_EXPORT_API int bluetooth_obex_server_reject_connection(void)
226 /* Can't use this API in native server
227 In native server, bt-agent will control the connection
228 using system popup */
229 if (_bt_get_obex_server_id() != BT_CUSTOM_SERVER)
230 return BLUETOOTH_ERROR_INTERNAL;
233 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
235 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_REJECT_CONNECTION,
236 in_param1, in_param2, in_param3, in_param4, &out_param);
238 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
243 BT_EXPORT_API int bluetooth_obex_server_accept_authorize(const char *filename)
246 char name[BT_FILE_PATH_MAX];
248 BT_CHECK_PARAMETER(filename, return);
249 BT_CHECK_ENABLED(return);
251 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
252 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
255 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
257 g_strlcpy(name, filename, sizeof(name));
258 g_array_append_vals(in_param1, name, BT_FILE_PATH_MAX);
260 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_ACCEPT_FILE,
261 in_param1, in_param2, in_param3, in_param4, &out_param);
263 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
269 BT_EXPORT_API int bluetooth_obex_server_reject_authorize(void)
273 BT_CHECK_ENABLED(return);
275 if (_bt_get_obex_server_id() != BT_NATIVE_SERVER)
276 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
279 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
281 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_REJECT_FILE,
282 in_param1, in_param2, in_param3, in_param4, &out_param);
284 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
289 BT_EXPORT_API int bluetooth_obex_server_set_destination_path(const char *dst_path)
293 gboolean native_service = FALSE;
294 char path[BT_FILE_PATH_MAX];
296 BT_CHECK_PARAMETER(dst_path, return);
297 BT_CHECK_ENABLED(return);
299 server_id = _bt_get_obex_server_id();
301 retv_if(server_id == BT_NO_SERVER,
302 BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST);
305 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
307 native_service = (server_id == BT_NATIVE_SERVER) ? TRUE : FALSE;
309 g_strlcpy(path, dst_path, sizeof(path));
310 g_array_append_vals(in_param1, path, BT_FILE_PATH_MAX);
311 g_array_append_vals(in_param2, &native_service, sizeof(native_service));
313 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_SET_PATH,
314 in_param1, in_param2, in_param3, in_param4, &out_param);
316 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
322 BT_EXPORT_API int bluetooth_obex_server_set_root(const char *root)
325 char root_path[BT_FILE_PATH_MAX];
327 BT_CHECK_PARAMETER(root, return);
328 BT_CHECK_ENABLED(return);
330 if (_bt_get_obex_server_id() == BT_NO_SERVER)
331 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
334 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
336 g_strlcpy(root_path, root, sizeof(root_path));
337 g_array_append_vals(in_param1, root_path, BT_FILE_PATH_MAX);
339 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_SET_ROOT,
340 in_param1, in_param2, in_param3, in_param4, &out_param);
342 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
347 BT_EXPORT_API int bluetooth_obex_server_cancel_transfer(int transfer_id)
351 int service_function = BT_OBEX_SERVER_CANCEL_TRANSFER;
353 BT_CHECK_ENABLED(return);
355 server_type = _bt_get_obex_server_id();
357 if (server_type == BT_NO_SERVER)
358 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
359 else if (server_type == BT_CUSTOM_SERVER)
360 service_function = BT_OBEX_SERVER_CANCEL_ALL_TRANSFERS;
363 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
365 g_array_append_vals(in_param1, &transfer_id, sizeof(int));
367 result = _bt_send_request(BT_OBEX_SERVICE, service_function,
368 in_param1, in_param2, in_param3, in_param4, &out_param);
370 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
375 BT_EXPORT_API int bluetooth_obex_server_cancel_all_transfers(void)
379 BT_CHECK_ENABLED(return);
381 if (_bt_get_obex_server_id() == BT_NO_SERVER)
382 return BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST;
385 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
387 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_CANCEL_ALL_TRANSFERS,
388 in_param1, in_param2, in_param3, in_param4, &out_param);
390 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
395 BT_EXPORT_API int bluetooth_obex_server_is_receiving(gboolean *is_receiving)
399 *is_receiving = FALSE;
401 BT_CHECK_ENABLED(return);
404 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
406 result = _bt_send_request(BT_OBEX_SERVICE, BT_OBEX_SERVER_IS_RECEIVING,
407 in_param1, in_param2, in_param3, in_param4, &out_param);
409 if (result == BLUETOOTH_ERROR_NONE) {
410 *is_receiving = g_array_index(out_param, gboolean, 0);
412 BT_ERR("Fail to send request");
415 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);