4 * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
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.
23 #include <pims-ipc-data.h>
26 #include "cal_typedef.h"
27 #include "cal_internal.h"
28 #include "cal_db_util.h"
29 #include "cal_ipc_marshal.h"
30 #include "cal_server_ipc.h"
31 #include "cal_access_control.h"
32 #include "cal_handle.h"
33 #include "cal_server_service.h"
35 #include "cal_server.h"
36 #include "cal_ondemand.h"
39 static void _cal_server_ipc_return(pims_ipc_data_h *outdata, int ret)
41 RET_IF(NULL == outdata);
43 *outdata = pims_ipc_data_create(0);
44 RETM_IF(NULL == *outdata, "pims_ipc_data_create() Fail");
46 if (0 != pims_ipc_data_put(*outdata, (void *)&ret, sizeof(int))) {
47 ERR("pims_ipc_data_put() Fail");
48 pims_ipc_data_destroy(*outdata);
53 void cal_server_ipc_connect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
55 int ret = CALENDAR_ERROR_NONE;
59 ret = CALENDAR_ERROR_INVALID_PARAMETER;
60 _cal_server_ipc_return(outdata, ret);
64 calendar_h handle = NULL;
65 ret = cal_ipc_unmarshal_handle(indata, &handle);
66 if (CALENDAR_ERROR_NONE != ret) {
67 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
68 _cal_server_ipc_return(outdata, ret);
73 if (CALENDAR_ERROR_NONE == ret) {
74 char *smack_label = NULL;
75 if (0 != pims_ipc_svc_get_smack_label(ipc, &smack_label))
76 ERR("pims_ipc_svc_get_smack_label() Fail");
77 cal_access_control_set_client_info(ipc, smack_label);
79 _cal_server_ipc_return(outdata, ret);
80 cal_handle_destroy(handle);
83 void cal_server_ipc_disconnect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
85 int ret = CALENDAR_ERROR_NONE;
89 ret = CALENDAR_ERROR_INVALID_PARAMETER;
90 _cal_server_ipc_return(outdata, ret);
94 calendar_h handle = NULL;
95 ret = cal_ipc_unmarshal_handle(indata, &handle);
96 if (CALENDAR_ERROR_NONE != ret) {
97 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
98 _cal_server_ipc_return(outdata, ret);
102 ret = cal_disconnect();
103 _cal_server_ipc_return(outdata, ret);
104 cal_handle_destroy(handle);
107 void cal_server_ipc_check_permission(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
109 int ret = CALENDAR_ERROR_NONE;
111 if (NULL == indata) {
113 ret = CALENDAR_ERROR_INVALID_PARAMETER;
114 _cal_server_ipc_return(outdata, ret);
119 ret = cal_ipc_unmarshal_int(indata, &permission);
120 if (CALENDAR_ERROR_NONE != ret) {
121 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
122 _cal_server_ipc_return(outdata, ret);
126 bool result = cal_access_control_have_permission(ipc, permission);
127 _cal_server_ipc_return(outdata, ret);
129 if (0 != pims_ipc_data_put(*outdata, (void *)&result, sizeof(bool))) {
130 ERR("pims_ipc_data_put() Fail");
131 pims_ipc_data_destroy(*outdata);
133 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
134 _cal_server_ipc_return(outdata, ret);
138 void cal_server_ipc_db_insert_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
140 int ret = CALENDAR_ERROR_NONE;
142 if (NULL == indata) {
144 ret = CALENDAR_ERROR_INVALID_PARAMETER;
145 _cal_server_ipc_return(outdata, ret);
149 calendar_h handle = NULL;
150 ret = cal_ipc_unmarshal_handle(indata, &handle);
151 if (CALENDAR_ERROR_NONE != ret) {
152 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
153 _cal_server_ipc_return(outdata, ret);
157 calendar_record_h record = NULL;
158 ret = cal_ipc_unmarshal_record(indata, &record);
159 if (CALENDAR_ERROR_NONE != ret) {
160 ERR("cal_ipc_unmarshal_record() Fail(%d)", ret);
161 _cal_server_ipc_return(outdata, ret);
162 cal_handle_destroy(handle);
166 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
167 ret = CALENDAR_ERROR_PERMISSION_DENIED;
168 _cal_server_ipc_return(outdata, ret);
169 cal_handle_destroy(handle);
174 ret = cal_db_insert_record(record, &id);
175 _cal_server_ipc_return(outdata, ret);
177 int transaction_ver = 0;
178 transaction_ver = cal_db_util_get_transaction_ver();
179 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
180 if (CALENDAR_ERROR_NONE != ret) {
181 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
182 pims_ipc_data_destroy(*outdata);
184 _cal_server_ipc_return(outdata, ret);
185 calendar_record_destroy(record, true);
186 cal_handle_destroy(handle);
190 ret = cal_ipc_marshal_int(id, *outdata);
191 if (CALENDAR_ERROR_NONE != ret) {
192 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
193 pims_ipc_data_destroy(*outdata);
195 _cal_server_ipc_return(outdata, ret);
198 calendar_record_destroy(record, true);
199 cal_handle_destroy(handle);
202 void cal_server_ipc_db_get_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
204 int ret = CALENDAR_ERROR_NONE;
206 if (NULL == indata) {
208 ret = CALENDAR_ERROR_INVALID_PARAMETER;
209 _cal_server_ipc_return(outdata, ret);
213 calendar_h handle = NULL;
214 ret = cal_ipc_unmarshal_handle(indata, &handle);
215 if (CALENDAR_ERROR_NONE != ret) {
216 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
217 _cal_server_ipc_return(outdata, ret);
221 char* view_uri = NULL;
222 ret = cal_ipc_unmarshal_char(indata, &view_uri);
223 if (CALENDAR_ERROR_NONE != ret) {
224 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
225 _cal_server_ipc_return(outdata, ret);
227 cal_handle_destroy(handle);
232 ret = cal_ipc_unmarshal_int(indata, &id);
233 if (CALENDAR_ERROR_NONE != ret) {
234 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
235 _cal_server_ipc_return(outdata, ret);
237 cal_handle_destroy(handle);
241 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
242 ret = CALENDAR_ERROR_PERMISSION_DENIED;
243 _cal_server_ipc_return(outdata, ret);
245 cal_handle_destroy(handle);
249 calendar_record_h record = NULL;
250 ret = cal_db_get_record(view_uri, id, &record);
251 _cal_server_ipc_return(outdata, ret);
253 if (CALENDAR_ERROR_NONE == ret) {
254 ret = cal_ipc_marshal_record(record, *outdata);
255 if (CALENDAR_ERROR_NONE != ret) {
256 ERR("cal_ipc_marshal_record() Fail(%d)", ret);
257 pims_ipc_data_destroy(*outdata);
259 _cal_server_ipc_return(outdata, ret);
263 calendar_record_destroy(record, true);
265 cal_handle_destroy(handle);
268 void cal_server_ipc_db_update_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
270 int ret = CALENDAR_ERROR_NONE;
272 if (NULL == indata) {
274 ret = CALENDAR_ERROR_INVALID_PARAMETER;
275 _cal_server_ipc_return(outdata, ret);
279 calendar_h handle = NULL;
280 ret = cal_ipc_unmarshal_handle(indata, &handle);
281 if (CALENDAR_ERROR_NONE != ret) {
282 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
283 _cal_server_ipc_return(outdata, ret);
287 calendar_record_h record = NULL;
288 ret = cal_ipc_unmarshal_record(indata, &record);
289 if (CALENDAR_ERROR_NONE != ret) {
290 ERR("cal_ipc_unmarshal_record() Fail(%d)", ret);
291 _cal_server_ipc_return(outdata, ret);
292 cal_handle_destroy(handle);
296 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
297 ret = CALENDAR_ERROR_PERMISSION_DENIED;
298 _cal_server_ipc_return(outdata, ret);
299 cal_handle_destroy(handle);
303 ret = cal_db_update_record(record);
304 _cal_server_ipc_return(outdata, ret);
306 if (CALENDAR_ERROR_NONE == ret) {
307 int transaction_ver = 0;
308 transaction_ver = cal_db_util_get_transaction_ver();
309 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
310 if (CALENDAR_ERROR_NONE != ret) {
311 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
312 pims_ipc_data_destroy(*outdata);
314 _cal_server_ipc_return(outdata, ret);
318 calendar_record_destroy(record, true);
319 cal_handle_destroy(handle);
322 void cal_server_ipc_db_delete_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
324 int ret = CALENDAR_ERROR_NONE;
326 if (NULL == indata) {
328 ret = CALENDAR_ERROR_INVALID_PARAMETER;
329 _cal_server_ipc_return(outdata, ret);
333 calendar_h handle = NULL;
334 ret = cal_ipc_unmarshal_handle(indata, &handle);
335 if (CALENDAR_ERROR_NONE != ret) {
336 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
337 _cal_server_ipc_return(outdata, ret);
341 char* view_uri = NULL;
342 ret = cal_ipc_unmarshal_char(indata, &view_uri);
343 if (CALENDAR_ERROR_NONE != ret) {
344 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
345 _cal_server_ipc_return(outdata, ret);
346 cal_handle_destroy(handle);
351 ret = cal_ipc_unmarshal_int(indata, &id);
352 if (CALENDAR_ERROR_NONE != ret) {
353 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
354 _cal_server_ipc_return(outdata, ret);
356 cal_handle_destroy(handle);
360 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
361 ret = CALENDAR_ERROR_PERMISSION_DENIED;
362 _cal_server_ipc_return(outdata, ret);
364 cal_handle_destroy(handle);
368 ret = cal_db_delete_record(view_uri,id);
369 _cal_server_ipc_return(outdata, ret);
371 if (CALENDAR_ERROR_NONE == ret) {
372 int transaction_ver = 0;
373 transaction_ver = cal_db_util_get_transaction_ver();
374 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
375 if (CALENDAR_ERROR_NONE != ret) {
376 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
377 pims_ipc_data_destroy(*outdata);
379 _cal_server_ipc_return(outdata, ret);
384 cal_handle_destroy(handle);
387 void cal_server_ipc_db_get_all_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
389 int ret = CALENDAR_ERROR_NONE;
391 if (NULL == indata) {
393 ret = CALENDAR_ERROR_INVALID_PARAMETER;
394 _cal_server_ipc_return(outdata, ret);
398 calendar_h handle = NULL;
399 ret = cal_ipc_unmarshal_handle(indata, &handle);
400 if (CALENDAR_ERROR_NONE != ret) {
401 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
402 _cal_server_ipc_return(outdata, ret);
406 char* view_uri = NULL;
407 ret = cal_ipc_unmarshal_char(indata, &view_uri);
408 if (CALENDAR_ERROR_NONE != ret) {
409 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
410 _cal_server_ipc_return(outdata, ret);
411 cal_handle_destroy(handle);
416 ret = cal_ipc_unmarshal_int(indata, &offset);
417 if (CALENDAR_ERROR_NONE != ret) {
418 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
419 _cal_server_ipc_return(outdata, ret);
421 cal_handle_destroy(handle);
426 ret = cal_ipc_unmarshal_int(indata, &limit);
427 if (CALENDAR_ERROR_NONE != ret) {
428 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
429 _cal_server_ipc_return(outdata, ret);
431 cal_handle_destroy(handle);
435 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
436 ret = CALENDAR_ERROR_PERMISSION_DENIED;
437 _cal_server_ipc_return(outdata, ret);
439 cal_handle_destroy(handle);
443 calendar_list_h list = NULL;
444 ret = cal_db_get_all_records(view_uri, offset, limit, &list);
445 _cal_server_ipc_return(outdata, ret);
447 if (CALENDAR_ERROR_NONE == ret) {
448 ret = cal_ipc_marshal_list(list, *outdata);
449 if (CALENDAR_ERROR_NONE != ret) {
450 ERR("cal_ipc_marshal_list() Fail(%d)", ret);
451 pims_ipc_data_destroy(*outdata);
453 _cal_server_ipc_return(outdata, ret);
457 calendar_list_destroy(list, true);
459 cal_handle_destroy(handle);
462 void cal_server_ipc_db_get_records_with_query(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
464 int ret = CALENDAR_ERROR_NONE;
466 if (NULL == indata) {
468 ret = CALENDAR_ERROR_INVALID_PARAMETER;
469 _cal_server_ipc_return(outdata, ret);
473 calendar_h handle = NULL;
474 ret = cal_ipc_unmarshal_handle(indata, &handle);
475 if (CALENDAR_ERROR_NONE != ret) {
476 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
477 _cal_server_ipc_return(outdata, ret);
481 calendar_query_h query = NULL;
482 ret = cal_ipc_unmarshal_query(indata, &query);
483 if (CALENDAR_ERROR_NONE != ret) {
484 ERR("cal_ipc_unmarshal_query() Fail(%d)", ret);
485 _cal_server_ipc_return(outdata, ret);
486 cal_handle_destroy(handle);
491 ret = cal_ipc_unmarshal_int(indata, &offset);
492 if (CALENDAR_ERROR_NONE != ret) {
493 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
494 _cal_server_ipc_return(outdata, ret);
495 calendar_query_destroy(query);
496 cal_handle_destroy(handle);
501 ret = cal_ipc_unmarshal_int(indata, &limit);
502 if (CALENDAR_ERROR_NONE != ret) {
503 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
504 _cal_server_ipc_return(outdata, ret);
505 calendar_query_destroy(query);
506 cal_handle_destroy(handle);
510 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
511 ret = CALENDAR_ERROR_PERMISSION_DENIED;
512 _cal_server_ipc_return(outdata, ret);
513 calendar_query_destroy(query);
514 cal_handle_destroy(handle);
518 calendar_list_h list = NULL;
519 ret = cal_db_get_records_with_query(query, offset, limit, &list);
520 _cal_server_ipc_return(outdata, ret);
522 if (CALENDAR_ERROR_NONE == ret) {
523 ret = cal_ipc_marshal_list(list, *outdata);
524 if (CALENDAR_ERROR_NONE != ret) {
525 ERR("cal_ipc_marshal_list() Fail(%d)", ret);
526 pims_ipc_data_destroy(*outdata);
528 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
529 _cal_server_ipc_return(outdata, ret);
533 calendar_list_destroy(list, true);
534 calendar_query_destroy(query);
535 cal_handle_destroy(handle);
538 void cal_server_ipc_db_clean_after_sync(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
540 int ret = CALENDAR_ERROR_NONE;
542 if (NULL == indata) {
544 ret = CALENDAR_ERROR_INVALID_PARAMETER;
545 _cal_server_ipc_return(outdata, ret);
549 calendar_h handle = NULL;
550 ret = cal_ipc_unmarshal_handle(indata, &handle);
551 if (CALENDAR_ERROR_NONE != ret) {
552 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
553 _cal_server_ipc_return(outdata, ret);
557 int calendar_book_id = 0;
558 ret = cal_ipc_unmarshal_int(indata,&calendar_book_id);
559 if (CALENDAR_ERROR_NONE != ret) {
560 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
561 _cal_server_ipc_return(outdata, ret);
562 cal_handle_destroy(handle);
566 int calendar_db_version = 0;
567 ret = cal_ipc_unmarshal_int(indata, &calendar_db_version);
568 if (CALENDAR_ERROR_NONE != ret) {
569 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
570 _cal_server_ipc_return(outdata, ret);
571 cal_handle_destroy(handle);
575 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
576 ret = CALENDAR_ERROR_PERMISSION_DENIED;
577 _cal_server_ipc_return(outdata, ret);
578 cal_handle_destroy(handle);
582 ret = cal_db_clean_after_sync(calendar_book_id, calendar_db_version);
583 _cal_server_ipc_return(outdata, ret);
584 cal_handle_destroy(handle);
587 void cal_server_ipc_db_get_count(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
589 int ret = CALENDAR_ERROR_NONE;
591 if (NULL == indata) {
593 ret = CALENDAR_ERROR_INVALID_PARAMETER;
594 _cal_server_ipc_return(outdata, ret);
598 calendar_h handle = NULL;
599 ret = cal_ipc_unmarshal_handle(indata, &handle);
600 if (CALENDAR_ERROR_NONE != ret) {
601 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
602 _cal_server_ipc_return(outdata, ret);
606 char *view_uri = NULL;
607 ret = cal_ipc_unmarshal_char(indata, &view_uri);
608 if (CALENDAR_ERROR_NONE != ret) {
609 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
610 _cal_server_ipc_return(outdata, ret);
611 cal_handle_destroy(handle);
615 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
616 ret = CALENDAR_ERROR_PERMISSION_DENIED;
617 _cal_server_ipc_return(outdata, ret);
618 cal_handle_destroy(handle);
623 ret = cal_db_get_count(view_uri, &count);
624 _cal_server_ipc_return(outdata, ret);
626 if (CALENDAR_ERROR_NONE == ret) {
627 ret = cal_ipc_marshal_int(count, *outdata);
628 if (CALENDAR_ERROR_NONE != ret) {
629 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
630 pims_ipc_data_destroy(*outdata);
632 _cal_server_ipc_return(outdata, ret);
637 cal_handle_destroy(handle);
640 void cal_server_ipc_db_get_count_with_query(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
642 int ret = CALENDAR_ERROR_NONE;
644 if (NULL == indata) {
646 ret = CALENDAR_ERROR_INVALID_PARAMETER;
647 _cal_server_ipc_return(outdata, ret);
651 calendar_h handle = NULL;
652 ret = cal_ipc_unmarshal_handle(indata, &handle);
653 if (CALENDAR_ERROR_NONE != ret) {
654 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
655 _cal_server_ipc_return(outdata, ret);
659 calendar_query_h query = NULL;
660 ret = cal_ipc_unmarshal_query(indata,&query);
661 if (CALENDAR_ERROR_NONE != ret) {
662 ERR("cal_ipc_unmarshal_query() Fail(%d)", ret);
663 _cal_server_ipc_return(outdata, ret);
664 cal_handle_destroy(handle);
668 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
669 ret = CALENDAR_ERROR_PERMISSION_DENIED;
670 _cal_server_ipc_return(outdata, ret);
671 cal_handle_destroy(handle);
676 ret = cal_db_get_count_with_query(query, &count);
677 _cal_server_ipc_return(outdata, ret);
679 if (CALENDAR_ERROR_NONE == ret) {
680 ret = cal_ipc_marshal_int(count, *outdata);
681 if (CALENDAR_ERROR_NONE != ret) {
682 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
683 pims_ipc_data_destroy(*outdata);
685 _cal_server_ipc_return(outdata, ret);
689 calendar_query_destroy(query);
690 cal_handle_destroy(handle);
693 void cal_server_ipc_db_insert_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
695 int ret = CALENDAR_ERROR_NONE;
697 if (NULL == indata) {
699 ret = CALENDAR_ERROR_INVALID_PARAMETER;
700 _cal_server_ipc_return(outdata, ret);
704 calendar_h handle = NULL;
705 ret = cal_ipc_unmarshal_handle(indata, &handle);
706 if (CALENDAR_ERROR_NONE != ret) {
707 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
708 _cal_server_ipc_return(outdata, ret);
712 calendar_list_h list = NULL;
713 ret = cal_ipc_unmarshal_list(indata, &list);
714 if (CALENDAR_ERROR_NONE != ret) {
715 ERR("cal_ipc_unmarshal_list() Fail(%d)", ret);
716 _cal_server_ipc_return(outdata, ret);
717 cal_handle_destroy(handle);
721 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
722 ret = CALENDAR_ERROR_PERMISSION_DENIED;
723 _cal_server_ipc_return(outdata, ret);
724 cal_handle_destroy(handle);
730 ret = cal_db_insert_records(list, &ids, &id_count);
731 _cal_server_ipc_return(outdata, ret);
733 if (CALENDAR_ERROR_NONE == ret) {
734 int transaction_ver = 0;
735 transaction_ver = cal_db_util_get_transaction_ver();
736 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
737 if (CALENDAR_ERROR_NONE != ret) {
738 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
739 pims_ipc_data_destroy(*outdata);
741 _cal_server_ipc_return(outdata, ret);
743 calendar_list_destroy(list, true);
744 cal_handle_destroy(handle);
748 * marshal : id_count+[ids]*id_count
751 if (pims_ipc_data_put(*outdata, (void*)&id_count, sizeof(int)) != 0) {
752 ERR("pims_ipc_data_put() Fail");
753 pims_ipc_data_destroy(*outdata);
755 ret = CALENDAR_ERROR_INVALID_PARAMETER;
756 _cal_server_ipc_return(outdata, ret);
758 calendar_list_destroy(list, true);
759 cal_handle_destroy(handle);
765 for(i = 0; i < id_count; i++) {
766 if (pims_ipc_data_put(*outdata, (void*)&ids[i], sizeof(int)) != 0) {
767 ERR("pims_ipc_data_put() Fail");
768 pims_ipc_data_destroy(*outdata);
770 ret = CALENDAR_ERROR_INVALID_PARAMETER;
771 _cal_server_ipc_return(outdata, ret);
773 calendar_list_destroy(list, true);
774 cal_handle_destroy(handle);
781 calendar_list_destroy(list, true);
782 cal_handle_destroy(handle);
785 void cal_server_ipc_db_update_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
787 int ret = CALENDAR_ERROR_NONE;
789 if (NULL == indata) {
791 ret = CALENDAR_ERROR_INVALID_PARAMETER;
792 _cal_server_ipc_return(outdata, ret);
796 calendar_h handle = NULL;
797 ret = cal_ipc_unmarshal_handle(indata, &handle);
798 if (CALENDAR_ERROR_NONE != ret) {
799 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
800 _cal_server_ipc_return(outdata, ret);
804 calendar_list_h list = NULL;
805 ret = cal_ipc_unmarshal_list(indata, &list);
806 if (CALENDAR_ERROR_NONE != ret) {
807 ERR("cal_ipc_unmarshal_list() Fail(%d)", ret);
808 _cal_server_ipc_return(outdata, ret);
809 cal_handle_destroy(handle);
813 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
814 ret = CALENDAR_ERROR_PERMISSION_DENIED;
815 _cal_server_ipc_return(outdata, ret);
816 cal_handle_destroy(handle);
820 ret = cal_db_update_records(list);
821 _cal_server_ipc_return(outdata, ret);
823 if (CALENDAR_ERROR_NONE == ret) {
824 int transaction_ver = 0;
825 transaction_ver = cal_db_util_get_transaction_ver();
826 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
827 if (CALENDAR_ERROR_NONE != ret) {
828 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
829 pims_ipc_data_destroy(*outdata);
831 _cal_server_ipc_return(outdata, ret);
835 calendar_list_destroy(list,true);
836 cal_handle_destroy(handle);
839 void cal_server_ipc_db_delete_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
841 int ret = CALENDAR_ERROR_NONE;
843 if (NULL == indata) {
845 ret = CALENDAR_ERROR_INVALID_PARAMETER;
846 _cal_server_ipc_return(outdata, ret);
850 calendar_h handle = NULL;
851 ret = cal_ipc_unmarshal_handle(indata, &handle);
852 if (CALENDAR_ERROR_NONE != ret) {
853 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
854 _cal_server_ipc_return(outdata, ret);
858 char *view_uri = NULL;
859 ret = cal_ipc_unmarshal_char(indata, &view_uri);
860 if (CALENDAR_ERROR_NONE != ret) {
861 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
862 _cal_server_ipc_return(outdata, ret);
863 cal_handle_destroy(handle);
868 ret = cal_ipc_unmarshal_int(indata, &count);
869 if (CALENDAR_ERROR_NONE != ret) {
870 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
871 _cal_server_ipc_return(outdata, ret);
873 cal_handle_destroy(handle);
878 ERR("count(%d)", count);
879 ret = CALENDAR_ERROR_NO_DATA;
880 _cal_server_ipc_return(outdata, ret);
882 cal_handle_destroy(handle);
887 ids = (int*)calloc(count, sizeof(int));
889 ERR("calloc() Fail");
890 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
891 _cal_server_ipc_return(outdata, ret);
893 cal_handle_destroy(handle);
898 for(i = 0; i < count; i++) {
899 ret = cal_ipc_unmarshal_int(indata, &ids[i]);
900 if (CALENDAR_ERROR_NONE != ret) {
901 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
902 ret = CALENDAR_ERROR_IPC;
903 _cal_server_ipc_return(outdata, ret);
906 cal_handle_destroy(handle);
911 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
912 ret = CALENDAR_ERROR_PERMISSION_DENIED;
913 _cal_server_ipc_return(outdata, ret);
916 cal_handle_destroy(handle);
920 ret = cal_db_delete_records(view_uri, ids, count);
921 _cal_server_ipc_return(outdata, ret);
923 if (CALENDAR_ERROR_NONE == ret) {
924 int transaction_ver = 0;
925 transaction_ver = cal_db_util_get_transaction_ver();
926 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
927 if (CALENDAR_ERROR_NONE != ret) {
928 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
929 pims_ipc_data_destroy(*outdata);
931 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
932 _cal_server_ipc_return(outdata, ret);
938 cal_handle_destroy(handle);
941 void cal_server_ipc_db_get_changes_by_version(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
943 int ret = CALENDAR_ERROR_NONE;
945 if (NULL == indata) {
947 ret = CALENDAR_ERROR_INVALID_PARAMETER;
948 _cal_server_ipc_return(outdata, ret);
952 calendar_h handle = NULL;
953 ret = cal_ipc_unmarshal_handle(indata, &handle);
954 if (CALENDAR_ERROR_NONE != ret) {
955 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
956 _cal_server_ipc_return(outdata, ret);
960 char *view_uri = NULL;
961 ret = cal_ipc_unmarshal_char(indata, &view_uri);
962 if (CALENDAR_ERROR_NONE != ret) {
963 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
964 _cal_server_ipc_return(outdata, ret);
965 cal_handle_destroy(handle);
969 int calendar_book_id = 0;
970 ret = cal_ipc_unmarshal_int(indata, &calendar_book_id);
971 if (CALENDAR_ERROR_NONE != ret) {
972 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
973 _cal_server_ipc_return(outdata, ret);
975 cal_handle_destroy(handle);
979 int calendar_db_version = 0;
980 ret = cal_ipc_unmarshal_int(indata, &calendar_db_version);
981 if (CALENDAR_ERROR_NONE != ret) {
982 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
983 _cal_server_ipc_return(outdata, ret);
985 cal_handle_destroy(handle);
989 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
990 ret = CALENDAR_ERROR_PERMISSION_DENIED;
991 _cal_server_ipc_return(outdata, ret);
993 cal_handle_destroy(handle);
997 calendar_list_h list = NULL;
998 int current_calendar_db_version = 0;
999 ret = cal_db_get_changes_by_version(view_uri, calendar_book_id, calendar_db_version, &list, ¤t_calendar_db_version);
1000 _cal_server_ipc_return(outdata, ret);
1002 if (CALENDAR_ERROR_NONE == ret) {
1003 ret = cal_ipc_marshal_list(list,*outdata);
1004 if (CALENDAR_ERROR_NONE != ret) {
1005 ERR("cal_ipc_marshal_list() Fail(%d)", ret);
1006 pims_ipc_data_destroy(*outdata);
1008 _cal_server_ipc_return(outdata, ret);
1009 calendar_list_destroy(list, true);
1011 cal_handle_destroy(handle);
1015 ret = cal_ipc_marshal_int(current_calendar_db_version,*outdata);
1016 if (CALENDAR_ERROR_NONE != ret) {
1017 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
1018 pims_ipc_data_destroy(*outdata);
1020 _cal_server_ipc_return(outdata, ret);
1021 calendar_list_destroy(list, true);
1023 cal_handle_destroy(handle);
1028 calendar_list_destroy(list, true);
1030 cal_handle_destroy(handle);
1033 void cal_server_ipc_db_get_current_version(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1035 int ret = CALENDAR_ERROR_NONE;
1037 if (NULL == indata) {
1039 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1040 _cal_server_ipc_return(outdata, ret);
1044 calendar_h handle = NULL;
1045 ret = cal_ipc_unmarshal_handle(indata, &handle);
1046 if (CALENDAR_ERROR_NONE != ret) {
1047 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1048 _cal_server_ipc_return(outdata, ret);
1052 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
1053 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1054 _cal_server_ipc_return(outdata, ret);
1055 cal_handle_destroy(handle);
1059 int calendar_db_version = 0;
1060 ret = cal_db_get_current_version(&calendar_db_version);
1061 _cal_server_ipc_return(outdata, ret);
1063 if (CALENDAR_ERROR_NONE == ret) {
1064 ret = cal_ipc_marshal_int(calendar_db_version, *outdata);
1065 if (CALENDAR_ERROR_NONE != ret) {
1066 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
1067 _cal_server_ipc_return(outdata, ret);
1070 cal_handle_destroy(handle);
1073 void cal_server_ipc_db_insert_vcalendars(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1075 int ret = CALENDAR_ERROR_NONE;
1077 if (NULL == indata) {
1079 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1080 _cal_server_ipc_return(outdata, ret);
1084 calendar_h handle = NULL;
1085 ret = cal_ipc_unmarshal_handle(indata, &handle);
1086 if (CALENDAR_ERROR_NONE != ret) {
1087 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1088 _cal_server_ipc_return(outdata, ret);
1092 char *stream = NULL;
1093 ret = cal_ipc_unmarshal_char(indata, &stream);
1094 if (CALENDAR_ERROR_NONE != ret) {
1095 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
1096 _cal_server_ipc_return(outdata, ret);
1097 cal_handle_destroy(handle);
1101 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
1102 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1103 _cal_server_ipc_return(outdata, ret);
1104 cal_handle_destroy(handle);
1110 ret = cal_db_insert_vcalendars(stream, &ids, &count);
1111 _cal_server_ipc_return(outdata, ret);
1113 if (CALENDAR_ERROR_NONE == ret) {
1114 int transaction_ver = 0;
1115 transaction_ver = cal_db_util_get_transaction_ver();
1116 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
1117 if (CALENDAR_ERROR_NONE != ret) {
1118 ERR("cal_ipc_marshal() Fail(%d)", ret);
1119 pims_ipc_data_destroy(*outdata);
1121 _cal_server_ipc_return(outdata, ret);
1124 cal_handle_destroy(handle);
1128 ret = cal_ipc_marshal_int(count, *outdata);
1129 if (CALENDAR_ERROR_NONE != ret) {
1130 ERR("cal_ipc_marshal_int() Fail");
1131 pims_ipc_data_destroy(*outdata);
1133 _cal_server_ipc_return(outdata, ret);
1136 cal_handle_destroy(handle);
1141 for(i = 0; i < count; i++) {
1142 ret = cal_ipc_marshal_int(ids[i], *outdata);
1143 if (CALENDAR_ERROR_NONE != ret) {
1144 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
1145 pims_ipc_data_destroy(*outdata);
1147 _cal_server_ipc_return(outdata, ret);
1150 cal_handle_destroy(handle);
1158 cal_handle_destroy(handle);
1161 void cal_server_ipc_db_replace_vcalendars(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1163 int ret = CALENDAR_ERROR_NONE;
1165 if (NULL == indata) {
1167 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1168 _cal_server_ipc_return(outdata, ret);
1172 calendar_h handle = NULL;
1173 ret = cal_ipc_unmarshal_handle(indata, &handle);
1174 if (CALENDAR_ERROR_NONE != ret) {
1175 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1176 _cal_server_ipc_return(outdata, ret);
1180 char *stream = NULL;
1181 ret = cal_ipc_unmarshal_char(indata, &stream);
1182 if (CALENDAR_ERROR_NONE != ret) {
1183 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
1184 _cal_server_ipc_return(outdata, ret);
1185 cal_handle_destroy(handle);
1190 ret = cal_ipc_unmarshal_int(indata, &count);
1191 if (CALENDAR_ERROR_NONE != ret) {
1192 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1193 _cal_server_ipc_return(outdata, ret);
1195 cal_handle_destroy(handle);
1200 ids = (int*)calloc(count, sizeof(int));
1202 ERR("calloc() Fail");
1203 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1204 _cal_server_ipc_return(outdata, ret);
1206 cal_handle_destroy(handle);
1211 for(i = 0; i < count; i++) {
1212 ret = cal_ipc_unmarshal_int(indata, &ids[i]);
1213 if (CALENDAR_ERROR_NONE != ret) {
1214 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1215 _cal_server_ipc_return(outdata, ret);
1218 cal_handle_destroy(handle);
1223 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
1224 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1225 _cal_server_ipc_return(outdata, ret);
1228 cal_handle_destroy(handle);
1233 ret = cal_db_replace_vcalendars(stream, ids, count);
1234 _cal_server_ipc_return(outdata, ret);
1236 if (CALENDAR_ERROR_NONE == ret) {
1237 int transaction_ver = 0;
1238 transaction_ver = cal_db_util_get_transaction_ver();
1239 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
1240 if (CALENDAR_ERROR_NONE != ret) {
1241 ERR("cal_ipc_marshal_int() Fail(%d)", ret);
1242 pims_ipc_data_destroy(*outdata);
1244 _cal_server_ipc_return(outdata, ret);
1250 cal_handle_destroy(handle);
1253 void cal_server_ipc_db_replace_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1255 int ret = CALENDAR_ERROR_NONE;
1257 if (NULL == indata) {
1259 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1260 _cal_server_ipc_return(outdata, ret);
1264 calendar_h handle = NULL;
1265 ret = cal_ipc_unmarshal_handle(indata, &handle);
1266 if (CALENDAR_ERROR_NONE != ret) {
1267 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1268 _cal_server_ipc_return(outdata, ret);
1272 calendar_record_h record = NULL;
1273 ret = cal_ipc_unmarshal_record(indata, &record);
1274 if (CALENDAR_ERROR_NONE != ret) {
1275 ERR("cal_ipc_unmarshal_record() Fail(%d)", ret);
1276 _cal_server_ipc_return(outdata, ret);
1277 cal_handle_destroy(handle);
1282 ret = cal_ipc_unmarshal_int(indata, &id);
1283 if (CALENDAR_ERROR_NONE != ret) {
1284 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1285 _cal_server_ipc_return(outdata, ret);
1286 calendar_record_destroy(record, true);
1287 cal_handle_destroy(handle);
1291 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
1292 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1293 calendar_record_destroy(record, true);
1294 cal_handle_destroy(handle);
1298 ret = cal_db_replace_record(record, id);
1299 _cal_server_ipc_return(outdata, ret);
1301 if (CALENDAR_ERROR_NONE == ret) {
1302 int transaction_ver = 0;
1303 transaction_ver = cal_db_util_get_transaction_ver();
1304 ret = cal_ipc_marshal_int(transaction_ver, *outdata);
1305 if (CALENDAR_ERROR_NONE != ret) {
1306 ERR("cal_ipc_marshal_int() Fail");
1307 pims_ipc_data_destroy(*outdata);
1309 _cal_server_ipc_return(outdata, ret);
1313 calendar_record_destroy(record, true);
1314 cal_handle_destroy(handle);
1317 void cal_server_ipc_db_replace_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1319 int ret = CALENDAR_ERROR_NONE;
1321 if (NULL == indata) {
1323 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1324 _cal_server_ipc_return(outdata, ret);
1328 calendar_h handle = NULL;
1329 ret = cal_ipc_unmarshal_handle(indata, &handle);
1330 if (CALENDAR_ERROR_NONE != ret) {
1331 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1332 _cal_server_ipc_return(outdata, ret);
1336 calendar_list_h list = NULL;
1337 ret = cal_ipc_unmarshal_list(indata, &list);
1338 if (CALENDAR_ERROR_NONE != ret) {
1339 ERR("cal_ipc_unmarshal_list() Fail(%d)", ret);
1340 _cal_server_ipc_return(outdata, ret);
1341 cal_handle_destroy(handle);
1346 ret = cal_ipc_unmarshal_int(indata, &count);
1347 if (CALENDAR_ERROR_NONE != ret) {
1348 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1349 _cal_server_ipc_return(outdata, ret);
1350 calendar_list_destroy(list, true);
1351 cal_handle_destroy(handle);
1356 ERR("count(%d) <= 0", count);
1357 ret = CALENDAR_ERROR_NO_DATA;
1358 _cal_server_ipc_return(outdata, ret);
1359 calendar_list_destroy(list, true);
1360 cal_handle_destroy(handle);
1365 ids = (int*)calloc(count, sizeof(int));
1367 ERR("calloc() Fail");
1368 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1369 _cal_server_ipc_return(outdata, ret);
1370 calendar_list_destroy(list, true);
1371 cal_handle_destroy(handle);
1376 for(i = 0; i < count; i++) {
1377 ret = cal_ipc_unmarshal_int(indata, &ids[i]);
1378 if (CALENDAR_ERROR_NONE != ret) {
1379 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1380 ret = CALENDAR_ERROR_IPC;
1381 _cal_server_ipc_return(outdata, ret);
1383 calendar_list_destroy(list, true);
1384 cal_handle_destroy(handle);
1389 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_WRITE)) {
1390 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1391 _cal_server_ipc_return(outdata, ret);
1393 calendar_list_destroy(list, true);
1394 cal_handle_destroy(handle);
1398 ret = cal_db_replace_records(list, ids, count);
1399 _cal_server_ipc_return(outdata, ret);
1401 if (CALENDAR_ERROR_NONE == ret) {
1402 int transaction_ver = 0;
1403 transaction_ver = cal_db_util_get_transaction_ver();
1404 ret = cal_ipc_marshal_int(transaction_ver,*outdata);
1405 if (CALENDAR_ERROR_NONE != ret) {
1406 ERR("cal_ipc_marshal_int() Fail");
1407 pims_ipc_data_destroy(*outdata);
1409 _cal_server_ipc_return(outdata, ret);
1414 calendar_list_destroy(list, true);
1415 cal_handle_destroy(handle);
1418 void cal_server_ipc_db_changes_exception(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
1420 int ret = CALENDAR_ERROR_NONE;
1422 if (NULL == indata) {
1424 ret = CALENDAR_ERROR_INVALID_PARAMETER;
1425 _cal_server_ipc_return(outdata, ret);
1429 calendar_h handle = NULL;
1430 ret = cal_ipc_unmarshal_handle(indata, &handle);
1431 if (CALENDAR_ERROR_NONE != ret) {
1432 ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
1433 _cal_server_ipc_return(outdata, ret);
1437 char *view_uri = NULL;
1438 ret = cal_ipc_unmarshal_char(indata, &view_uri);
1439 if (CALENDAR_ERROR_NONE != ret) {
1440 ERR("cal_ipc_unmarshal_char() Fail(%d)", ret);
1441 _cal_server_ipc_return(outdata, ret);
1442 cal_handle_destroy(handle);
1446 int original_event_id = 0;
1447 ret = cal_ipc_unmarshal_int(indata, &original_event_id);
1448 if (CALENDAR_ERROR_NONE != ret) {
1449 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1450 _cal_server_ipc_return(outdata, ret);
1452 cal_handle_destroy(handle);
1456 int calendar_db_version = 0;
1457 ret = cal_ipc_unmarshal_int(indata, &calendar_db_version);
1458 if (CALENDAR_ERROR_NONE != ret) {
1459 ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
1460 _cal_server_ipc_return(outdata, ret);
1462 cal_handle_destroy(handle);
1466 if (false == cal_access_control_have_permission(ipc, CAL_PERMISSION_READ)) {
1467 ret = CALENDAR_ERROR_PERMISSION_DENIED;
1468 _cal_server_ipc_return(outdata, ret);
1470 cal_handle_destroy(handle);
1474 calendar_list_h list = NULL;
1475 ret = cal_db_get_changes_exception_by_version(view_uri, original_event_id, calendar_db_version, &list);
1476 _cal_server_ipc_return(outdata, ret);
1478 if (CALENDAR_ERROR_NONE == ret) {
1479 ret = cal_ipc_marshal_list(list, *outdata);
1480 if (CALENDAR_ERROR_NONE != ret) {
1481 ERR("cal_ipc_marshal_list() Fail(%d)", ret);
1482 ret = CALENDAR_ERROR_IPC;
1483 _cal_server_ipc_return(outdata, ret);
1487 calendar_list_destroy(list, true);
1489 cal_handle_destroy(handle);