2 * Copyright (c) 2013 - 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
24 #include "data_control_internal.h"
25 #include "data_control_bulk.h"
26 #include "data_control_map.h"
27 #include "data_control_log.h"
29 EXPORT_API int data_control_map_create(data_control_h *provider)
31 return _create_data_control_h(provider);
34 EXPORT_API int data_control_map_destroy(data_control_h provider)
36 return _destroy_data_control_h(provider, true);
39 EXPORT_API int data_control_map_set_provider_id(data_control_h provider,
40 const char *provider_id)
42 return _set_provider_id(provider, provider_id);
45 EXPORT_API int data_control_map_get_provider_id(data_control_h provider,
48 return _get_provider_id(provider, provider_id);
51 EXPORT_API int data_control_map_set_data_id(data_control_h provider,
54 return _set_data_id(provider, data_id);
57 EXPORT_API int data_control_map_get_data_id(data_control_h provider,
60 return _get_data_id(provider, data_id);
63 EXPORT_API int data_control_map_get_handle_id(data_control_h provider,
66 return _get_handle_id(provider, handle_id);
69 EXPORT_API int data_control_map_register_response_cb(data_control_h provider,
70 data_control_map_response_cb *callback, void *user_data)
72 return _register_response_cb(provider, (void *)callback,
73 false, DATACONTROL_TYPE_MAP_GET, user_data);
76 EXPORT_API int data_control_map_unregister_response_cb(data_control_h provider)
78 return _unregister_response_cb(provider, false, DATACONTROL_TYPE_MAP_GET);
81 EXPORT_API int data_control_map_register_add_bulk_data_response_cb(
82 data_control_h provider,
83 data_control_bulk_cb callback,
86 return _register_response_cb(provider, (void *)callback,
87 false, DATACONTROL_TYPE_MAP_BULK_ADD, user_data);
90 EXPORT_API int data_control_map_unregister_add_bulk_data_response_cb(
91 data_control_h provider)
93 return _unregister_response_cb(provider, false,
94 DATACONTROL_TYPE_MAP_BULK_ADD);
97 EXPORT_API int data_control_map_bind_response_cb(data_control_h provider,
98 data_control_map_response_cb *callback, void *user_data)
100 return _register_response_cb(provider, (void *)callback,
101 true, DATACONTROL_TYPE_MAP_GET, user_data);
104 EXPORT_API int data_control_map_unbind_response_cb(data_control_h provider)
106 return _unregister_response_cb(provider, true, DATACONTROL_TYPE_MAP_GET);
109 EXPORT_API int data_control_map_bind_add_bulk_data_response_cb(
110 data_control_h provider,
111 data_control_bulk_cb callback,
114 return _register_response_cb(provider, (void *)callback,
115 true, DATACONTROL_TYPE_MAP_BULK_ADD, user_data);
118 EXPORT_API int data_control_map_unbind_add_bulk_data_response_cb(
119 data_control_h provider)
121 return _unregister_response_cb(provider, true,
122 DATACONTROL_TYPE_MAP_BULK_ADD);
125 EXPORT_API int data_control_map_get(data_control_h provider,
126 const char *key, int *request_id)
130 if (provider == NULL || provider->provider_id == NULL ||
131 provider->data_id == NULL || key == NULL) {
132 _LOGE("Invalid parameter");
133 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
136 retval = _check_privilege(PRIVILEGE_CONSUMER);
137 if (retval != DATA_CONTROL_ERROR_NONE)
140 retval = _check_cert(provider->provider_id, true, NULL);
141 if (retval != DATA_CONTROL_ERROR_NONE)
144 return data_control_map_get_with_page(provider, key, request_id, 1, 20);
147 EXPORT_API int data_control_map_get_with_page(data_control_h provider,
148 const char *key, int *request_id, int page_number, int count_per_page)
150 unsigned int arg_size;
152 const char *arg_list[4];
153 char page_no_str[32];
154 char count_per_page_str[32];
155 char handle_id[MAX_LEN_DATACONTROL_HANDLE_ID] = {0, };
158 if (provider == NULL || provider->provider_id == NULL ||
159 provider->data_id == NULL ||
160 key == NULL || page_number < 1) {
161 _LOGE("Invalid parameter");
162 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
165 ret = _check_privilege(PRIVILEGE_CONSUMER);
166 if (ret != DATA_CONTROL_ERROR_NONE)
169 ret = _check_cert(provider->provider_id, true, NULL);
170 if (ret != DATA_CONTROL_ERROR_NONE)
173 _LOGI("Gets the value list from provider_id: %s, data_id: %s",
174 provider->provider_id, provider->data_id);
176 arg_size = (strlen(provider->data_id) + strlen(key)) * sizeof(wchar_t);
177 if (arg_size > MAX_REQUEST_ARGUMENT_SIZE) {
178 _LOGE("The size of sending argument (%u) exceeds the maximum limit.",
180 return DATA_CONTROL_ERROR_MAX_EXCEEDED;
183 bundle *b = bundle_create();
185 _LOGE("unable to create bundle: %d", errno);
186 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
189 bundle_add_str(b, OSP_K_DATACONTROL_PROVIDER, provider->provider_id);
190 bundle_add_str(b, OSP_K_DATACONTROL_DATA, provider->data_id);
191 snprintf(handle_id, MAX_LEN_DATACONTROL_HANDLE_ID, "%u",
192 provider->handle_id);
193 bundle_add_str(b, OSP_K_DATACONTROL_HANDLE_ID, handle_id);
195 arg_list[0] = provider->data_id;
198 ret = snprintf(page_no_str, sizeof(page_no_str), "%d", page_number);
200 _LOGE("unable to convert page no to string: %d", errno);
202 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
205 ret = snprintf(count_per_page_str, sizeof(count_per_page_str),
206 "%d", count_per_page);
208 _LOGE("unable to convert count per page no to string: %d", errno);
210 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
213 arg_list[2] = page_no_str;
214 arg_list[3] = count_per_page_str;
216 bundle_add_str_array(b, OSP_K_ARG, arg_list, 4);
218 /* Set the request id */
219 reqId = _datacontrol_create_request_id();
222 ret = _request_provider(provider, DATACONTROL_TYPE_MAP_GET, b, NULL, reqId);
229 EXPORT_API int data_control_map_set(data_control_h provider, const char *key,
230 const char *old_value, const char *new_value, int *request_id)
233 unsigned int arg_size;
235 const char *arg_list[4];
236 char handle_id[MAX_LEN_DATACONTROL_HANDLE_ID] = {0, };
239 if (provider == NULL || provider->provider_id == NULL ||
240 provider->data_id == NULL || key == NULL ||
241 old_value == NULL || new_value == NULL) {
242 _LOGE("Invalid parameter");
243 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
246 retval = _check_privilege(PRIVILEGE_CONSUMER);
247 if (retval != DATA_CONTROL_ERROR_NONE)
250 retval = _check_cert(provider->provider_id, true, NULL);
251 if (retval != DATA_CONTROL_ERROR_NONE)
254 _LOGI("Sets the old value to new value in provider_id: %s, data_id: %s",
255 provider->provider_id, provider->data_id);
257 arg_size = (strlen(provider->data_id) + strlen(key) +
258 strlen(old_value) + strlen(new_value)) * sizeof(wchar_t);
259 if (arg_size > MAX_REQUEST_ARGUMENT_SIZE) {
260 _LOGE("The size of sending argument (%u) exceeds the maximum limit.",
262 return DATA_CONTROL_ERROR_MAX_EXCEEDED;
267 _LOGE("unable to create bundle: %d", errno);
268 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
271 bundle_add_str(b, OSP_K_DATACONTROL_PROVIDER, provider->provider_id);
272 bundle_add_str(b, OSP_K_DATACONTROL_DATA, provider->data_id);
273 snprintf(handle_id, MAX_LEN_DATACONTROL_HANDLE_ID, "%u",
274 provider->handle_id);
275 bundle_add_str(b, OSP_K_DATACONTROL_HANDLE_ID, handle_id);
277 arg_list[0] = provider->data_id;
279 arg_list[2] = old_value;
280 arg_list[3] = new_value;
282 bundle_add_str_array(b, OSP_K_ARG, arg_list, 4);
284 /* Set the request id */
285 reqId = _datacontrol_create_request_id();
289 _request_provider(provider, DATACONTROL_TYPE_MAP_SET, b, NULL, reqId);
295 EXPORT_API int data_control_map_add(data_control_h provider,
296 const char *key, const char *value, int *request_id)
299 unsigned int arg_size;
301 const char *arg_list[3];
302 char handle_id[MAX_LEN_DATACONTROL_HANDLE_ID] = {0, };
305 if (provider == NULL || provider->provider_id == NULL ||
306 provider->data_id == NULL || key == NULL || value == NULL) {
307 _LOGE("Invalid parameter");
308 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
311 retval = _check_privilege(PRIVILEGE_CONSUMER);
312 if (retval != DATA_CONTROL_ERROR_NONE)
315 retval = _check_cert(provider->provider_id, true, NULL);
316 if (retval != DATA_CONTROL_ERROR_NONE)
319 _LOGI("Adds the value in provider_id: %s, data_id: %s",
320 provider->provider_id, provider->data_id);
322 arg_size = (strlen(provider->data_id) + strlen(key) +
323 strlen(value)) * sizeof(wchar_t);
324 if (arg_size > MAX_REQUEST_ARGUMENT_SIZE) {
325 _LOGE("The size of sending argument (%u) exceeds the maximum limit.",
327 return DATA_CONTROL_ERROR_MAX_EXCEEDED;
332 _LOGE("unable to create bundle: %d", errno);
333 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
336 bundle_add_str(b, OSP_K_DATACONTROL_PROVIDER, provider->provider_id);
337 bundle_add_str(b, OSP_K_DATACONTROL_DATA, provider->data_id);
338 snprintf(handle_id, MAX_LEN_DATACONTROL_HANDLE_ID, "%u",
339 provider->handle_id);
340 bundle_add_str(b, OSP_K_DATACONTROL_HANDLE_ID, handle_id);
342 arg_list[0] = provider->data_id;
346 bundle_add_str_array(b, OSP_K_ARG, arg_list, 3);
348 /* Set the request id */
349 reqId = _datacontrol_create_request_id();
353 _request_provider(provider, DATACONTROL_TYPE_MAP_ADD, b, NULL, reqId);
359 EXPORT_API int data_control_map_remove(data_control_h provider,
360 const char *key, const char *value, int *request_id)
363 unsigned int arg_size;
365 const char *arg_list[3];
366 char handle_id[MAX_LEN_DATACONTROL_HANDLE_ID] = {0, };
369 if (provider == NULL || provider->provider_id == NULL ||
370 provider->data_id == NULL || key == NULL || value == NULL) {
371 _LOGE("Invalid parameter");
372 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
375 retval = _check_privilege(PRIVILEGE_CONSUMER);
376 if (retval != DATA_CONTROL_ERROR_NONE)
379 retval = _check_cert(provider->provider_id, true, NULL);
380 if (retval != DATA_CONTROL_ERROR_NONE)
383 _LOGI("Removes the value in provider_id: %s, data_id: %s",
384 provider->provider_id, provider->data_id);
386 arg_size = (strlen(provider->data_id) + strlen(key) +
387 strlen(value)) * sizeof(wchar_t);
388 if (arg_size > MAX_REQUEST_ARGUMENT_SIZE) {
389 _LOGE("The size of sending argument (%u) exceeds the maximum limit.",
391 return DATA_CONTROL_ERROR_MAX_EXCEEDED;
396 _LOGE("unable to create bundle: %d", errno);
397 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
400 bundle_add_str(b, OSP_K_DATACONTROL_PROVIDER, provider->provider_id);
401 bundle_add_str(b, OSP_K_DATACONTROL_DATA, provider->data_id);
402 snprintf(handle_id, MAX_LEN_DATACONTROL_HANDLE_ID, "%u",
403 provider->handle_id);
404 bundle_add_str(b, OSP_K_DATACONTROL_HANDLE_ID, handle_id);
406 arg_list[0] = provider->data_id;
410 bundle_add_str_array(b, OSP_K_ARG, arg_list, 3);
412 /* Set the request id */
413 reqId = _datacontrol_create_request_id();
417 _request_provider(provider, DATACONTROL_TYPE_MAP_REMOVE, b, NULL, reqId);
423 EXPORT_API int data_control_map_add_bulk_data(data_control_h provider,
424 data_control_bulk_data_h bulk_data_h, int *request_id)
427 long long arg_size = 0;
430 const char *arg_list[3];
431 char handle_id[MAX_LEN_DATACONTROL_HANDLE_ID] = {0, };
435 if (provider == NULL || provider->provider_id == NULL ||
436 provider->data_id == NULL) {
437 _LOGE("Invalid parameter");
438 return DATA_CONTROL_ERROR_INVALID_PARAMETER;
441 retval = _check_privilege(PRIVILEGE_CONSUMER);
442 if (retval != DATA_CONTROL_ERROR_NONE)
445 retval = _check_cert(provider->provider_id, true, NULL);
446 if (retval != DATA_CONTROL_ERROR_NONE)
449 _LOGI("Adds the value in provider_id: %s, data_id: %s",
450 provider->provider_id, provider->data_id);
451 data_control_bulk_data_get_count(bulk_data_h, &count);
452 for (i = 0; i < count; i++) {
453 data_control_bulk_data_get_data(bulk_data_h, i, &data);
454 bundle_foreach(data, _bundle_foreach_check_arg_size_cb, &arg_size);
458 (strlen(provider->data_id) + strlen(provider->provider_id)) * sizeof(char);
459 if (arg_size > MAX_REQUEST_ARGUMENT_SIZE) {
460 _LOGE("The size of sending argument (%lld) exceeds the maximum limit.",
462 return DATA_CONTROL_ERROR_MAX_EXCEEDED;
467 _LOGE("unable to create bundle: %d", errno);
468 return DATA_CONTROL_ERROR_OUT_OF_MEMORY;
471 bundle_add_str(b, OSP_K_DATACONTROL_PROVIDER, provider->provider_id);
472 bundle_add_str(b, OSP_K_DATACONTROL_DATA, provider->data_id);
474 snprintf(handle_id, MAX_LEN_DATACONTROL_HANDLE_ID, "%u",
475 provider->handle_id);
476 bundle_add_str(b, OSP_K_DATACONTROL_HANDLE_ID, handle_id);
478 arg_list[0] = provider->data_id;
480 bundle_add_str_array(b, OSP_K_ARG, arg_list, 1);
481 *request_id = _datacontrol_create_request_id();
483 retval = _request_provider(provider, DATACONTROL_TYPE_MAP_BULK_ADD, b,
484 bulk_data_h, *request_id);