tizen 2.4 release accepted/tizen/2.4/mobile/20151029.032306 submit/tizen_2.4/20151028.064506 tizen_2.4_mobile_release
authorjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 07:55:49 +0000 (16:55 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 07:55:49 +0000 (16:55 +0900)
265 files changed:
CMakeLists.txt
LICENSE.APLv2
build-util/DB-schema-gen.c
build-util/DB-schema-gen2.c
client/CMakeLists.txt
client/ctsvc_client_activity.c
client/ctsvc_client_activity_helper.c [new file with mode: 0644]
client/ctsvc_client_activity_helper.h [moved from common/ctsvc_query.h with 67% similarity]
client/ctsvc_client_db.c
client/ctsvc_client_db_helper.c [new file with mode: 0644]
client/ctsvc_client_db_helper.h [new file with mode: 0644]
client/ctsvc_client_db_notification.c [new file with mode: 0644]
client/ctsvc_client_group.c
client/ctsvc_client_group_helper.c [new file with mode: 0644]
client/ctsvc_client_group_helper.h [moved from native/ctsvc_setting.h with 60% similarity]
client/ctsvc_client_handle.c [new file with mode: 0644]
client/ctsvc_client_handle.h [new file with mode: 0644]
client/ctsvc_client_ipc.c
client/ctsvc_client_ipc.h
client/ctsvc_client_noti.c
client/ctsvc_client_person.c
client/ctsvc_client_person_helper.c [new file with mode: 0644]
client/ctsvc_client_person_helper.h [new file with mode: 0644]
client/ctsvc_client_phonelog.c
client/ctsvc_client_phonelog_helper.c [new file with mode: 0644]
client/ctsvc_client_phonelog_helper.h [moved from native/ctsvc_person.h with 57% similarity]
client/ctsvc_client_service.c
client/ctsvc_client_service_helper.c [new file with mode: 0644]
client/ctsvc_client_service_helper.h [moved from common/ctsvc_vcard.h with 64% similarity]
client/ctsvc_client_setting.c
client/ctsvc_client_setting.h [new file with mode: 0644]
client/ctsvc_client_utils.c [new file with mode: 0644]
client/ctsvc_client_utils.h [moved from client/ctsvc_client_service.h with 77% similarity]
common/ctsvc_db_notification.c [deleted file]
common/ctsvc_filter.c
common/ctsvc_filter.h
common/ctsvc_handle.c [new file with mode: 0644]
common/ctsvc_handle.h [new file with mode: 0644]
common/ctsvc_inotify.c [changed mode: 0755->0644]
common/ctsvc_inotify.h [changed mode: 0755->0644]
common/ctsvc_internal.h
common/ctsvc_list.c
common/ctsvc_list.h
common/ctsvc_localize_utils.c [changed mode: 0755->0644]
common/ctsvc_localize_utils.h [changed mode: 0755->0644]
common/ctsvc_mutex.c [changed mode: 0755->0644]
common/ctsvc_mutex.h [changed mode: 0755->0644]
common/ctsvc_notify.h
common/ctsvc_query.c
common/ctsvc_record.c [changed mode: 0755->0644]
common/ctsvc_record.h
common/ctsvc_record_addressbook.c
common/ctsvc_record_contact.c [changed mode: 0755->0644]
common/ctsvc_record_group.c
common/ctsvc_record_my_profile.c
common/ctsvc_record_person.c [changed mode: 0755->0644]
common/ctsvc_record_phonelog.c
common/ctsvc_record_result.c
common/ctsvc_record_sdn.c
common/ctsvc_record_speeddial.c
common/ctsvc_record_updated_info.c [changed mode: 0755->0644]
common/ctsvc_sim.c
common/ctsvc_socket.c
common/ctsvc_socket.h
common/ctsvc_struct.h
common/ctsvc_vcard.c
common/ctsvc_view.c
common/ctsvc_view.h
common/ctsvc_zone.c [new file with mode: 0644]
common/ctsvc_zone.h [new file with mode: 0644]
common/ipc/ctsvc_ipc_activity.c
common/ipc/ctsvc_ipc_activity_photo.c
common/ipc/ctsvc_ipc_address.c
common/ipc/ctsvc_ipc_addressbook.c
common/ipc/ctsvc_ipc_company.c
common/ipc/ctsvc_ipc_contact.c
common/ipc/ctsvc_ipc_define.h
common/ipc/ctsvc_ipc_email.c
common/ipc/ctsvc_ipc_event.c
common/ipc/ctsvc_ipc_extension.c
common/ipc/ctsvc_ipc_group.c
common/ipc/ctsvc_ipc_grouprelation.c
common/ipc/ctsvc_ipc_image.c
common/ipc/ctsvc_ipc_marshal.c
common/ipc/ctsvc_ipc_marshal.h
common/ipc/ctsvc_ipc_messenger.c
common/ipc/ctsvc_ipc_my_profile.c
common/ipc/ctsvc_ipc_name.c
common/ipc/ctsvc_ipc_nickname.c
common/ipc/ctsvc_ipc_note.c
common/ipc/ctsvc_ipc_number.c
common/ipc/ctsvc_ipc_person.c
common/ipc/ctsvc_ipc_phonelog.c
common/ipc/ctsvc_ipc_profile.c
common/ipc/ctsvc_ipc_relationship.c
common/ipc/ctsvc_ipc_result.c
common/ipc/ctsvc_ipc_sdn.c
common/ipc/ctsvc_ipc_simple_contact.c
common/ipc/ctsvc_ipc_speeddial.c
common/ipc/ctsvc_ipc_updated_info.c
common/ipc/ctsvc_ipc_url.c
contacts-service2.manifest
doc/contacts_doc.h
include/contacts.h [changed mode: 0755->0644]
include/contacts_activity.h
include/contacts_db.h [changed mode: 0755->0644]
include/contacts_db_extension.h [new file with mode: 0644]
include/contacts_db_status.h [changed mode: 0755->0644]
include/contacts_errors.h
include/contacts_extension.h [new file with mode: 0644]
include/contacts_filter.h [changed mode: 0755->0644]
include/contacts_group.h
include/contacts_internal.h
include/contacts_list.h
include/contacts_person.h
include/contacts_phone_log.h
include/contacts_phone_log_internal.h
include/contacts_query.h
include/contacts_record.h
include/contacts_service.h [changed mode: 0755->0644]
include/contacts_setting.h [changed mode: 0755->0644]
include/contacts_sim.h
include/contacts_types.h
include/contacts_vcard.h
include/contacts_views.h [changed mode: 0755->0644]
native/ctsvc_db_access_control.h [deleted file]
native/ctsvc_db_plugin_addressbook_helper.c [deleted file]
native/ctsvc_db_plugin_contact_helper.h [deleted file]
native/ctsvc_db_plugin_sdn.c [deleted file]
native/ctsvc_db_query.h [deleted file]
native/ctsvc_localize.c [deleted file]
native/ctsvc_notification.c [deleted file]
native/ctsvc_notification.h [deleted file]
native/ctsvc_service.c [deleted file]
native/ctsvc_setting.c [deleted file]
native/ctsvc_utils.c [deleted file]
packaging/contacts-service.service
packaging/contacts-service.socket
packaging/contacts-service.spec
server/CMakeLists.txt
server/ctsvc_ipc_server.c
server/ctsvc_ipc_server2.c
server/ctsvc_ipc_server2.h
server/ctsvc_localize.c [new file with mode: 0644]
server/ctsvc_localize.h [moved from native/ctsvc_localize.h with 53% similarity, mode: 0644]
server/ctsvc_localize_ch.c [moved from native/ctsvc_localize_ch.c with 99% similarity]
server/ctsvc_localize_ch.h [moved from native/ctsvc_localize_ch.h with 87% similarity, mode: 0644]
server/ctsvc_localize_jp.c [moved from native/ctsvc_localize_jp.c with 84% similarity]
server/ctsvc_localize_jp.h [moved from native/ctsvc_localize_jp.h with 85% similarity]
server/ctsvc_localize_kor.c [moved from native/ctsvc_localize_kor.c with 83% similarity]
server/ctsvc_localize_kor.h [moved from native/ctsvc_localize_kor.h with 87% similarity]
server/ctsvc_normalize.c [moved from native/ctsvc_normalize.c with 66% similarity]
server/ctsvc_normalize.h [moved from native/ctsvc_normalize.h with 87% similarity]
server/ctsvc_notification.c [new file with mode: 0644]
server/ctsvc_notification.h [new file with mode: 0644]
server/ctsvc_number_utils.c [moved from native/ctsvc_number_utils.c with 69% similarity]
server/ctsvc_number_utils.h [moved from native/ctsvc_number_utils.h with 89% similarity]
server/ctsvc_schema_recovery.c [changed mode: 0755->0644]
server/ctsvc_schema_recovery.h [changed mode: 0755->0644]
server/ctsvc_server.c [changed mode: 0755->0644]
server/ctsvc_server.h [moved from native/ctsvc_activity.h with 73% similarity]
server/ctsvc_server_activity.c [moved from native/ctsvc_activity.c with 57% similarity]
server/ctsvc_server_activity.h [new file with mode: 0644]
server/ctsvc_server_bg.c
server/ctsvc_server_bg.h
server/ctsvc_server_change_subject.c
server/ctsvc_server_change_subject.h
server/ctsvc_server_group.c [moved from native/ctsvc_group.c with 62% similarity]
server/ctsvc_server_group.h [moved from native/ctsvc_group.h with 58% similarity]
server/ctsvc_server_person.c [moved from native/ctsvc_person.c with 65% similarity]
server/ctsvc_server_person.h [new file with mode: 0644]
server/ctsvc_server_phonelog.c [moved from native/ctsvc_phonelog.c with 66% similarity]
server/ctsvc_server_phonelog.h [moved from native/ctsvc_phonelog.h with 61% similarity]
server/ctsvc_server_service.c [new file with mode: 0644]
server/ctsvc_server_service.h [moved from native/ctsvc_service.h with 76% similarity]
server/ctsvc_server_setting.c [new file with mode: 0644]
server/ctsvc_server_setting.h [new file with mode: 0644]
server/ctsvc_server_sim.c [changed mode: 0755->0644]
server/ctsvc_server_sim.h [changed mode: 0755->0644]
server/ctsvc_server_socket.c
server/ctsvc_server_socket.h
server/ctsvc_server_sqlite.c [changed mode: 0755->0644]
server/ctsvc_server_sqlite.h [changed mode: 0755->0644]
server/ctsvc_server_update.c [changed mode: 0755->0644]
server/ctsvc_server_update.h [changed mode: 0755->0644]
server/ctsvc_server_utils.c [changed mode: 0755->0644]
server/ctsvc_server_utils.h [changed mode: 0755->0644]
server/ctsvc_server_zone.c [new file with mode: 0644]
server/ctsvc_server_zone.h [new file with mode: 0644]
server/db/ctsvc_db_access_control.c [moved from native/ctsvc_db_access_control.c with 68% similarity]
server/db/ctsvc_db_access_control.h [new file with mode: 0644]
server/db/ctsvc_db_init.c [moved from native/ctsvc_db_init.c with 85% similarity]
server/db/ctsvc_db_init.h [moved from native/ctsvc_db_init.h with 56% similarity]
server/db/ctsvc_db_plugin_activity.c [moved from native/ctsvc_db_plugin_activity.c with 70% similarity]
server/db/ctsvc_db_plugin_activity_photo.c [moved from native/ctsvc_db_plugin_activity_photo.c with 68% similarity]
server/db/ctsvc_db_plugin_activity_photo_helper.c [moved from native/ctsvc_db_plugin_activity_photo_helper.c with 78% similarity]
server/db/ctsvc_db_plugin_activity_photo_helper.h [moved from native/ctsvc_db_plugin_activity_photo_helper.h with 65% similarity]
server/db/ctsvc_db_plugin_address.c [moved from native/ctsvc_db_plugin_address.c with 70% similarity]
server/db/ctsvc_db_plugin_address_helper.c [moved from native/ctsvc_db_plugin_address_helper.c with 82% similarity]
server/db/ctsvc_db_plugin_address_helper.h [moved from native/ctsvc_db_plugin_address_helper.h with 69% similarity]
server/db/ctsvc_db_plugin_addressbook.c [moved from native/ctsvc_db_plugin_addressbook.c with 67% similarity]
server/db/ctsvc_db_plugin_addressbook_helper.c [new file with mode: 0644]
server/db/ctsvc_db_plugin_addressbook_helper.h [moved from native/ctsvc_db_plugin_addressbook_helper.h with 79% similarity]
server/db/ctsvc_db_plugin_company.c [moved from native/ctsvc_db_plugin_company.c with 66% similarity]
server/db/ctsvc_db_plugin_company_helper.c [moved from native/ctsvc_db_plugin_company_helper.c with 78% similarity]
server/db/ctsvc_db_plugin_company_helper.h [moved from native/ctsvc_db_plugin_company_helper.h with 72% similarity]
server/db/ctsvc_db_plugin_contact.c [moved from native/ctsvc_db_plugin_contact.c with 66% similarity]
server/db/ctsvc_db_plugin_contact_helper.c [moved from native/ctsvc_db_plugin_contact_helper.c with 70% similarity]
server/db/ctsvc_db_plugin_contact_helper.h [new file with mode: 0644]
server/db/ctsvc_db_plugin_email.c [moved from native/ctsvc_db_plugin_email.c with 62% similarity]
server/db/ctsvc_db_plugin_email_helper.c [moved from native/ctsvc_db_plugin_email_helper.c with 76% similarity]
server/db/ctsvc_db_plugin_email_helper.h [moved from native/ctsvc_db_plugin_email_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_event.c [moved from native/ctsvc_db_plugin_event.c with 66% similarity]
server/db/ctsvc_db_plugin_event_helper.c [moved from native/ctsvc_db_plugin_event_helper.c with 77% similarity]
server/db/ctsvc_db_plugin_event_helper.h [moved from native/ctsvc_db_plugin_event_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_extension.c [moved from native/ctsvc_db_plugin_extension.c with 69% similarity]
server/db/ctsvc_db_plugin_extension_helper.c [moved from native/ctsvc_db_plugin_extension_helper.c with 85% similarity]
server/db/ctsvc_db_plugin_extension_helper.h [moved from native/ctsvc_db_plugin_extension_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_group.c [moved from native/ctsvc_db_plugin_group.c with 70% similarity]
server/db/ctsvc_db_plugin_group_helper.c [moved from native/ctsvc_db_plugin_group_helper.c with 67% similarity]
server/db/ctsvc_db_plugin_group_helper.h [moved from native/ctsvc_db_plugin_group_helper.h with 92% similarity]
server/db/ctsvc_db_plugin_grouprelation.c [moved from native/ctsvc_db_plugin_grouprelation.c with 66% similarity]
server/db/ctsvc_db_plugin_image.c [moved from native/ctsvc_db_plugin_image.c with 64% similarity]
server/db/ctsvc_db_plugin_image_helper.c [moved from native/ctsvc_db_plugin_image_helper.c with 72% similarity]
server/db/ctsvc_db_plugin_image_helper.h [moved from native/ctsvc_db_plugin_image_helper.h with 71% similarity]
server/db/ctsvc_db_plugin_messenger.c [moved from native/ctsvc_db_plugin_messenger.c with 66% similarity]
server/db/ctsvc_db_plugin_messenger_helper.c [moved from native/ctsvc_db_plugin_messenger_helper.c with 78% similarity]
server/db/ctsvc_db_plugin_messenger_helper.h [moved from native/ctsvc_db_plugin_messenger_helper.h with 69% similarity]
server/db/ctsvc_db_plugin_my_profile.c [moved from native/ctsvc_db_plugin_my_profile.c with 64% similarity]
server/db/ctsvc_db_plugin_name.c [moved from native/ctsvc_db_plugin_name.c with 65% similarity]
server/db/ctsvc_db_plugin_name_helper.c [moved from native/ctsvc_db_plugin_name_helper.c with 85% similarity]
server/db/ctsvc_db_plugin_name_helper.h [moved from native/ctsvc_db_plugin_name_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_nickname.c [moved from native/ctsvc_db_plugin_nickname.c with 63% similarity]
server/db/ctsvc_db_plugin_nickname_helper.c [moved from native/ctsvc_db_plugin_nickname_helper.c with 77% similarity]
server/db/ctsvc_db_plugin_nickname_helper.h [moved from native/ctsvc_db_plugin_nickname_helper.h with 69% similarity]
server/db/ctsvc_db_plugin_note.c [moved from native/ctsvc_db_plugin_note.c with 64% similarity]
server/db/ctsvc_db_plugin_note_helper.c [moved from native/ctsvc_db_plugin_note_helper.c with 77% similarity]
server/db/ctsvc_db_plugin_note_helper.h [moved from native/ctsvc_db_plugin_note_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_number.c [moved from native/ctsvc_db_plugin_number.c with 62% similarity]
server/db/ctsvc_db_plugin_number_helper.c [moved from native/ctsvc_db_plugin_number_helper.c with 75% similarity]
server/db/ctsvc_db_plugin_number_helper.h [moved from native/ctsvc_db_plugin_number_helper.h with 70% similarity]
server/db/ctsvc_db_plugin_person.c [moved from native/ctsvc_db_plugin_person.c with 70% similarity]
server/db/ctsvc_db_plugin_person_helper.c [moved from native/ctsvc_db_plugin_person_helper.c with 75% similarity, mode: 0644]
server/db/ctsvc_db_plugin_person_helper.h [moved from native/ctsvc_db_plugin_person_helper.h with 79% similarity, mode: 0644]
server/db/ctsvc_db_plugin_phonelog.c [moved from native/ctsvc_db_plugin_phonelog.c with 71% similarity]
server/db/ctsvc_db_plugin_profile.c [moved from native/ctsvc_db_plugin_profile.c with 67% similarity]
server/db/ctsvc_db_plugin_profile_helper.c [moved from native/ctsvc_db_plugin_profile_helper.c with 82% similarity]
server/db/ctsvc_db_plugin_profile_helper.h [moved from native/ctsvc_db_plugin_profile_helper.h with 69% similarity]
server/db/ctsvc_db_plugin_relationship.c [moved from native/ctsvc_db_plugin_relationship.c with 65% similarity]
server/db/ctsvc_db_plugin_relationship_helper.c [moved from native/ctsvc_db_plugin_relationship_helper.c with 78% similarity]
server/db/ctsvc_db_plugin_relationship_helper.h [moved from native/ctsvc_db_plugin_relationship_helper.h with 69% similarity]
server/db/ctsvc_db_plugin_sdn.c [new file with mode: 0644]
server/db/ctsvc_db_plugin_sdn.h [moved from native/ctsvc_db_plugin_sdn.h with 95% similarity]
server/db/ctsvc_db_plugin_simple_contact.c [moved from native/ctsvc_db_plugin_simple_contact.c with 82% similarity]
server/db/ctsvc_db_plugin_speeddial.c [moved from native/ctsvc_db_plugin_speeddial.c with 68% similarity]
server/db/ctsvc_db_plugin_url.c [moved from native/ctsvc_db_plugin_url.c with 65% similarity]
server/db/ctsvc_db_plugin_url_helper.c [moved from native/ctsvc_db_plugin_url_helper.c with 78% similarity]
server/db/ctsvc_db_plugin_url_helper.h [moved from native/ctsvc_db_plugin_url_helper.h with 70% similarity]
server/db/ctsvc_db_query.c [moved from native/ctsvc_db_query.c with 65% similarity, mode: 0644]
server/db/ctsvc_db_query.h [new file with mode: 0644]
server/db/ctsvc_db_schema.h [moved from native/ctsvc_schema.h with 51% similarity, mode: 0644]
server/db/ctsvc_db_sqlite.c [moved from native/ctsvc_sqlite.c with 63% similarity, mode: 0644]
server/db/ctsvc_db_sqlite.h [moved from native/ctsvc_sqlite.h with 70% similarity, mode: 0644]
server/db/ctsvc_db_utils.c [new file with mode: 0644]
server/db/ctsvc_db_utils.h [moved from native/ctsvc_utils.h with 56% similarity]

index 1980114..e3a235a 100755 (executable)
@@ -16,13 +16,11 @@ SET(INCLUDEDIR "\${prefix}/${DEST_INCLUDE_DIR}")
 
 EXECUTE_PROCESS(COMMAND build-util/generator.sh)
 
-SET(PC_REQUIRED "capi-base-common")
-
 #INCLUDE_DIRECTORIES(${SRC_INCLUDE_DIR})
 SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -I${SRC_INCLUDE_DIR}")
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED glib-2.0 capi-base-common vconf dlog db-util icu-i18n security-server)
+pkg_check_modules(pkgs REQUIRED glib-2.0 pims-ipc capi-base-common vconf dlog db-util security-server vasum gobject-2.0 icu-uc)
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
@@ -37,12 +35,9 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC")
 ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
 
 # for tizen open build test
-IF( ENABLE_SIM_FEATURE )
-       ADD_DEFINITIONS("-DENABLE_SIM_FEATURE")
-ENDIF( ENABLE_SIM_FEATURE )
-IF( ENABLE_LOG_FEATURE )
+IF(ENABLE_LOG_FEATURE)
        ADD_DEFINITIONS("-DENABLE_LOG_FEATURE")
-ENDIF( ENABLE_LOG_FEATURE )
+ENDIF(ENABLE_LOG_FEATURE)
 
 
 # Install notification files
index 19c4054..f75eb46 100644 (file)
-Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
-\r
-                                 Apache License\r
-                           Version 2.0, January 2004\r
-                        http://www.apache.org/licenses/\r
-\r
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
-\r
-   1. Definitions.\r
-\r
-      "License" shall mean the terms and conditions for use, reproduction,\r
-      and distribution as defined by Sections 1 through 9 of this document.\r
-\r
-      "Licensor" shall mean the copyright owner or entity authorized by\r
-      the copyright owner that is granting the License.\r
-\r
-      "Legal Entity" shall mean the union of the acting entity and all\r
-      other entities that control, are controlled by, or are under common\r
-      control with that entity. For the purposes of this definition,\r
-      "control" means (i) the power, direct or indirect, to cause the\r
-      direction or management of such entity, whether by contract or\r
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
-      outstanding shares, or (iii) beneficial ownership of such entity.\r
-\r
-      "You" (or "Your") shall mean an individual or Legal Entity\r
-      exercising permissions granted by this License.\r
-\r
-      "Source" form shall mean the preferred form for making modifications,\r
-      including but not limited to software source code, documentation\r
-      source, and configuration files.\r
-\r
-      "Object" form shall mean any form resulting from mechanical\r
-      transformation or translation of a Source form, including but\r
-      not limited to compiled object code, generated documentation,\r
-      and conversions to other media types.\r
-\r
-      "Work" shall mean the work of authorship, whether in Source or\r
-      Object form, made available under the License, as indicated by a\r
-      copyright notice that is included in or attached to the work\r
-      (an example is provided in the Appendix below).\r
-\r
-      "Derivative Works" shall mean any work, whether in Source or Object\r
-      form, that is based on (or derived from) the Work and for which the\r
-      editorial revisions, annotations, elaborations, or other modifications\r
-      represent, as a whole, an original work of authorship. For the purposes\r
-      of this License, Derivative Works shall not include works that remain\r
-      separable from, or merely link (or bind by name) to the interfaces of,\r
-      the Work and Derivative Works thereof.\r
-\r
-      "Contribution" shall mean any work of authorship, including\r
-      the original version of the Work and any modifications or additions\r
-      to that Work or Derivative Works thereof, that is intentionally\r
-      submitted to Licensor for inclusion in the Work by the copyright owner\r
-      or by an individual or Legal Entity authorized to submit on behalf of\r
-      the copyright owner. For the purposes of this definition, "submitted"\r
-      means any form of electronic, verbal, or written communication sent\r
-      to the Licensor or its representatives, including but not limited to\r
-      communication on electronic mailing lists, source code control systems,\r
-      and issue tracking systems that are managed by, or on behalf of, the\r
-      Licensor for the purpose of discussing and improving the Work, but\r
-      excluding communication that is conspicuously marked or otherwise\r
-      designated in writing by the copyright owner as "Not a Contribution."\r
-\r
-      "Contributor" shall mean Licensor and any individual or Legal Entity\r
-      on behalf of whom a Contribution has been received by Licensor and\r
-      subsequently incorporated within the Work.\r
-\r
-   2. Grant of Copyright License. Subject to the terms and conditions of\r
-      this License, each Contributor hereby grants to You a perpetual,\r
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
-      copyright license to reproduce, prepare Derivative Works of,\r
-      publicly display, publicly perform, sublicense, and distribute the\r
-      Work and such Derivative Works in Source or Object form.\r
-\r
-   3. Grant of Patent License. Subject to the terms and conditions of\r
-      this License, each Contributor hereby grants to You a perpetual,\r
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
-      (except as stated in this section) patent license to make, have made,\r
-      use, offer to sell, sell, import, and otherwise transfer the Work,\r
-      where such license applies only to those patent claims licensable\r
-      by such Contributor that are necessarily infringed by their\r
-      Contribution(s) alone or by combination of their Contribution(s)\r
-      with the Work to which such Contribution(s) was submitted. If You\r
-      institute patent litigation against any entity (including a\r
-      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
-      or a Contribution incorporated within the Work constitutes direct\r
-      or contributory patent infringement, then any patent licenses\r
-      granted to You under this License for that Work shall terminate\r
-      as of the date such litigation is filed.\r
-\r
-   4. Redistribution. You may reproduce and distribute copies of the\r
-      Work or Derivative Works thereof in any medium, with or without\r
-      modifications, and in Source or Object form, provided that You\r
-      meet the following conditions:\r
-\r
-      (a) You must give any other recipients of the Work or\r
-          Derivative Works a copy of this License; and\r
-\r
-      (b) You must cause any modified files to carry prominent notices\r
-          stating that You changed the files; and\r
-\r
-      (c) You must retain, in the Source form of any Derivative Works\r
-          that You distribute, all copyright, patent, trademark, and\r
-          attribution notices from the Source form of the Work,\r
-          excluding those notices that do not pertain to any part of\r
-          the Derivative Works; and\r
-\r
-      (d) If the Work includes a "NOTICE" text file as part of its\r
-          distribution, then any Derivative Works that You distribute must\r
-          include a readable copy of the attribution notices contained\r
-          within such NOTICE file, excluding those notices that do not\r
-          pertain to any part of the Derivative Works, in at least one\r
-          of the following places: within a NOTICE text file distributed\r
-          as part of the Derivative Works; within the Source form or\r
-          documentation, if provided along with the Derivative Works; or,\r
-          within a display generated by the Derivative Works, if and\r
-          wherever such third-party notices normally appear. The contents\r
-          of the NOTICE file are for informational purposes only and\r
-          do not modify the License. You may add Your own attribution\r
-          notices within Derivative Works that You distribute, alongside\r
-          or as an addendum to the NOTICE text from the Work, provided\r
-          that such additional attribution notices cannot be construed\r
-          as modifying the License.\r
-\r
-      You may add Your own copyright statement to Your modifications and\r
-      may provide additional or different license terms and conditions\r
-      for use, reproduction, or distribution of Your modifications, or\r
-      for any such Derivative Works as a whole, provided Your use,\r
-      reproduction, and distribution of the Work otherwise complies with\r
-      the conditions stated in this License.\r
-\r
-   5. Submission of Contributions. Unless You explicitly state otherwise,\r
-      any Contribution intentionally submitted for inclusion in the Work\r
-      by You to the Licensor shall be under the terms and conditions of\r
-      this License, without any additional terms or conditions.\r
-      Notwithstanding the above, nothing herein shall supersede or modify\r
-      the terms of any separate license agreement you may have executed\r
-      with Licensor regarding such Contributions.\r
-\r
-   6. Trademarks. This License does not grant permission to use the trade\r
-      names, trademarks, service marks, or product names of the Licensor,\r
-      except as required for reasonable and customary use in describing the\r
-      origin of the Work and reproducing the content of the NOTICE file.\r
-\r
-   7. Disclaimer of Warranty. Unless required by applicable law or\r
-      agreed to in writing, Licensor provides the Work (and each\r
-      Contributor provides its Contributions) on an "AS IS" BASIS,\r
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
-      implied, including, without limitation, any warranties or conditions\r
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
-      PARTICULAR PURPOSE. You are solely responsible for determining the\r
-      appropriateness of using or redistributing the Work and assume any\r
-      risks associated with Your exercise of permissions under this License.\r
-\r
-   8. Limitation of Liability. In no event and under no legal theory,\r
-      whether in tort (including negligence), contract, or otherwise,\r
-      unless required by applicable law (such as deliberate and grossly\r
-      negligent acts) or agreed to in writing, shall any Contributor be\r
-      liable to You for damages, including any direct, indirect, special,\r
-      incidental, or consequential damages of any character arising as a\r
-      result of this License or out of the use or inability to use the\r
-      Work (including but not limited to damages for loss of goodwill,\r
-      work stoppage, computer failure or malfunction, or any and all\r
-      other commercial damages or losses), even if such Contributor\r
-      has been advised of the possibility of such damages.\r
-\r
-   9. Accepting Warranty or Additional Liability. While redistributing\r
-      the Work or Derivative Works thereof, You may choose to offer,\r
-      and charge a fee for, acceptance of support, warranty, indemnity,\r
-      or other liability obligations and/or rights consistent with this\r
-      License. However, in accepting such obligations, You may act only\r
-      on Your own behalf and on Your sole responsibility, not on behalf\r
-      of any other Contributor, and only if You agree to indemnify,\r
-      defend, and hold each Contributor harmless for any liability\r
-      incurred by, or claims asserted against, such Contributor by reason\r
-      of your accepting any such warranty or additional liability.\r
-\r
-   END OF TERMS AND CONDITIONS\r
-\r
-   APPENDIX: How to apply the Apache License to your work.\r
-\r
-      To apply the Apache License to your work, attach the following\r
-      boilerplate notice, with the fields enclosed by brackets "[]"\r
-      replaced with your own identifying information. (Don't include\r
-      the brackets!)  The text should be enclosed in the appropriate\r
-      comment syntax for the file format. We also recommend that a\r
-      file or class name and description of purpose be included on the\r
-      same "printed page" as the copyright notice for easier\r
-      identification within third-party archives.\r
-\r
-   Copyright [yyyy] [name of copyright owner]\r
-\r
-   Licensed under the Apache License, Version 2.0 (the "License");\r
-   you may not use this file except in compliance with the License.\r
-   You may obtain a copy of the License at\r
-\r
-       http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-   Unless required by applicable law or agreed to in writing, software\r
-   distributed under the License is distributed on an "AS IS" BASIS,\r
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-   See the License for the specific language governing permissions and\r
-   limitations under the License.\r
-\r
+Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
index 05287cb..6d6ad98 100755 (executable)
@@ -30,10 +30,9 @@ int main(int argc, char **argv)
        if (fp == NULL)
                exit(EXIT_FAILURE);
 
-       do{
+       do {
                c = fgetc(fp);
-               switch (c)
-               {
+               switch (c) {
                case '\n':
                        printf("\\\n");
                        break;
@@ -51,7 +50,7 @@ int main(int argc, char **argv)
                        printf("%c",c);
                        break;
                }
-       }while(EOF != c);
+       } while (EOF != c);
 
        exit(EXIT_SUCCESS);
 }
index 7ffdf13..b7d7959 100755 (executable)
@@ -30,10 +30,9 @@ int main(int argc, char **argv)
        if (fp == NULL)
                exit(EXIT_FAILURE);
 
-       do{
+       do {
                c = fgetc(fp);
-               switch (c)
-               {
+               switch (c) {
                case '-':
                        if ('-' == (c = fgetc(fp))) {
                                while ('\n' != c && EOF != c)
@@ -48,7 +47,7 @@ int main(int argc, char **argv)
                        printf("%c",c);
                        break;
                }
-       }while(EOF != c);
+       } while (EOF != c);
 
        exit(EXIT_SUCCESS);
 }
index 59140bd..4b34c78 100755 (executable)
@@ -8,12 +8,22 @@ SET(CLIENT contacts-service2)
 SET(SRCS
        ctsvc_client_activity.c
        ctsvc_client_db.c
+       ctsvc_client_db_notification.c
        ctsvc_client_group.c
        ctsvc_client_person.c
        ctsvc_client_service.c
        ctsvc_client_ipc.c
        ctsvc_client_noti.c
        ctsvc_client_setting.c
+       ctsvc_client_handle.c
+       ctsvc_client_utils.c
+
+       ctsvc_client_service_helper.c
+       ctsvc_client_db_helper.c
+       ctsvc_client_activity_helper.c
+       ctsvc_client_person_helper.c
+       ctsvc_client_group_helper.c
+       ctsvc_client_phonelog_helper.c
 
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_marshal.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_addressbook.c
@@ -44,7 +54,6 @@ SET(SRCS
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_extension.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_profile.c
 
-       ${CMAKE_SOURCE_DIR}/common/ctsvc_db_notification.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_filter.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_inotify.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_list.c
@@ -62,33 +71,23 @@ SET(SRCS
        ${CMAKE_SOURCE_DIR}/common/ctsvc_socket.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_vcard.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_view.c
-)
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_handle.c
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_zone.c
 
-IF( ENABLE_SIM_FEATURE )
-SET(SRCS ${SRCS}
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_sdn.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_record_sdn.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_sim.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_speeddial.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_record_speeddial.c
 )
-ENDIF( ENABLE_SIM_FEATURE )
 
-IF( ENABLE_LOG_FEATURE )
+IF(ENABLE_LOG_FEATURE)
 SET(SRCS ${SRCS}
        ctsvc_client_phonelog.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_phonelog.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_record_phonelog.c
 )
-ENDIF( ENABLE_LOG_FEATURE )
-
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(client_pkgs REQUIRED pims-ipc gobject-2.0)
-
-FOREACH(flag ${client_pkgs_CFLAGS})
-       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
+ENDIF(ENABLE_LOG_FEATURE)
 
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC")
 
@@ -99,7 +98,7 @@ ADD_DEFINITIONS("-D_CONTACTS_IPC_CLIENT")
 ADD_LIBRARY(${CLIENT} SHARED ${SRCS})
 SET_TARGET_PROPERTIES(${CLIENT} PROPERTIES SOVERSION ${MAJORVER})
 SET_TARGET_PROPERTIES(${CLIENT} PROPERTIES VERSION ${FULLVER})
-TARGET_LINK_LIBRARIES(${CLIENT} ${client_pkgs_LDFLAGS} ${pkgs_LDFLAGS} -lpthread)
+TARGET_LINK_LIBRARIES(${CLIENT} ${pkgs_LDFLAGS} -lpthread)
 
 INSTALL(TARGETS ${CLIENT} DESTINATION lib)
 INSTALL(FILES ${CLIENT}.pc DESTINATION lib/pkgconfig)
index 64b3dbb..bd5dd5f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Contacts Service
  *
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2010 - 2015 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.
  *
  */
 
-#include <glib.h>
-#include <pims-ipc-data.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_ipc_define.h"
-#include "ctsvc_ipc_marshal.h"
-#include "ctsvc_client_ipc.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_activity_helper.h"
 
 API int contacts_activity_delete_by_contact_id(int contact_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(contact_id <= 0,CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( contact_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       // ipc call
-       if (ctsvc_ipc_call( CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_CONTACT_ID, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_activity_delete_by_contact_id(contact, contact_id);
 
        return ret;
 }
 
 API int contacts_activity_delete_by_account_id(int account_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(account_id <= 0,CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+       int ret;
+       contacts_h contact = NULL;
 
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       ret = ctsvc_ipc_marshal_int( account_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call( CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_ACCOUNT_ID, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_activity_delete_by_account_id(contact, account_id);
 
        return ret;
-}
\ No newline at end of file
+}
+
diff --git a/client/ctsvc_client_activity_helper.c b/client/ctsvc_client_activity_helper.c
new file mode 100644 (file)
index 0000000..8cc4d65
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <pims-ipc-data.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_ipc_marshal.h"
+#include "ctsvc_client_ipc.h"
+
+static const char CONTACTS_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.read";
+static const char CONTACTS_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.write";
+static const char PHONELOG_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.read";
+static const char PHONELOG_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.write";
+
+
+int ctsvc_client_activity_delete_by_contact_id(contacts_h contact, int contact_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(contact_id <= 0,CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(contact_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_CONTACT_ID, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               int transaction_ver = 0;
+
+               /* check result */
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_activity_delete_by_account_id(contacts_h contact, int account_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(account_id <= 0,CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(account_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_ACCOUNT_ID, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               int transaction_ver = 0;
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
similarity index 67%
rename from common/ctsvc_query.h
rename to client/ctsvc_client_activity_helper.h
index ead18e9..749394c 100644 (file)
@@ -1,29 +1,28 @@
-/*\r
- * Contacts Service\r
- *\r
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Contact: Dohyung Jin <dh.jin@samsung.com>\r
- *                 Jongwon Lee <gogosing.lee@samsung.com>\r
- *                 Donghee Ye <donghee.ye@samsung.com>\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __TIZEN_SOCIAL_CTSVC_QUERY_H__\r
-#define __TIZEN_SOCIAL_CTSVC_QUERY_H__\r
-\r
-#endif /*  __TIZEN_SOCIAL_CTSVC_QUERY_H__ */\r
-\r
-\r
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_ACTIVITY_HELPER_H__
+#define __CTSVC_CLIENT_ACTIVITY_HELPER_H__
+
+#include "contacts_types.h"
+
+int ctsvc_client_activity_delete_by_contact_id(contacts_h contact, int contact_id);
+int ctsvc_client_activity_delete_by_account_id(contacts_h contact, int account_id);
+
+#endif /* __CTSVC_CLIENT_ACTIVITY_HELPER_H__ */
\ No newline at end of file
index 06df89b..49d3554 100644 (file)
  *
  */
 
-#include <glib.h>
-#include <pims-ipc.h>
-#include <pims-ipc-data.h>
-
 #include "contacts.h"
-#include "contacts_internal.h"
-
 #include "ctsvc_internal.h"
-#include "ctsvc_list.h"
-#include "ctsvc_record.h"
-#include "ctsvc_query.h"
-#include "ctsvc_inotify.h"
-
-#include "ctsvc_ipc_define.h"
-#include "ctsvc_ipc_marshal.h"
-#include "ctsvc_view.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_db_helper.h"
 
-#include "ctsvc_client_ipc.h"
-
-#include "ctsvc_mutex.h"
+API int contacts_db_insert_record(contacts_record_h record, int *id)
+{
+       int ret;
+       contacts_h contact = NULL;
 
-typedef struct {
-       void *callback;
-       void *user_data;
-}ctsvc_ipc_async_userdata_s;
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-static void __ctsvc_ipc_client_insert_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
-static void __ctsvc_ipc_client_update_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
-static void __ctsvc_ipc_client_delete_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
+       ret = ctsvc_client_db_insert_record(contact, record, id);
 
-void __ctsvc_ipc_client_insert_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
-{
-       ctsvc_ipc_async_userdata_s *sync_data = (ctsvc_ipc_async_userdata_s *)userdata;
-       int ret = CONTACTS_ERROR_NONE;
-       int *ids = NULL;
-       int count = 0;
-
-       if (data_out)
-       {
-               // check outdata
-               ctsvc_ipc_unmarshal_int(data_out, &ret);
-
-               if (ret == CONTACTS_ERROR_NONE) {
-                       int i=0;
-                       int transaction_ver = 0;
-                       ctsvc_ipc_unmarshal_int(data_out, &transaction_ver);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-
-                       ctsvc_ipc_unmarshal_int(data_out, &count);
-                       ids = calloc(count, sizeof(int));
-                       for(i=0;i<count;i++)
-                       {
-                               ctsvc_ipc_unmarshal_int(data_out, &(ids[i]));
-                       }
-               }
-       }
-
-       if (sync_data->callback)
-       {
-               contacts_db_insert_result_cb callback = sync_data->callback;
-               callback(ret, ids, count, sync_data->user_data);
-       }
-       free(ids);
-
-       ctsvc_inotify_call_blocked_callback();
-
-       CONTACTS_FREE(sync_data);
-
-       return ;
+       return ret;
 }
 
-void __ctsvc_ipc_client_update_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
-{
-       ctsvc_ipc_async_userdata_s *sync_data = (ctsvc_ipc_async_userdata_s *)userdata;
-       int ret = CONTACTS_ERROR_NONE;
-
-       if (data_out)
-       {
-               // check outdata
-               ctsvc_ipc_unmarshal_int(data_out, &ret);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       ctsvc_ipc_unmarshal_int(data_out, &transaction_ver);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-       }
-
-       if (sync_data->callback)
-       {
-               contacts_db_result_cb callback = sync_data->callback;
-               callback(ret, sync_data->user_data);
-       }
-
-       ctsvc_inotify_call_blocked_callback();
-
-       CONTACTS_FREE(sync_data);
-
-       return ;
-}
-void __ctsvc_ipc_client_delete_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
+API int contacts_db_get_record(const char* view_uri, int id, contacts_record_h* out_record)
 {
-       ctsvc_ipc_async_userdata_s *sync_data = (ctsvc_ipc_async_userdata_s *)userdata;
-       int ret = CONTACTS_ERROR_NONE;
-
-       if (data_out)
-       {
-               // check outdata
-               ctsvc_ipc_unmarshal_int(data_out, &ret);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       ctsvc_ipc_unmarshal_int(data_out, &transaction_ver);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-       }
-
-       if (sync_data->callback)
-       {
-               contacts_db_result_cb callback = sync_data->callback;
-               callback(ret, sync_data->user_data);
-       }
-
-       ctsvc_inotify_call_blocked_callback();
-
-       CONTACTS_FREE(sync_data);
-
-       return ;
-}
+       int ret;
+       contacts_h contact = NULL;
 
-API int contacts_db_insert_record( contacts_record_h record, int *id )
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       if (id)
-               *id = 0;
-
-       RETVM_IF(record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_record(record,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORD, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-
-                       if (id)
-                               *id = *(int*)pims_ipc_data_get(outdata,&size);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_get_record(contact, view_uri, id, out_record);
 
        return ret;
 }
 
-API int        contacts_db_get_record( const char* view_uri, int id, contacts_record_h* out_record )
+API int contacts_db_update_record(contacts_record_h record)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-       RETVM_IF(id<0,CONTACTS_ERROR_INVALID_PARAMETER,"id<0");
-       RETVM_IF(out_record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-       *out_record = NULL;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(id,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORD, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_record(outdata,out_record);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_update_record( contacts_record_h record )
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_record(record,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORD, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_update_record(contact, record);
 
        return ret;
 }
 
-API int contacts_db_delete_record( const char* view_uri, int id )
+API int contacts_db_delete_record(const char* view_uri, int id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-       RETVM_IF(id<=0,CONTACTS_ERROR_INVALID_PARAMETER,"id <= 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(id,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORD, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_replace_record( contacts_record_h record, int id )
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_record(record, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(id, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
-                               CTSVC_IPC_SERVER_DB_REPLACE_RECORD, indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_delete_record(contact, view_uri, id);
 
        return ret;
 }
 
-API int contacts_db_get_all_records( const char* view_uri, int offset, int limit, contacts_list_h* out_list )
+API int contacts_db_replace_record(contacts_record_h record, int id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(out_list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
-       *out_list = NULL;
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(offset,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(limit,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_ALL_RECORDS, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_list(outdata,out_list);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(out_list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
-       *out_list = NULL;
-       RETVM_IF(query==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"query is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_query(query,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(offset,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(limit,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_list(outdata,out_list);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_replace_record(contact, record, id);
 
        return ret;
+
 }
 
-API int contacts_db_get_count( const char* view_uri, int *out_count )
+API int contacts_db_get_all_records(const char* view_uri, int offset, int limit, contacts_list_h* out_list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-       RETVM_IF(out_count==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"count pointer is NULL");
-       *out_count = 0;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_int(outdata,out_count);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_get_count_with_query( contacts_query_h query, int *out_count )
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(query==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-       RETVM_IF(out_count==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"count pointer is NULL");
-       *out_count = 0;
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_query(query,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_int(outdata,out_count);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_get_all_records(contact, view_uri, offset, limit, out_list);
 
        return ret;
 }
 
-// this function used in contacts_db_delete_records_async
-static int __ctsvc_db_check_permission_by_view_uri(const char *view_uri, bool check_read)
+API int contacts_db_get_records_with_query(contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       bool result = false;
-
-       if (strcmp(view_uri, CTSVC_VIEW_URI_PHONELOG) == 0) {
-               if (check_read)
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
-               else
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_WRITE, &result);
-       }
-       else if ((strcmp(view_uri, CTSVC_VIEW_URI_ADDRESSBOOK) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_PERSON) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_GROUP) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_CONTACT) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_MY_PROFILE) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_NAME) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_COMPANY) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_NOTE) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_NUMBER) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_EMAIL) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_URL) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_EVENT) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_NICKNAME) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_ADDRESS) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_MESSENGER) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_GROUP_RELATION) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_ACTIVITY) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_ACTIVITY_PHOTO) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_PROFILE) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_RELATIONSHIP) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_IMAGE) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_EXTENSION) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_SPEEDDIAL) == 0)
-                       || (strcmp(view_uri, CTSVC_VIEW_URI_SDN) == 0)
-                       ) {
-               if (check_read)
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
-               else
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_WRITE, &result);
-       }
-       else {
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
-       RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (phonelog read)");
-
-       return CONTACTS_ERROR_NONE;
-}
+       int ret;
+       contacts_h contact = NULL;
 
-static int __ctsvc_db_check_permission_by_type(int r_type, bool check_read)
-{
-       int ret = CONTACTS_ERROR_NONE;
-       bool result = false;
-
-       switch((int)r_type) {
-       case CTSVC_RECORD_ADDRESSBOOK:
-       case CTSVC_RECORD_GROUP:
-       case CTSVC_RECORD_PERSON:
-       case CTSVC_RECORD_CONTACT:
-       case CTSVC_RECORD_MY_PROFILE:
-       case CTSVC_RECORD_SIMPLE_CONTACT:
-       case CTSVC_RECORD_NAME:
-       case CTSVC_RECORD_COMPANY:
-       case CTSVC_RECORD_NOTE:
-       case CTSVC_RECORD_NUMBER:
-       case CTSVC_RECORD_EMAIL:
-       case CTSVC_RECORD_URL:
-       case CTSVC_RECORD_EVENT:
-       case CTSVC_RECORD_NICKNAME:
-       case CTSVC_RECORD_ADDRESS:
-       case CTSVC_RECORD_MESSENGER:
-       case CTSVC_RECORD_GROUP_RELATION:
-       case CTSVC_RECORD_ACTIVITY:
-       case CTSVC_RECORD_ACTIVITY_PHOTO:
-       case CTSVC_RECORD_PROFILE:
-       case CTSVC_RECORD_RELATIONSHIP:
-       case CTSVC_RECORD_IMAGE:
-       case CTSVC_RECORD_EXTENSION:
-       case CTSVC_RECORD_SPEEDDIAL:
-       case CTSVC_RECORD_SDN:
-       case CTSVC_RECORD_UPDATED_INFO:
-       {
-               if (check_read)
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
-               else
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_WRITE, &result);
-       }
-               break;
-       case CTSVC_RECORD_PHONELOG:
-       {
-               if (check_read)
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
-               else
-                       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_WRITE, &result);
-       }
-               break;
-       default:
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
-       RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (phonelog read)");
-
-       return CONTACTS_ERROR_NONE;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_insert_records_async(const contacts_list_h list, contacts_db_insert_result_cb callback, void *user_data)
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       ctsvc_ipc_async_userdata_s *async_data = NULL;
-       int r_type;
-
-       RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
-
-       r_type = ((ctsvc_list_s*)list)->l_type;
-       ret = __ctsvc_db_check_permission_by_type(r_type, false);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_db_check_permission_by_type fail (%d)", ret);
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_list(list,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
-       if (async_data == NULL) {
-               CTS_ERR("malloc fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       async_data->callback = callback;
-       async_data->user_data = user_data;
-
-       if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE,CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
-                               indata,__ctsvc_ipc_client_insert_records_cb,async_data) != 0) {
-               CONTACTS_FREE(async_data);
-               CTS_ERR("ctsvc_ipc_call_async failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_db_get_records_with_query(contact, query, offset, limit, out_list);
 
        return ret;
 }
 
-API int contacts_db_update_records_async(const contacts_list_h list, contacts_db_result_cb callback, void *user_data)
+
+API int contacts_db_get_count(const char* view_uri, int *out_count)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       ctsvc_ipc_async_userdata_s *async_data = NULL;
-       int r_type;
-
-       RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-
-       r_type = ((ctsvc_list_s*)list)->l_type;
-       ret = __ctsvc_db_check_permission_by_type(r_type, false);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_db_check_permission_by_type fail (%d)", ret);
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_list(list,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
-       if (async_data == NULL) {
-               CTS_ERR("malloc fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       async_data->callback = callback;
-       async_data->user_data = user_data;
-
-       if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE,CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
-                               indata,__ctsvc_ipc_client_update_records_cb,async_data) != 0) {
-               CONTACTS_FREE(async_data);
-               CTS_ERR("ctsvc_ipc_call_async failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-       pims_ipc_data_destroy(indata);
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_delete_records_async(const char* view_uri, int ids[], int count, contacts_db_result_cb callback, void *user_data)
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       int i = 0;
-       ctsvc_ipc_async_userdata_s *async_data = NULL;
-
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       ret = __ctsvc_db_check_permission_by_view_uri(view_uri, false);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_db_check_permission_by_view_uri fail (%d)", ret);
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(count,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       for (i=0;i<count;i++) {
-               ret = ctsvc_ipc_marshal_int(ids[i],indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("marshal fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-       }
-
-       async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
-       if (async_data == NULL) {
-               CTS_ERR("malloc fail!");
-               pims_ipc_data_destroy(indata);
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       async_data->callback = callback;
-       async_data->user_data = user_data;
-       if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE,CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
-                               indata,__ctsvc_ipc_client_delete_records_cb,async_data) != 0) {
-               CONTACTS_FREE(async_data);
-               CTS_ERR("ctsvc_ipc_call_async failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_db_get_count(contact, view_uri, out_count);
 
        return ret;
 }
 
-void __ctsvc_ipc_client_replace_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
+API int contacts_db_get_count_with_query(contacts_query_h query, int *out_count)
 {
-       ctsvc_ipc_async_userdata_s *async_data = (ctsvc_ipc_async_userdata_s *)userdata;
-       int ret = CONTACTS_ERROR_NONE;
-
-       if (data_out) {
-               ctsvc_ipc_unmarshal_int(data_out, &ret);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       ctsvc_ipc_unmarshal_int(data_out, &transaction_ver);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       if (async_data->callback) {
-               contacts_db_result_cb callback = async_data->callback;
-               callback(ret, async_data->user_data);
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       ctsvc_inotify_call_blocked_callback();
+       ret = ctsvc_client_db_get_count_with_query(contact, query, out_count);
 
-       free(async_data);
-
-       return ;
+       return ret;
 }
 
-API int contacts_db_replace_records_async( contacts_list_h list, int ids[], int count,
-               contacts_db_result_cb callback, void *user_data )
+API int contacts_db_insert_records(contacts_list_h list, int **ids, int *count)
 {
-       int i;
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       ctsvc_ipc_async_userdata_s *async_data = NULL;
-       bool result = false;
-
-       RETVM_IF(NULL == list,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(count <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_WRITE, &result);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
-       RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (contact read)");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_list(list, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int(count, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       for (i=0;i<count;i++) {
-               ret = ctsvc_ipc_marshal_int(ids[i],indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("marshal fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-       }
-
-       async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
-       async_data->callback = callback;
-       async_data->user_data = user_data;
-
-       if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
-                               indata, __ctsvc_ipc_client_replace_records_cb, async_data) != 0) {
-               CONTACTS_FREE(async_data);
-               CTS_ERR("ctsvc_ipc_call_async failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-       pims_ipc_data_destroy(indata);
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_insert_records( contacts_list_h list, int **ids, int *count)
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       if (ids)
-               *ids = NULL;
-       if (count)
-               *count = 0;
-
-       RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_list(list,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
-                               indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-
-                       if (ids && count) {
-                               int i = 0;
-                               int *id = NULL;
-                               int c;
-                               c = *(int*)pims_ipc_data_get(outdata, &size);
-                               id = calloc(c, sizeof(int));
-                               for(i=0;i<c;i++)
-                                       id[i] = *(int*) pims_ipc_data_get(outdata, &size);
-                               *ids = id;
-                               *count = c;
-                       }
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_insert_records(contact, list, ids, count);
 
        return ret;
 }
 
-API int contacts_db_update_records( contacts_list_h list)
+API int contacts_db_update_records(contacts_list_h list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_list(list,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
-                               indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_update_records(contact, list);
 
        return ret;
 }
 
 API int contacts_db_delete_records(const char* view_uri, int ids[], int count)
 {
-       int i;
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(view_uri == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "view_uri is NULL");
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int(count,indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       for (i=0;i<count;i++) {
-               ret = ctsvc_ipc_marshal_int(ids[i],indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("marshal fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
-                               indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_delete_records(contact, view_uri, ids, count);
 
        return ret;
 }
 
-API int contacts_db_replace_records( contacts_list_h list, int ids[], int count )
+API int contacts_db_replace_records(contacts_list_h list, int ids[], int count)
 {
-       int i;
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(NULL == list,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_list(list, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int(count, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       for (i=0;i<count;i++) {
-               ret = ctsvc_ipc_marshal_int(ids[i], indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("marshal fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
-                               indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_replace_records(contact, list, ids, count);
 
        return ret;
 }
 
-API int contacts_db_get_changes_by_version(const char* view_uri, int addressbook_id, int contacts_db_version, contacts_list_h* record_list, int* current_contacts_db_version )
+API int contacts_db_get_changes_by_version(const char* view_uri, int addressbook_id,
+               int contacts_db_version, contacts_list_h* record_list, int* current_contacts_db_version)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(record_list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record_list is NULL");
-       *record_list = NULL;
-       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
-       RETVM_IF(current_contacts_db_version==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"current_contacts_db_version is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(addressbook_id,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(contacts_db_version,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_CHANGES_BY_VERSION, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_list(outdata,record_list);
-
-                       if (ret == CONTACTS_ERROR_NONE)
-                       {
-                               ret = ctsvc_ipc_unmarshal_int(outdata,current_contacts_db_version);
-                       }
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_get_changes_by_version(contact, view_uri, addressbook_id, contacts_db_version, record_list, current_contacts_db_version);
 
        return ret;
 }
 
 API int contacts_db_get_current_version(int* contacts_db_version)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(contacts_db_version==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"contacts_db_version is null");
-       *contacts_db_version = 0;
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_CURRENT_VERSION, NULL, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               return CONTACTS_ERROR_IPC;
-       }
-
-       if (outdata)
-       {
-               // check outdata
-               ctsvc_ipc_unmarshal_int(outdata, &ret);
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_int(outdata,contacts_db_version);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_get_current_version(contact, contacts_db_version);
 
        return ret;
+
 }
 
 API int contacts_db_search_records(const char* view_uri, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(out_list == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-       *out_list = NULL;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail !");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(view_uri,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(keyword,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(offset,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(limit,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_list(outdata,out_list);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_search_records(contact, view_uri, keyword, offset, limit, out_list);
 
        return ret;
 }
@@ -1448,208 +242,53 @@ API int contacts_db_search_records(const char* view_uri, const char *keyword,
 API int contacts_db_search_records_with_range(const char* view_uri, const char *keyword,
                int offset, int limit, int range, contacts_list_h* out_list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(out_list == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-       *out_list = NULL;
-       RETVM_IF(range == 0, CONTACTS_ERROR_INVALID_PARAMETER, "range is 0");
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail !");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-
-       ret = ctsvc_ipc_marshal_string(view_uri, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               goto DATA_FREE;
-       }
-       ret = ctsvc_ipc_marshal_string(keyword, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               goto DATA_FREE;
-       }
-       ret = ctsvc_ipc_marshal_int(offset, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               goto DATA_FREE;
-       }
-       ret = ctsvc_ipc_marshal_int(limit, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               goto DATA_FREE;
-       }
-       ret = ctsvc_ipc_marshal_int(range, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               goto DATA_FREE;
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE, indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-                       ret = ctsvc_ipc_unmarshal_list(outdata,out_list);
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       return ret;
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_search_records_with_range(contact, view_uri, keyword, offset, limit, range, out_list);
 
-DATA_FREE:
-       pims_ipc_data_destroy(indata);
        return ret;
 }
 
 API int contacts_db_search_records_with_query(contacts_query_h query, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(out_list==NULL, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
-       *out_list = NULL;
-       RETVM_IF(query==NULL, CONTACTS_ERROR_INVALID_PARAMETER, "query is NULL");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail !");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_query(query,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_string(keyword,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(offset,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int(limit,indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check outdata
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               if (ret == CONTACTS_ERROR_NONE)
-               {
-                       ret = ctsvc_ipc_unmarshal_list(outdata,out_list);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_search_records_with_query(contact, query, keyword, offset, limit, out_list);
 
        return ret;
 }
 
 API int contacts_db_get_last_change_version(int* last_version)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       bool result = false;
+       int ret;
+       contacts_h contact = NULL;
 
-       RETVM_IF(NULL == last_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       *last_version = 0;
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
-       if (result == false) {
-               ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
-               RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied");
-       }
+       ret = ctsvc_client_db_get_last_change_version(contact, last_version);
 
-       *last_version = ctsvc_client_ipc_get_change_version();
        return ret;
 }
 
-typedef struct
-{
-       contacts_db_status_changed_cb cb;
-       void *user_data;
-}status_callback_info_s;
-
-static GSList *__status_change_subscribe_list = NULL;
-
-static void __ctsvc_db_status_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
+API int contacts_db_get_status(contacts_db_status_e *status)
 {
-       int status = -1;
-       GSList *l;
-
-       if (data)
-               ctsvc_ipc_unmarshal_int(data, &status);
+       int ret;
+       contacts_h contact = NULL;
 
-       for (l = __status_change_subscribe_list;l;l=l->next) {
-               status_callback_info_s *cb_info = l->data;
-               if (cb_info->cb)
-                       cb_info->cb(status, cb_info->user_data);
-       }
-}
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-API int contacts_db_get_status(contacts_db_status_e *status)
-{
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(status == NULL, CONTACTS_ERROR_INVALID_PARAMETER,"The out param is NULL");
-       *status = 0;
-
-       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_STATUS, NULL, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               return CONTACTS_ERROR_IPC;
-       }
-
-       if (outdata) {
-               unsigned int size = 0;
-               ctsvc_ipc_unmarshal_int(outdata, &ret);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       ctsvc_ipc_unmarshal_int(outdata, (int *)status);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_db_get_status(contact, status);
 
        return ret;
 }
@@ -1657,55 +296,28 @@ API int contacts_db_get_status(contacts_db_status_e *status)
 API int contacts_db_add_status_changed_cb(
                contacts_db_status_changed_cb cb, void* user_data)
 {
-       status_callback_info_s *cb_info = NULL;
-       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : callback is null");
-
-       ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-
-       if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
-                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED,
-                               __ctsvc_db_status_subscriber_callback, NULL) != 0) {
-               CTS_ERR("pims_ipc_subscribe error\n");
-               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       cb_info = calloc(1, sizeof(status_callback_info_s));
-       RETVM_IF(NULL == cb_info, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-       cb_info->user_data = user_data;
-       cb_info->cb = cb;
-       __status_change_subscribe_list = g_slist_append(__status_change_subscribe_list, cb_info);
-
-       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-       return CONTACTS_ERROR_NONE;
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_add_status_changed_cb(contact, cb, user_data);
+
+       return ret;
 }
 
 API int contacts_db_remove_status_changed_cb(
                contacts_db_status_changed_cb cb, void* user_data)
 {
-       GSList *l;
-
-       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : callback is null");
-
-       ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-       for(l = __status_change_subscribe_list;l;l=l->next) {
-               status_callback_info_s *cb_info = l->data;
-               if (cb == cb_info->cb && user_data == cb_info->user_data) {
-                       __status_change_subscribe_list = g_slist_remove(__status_change_subscribe_list, cb_info);
-                       break;
-               }
-       }
-
-       if (g_slist_length(__status_change_subscribe_list) == 0) {
-               pims_ipc_unsubscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
-                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED);
-               g_slist_free(__status_change_subscribe_list);
-               __status_change_subscribe_list = NULL;
-       }
-
-       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-       return CONTACTS_ERROR_NONE;
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_db_remove_status_changed_cb(contact, cb, user_data);
+
+       return ret;
 }
 
diff --git a/client/ctsvc_client_db_helper.c b/client/ctsvc_client_db_helper.c
new file mode 100644 (file)
index 0000000..202e14e
--- /dev/null
@@ -0,0 +1,1518 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <glib.h>
+#include <pims-ipc.h>
+#include <pims-ipc-data.h>
+
+#include "contacts.h"
+
+#include "ctsvc_internal.h"
+#include "ctsvc_list.h"
+#include "ctsvc_record.h"
+#include "ctsvc_inotify.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_ipc_marshal.h"
+#include "ctsvc_view.h"
+#include "ctsvc_client_ipc.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_client_db_helper.h"
+
+int ctsvc_client_db_insert_record(contacts_h contact, contacts_record_h record, int *id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       if (id)
+               *id = 0;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_record(record,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORD, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+
+                       if (id) {
+                               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, id)) {
+                                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                                       pims_ipc_data_destroy(outdata);
+                                       return CONTACTS_ERROR_IPC;
+                               }
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_record(contacts_h contact, const char* view_uri, int id, contacts_record_h* out_record)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
+       RETVM_IF(id<0,CONTACTS_ERROR_INVALID_PARAMETER,"id<0");
+       RETVM_IF(out_record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
+       *out_record = NULL;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(id,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORD, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record(outdata, out_record)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+       return ret;
+}
+
+int ctsvc_client_db_update_record(contacts_h contact, contacts_record_h record)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(record==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_record(record,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORD, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+       return ret;
+}
+
+int ctsvc_client_db_delete_record(contacts_h contact, const char* view_uri, int id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
+       RETVM_IF(id<=0,CONTACTS_ERROR_INVALID_PARAMETER,"id <= 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(id,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORD, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_replace_record(contacts_h contact, contacts_record_h record, int id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact,CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_record(record, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
+                               CTSVC_IPC_SERVER_DB_REPLACE_RECORD, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_all_records(contacts_h contact, const char* view_uri, int offset, int limit, contacts_list_h* out_list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == out_list,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
+       *out_list = NULL;
+       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(offset,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(limit,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_ALL_RECORDS, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (ret == CONTACTS_ERROR_NONE) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+       return ret;
+}
+
+int ctsvc_client_db_get_records_with_query(contacts_h contact, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == out_list,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
+       *out_list = NULL;
+       RETVM_IF(NULL == query,CONTACTS_ERROR_INVALID_PARAMETER,"query is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_query(query,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(offset,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(limit,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+
+int ctsvc_client_db_get_count(contacts_h contact, const char* view_uri, int *out_count)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
+       RETVM_IF(out_count==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"count pointer is NULL");
+       *out_count = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, out_count)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_count_with_query(contacts_h contact, contacts_query_h query, int *out_count)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == query,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
+       RETVM_IF(out_count==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"count pointer is NULL");
+       *out_count = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_query(query,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, out_count)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_insert_records(contacts_h contact, contacts_list_h list, int **ids, int *count)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       if (ids)
+               *ids = NULL;
+       if (count)
+               *count = 0;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_list(list,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
+                               indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+
+                       if (ids && count) {
+                               int i = 0;
+                               int *id = NULL;
+                               int c;
+
+                               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &c)) {
+                                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                                       pims_ipc_data_destroy(outdata);
+                                       return CONTACTS_ERROR_IPC;
+                               }
+                               id = calloc(c, sizeof(int));
+                               if (NULL == id) {
+                                       CTS_ERR("calloc() Fail");
+                                       pims_ipc_data_destroy(outdata);
+                                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+                               }
+
+                               for (i=0;i<c;i++) {
+                                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &(id[i]))) {
+                                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                                               pims_ipc_data_destroy(outdata);
+                                               free(id);
+                                               return CONTACTS_ERROR_IPC;
+                                       }
+                               }
+                               *ids = id;
+                               *count = c;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_update_records(contacts_h contact, contacts_list_h list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contct is NULL");
+       RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_list(list,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
+                               indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_delete_records(contacts_h contact, const char* view_uri, int ids[], int count)
+{
+       int i;
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(view_uri == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "view_uri is NULL");
+
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(count,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       for (i=0;i<count;i++) {
+               ret = ctsvc_ipc_marshal_int(ids[i],indata);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("marshal fail");
+                       pims_ipc_data_destroy(indata);
+                       return ret;
+               }
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
+                               indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_replace_records(contacts_h contact, contacts_list_h list, int ids[], int count)
+{
+       int i;
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact,CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == list,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+       RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_list(list, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(count, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       for (i=0;i<count;i++) {
+               ret = ctsvc_ipc_marshal_int(ids[i], indata);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("marshal fail");
+                       pims_ipc_data_destroy(indata);
+                       return ret;
+               }
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
+                               indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_changes_by_version(contacts_h contact, const char* view_uri, int addressbook_id, int contacts_db_version, contacts_list_h* record_list, int* current_contacts_db_version)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(record_list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record_list is NULL");
+       *record_list = NULL;
+       RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
+       RETVM_IF(current_contacts_db_version==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"current_contacts_db_version is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(addressbook_id,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(contacts_db_version,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_CHANGES_BY_VERSION, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (ret == CONTACTS_ERROR_NONE) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, record_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, current_contacts_db_version)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_current_version(contacts_h contact, int* contacts_db_version)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is null");
+       RETVM_IF(contacts_db_version==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"contacts_db_version is null");
+       *contacts_db_version = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_CURRENT_VERSION, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, contacts_db_version)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_search_records(contacts_h contact, const char* view_uri, const char *keyword,
+               int offset, int limit, contacts_list_h* out_list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(out_list == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+       *out_list = NULL;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("pims_ipc_data_create() Fail");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_string(view_uri,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_string(keyword,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(offset,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(limit,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_search_records_with_range(contacts_h contact, const char* view_uri, const char *keyword,
+               int offset, int limit, int range, contacts_list_h* out_list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(contact == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(out_list == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+       RETVM_IF(range == 0, CONTACTS_ERROR_INVALID_PARAMETER, "range is 0");
+       *out_list = NULL;
+
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("pims_ipc_data_create() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_string(view_uri, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_string(keyword, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(offset, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(limit, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(range, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       if (0 != ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE, indata, &outdata)) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+       return ret;
+}
+
+int ctsvc_client_db_search_records_with_query(contacts_h contact, contacts_query_h query, const char *keyword,
+               int offset, int limit, contacts_list_h* out_list)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
+       RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "query is NULL");
+       *out_list = NULL;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("pims_ipc_data_create() Fail");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_query(query,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_string(keyword,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(offset,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(limit,indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_list() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_get_last_change_version(contacts_h contact, int* last_version)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       bool result = false;
+
+       RETVM_IF(NULL == last_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+       *last_version = 0;
+
+       ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
+       if (result == false) {
+               ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
+               RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied");
+       }
+
+       *last_version = ctsvc_client_ipc_get_change_version(contact);
+       return ret;
+}
+
+typedef struct
+{
+       contacts_db_status_changed_cb cb;
+       void *user_data;
+}status_callback_info_s;
+
+static GSList *__status_change_subscribe_list = NULL;
+
+static void __ctsvc_client_db_free_cb_info(status_callback_info_s *cb_info)
+{
+       if (NULL == cb_info)
+               return;
+       free(cb_info);
+}
+
+static void __ctsvc_db_status_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
+{
+       int ret;
+       int status = -1;
+       GSList *l;
+
+       if (data) {
+               ret = ctsvc_ipc_unmarshal_int(data, &status);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+       }
+
+       for (l = __status_change_subscribe_list;l;l=l->next) {
+               status_callback_info_s *cb_info = l->data;
+               /* TODO: Fixme - check zone_name */
+               if (cb_info->cb)
+                       cb_info->cb(status, cb_info->user_data);
+       }
+}
+
+int ctsvc_client_db_get_status(contacts_h contact, contacts_db_status_e *status)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h outdata = NULL;
+       pims_ipc_data_h indata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(status == NULL, CONTACTS_ERROR_INVALID_PARAMETER,"The out param is NULL");
+       *status = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("pims_ipc_data_create() Fail");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_STATUS, indata, &outdata) != 0) {
+               pims_ipc_data_destroy(indata);
+               CTS_ERR("ctsvc_ipc_call failed");
+               return CONTACTS_ERROR_IPC;
+       }
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, (int *)status)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_db_add_status_changed_cb(contacts_h contact,
+               contacts_db_status_changed_cb cb, void* user_data)
+{
+       int ret;
+       status_callback_info_s *cb_info = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : callback is null");
+
+       ret = ctsvc_ipc_create_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_create_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
+       ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+
+       if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
+                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED,
+                               __ctsvc_db_status_subscriber_callback, NULL) != 0) {
+               CTS_ERR("pims_ipc_subscribe error\n");
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       cb_info = calloc(1, sizeof(status_callback_info_s));
+       if (NULL == cb_info) {
+               CTS_ERR("calloc() Fail");
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+       cb_info->user_data = user_data;
+       cb_info->cb = cb;
+       __status_change_subscribe_list = g_slist_append(__status_change_subscribe_list, cb_info);
+
+       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_db_remove_status_changed_cb(contacts_h contact,
+       contacts_db_status_changed_cb cb, void* user_data)
+{
+       int ret;
+       GSList *l;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : callback is null");
+
+       ret = ctsvc_ipc_destroy_for_change_subscription(false);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_destroy_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
+       ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+       for (l = __status_change_subscribe_list;l;l=l->next) {
+               status_callback_info_s *cb_info = l->data;
+               if (cb == cb_info->cb && user_data == cb_info->user_data) {
+                       __status_change_subscribe_list = g_slist_remove(__status_change_subscribe_list, cb_info);
+                       __ctsvc_client_db_free_cb_info(cb_info);
+                       break;
+               }
+       }
+
+       if (g_slist_length(__status_change_subscribe_list) == 0) {
+               pims_ipc_unsubscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
+                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED);
+               g_slist_free(__status_change_subscribe_list);
+               __status_change_subscribe_list = NULL;
+       }
+
+       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+       return CONTACTS_ERROR_NONE;
+}
diff --git a/client/ctsvc_client_db_helper.h b/client/ctsvc_client_db_helper.h
new file mode 100644 (file)
index 0000000..a6a8d69
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2014 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_DB_HELPER_H__
+#define __CTSVC_CLIENT_DB_HELPER_H__
+
+#include "contacts_types.h"
+
+int ctsvc_client_db_insert_record(contacts_h contact, contacts_record_h record, int *id);
+int ctsvc_client_db_get_record(contacts_h contact, const char* view_uri, int id, contacts_record_h* out_record);
+int ctsvc_client_db_update_record(contacts_h contact, contacts_record_h record);
+int ctsvc_client_db_delete_record(contacts_h contact, const char* view_uri, int id);
+int ctsvc_client_db_replace_record(contacts_h contact, contacts_record_h record, int id);
+int ctsvc_client_db_get_all_records(contacts_h contact, const char* view_uri, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_client_db_get_records_with_query(contacts_h contact, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_client_db_get_count(contacts_h contact, const char* view_uri, int *out_count);
+int ctsvc_client_db_get_count_with_query(contacts_h contact, contacts_query_h query, int *out_count);
+int ctsvc_client_db_insert_records(contacts_h contact, contacts_list_h list, int **ids, int *count);
+int ctsvc_client_db_update_records(contacts_h contact, contacts_list_h list);
+int ctsvc_client_db_delete_records(contacts_h contact, const char* view_uri, int ids[], int count);
+int ctsvc_client_db_replace_records(contacts_h contact, contacts_list_h list, int ids[], int count);
+int ctsvc_client_db_get_changes_by_version(contacts_h contact, const char* view_uri, int addressbook_id, int ctsvc_client_db_version, contacts_list_h* record_list, int* current_ctsvc_client_db_version);
+int ctsvc_client_db_get_current_version(contacts_h contact, int* ctsvc_client_db_version);
+int ctsvc_client_db_search_records(contacts_h contact, const char* view_uri, const char *keyword, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_client_db_search_records_with_range(contacts_h contact, const char* view_uri, const char *keyword, int offset, int limit, int range, contacts_list_h* out_list);
+int ctsvc_client_db_search_records_with_query(contacts_h contact, contacts_query_h query, const char *keyword, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_client_db_get_last_change_version(contacts_h contact, int* last_version);
+int ctsvc_client_db_get_status(contacts_h contact, contacts_db_status_e *status);
+int ctsvc_client_db_add_status_changed_cb(contacts_h contact, contacts_db_status_changed_cb cb, void* user_data);
+int ctsvc_client_db_remove_status_changed_cb(contacts_h contact, contacts_db_status_changed_cb cb, void* user_data);
+
+#endif /* __CTSVC_CLIENT_DB_HELPER_H__ */
\ No newline at end of file
diff --git a/client/ctsvc_client_db_notification.c b/client/ctsvc_client_db_notification.c
new file mode 100644 (file)
index 0000000..d1e29e6
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_inotify.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_ipc.h"
+
+static int _ctsvc_db_view_check_read_permission(const char* view_uri)
+{
+       int ret;
+       bool result = false;
+
+       if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESSBOOK, strlen(CTSVC_VIEW_URI_ADDRESSBOOK))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PERSON, strlen(CTSVC_VIEW_URI_PERSON))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_CONTACT, strlen(CTSVC_VIEW_URI_CONTACT))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SIMPLE_CONTACT, strlen(CTSVC_VIEW_URI_SIMPLE_CONTACT))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP, strlen(CTSVC_VIEW_URI_GROUP))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MY_PROFILE, strlen(CTSVC_VIEW_URI_MY_PROFILE))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NAME, strlen(CTSVC_VIEW_URI_NAME))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NUMBER, strlen(CTSVC_VIEW_URI_NUMBER))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EMAIL, strlen(CTSVC_VIEW_URI_EMAIL))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESS, strlen(CTSVC_VIEW_URI_ADDRESS))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NOTE, strlen(CTSVC_VIEW_URI_NOTE))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_URL, strlen(CTSVC_VIEW_URI_URL))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EVENT, strlen(CTSVC_VIEW_URI_EVENT))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_IMAGE, strlen(CTSVC_VIEW_URI_IMAGE))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_COMPANY, strlen(CTSVC_VIEW_URI_COMPANY))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NICKNAME, strlen(CTSVC_VIEW_URI_NICKNAME))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MESSENGER, strlen(CTSVC_VIEW_URI_MESSENGER))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EXTENSION, strlen(CTSVC_VIEW_URI_EXTENSION))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PROFILE, strlen(CTSVC_VIEW_URI_PROFILE))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_RELATIONSHIP, strlen(CTSVC_VIEW_URI_RELATIONSHIP))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY, strlen(CTSVC_VIEW_URI_ACTIVITY))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY_PHOTO, strlen(CTSVC_VIEW_URI_ACTIVITY_PHOTO))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SPEEDDIAL, strlen(CTSVC_VIEW_URI_SPEEDDIAL))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SDN, strlen(CTSVC_VIEW_URI_SDN))
+                       || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP_RELATION, strlen(CTSVC_VIEW_URI_GROUP_RELATION))) {
+               ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission() Fail(%d)", ret);
+               RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (contact read)");
+       }
+       else if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PHONELOG, strlen(CTSVC_VIEW_URI_PHONELOG))) {
+               ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission() Fail(%d)", ret);
+               RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (phonelog read)");
+       }
+
+       return CONTACTS_ERROR_NONE;
+}
+
+API int contacts_db_add_changed_cb(const char* view_uri, contacts_db_changed_cb cb,
+               void* user_data)
+{
+       int ret;
+       contacts_h contact = NULL;
+
+       RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : view_uri is null");
+       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : callback is null");
+
+       ret = _ctsvc_db_view_check_read_permission(view_uri);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_db_view_check_read_permission() Fail(%d)", ret);
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_inotify_subscribe(contact, view_uri, cb, user_data);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
+                       "ctsvc_inotify_subscribe(%s) Fail(%d)", view_uri, ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+API int contacts_db_remove_changed_cb(const char* view_uri, contacts_db_changed_cb cb,
+               void* user_data)
+{
+       int ret;
+       contacts_h contact = NULL;
+
+       RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : view_uri is null");
+       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
+                       "Invalid parameter : callback is null");
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_inotify_unsubscribe(contact, view_uri, cb, user_data);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
+                       "ctsvc_inotify_unsubscribe(%s) Fail(%d)", view_uri, ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
index 00ea286..b985d8f 100644 (file)
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_ipc_define.h"
-#include "ctsvc_client_ipc.h"
-#include <pims-ipc-data.h>
-#include "ctsvc_ipc_marshal.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_group_helper.h"
 
 API int contacts_group_add_contact(int group_id, int contact_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(group_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( group_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( contact_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_ADD_CONTACT, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_group_add_contact(contact, group_id, contact_id);
 
        return ret;
 }
 
 API int contacts_group_remove_contact(int group_id, int contact_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(group_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( group_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( contact_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_group_remove_contact(contact, group_id, contact_id);
 
        return ret;
 }
 
 API int contacts_group_set_group_order(int group_id, int previous_group_id, int next_group_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(group_id <= 0 || previous_group_id < 0 || next_group_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       ret = ctsvc_ipc_marshal_int( group_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( previous_group_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( next_group_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_group_set_group_order(contact, group_id, previous_group_id, next_group_id);
 
        return ret;
-
 }
 
diff --git a/client/ctsvc_client_group_helper.c b/client/ctsvc_client_group_helper.c
new file mode 100644 (file)
index 0000000..9474a94
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_client_ipc.h"
+#include <pims-ipc-data.h>
+#include "ctsvc_ipc_marshal.h"
+
+
+static const char CONTACTS_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.read";
+static const char CONTACTS_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.write";
+static const char PHONELOG_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.read";
+static const char PHONELOG_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.write";
+
+int ctsvc_client_group_add_contact(contacts_h contact, int group_id, int contact_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(group_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(group_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(contact_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_ADD_CONTACT, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_group_remove_contact(contacts_h contact, int group_id, int contact_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(group_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+
+       ret = ctsvc_ipc_marshal_int(group_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(contact_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_group_set_group_order(contacts_h contact, int group_id, int previous_group_id, int next_group_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(group_id <= 0 || previous_group_id < 0 || next_group_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(group_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(previous_group_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(next_group_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+
+}
+
similarity index 60%
rename from native/ctsvc_setting.h
rename to client/ctsvc_client_group_helper.h
index 3c4468f..947c065 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_SETTING_H__
-#define __TIZEN_SOCIAL_CTSVC_SETTING_H__
+#ifndef __CTSVC_CLIENT_GROUP_HELPER_H__
+#define __CTSVC_CLIENT_GROUP_HELPER_H__
 
-int ctsvc_register_vconf(void);
-void ctsvc_deregister_vconf(void);
+#include "contacts_types.h"
 
-int ctsvc_get_phonenumber_min_match_digit(void);
-int ctsvc_get_primary_sort(void);
-int ctsvc_get_secondary_sort(void);
-const char *ctsvc_get_default_sort_vconfkey(void);
-void ctsvc_set_sort_memory(int sort_type);
+int ctsvc_client_group_add_contact(contacts_h contact, int group_id, int contact_id);
+int ctsvc_client_group_remove_contact(contacts_h contact, int group_id, int contact_id);
+int ctsvc_client_group_set_group_order(contacts_h contact, int group_id, int previous_group_id, int next_group_id);
 
-
-#endif /*  __TIZEN_SOCIAL_CTSVC_SETTING_H__ */
+#endif /* __CTSVC_CLIENT_GROUP_HELPER_H__ */
 
diff --git a/client/ctsvc_client_handle.c b/client/ctsvc_client_handle.c
new file mode 100644 (file)
index 0000000..90951b7
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <glib.h>
+#include <unistd.h>
+
+#include "ctsvc_internal.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_client_utils.h"
+#include "ctsvc_client_handle.h"
+
+static GHashTable *_ctsvc_handle_table = NULL;
+
+static int _ctsvc_client_handle_get_key(unsigned int id, char *key, int key_len)
+{
+       RETV_IF(NULL == key, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       snprintf(key, key_len, "%d:%u", getuid(), id);
+       CTS_DBG("key[%s]", key);
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_handle_get_p_with_id(unsigned int id, contacts_h *p_contact)
+{
+       int ret;
+       char key[CTSVC_STR_SHORT_LEN] = {0};
+       contacts_h contact = NULL;
+
+       RETVM_IF(NULL == _ctsvc_handle_table, CONTACTS_ERROR_NO_DATA, "_ctsvc_handle_table is NULL");
+       RETV_IF(NULL == p_contact, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ret = _ctsvc_client_handle_get_key(id, key, sizeof(key));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_client_handle_get_key() Fail(%d)", ret);
+
+       ctsvc_mutex_lock(CTS_MUTEX_HANDLE);
+       contact = g_hash_table_lookup(_ctsvc_handle_table, key);
+       ctsvc_mutex_unlock(CTS_MUTEX_HANDLE);
+
+       if (NULL == contact) {
+               CTS_ERR("g_hash_table_lookup() Fail. key[%s]", key);
+               return CONTACTS_ERROR_NO_DATA;
+       }
+
+       *p_contact = contact;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_handle_get_p(contacts_h *p_contact)
+{
+       int ret;
+       char key[CTSVC_STR_SHORT_LEN] = {0};
+       contacts_h contact = NULL;
+
+       RETVM_IF(NULL == _ctsvc_handle_table, CONTACTS_ERROR_NO_DATA, "_ctsvc_handle_table is NULL");
+       RETV_IF(NULL == p_contact, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ret = _ctsvc_client_handle_get_key(ctsvc_client_get_tid(), key, sizeof(key));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_client_handle_get_key() Fail(%d)", ret);
+
+       ctsvc_mutex_lock(CTS_MUTEX_HANDLE);
+       contact = g_hash_table_lookup(_ctsvc_handle_table, key);
+       ctsvc_mutex_unlock(CTS_MUTEX_HANDLE);
+
+       if (NULL == contact) {
+               ret = _ctsvc_client_handle_get_key(ctsvc_client_get_pid(), key, sizeof(key));
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_client_handle_get_key() Fail(%d)", ret);
+
+               ctsvc_mutex_lock(CTS_MUTEX_HANDLE);
+               contact = g_hash_table_lookup(_ctsvc_handle_table, key);
+               ctsvc_mutex_unlock(CTS_MUTEX_HANDLE);
+
+               RETVM_IF(NULL == contact, CONTACTS_ERROR_NO_DATA, "g_hash_table_lookup() Fail. key[%s]", key);
+       }
+       *p_contact = contact;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_handle_create(unsigned int id, contacts_h *p_contact)
+{
+       int ret;
+       char handle_key[CTSVC_STR_SHORT_LEN] = {0};
+       contacts_h contact = NULL;
+
+       RETV_IF(NULL == p_contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       *p_contact = NULL;
+
+       ret = _ctsvc_client_handle_get_key(id, handle_key, sizeof(handle_key));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_client_handle_get_key() Fail(%d)", ret);
+
+       ret = ctsvc_handle_create(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_handle_create() Fail(%d)", ret);
+
+       ctsvc_mutex_lock(CTS_MUTEX_HANDLE);
+       if (NULL == _ctsvc_handle_table)
+               _ctsvc_handle_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+
+       g_hash_table_insert(_ctsvc_handle_table, strdup(handle_key), contact);
+       CTS_INFO("handle insert key[%s]", handle_key);
+       ctsvc_mutex_unlock(CTS_MUTEX_HANDLE);
+
+       *p_contact = contact;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_handle_remove(unsigned int id, contacts_h contact)
+{
+       int ret;
+       char key[CTSVC_STR_SHORT_LEN] = {0};
+       RETVM_IF(NULL == _ctsvc_handle_table, CONTACTS_ERROR_NONE, "_ctsvc_handle_table is NULL");
+
+       ret = _ctsvc_client_handle_get_key(id, key, sizeof(key));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "_ctsvc_client_handle_get_key() Fail(%d)", ret);
+
+       ctsvc_mutex_lock(CTS_MUTEX_HANDLE);
+       if (false == g_hash_table_remove(_ctsvc_handle_table, key))
+               CTS_ERR("g_hash_table_remove() Fail. key[%s]", key);
+
+       if (0 == g_hash_table_size(_ctsvc_handle_table)) {
+               g_hash_table_destroy(_ctsvc_handle_table);
+               _ctsvc_handle_table = NULL;
+       }
+       ctsvc_handle_destroy(contact);
+       ctsvc_mutex_unlock(CTS_MUTEX_HANDLE);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+
diff --git a/client/ctsvc_client_handle.h b/client/ctsvc_client_handle.h
new file mode 100644 (file)
index 0000000..5f5ddf8
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_HANDLE_H__
+#define __CTSVC_CLIENT_HANDLE_H__
+
+int ctsvc_client_handle_get_p(contacts_h *p_contact);
+int ctsvc_client_handle_get_p_with_id(unsigned int id, contacts_h *p_contact);
+int ctsvc_client_handle_remove(unsigned int id, contacts_h contact);
+int ctsvc_client_handle_create(unsigned int id, contacts_h *p_contact);
+
+#endif /* __CTSVC_CLIENT_HANDLE_H__ */
\ No newline at end of file
index 6fc233b..f09958a 100644 (file)
 #include <stdlib.h>
 #include <pims-ipc-data.h>
 #include <security-server.h>
-#include <sys/types.h>
-#include <sys/syscall.h>
-#include <unistd.h>
+#include <pthread.h>
 
 #include "ctsvc_client_ipc.h"
+#include "ctsvc_client_utils.h"
+#include "ctsvc_client_service_helper.h"
 
 #include "ctsvc_internal.h"
 #include "ctsvc_list.h"
 #include "ctsvc_record.h"
-#include "ctsvc_query.h"
 #include "ctsvc_inotify.h"
 
 #include "ctsvc_ipc_define.h"
 #include "ctsvc_ipc_marshal.h"
 #include "ctsvc_view.h"
 #include "ctsvc_mutex.h"
-#include "ctsvc_client_service.h"
+#include "ctsvc_handle.h"
 
 struct ctsvc_ipc_s {
        pims_ipc_h ipc;
-       int change_version;
+       GList *list_handle;
 };
 
+static pthread_mutex_t _ctsvc_mutex_disconnected = PTHREAD_MUTEX_INITIALIZER;
 static GHashTable *_ctsvc_ipc_table = NULL;
 static bool _ctsvc_ipc_disconnected = false;
 
-static int __ctsvc_ipc_get_cookie_for_access_control(pims_ipc_data_h *indata)
+int ctsvc_ipc_get_cookie_for_access_control(pims_ipc_data_h indata)
 {
        int ret;
        size_t cookie_size = 0;
-       pims_ipc_data_h data;
        char *buf;
 
-       // Access control : get cookie from security-server
+       /* Access control : get cookie from security-server */
        cookie_size = security_server_get_cookie_size();
        if (cookie_size <= 0) {
-               CTS_ERR("security_server_get_cookie_size fail(%d)", cookie_size);
+               CTS_ERR("security_server_get_cookie_size : cookie_size is %d", cookie_size);
                return CONTACTS_ERROR_SYSTEM;
        }
 
        char cookie[cookie_size];
        cookie[0] = '\0';
        ret = security_server_request_cookie(cookie, cookie_size);
-       if(ret < 0) {
+       if (ret < 0) {
                CTS_ERR("security_server_request_cookie fail (%d)", ret);
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       // Access control : put cookie to indata
-       data = pims_ipc_data_create(0);
-       if (data == NULL) {
-               CTS_ERR("ipc data created fail!");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-
-       ret = ctsvc_ipc_marshal_unsigned_int(cookie_size, data);
+       ret = ctsvc_ipc_marshal_unsigned_int(cookie_size, indata);
        if (ret != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_marshal_int fail");
-               pims_ipc_data_destroy(data);
                return ret;
        }
 
        buf = g_base64_encode((const guchar *)cookie, cookie_size);
        if (buf) {
-               ret = ctsvc_ipc_marshal_string(buf, data);
+               ret = ctsvc_ipc_marshal_string(buf, indata);
                if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal_string fail");
-                       pims_ipc_data_destroy(data);
                        return ret;
                }
                free(buf);
        }
        else {
                CTS_ERR("g_base64_encode fail");
-               pims_ipc_data_destroy(data);
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       *indata = data;
-
        return CONTACTS_ERROR_NONE;
 }
 
-#define CTS_STR_SHORT_LEN 1024 //short sql string length
-
-static inline void _ctsvc_ipc_get_pid_str(char *buf, int buf_size)
+static pims_ipc_h _ctsvc_get_ipc_handle()
 {
-       pid_t pid = getpid();
-       snprintf(buf, buf_size, "%d", pid);
-}
+       struct ctsvc_ipc_s *ipc_data = NULL;
+       char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
+       RETVM_IF(NULL == _ctsvc_ipc_table, NULL, "contacts not connected");
 
-static inline void _ctsvc_ipc_get_tid_str(char *buf, int buf_size)
-{
-       pid_t tid = syscall(SYS_gettid);
-       snprintf(buf, buf_size, "%d", tid);
+       snprintf(ipc_key, sizeof(ipc_key), "%u", ctsvc_client_get_tid());
+       ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
+
+       if (NULL == ipc_data) {
+               snprintf(ipc_key, sizeof(ipc_key), "%u", ctsvc_client_get_pid());
+               ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
+       }
+
+       RETVM_IF(NULL == ipc_data, NULL, "g_hash_table_lookup(%s) Fail", ipc_key);
+
+       return ipc_data->ipc;
 }
 
-static void _ctsvc_ipc_data_free(gpointer p)
+bool ctsvc_ipc_is_busy()
 {
-       struct ctsvc_ipc_s *ipc_data = p;
-       if (NULL == ipc_data)
-               return;
+       bool ret = false;
 
-       if (ipc_data->ipc)
-               pims_ipc_destroy(ipc_data->ipc);
+       pims_ipc_h ipc = _ctsvc_get_ipc_handle();
+       if (NULL == ipc) {
+               CTS_ERR("_ctsvc_get_ipc_handle() return NULL");
+               return false;
+       }
 
-       free(ipc_data);
+       ret = pims_ipc_is_call_in_progress(ipc);
+       if (ret)
+               CTS_ERR("global ipc channel is busy.");
+
+       return ret;
 }
 
-static int _ctsvc_ipc_server_connect(pims_ipc_h *p_ipc)
+static int _ctsvc_ipc_create(pims_ipc_h *p_ipc)
 {
-       int ret;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
        pims_ipc_h ipc = pims_ipc_create(CTSVC_IPC_SOCKET_PATH);
        if (NULL == ipc) {
                if (errno == EACCES) {
-                       CTS_ERR("pims_ipc_create() Failed(%d)", CONTACTS_ERROR_PERMISSION_DENIED);
+                       CTS_ERR("pims_ipc_create() Fail(%d)", CONTACTS_ERROR_PERMISSION_DENIED);
                        return CONTACTS_ERROR_PERMISSION_DENIED;
                }
                else {
-                       CTS_ERR("pims_ipc_create() Failed(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
+                       CTS_ERR("pims_ipc_create() Fail(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
                        return CONTACTS_ERROR_IPC_NOT_AVALIABLE;
                }
        }
-       ret = __ctsvc_ipc_get_cookie_for_access_control(&indata);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_ipc_get_cookie_for_access_control fail (%d)", ret);
-               goto DATA_FREE;
-       }
 
-       // ipc call
-       if (pims_ipc_call(ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0) {
-               CTS_ERR("pims_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               ret = CONTACTS_ERROR_IPC;
-               goto DATA_FREE;
-       }
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
-
-               pims_ipc_data_destroy(outdata);
-
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_server_connect return(%d)", ret);
-                       goto DATA_FREE;
-               }
-       }
        *p_ipc = ipc;
        return CONTACTS_ERROR_NONE;
-DATA_FREE:
-       pims_ipc_destroy(ipc);
-       return ret;
 }
 
-static struct ctsvc_ipc_s* _ctsvc_get_ipc_data()
+static void _ctsvc_ipc_data_free(gpointer p)
 {
-       struct ctsvc_ipc_s *ipc_data = NULL;
-       char ipc_key[CTS_STR_SHORT_LEN] = {0};
-       RETVM_IF(NULL == _ctsvc_ipc_table, NULL, "contacts not connected");
-
-       _ctsvc_ipc_get_tid_str(ipc_key, sizeof(ipc_key));
-       ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
-       if (ipc_data) {
-               return ipc_data;
-       }
+       struct ctsvc_ipc_s *ipc_data = p;
+       if (NULL == ipc_data)
+               return;
 
-       _ctsvc_ipc_get_pid_str(ipc_key, sizeof(ipc_key));
-       ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
-       if (ipc_data) {
-               return ipc_data;
+       if (ipc_data->ipc) {
+               ctsvc_ipc_unset_disconnected_cb(ipc_data->ipc);
+               pims_ipc_destroy(ipc_data->ipc);
        }
 
+       g_list_free(ipc_data->list_handle);
 
-       return NULL;
+       free(ipc_data);
 }
 
-pims_ipc_h ctsvc_get_ipc_handle()
+static int _ctsvc_ipc_connect(contacts_h contact, pims_ipc_h ipc)
 {
-       struct ctsvc_ipc_s *ipc_data = _ctsvc_get_ipc_data();
-       if (ipc_data)
-               return ipc_data->ipc;
+       int ret;
+       pims_ipc_data_h outdata = NULL;
+       pims_ipc_data_h indata = NULL;
 
-       return NULL;
-}
+       /* Access control : put cookie to indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("pims_ipc_data_create() return NULL");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
-bool ctsvc_ipc_is_busy()
-{
-       bool ret = false;
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
 
-       pims_ipc_h ipc = ctsvc_get_ipc_handle();
-       if (NULL == ipc) {
-               CTS_ERR("ctsvc_get_ipc_handle() return NULL");
-               return false;
+       ret = ctsvc_ipc_get_cookie_for_access_control(indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_get_cookie_for_access_control fail (%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
        }
 
-       ret = pims_ipc_is_call_in_progress(ipc);
-       if (ret)
-               CTS_ERR("global ipc channel is busy.");
+       /* ipc call */
+       if (pims_ipc_call(ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0) {
+               CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+       pims_ipc_data_destroy(indata);
 
+       if (outdata) {
+               ctsvc_ipc_unmarshal_int(outdata, &ret);
+               pims_ipc_data_destroy(outdata);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_server_connect return(%d)", ret);
+       }
        return ret;
 }
 
-int ctsvc_ipc_connect(void)
+static void _ctsvc_ipc_disconnected_cb(void *user_data)
+{
+       ctsvc_ipc_set_disconnected(true);
+}
+
+int ctsvc_ipc_connect(contacts_h contact, unsigned int handle_id)
 {
        int ret = CONTACTS_ERROR_NONE;
        struct ctsvc_ipc_s *ipc_data = NULL;
-       char ipc_key[CTS_STR_SHORT_LEN] = {0};
+       char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
 
-       RETV_IF(_ctsvc_ipc_disconnected, CONTACTS_ERROR_IPC_NOT_AVALIABLE);
-
-       _ctsvc_ipc_get_tid_str(ipc_key, sizeof(ipc_key));
+       snprintf(ipc_key, sizeof(ipc_key), "%u", handle_id);
 
        if (NULL == _ctsvc_ipc_table)
                _ctsvc_ipc_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, _ctsvc_ipc_data_free);
        else
                ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
 
-       // ipc create
-       if (ipc_data == NULL) {
+       if (NULL == ipc_data) {
                ipc_data = calloc(1, sizeof(struct ctsvc_ipc_s));
-               ret = _ctsvc_ipc_server_connect(&(ipc_data->ipc));
+               if (NULL == ipc_data)
+               {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+               ret = _ctsvc_ipc_create(&(ipc_data->ipc));
                if (CONTACTS_ERROR_NONE != ret) {
                        _ctsvc_ipc_data_free(ipc_data);
                        return ret;
                }
                g_hash_table_insert(_ctsvc_ipc_table, strdup(ipc_key), ipc_data);
+               ctsvc_ipc_set_disconnected_cb(ipc_data->ipc, _ctsvc_ipc_disconnected_cb, NULL);
        }
-       else
-               CTS_DBG("[GLOBAL_IPC_CHANNEL] contacts already connected");
+       _ctsvc_ipc_connect(contact, ipc_data->ipc);
+       ipc_data->list_handle = g_list_append(ipc_data->list_handle, contact);
 
        return CONTACTS_ERROR_NONE;
 }
 
 
-int ctsvc_ipc_disconnect(void)
+int ctsvc_ipc_disconnect(contacts_h contact, unsigned int handle_id, int connection_count)
 {
        int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h outdata = NULL;
-
-       RETV_IF(_ctsvc_ipc_disconnected, CONTACTS_ERROR_IPC_NOT_AVALIABLE);
-
        struct ctsvc_ipc_s *ipc_data = NULL;
-       char ipc_key[CTS_STR_SHORT_LEN] = {0};
-       _ctsvc_ipc_get_tid_str(ipc_key, sizeof(ipc_key));
+       pims_ipc_data_h outdata = NULL;
+       pims_ipc_data_h indata = NULL;
+       char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
 
        RETVM_IF(NULL == _ctsvc_ipc_table, CONTACTS_ERROR_IPC, "contacts not connected");
+       snprintf(ipc_key, sizeof(ipc_key), "%u", handle_id);
+
        ipc_data = g_hash_table_lookup(_ctsvc_ipc_table, ipc_key);
        RETVM_IF(ipc_data == NULL, CONTACTS_ERROR_IPC, "contacts not connected");
 
-       if (pims_ipc_call(ipc_data->ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, NULL, &outdata) != 0) {
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               pims_ipc_data_destroy(indata);
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               return ret;
+       }
+
+       if (pims_ipc_call(ipc_data->ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, indata, &outdata) != 0) {
+               pims_ipc_data_destroy(indata);
                CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
                return CONTACTS_ERROR_IPC;
        }
+       pims_ipc_data_destroy(indata);
 
        if (outdata) {
                ctsvc_ipc_unmarshal_int(outdata, &ret);
                pims_ipc_data_destroy(outdata);
 
-               if (ret != CONTACTS_ERROR_NONE)
+               if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc didn't destroyed!!!(%d)", ret);
+                       return ret;
+               }
 
-               g_hash_table_remove(_ctsvc_ipc_table, ipc_key);
+               if (1 == connection_count) {
+                       g_hash_table_remove(_ctsvc_ipc_table, ipc_key);
+               }
        }
        else {
                CTS_ERR("pims_ipc_call out data is NULL");
                return CONTACTS_ERROR_IPC;
        }
+
        return ret;
 }
 
@@ -310,52 +313,39 @@ static void __ctsvc_ipc_unlock(void)
 
 int ctsvc_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_data_h *data_out)
 {
-       RETV_IF(_ctsvc_ipc_disconnected, CONTACTS_ERROR_IPC_NOT_AVALIABLE);
-       pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
-
-       __ctsvc_ipc_lock();
-
-       int ret = pims_ipc_call(ipc_handle, module, function, data_in, data_out);
+       pims_ipc_h ipc_handle;
 
-       __ctsvc_ipc_unlock();
-
-       return ret;
-}
+       if (true == ctsvc_ipc_get_disconnected()) {
+               ctsvc_ipc_set_disconnected(false);
+               ctsvc_ipc_recovery();
+               ctsvc_ipc_recover_for_change_subscription();
+       }
 
-int ctsvc_ipc_call_async(char *module, char *function, pims_ipc_h data_in, pims_ipc_call_async_cb callback, void *userdata)
-{
-       RETV_IF(_ctsvc_ipc_disconnected, CONTACTS_ERROR_IPC_NOT_AVALIABLE);
-       pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
+       ipc_handle = _ctsvc_get_ipc_handle();
 
        __ctsvc_ipc_lock();
-
-       int ret = pims_ipc_call_async(ipc_handle, module, function, data_in, callback, userdata);
-
+       int ret = pims_ipc_call(ipc_handle, module, function, data_in, data_out);
        __ctsvc_ipc_unlock();
 
        return ret;
 }
 
-void ctsvc_client_ipc_set_change_version(int version)
+void ctsvc_client_ipc_set_change_version(contacts_h contact, int version)
 {
-       struct ctsvc_ipc_s *ipc_data = _ctsvc_get_ipc_data();
-       RETM_IF(NULL == ipc_data, "_ctsvc_get_ipc_data() return NULL");
-
-       ipc_data->change_version = version;
-       CTS_DBG("change_version = %d", version);
+       RETM_IF(NULL == contact, "contact is NULL");
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       base->version = version;
 }
 
-int ctsvc_client_ipc_get_change_version(void)
+int ctsvc_client_ipc_get_change_version(contacts_h contact)
 {
-       struct ctsvc_ipc_s *ipc_data = _ctsvc_get_ipc_data();
-       RETVM_IF(NULL == ipc_data, 0, "_ctsvc_get_ipc_data() return NULL");
-       return ipc_data->change_version;
+       RETVM_IF(NULL == contact, -1, "contact is NULL");
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       return base->version;
 }
 
 int ctsvc_ipc_client_check_permission(int permission, bool *result)
 {
-       RETV_IF(_ctsvc_ipc_disconnected, CONTACTS_ERROR_IPC_NOT_AVALIABLE);
-
        pims_ipc_data_h indata = NULL;
        pims_ipc_data_h outdata = NULL;
        int ret;
@@ -385,12 +375,18 @@ int ctsvc_ipc_client_check_permission(int permission, bool *result)
        pims_ipc_data_destroy(indata);
 
        if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata,&size);
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
 
-               if (ret == CONTACTS_ERROR_NONE) {
-                       if (result)
-                               *result = *(bool*) pims_ipc_data_get(outdata, &size);
+               if (CONTACTS_ERROR_NONE == ret && result) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_bool(outdata, result)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_bool() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
                }
                pims_ipc_data_destroy(outdata);
        }
@@ -398,39 +394,51 @@ int ctsvc_ipc_client_check_permission(int permission, bool *result)
        return ret;
 }
 
-static int disconnected_cb_count = 0;
-
-int ctsvc_ipc_set_disconnected_cb(void (*cb)(void *), void *user_data)
+int ctsvc_ipc_set_disconnected_cb(pims_ipc_h ipc, void (*cb)(void *), void *user_data)
 {
-       if (0 == disconnected_cb_count++)
-               return pims_ipc_set_server_disconnected_cb(cb, user_data);
-       return CONTACTS_ERROR_NONE;
+       return pims_ipc_add_server_disconnected_cb(ipc, cb, user_data);
 }
 
-int ctsvc_ipc_unset_disconnected_cb()
+int ctsvc_ipc_unset_disconnected_cb(pims_ipc_h ipc)
 {
-       if (1 == disconnected_cb_count--)
-               return pims_ipc_unset_server_disconnected_cb();
-       return CONTACTS_ERROR_NONE;
+       return pims_ipc_remove_server_disconnected_cb(ipc);
 }
 
 void ctsvc_ipc_set_disconnected(bool is_disconnected)
 {
+       pthread_mutex_lock(&_ctsvc_mutex_disconnected);
        _ctsvc_ipc_disconnected = is_disconnected;
+       pthread_mutex_unlock(&_ctsvc_mutex_disconnected);
+}
+
+int ctsvc_ipc_get_disconnected()
+{
+       pthread_mutex_lock(&_ctsvc_mutex_disconnected);
+       CTS_DBG("_ctsvc_ipc_disconnected=%d", _ctsvc_ipc_disconnected);
+       pthread_mutex_unlock(&_ctsvc_mutex_disconnected);
+       return _ctsvc_ipc_disconnected;
 }
 
 static void _ctsvc_ipc_recovery_foreach_cb(gpointer key, gpointer value, gpointer user_data)
 {
+       GList *c;
        struct ctsvc_ipc_s *ipc_data = value;
-       int ret = _ctsvc_ipc_server_connect(&(ipc_data->ipc));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "_ctsvc_ipc_server_connect() Fail(%d)", ret);
+
+       ctsvc_ipc_unset_disconnected_cb(ipc_data->ipc);
+       int ret = _ctsvc_ipc_create(&(ipc_data->ipc));
+       RETM_IF(CONTACTS_ERROR_NONE != ret, "_ctsvc_ipc_create() Fail(%d)", ret);
+       ctsvc_ipc_set_disconnected_cb(ipc_data->ipc, _ctsvc_ipc_disconnected_cb, NULL);
+
+       for (c=ipc_data->list_handle;c;c=c->next) {
+               contacts_h contact = c->data;
+               ret = _ctsvc_ipc_connect(contact, ipc_data->ipc);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "_ctsvc_ipc_connect() Fail(%d)", ret);
+       }
 }
 
 void ctsvc_ipc_recovery()
 {
-       if (false == _ctsvc_ipc_disconnected)
-               return;
-
+       CTS_FN_CALL;
        g_hash_table_foreach(_ctsvc_ipc_table, _ctsvc_ipc_recovery_foreach_cb, NULL);
 }
 
index 7243858..3c0c300 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_CLIENT_IPC_H__
-#define __TIZEN_SOCIAL_CTSVC_CLIENT_IPC_H__
+#ifndef __CTSVC_CLIENT_IPC_H__
+#define __CTSVC_CLIENT_IPC_H__
 
 #include <pims-ipc.h>
+#include "contacts_types.h"
 
-pims_ipc_h ctsvc_get_ipc_handle();
+int ctsvc_ipc_get_cookie_for_access_control(pims_ipc_data_h indata);
 
-int ctsvc_ipc_connect(void);
-int ctsvc_ipc_disconnect(void);
+int ctsvc_ipc_connect(contacts_h contact, unsigned int handle_id);
+int ctsvc_ipc_disconnect(contacts_h contact, unsigned int handle_id, int connection_count);
+
+int ctsvc_ipc_connect_on_thread(contacts_h contact);
+int ctsvc_ipc_disconnect_on_thread(contacts_h contact, int connection_count);
 
-void ctsvc_ipc_set_disconnected(bool is_disconnected);
-void ctsvc_ipc_recovery();
 
 bool ctsvc_ipc_is_busy();
 
 pims_ipc_h ctsvc_ipc_get_handle_for_change_subsciption();
 
 int ctsvc_ipc_create_for_change_subscription();
-int ctsvc_ipc_destroy_for_change_subscription();
+int ctsvc_ipc_destroy_for_change_subscription(bool is_disconnect);
 int ctsvc_ipc_recover_for_change_subscription();
 
 int ctsvc_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_data_h *data_out);
-int ctsvc_ipc_call_async(char *module, char *function, pims_ipc_h data_in, pims_ipc_call_async_cb callback, void *userdata);
 
-void ctsvc_client_ipc_set_change_version(int version);
-int ctsvc_client_ipc_get_change_version(void);
+void ctsvc_client_ipc_set_change_version(contacts_h contact, int version);
+int ctsvc_client_ipc_get_change_version(contacts_h contact);
 
 int ctsvc_ipc_client_check_permission(int permission, bool *result);
 
-int ctsvc_ipc_set_disconnected_cb(void (*cb)(void *), void *user_data);
-int ctsvc_ipc_unset_disconnected_cb();
+int ctsvc_ipc_set_disconnected_cb(pims_ipc_h ipc, void (*cb)(void *), void *user_data);
+int ctsvc_ipc_unset_disconnected_cb(pims_ipc_h ipc);
+void ctsvc_ipc_set_disconnected(bool is_disconnected);
+int ctsvc_ipc_get_disconnected();
+void ctsvc_ipc_recovery();
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_CLIENT_IPC_H__ */
+#endif /* __CTSVC_CLIENT_IPC_H__ */
 
index 43720ae..d296947 100644 (file)
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_ipc_define.h"
+#include "ctsvc_ipc_marshal.h"
 #include "ctsvc_mutex.h"
 #include "ctsvc_client_ipc.h"
+#include "ctsvc_client_setting.h"
+#include "contacts_extension.h"
 
 typedef struct
 {
@@ -45,15 +48,18 @@ static GSList *__db_change_subscribe_list = NULL;
 
 static void __ctsvc_db_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
 {
-       unsigned int size = 0;
+       int ret;
        char *str = NULL;
        subscribe_info_s *info = user_data;
 
-       if (data)
-               str = (char*)pims_ipc_data_get(data, &size);
+       if (data) {
+               ret = ctsvc_ipc_unmarshal_string(data, &str);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_ipc_unmarshal_string() Fail(%d)", ret);
+       }
 
-       if (!str) {
+       if (NULL == str) {
                CTS_ERR("There is no changed data");
+               free(str);
                return;
        }
 
@@ -66,15 +72,37 @@ static void __ctsvc_db_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data,
                        }
                }
        }
+       free(str);
+}
+
+int __ctsvc_db_recover_for_change_subscription()
+{
+       GSList *it = NULL;
+       subscribe_info_s *info = NULL;
+
+       for (it=__db_change_subscribe_list;it;it=it->next) {
+               if (NULL == it->data) continue;
+
+               info = it->data;
+               if (info->view_uri) {
+                       if (pims_ipc_subscribe(__ipc, CTSVC_IPC_SUBSCRIBE_MODULE, info->view_uri,
+                                               __ctsvc_db_subscriber_callback, (void*)info) != 0) {
+                               CTS_ERR("pims_ipc_subscribe() Fail");
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+       }
+
+       return CONTACTS_ERROR_NONE;
 }
 
-// This API should be called in CTS_MUTEX_PIMS_IPC_PUBSUB mutex
+
+/* This API should be called in CTS_MUTEX_PIMS_IPC_PUBSUB mutex */
 pims_ipc_h ctsvc_ipc_get_handle_for_change_subsciption()
 {
        return __ipc;
 }
 
-
 int ctsvc_ipc_create_for_change_subscription()
 {
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
@@ -85,10 +113,10 @@ int ctsvc_ipc_create_for_change_subscription()
                return CONTACTS_ERROR_NONE;
        }
 
-       if (!__ipc) {
+       if (NULL == __ipc) {
                __ipc = pims_ipc_create_for_subscribe(CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION);
-               if (!__ipc) {
-                       CTS_ERR("pims_ipc_create_for_subscribe error\n");
+               if (NULL == __ipc) {
+                       CTS_ERR("pims_ipc_create_for_subscribe() Fail");
                        ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_IPC;
                }
@@ -100,22 +128,49 @@ int ctsvc_ipc_create_for_change_subscription()
 
 int ctsvc_ipc_recover_for_change_subscription()
 {
+       int ret;
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
-       if (__ipc_pubsub_ref <= 0)
+       if (__ipc_pubsub_ref <= 0) {
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                return CONTACTS_ERROR_NONE;
+       }
+
+       pims_ipc_destroy_for_subscribe(__ipc);
        __ipc = pims_ipc_create_for_subscribe(CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION);
-       if (!__ipc) {
-               CTS_ERR("pims_ipc_create_for_subscribe error\n");
+       if (NULL == __ipc) {
+               CTS_ERR("pims_ipc_create_for_subscribe() Fail");
                ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                return CONTACTS_ERROR_IPC;
        }
+       ret = ctsvc_setting_recover_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_setting_recover_for_change_subscription() Fail(%d)", ret);
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return ret;
+       }
+       ret = __ctsvc_db_recover_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("__ctsvc_db_recover_changed_cb_with_info() Fail(%d)", ret);
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return ret;
+       }
+
        ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_ipc_destroy_for_change_subscription()
+int ctsvc_ipc_destroy_for_change_subscription(bool is_disconnect)
 {
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+       if (is_disconnect) {
+               if (0 < __ipc_pubsub_ref) {
+                       pims_ipc_destroy_for_subscribe(__ipc);
+                       __ipc = NULL;
+                       __ipc_pubsub_ref = 0;
+               }
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_NONE;
+       }
 
        if (1 == __ipc_pubsub_ref) {
                pims_ipc_destroy_for_subscribe(__ipc);
@@ -148,14 +203,14 @@ API int contacts_db_add_changed_cb_with_info(const char* view_uri,
        RETVM_IF(view_uri == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "view_uri is NULL");
        RETVM_IF(cb == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "cb is NULL");
 
-       if (strncmp(view_uri, CTSVC_VIEW_URI_PHONELOG, strlen(CTSVC_VIEW_URI_PHONELOG)) == 0) {
+       if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PHONELOG, strlen(CTSVC_VIEW_URI_PHONELOG))) {
                ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission() Fail(%d)", ret);
                RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (phonelog read)");
        }
-       else if (strncmp(view_uri, CTSVC_VIEW_URI_PERSON, strlen(CTSVC_VIEW_URI_PERSON)) == 0) {
+       else if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PERSON, strlen(CTSVC_VIEW_URI_PERSON))) {
                ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_ipc_client_check_permission() Fail(%d)", ret);
                RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (contact read)");
        }
        else {
@@ -163,19 +218,25 @@ API int contacts_db_add_changed_cb_with_info(const char* view_uri,
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
+       ret = ctsvc_ipc_create_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_create_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
        for (it=__db_change_subscribe_list;it;it=it->next) {
-               if (!it->data) continue;
+               if (NULL == it->data) continue;
 
                info = it->data;
-               if (strcmp(info->view_uri, view_uri) == 0)
+               if (STRING_EQUAL == strcmp(info->view_uri, view_uri))
                        break;
                else
                        info = NULL;
        }
 
-       if (!info) {
+       if (NULL == info) {
                info = calloc(1, sizeof(subscribe_info_s));
                if (NULL == info) {
                        CTS_ERR("calloc() Failed");
@@ -185,7 +246,7 @@ API int contacts_db_add_changed_cb_with_info(const char* view_uri,
 
                if (pims_ipc_subscribe(__ipc, CTSVC_IPC_SUBSCRIBE_MODULE, (char*)view_uri,
                                        __ctsvc_db_subscriber_callback, (void*)info) != 0) {
-                       CTS_ERR("pims_ipc_subscribe error\n");
+                       CTS_ERR("pims_ipc_subscribe() Fail");
                        free(info);
                        ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_IPC;
@@ -206,6 +267,11 @@ API int contacts_db_add_changed_cb_with_info(const char* view_uri,
        }
 
        cb_info = calloc(1, sizeof(db_callback_info_s));
+       if (NULL == cb_info) {
+               CTS_ERR("calloc() Fail");
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        cb_info->user_data = user_data;
        cb_info->cb = cb;
        info->callbacks = g_slist_append(info->callbacks, cb_info);
@@ -217,25 +283,32 @@ API int contacts_db_add_changed_cb_with_info(const char* view_uri,
 API int contacts_db_remove_changed_cb_with_info(const char* view_uri,
                contacts_db_change_cb_with_info cb, void* user_data)
 {
+       int ret;
        GSList *it = NULL;
        subscribe_info_s *info = NULL;
 
        RETVM_IF(view_uri == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "view_uri is NULL");
        RETVM_IF(cb == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "cb is NULL");
 
-       if (strcmp(view_uri, CTSVC_VIEW_URI_PHONELOG) != 0 &&
-                       strcmp(view_uri, CTSVC_VIEW_URI_PERSON) != 0) {
+       if (STRING_EQUAL != strcmp(view_uri, CTSVC_VIEW_URI_PHONELOG) &&
+                       STRING_EQUAL != strcmp(view_uri, CTSVC_VIEW_URI_PERSON)) {
                CTS_ERR("We support this API for only %s and %s", CTSVC_VIEW_URI_PERSON, CTSVC_VIEW_URI_PHONELOG);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
+       ret = ctsvc_ipc_destroy_for_change_subscription(false);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_destroy_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
        for (it=__db_change_subscribe_list;it;it=it->next) {
-               if (!it->data) continue;
+               if (NULL == it->data) continue;
 
                info = it->data;
-               if (strcmp(info->view_uri, view_uri) == 0)
+               if (STRING_EQUAL == strcmp(info->view_uri, view_uri))
                        break;
                else
                        info = NULL;
@@ -243,7 +316,7 @@ API int contacts_db_remove_changed_cb_with_info(const char* view_uri,
 
        if (info) {
                GSList *l;
-               for(l = info->callbacks;l;l=l->next) {
+               for (l = info->callbacks;l;l=l->next) {
                        db_callback_info_s *cb_info = l->data;
                        if (cb == cb_info->cb && user_data == cb_info->user_data) {
                                info->callbacks = g_slist_remove(info->callbacks, cb_info);
index d235a61..4227eeb 100644 (file)
  *
  */
 
-#include <glib.h>
-#include <pims-ipc-data.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_ipc_define.h"
-#include "ctsvc_client_ipc.h"
-#include "ctsvc_ipc_marshal.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_person_helper.h"
 
 API int contacts_person_link_person(int base_person_id, int person_id)
 {
+       int ret;
+       contacts_h contact = NULL;
 
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(base_person_id <= 0 || person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-
-       bool success = false;
-       do {
-               if( ctsvc_ipc_marshal_int( base_person_id, indata) != CONTACTS_ERROR_NONE ) break;
-               if( ctsvc_ipc_marshal_int( person_id, indata) != CONTACTS_ERROR_NONE ) break;
-
-               success = true;
-       } while(0);
-
-       if( success == false ) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-/*
-       ret = ctsvc_ipc_marshal_int( base_person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               return ret;
-       }
-*/
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_LINK_PERSON, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_link_person(contact, base_person_id, person_id);
 
        return ret;
 }
 
 API int contacts_person_unlink_contact(int person_id, int contact_id, int* unlinked_person_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       RETVM_IF(person_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       if (unlinked_person_id)
-               *unlinked_person_id = 0;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( contact_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-
-                       if (unlinked_person_id)
-                               *unlinked_person_id = *(int*)pims_ipc_data_get(outdata,&size);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_unlink_contact(contact, person_id, contact_id, unlinked_person_id);
 
        return ret;
+
 }
 
 API int contacts_person_reset_usage(int person_id, contacts_usage_type_e type)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"contact_id should be greater than 0");
+       int ret;
+       contacts_h contact = NULL;
 
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       ret = ctsvc_ipc_marshal_int( person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( (int)type, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_RESET_USAGE, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_reset_usage(contact, person_id, type);
 
        return ret;
 }
 
 API int contacts_person_set_favorite_order(int person_id, int previous_person_id, int next_person_id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(person_id <= 0 || previous_person_id < 0 || next_person_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( previous_person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( next_person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_FAVORITE_ORDER, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
+       int ret;
+       contacts_h contact = NULL;
 
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_set_favorite_order(contact, person_id, previous_person_id, next_person_id);
 
        return ret;
-
 }
 
 API int contacts_person_set_default_property(contacts_person_property_e property,
                int person_id, int id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(person_id <= 0 || id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_unsigned_int( property, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-       ret = ctsvc_ipc_marshal_int( id, indata);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_DEFAULT_PROPERTY, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_set_default_property(contact, property, person_id, id);
 
        return ret;
 }
@@ -369,55 +92,13 @@ API int contacts_person_set_default_property(contacts_person_property_e property
 API int contacts_person_get_default_property(contacts_person_property_e property,
                int person_id, int *id)
 {
-       int ret = CONTACTS_ERROR_NONE;
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       RETVM_IF(person_id <= 0 || id == NULL, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
-       *id = 0;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int(person_id, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_unsigned_int(property, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("marshal fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_GET_DEFAULT_PROPERTY,
-                               indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       if (outdata) {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-               if (ret == CONTACTS_ERROR_NONE) {
-                       if (id)
-                               *id = *(int*)pims_ipc_data_get(outdata,&size);
-               }
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_person_get_default_property(contact, property, person_id, id);
 
        return ret;
 }
diff --git a/client/ctsvc_client_person_helper.c b/client/ctsvc_client_person_helper.c
new file mode 100644 (file)
index 0000000..a78450f
--- /dev/null
@@ -0,0 +1,485 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <pims-ipc-data.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_client_ipc.h"
+#include "ctsvc_ipc_marshal.h"
+
+static const char CONTACTS_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.read";
+static const char CONTACTS_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.write";
+static const char PHONELOG_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.read";
+static const char PHONELOG_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.write";
+
+int ctsvc_client_person_link_person(contacts_h contact, int base_person_id, int person_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(base_person_id <= 0 || person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       bool success = false;
+       do {
+               if (ctsvc_ipc_marshal_int(base_person_id, indata) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_int(person_id, indata) != CONTACTS_ERROR_NONE) break;
+
+               success = true;
+       } while (0);
+
+       if (success == false) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+/*
+       ret = ctsvc_ipc_marshal_int(base_person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               return ret;
+       }
+*/
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_LINK_PERSON, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_person_unlink_contact(contacts_h contact, int person_id, int contact_id, int* unlinked_person_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(person_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       if (unlinked_person_id)
+               *unlinked_person_id = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(contact_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+
+                       if (unlinked_person_id) {
+                               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, unlinked_person_id)) {
+                                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                                       pims_ipc_data_destroy(outdata);
+                                       return CONTACTS_ERROR_IPC;
+                               }
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_person_reset_usage(contacts_h contact, int person_id, contacts_usage_type_e type)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"contact_id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int((int)type, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_RESET_USAGE, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_person_set_favorite_order(contacts_h contact, int person_id, int previous_person_id, int next_person_id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(person_id <= 0 || previous_person_id < 0 || next_person_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(previous_person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(next_person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_FAVORITE_ORDER, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+
+}
+
+int ctsvc_client_person_set_default_property(contacts_h contact, contacts_person_property_e property,
+               int person_id, int id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(person_id <= 0 || id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_unsigned_int(property, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+       ret = ctsvc_ipc_marshal_int(id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_DEFAULT_PROPERTY, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
+int ctsvc_client_person_get_default_property(contacts_h contact, contacts_person_property_e property,
+               int person_id, int *id)
+{
+       int ret = CONTACTS_ERROR_NONE;
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+       RETVM_IF(person_id <= 0 || id == NULL, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+       *id = 0;
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_handle Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(person_id, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_unsigned_int(property, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("marshal fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_GET_DEFAULT_PROPERTY,
+                               indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (ret == CONTACTS_ERROR_NONE && id) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, id)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+               }
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
diff --git a/client/ctsvc_client_person_helper.h b/client/ctsvc_client_person_helper.h
new file mode 100644 (file)
index 0000000..5af9d32
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_PERSON_HELPER_H__
+#define __CTSVC_CLIENT_PERSON_HELPER_H__
+
+#include "contacts_types.h"
+
+int ctsvc_client_person_link_person(contacts_h contact, int base_person_id, int person_id);
+int ctsvc_client_person_unlink_contact(contacts_h contact, int person_id, int contact_id, int* unlinked_person_id);
+int ctsvc_client_person_reset_usage(contacts_h contact, int person_id, contacts_usage_type_e type);
+int ctsvc_client_person_set_favorite_order(contacts_h contact, int person_id, int previous_person_id, int next_person_id);
+int ctsvc_client_person_set_default_property(contacts_h contact, contacts_person_property_e property, int person_id, int id);
+int ctsvc_client_person_get_default_property(contacts_h contact, contacts_person_property_e property, int person_id, int *id);
+
+#endif /* __CTSVC_CLIENT_PERSON_HELPER_H__ */
\ No newline at end of file
index 3d64dd3..b809b50 100644 (file)
  *
  */
 
-#include <glib.h>
-#include <pims-ipc-data.h>
-
 #include "contacts.h"
-#include "contacts_phone_log_internal.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_ipc_define.h"
-#include "ctsvc_client_ipc.h"
-#include "ctsvc_ipc_marshal.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_phonelog_helper.h"
 
 API int contacts_phone_log_reset_statistics(void)
 {
-#ifndef ENABLE_LOG_FEATURE
-       return CONTACTS_ERROR_NOT_SUPPORTED;
-#endif // ENABLE_LOG_FEATURE
-
-       int ret = CONTACTS_ERROR_NONE;
-
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-
-       // make indata
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL)
-       {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               return ret;
-       }
-
-       // ipc call
-       if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, indata, &outdata) != 0)
-       {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_destroy(indata);
+       ret = ctsvc_client_handle_get_p(&contact);
+       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+               ret = CONTACTS_ERROR_IPC;
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
-       if (outdata)
-       {
-               // check result
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       ret = ctsvc_client_phone_log_reset_statistics(contact);
+       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+               ret = CONTACTS_ERROR_IPC;
 
        return ret;
-
 }
 
 API int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...)
 {
-#ifndef ENABLE_LOG_FEATURE
-       return CONTACTS_ERROR_NOT_SUPPORTED;
-#endif // ENABLE_LOG_FEATURE
-
-       int ret = CONTACTS_ERROR_NONE;
+       int ret;
+       contacts_h contact = NULL;
 
-       pims_ipc_data_h indata = NULL;
-       pims_ipc_data_h outdata = NULL;
-       char *number = NULL;
-       int extra_data1;
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
 
        va_list args;
-
-       indata = pims_ipc_data_create(0);
-       if (indata == NULL) {
-               CTS_ERR("ipc data created fail!");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       ret = ctsvc_ipc_marshal_int( op, indata);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_ipc_marshal_int fail");
-               pims_ipc_data_destroy(indata);
-               return ret;
-       }
-
-       switch(op) {
-       case CONTACTS_PHONE_LOG_DELETE_BY_ADDRESS:
-               va_start(args, op);
-               number = va_arg(args, char *);
-               va_end(args);
-               if (NULL == number) {
-                       pims_ipc_data_destroy(indata);
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
-               ret = ctsvc_ipc_marshal_string(number, indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_marshal_string fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-               break;
-       case CONTACTS_PHONE_LOG_DELETE_BY_MESSAGE_EXTRA_DATA1:
-       case CONTACTS_PHONE_LOG_DELETE_BY_EMAIL_EXTRA_DATA1:
-               va_start(args, op);
-               extra_data1 = va_arg(args, int);
-               va_end(args);
-               ret = ctsvc_ipc_marshal_int(extra_data1, indata);
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_marshal_int fail");
-                       pims_ipc_data_destroy(indata);
-                       return ret;
-               }
-               break;
-       default:
-               CTS_ERR("Invalid parameter : operation is not proper (%d)", ret);
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-
-       if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE,
-                       CTSVC_IPC_SERVER_PHONELOG_DELETE, indata, &outdata) != 0) {
-               CTS_ERR("ctsvc_ipc_call failed");
-               pims_ipc_data_destroy(indata);
-               return CONTACTS_ERROR_IPC;
-       }
-
-       pims_ipc_data_destroy(indata);
-
-       if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
-
-               if (CONTACTS_ERROR_NONE == ret) {
-                       int transaction_ver = 0;
-                       transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
-                       ctsvc_client_ipc_set_change_version(transaction_ver);
-               }
-
-               pims_ipc_data_destroy(outdata);
-       }
+       va_start(args, op);
+       ret = ctsvc_client_phone_log_delete(contact, op, args);
+       va_end(args);
 
        return ret;
 }
diff --git a/client/ctsvc_client_phonelog_helper.c b/client/ctsvc_client_phonelog_helper.c
new file mode 100644 (file)
index 0000000..5f94a97
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <pims-ipc-data.h>
+
+#include "contacts.h"
+#include "contacts_phone_log_internal.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_client_ipc.h"
+#include "ctsvc_ipc_marshal.h"
+
+
+static const char CONTACTS_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.read";
+static const char CONTACTS_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.write";
+static const char PHONELOG_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.read";
+static const char PHONELOG_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.write";
+
+int ctsvc_client_phone_log_reset_statistics(contacts_h contact)
+{
+#ifndef ENABLE_LOG_FEATURE
+       return CONTACTS_ERROR_NOT_SUPPORTED;
+#endif /* ENABLE_LOG_FEATURE */
+
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+
+}
+
+int ctsvc_client_phone_log_delete(contacts_h contact, contacts_phone_log_delete_e op, va_list args)
+{
+#ifndef ENABLE_LOG_FEATURE
+       return CONTACTS_ERROR_NOT_SUPPORTED;
+#endif /* ENABLE_LOG_FEATURE */
+
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+       char *number = NULL;
+       int extra_data1;
+
+       RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER, "contact is NULL");
+
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               CTS_ERR("ipc data created fail!");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(op, indata);
+       if (ret != CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_ipc_marshal_int fail");
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       switch(op) {
+       case CONTACTS_PHONE_LOG_DELETE_BY_ADDRESS:
+               number = va_arg(args, char *);
+               if (NULL == number) {
+                       pims_ipc_data_destroy(indata);
+                       return CONTACTS_ERROR_INVALID_PARAMETER;
+               }
+               ret = ctsvc_ipc_marshal_string(number, indata);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_marshal_string fail");
+                       pims_ipc_data_destroy(indata);
+                       return ret;
+               }
+               break;
+       case CONTACTS_PHONE_LOG_DELETE_BY_MESSAGE_EXTRA_DATA1:
+       case CONTACTS_PHONE_LOG_DELETE_BY_EMAIL_EXTRA_DATA1:
+               extra_data1 = va_arg(args, int);
+               ret = ctsvc_ipc_marshal_int(extra_data1, indata);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_marshal_int fail");
+                       pims_ipc_data_destroy(indata);
+                       return ret;
+               }
+               break;
+       default:
+               CTS_ERR("Invalid parameter : operation is not proper (%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE,
+                       CTSVC_IPC_SERVER_PHONELOG_DELETE, indata, &outdata) != 0) {
+               CTS_ERR("ctsvc_ipc_call failed");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
similarity index 57%
rename from native/ctsvc_person.h
rename to client/ctsvc_client_phonelog_helper.h
index 677b98d..fae103a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Contacts Service
  *
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2015 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.
  * limitations under the License.
  *
  */
+#ifndef __CTSVC_CLIENT_PHONELOG_HELPER_H__
+#define __CTSVC_CLIENT_PHONELOG_HELPER_H__
 
-#ifndef __TIZEN_SOCIAL_CTSVC_PERSON_H__
-#define __TIZEN_SOCIAL_CTSVC_PERSON_H__
+#include "contacts_types.h"
+#include "contacts_phone_log_internal.h"
 
-#include "ctsvc_sqlite.h"
+int ctsvc_client_phone_log_reset_statistics(contacts_h contact);
+int ctsvc_client_phone_log_delete(contacts_h contact, contacts_phone_log_delete_e op, va_list args);
 
-int ctsvc_person_do_garbage_collection(void);
-int ctsvc_person_aggregate(int person_id);
-void ctsvc_db_person_delete_callback(sqlite3_context * context, int argc, sqlite3_value ** argv);
 
-#endif // __TIZEN_SOCIAL_CTSVC_PERSON_H__
+#endif /* __CTSVC_CLIENT_PHONELOG_HELPER_H__ */
\ No newline at end of file
index 9487937..89900ea 100644 (file)
  * limitations under the License.
  *
  */
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <pims-ipc-data.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_socket.h"
-#include "ctsvc_mutex.h"
-#include "ctsvc_inotify.h"
 #include "ctsvc_client_ipc.h"
-
-static int _ctsvc_connection = 0;
-
-static __thread int _ctsvc_connection_on_thread = 0;
-
-int ctsvc_client_get_thread_connection_count()
-{
-       return _ctsvc_connection_on_thread;
-}
+#include "ctsvc_client_utils.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_service_helper.h"
 
 API int contacts_connect_with_flags(unsigned int flags)
 {
        CTS_FN_CALL;
-       int ret = CONTACTS_ERROR_NONE;
-
-       // If new flag is defined, errer check should be updated
-       RETVM_IF(flags & 0x11111110, CONTACTS_ERROR_INVALID_PARAMETER, "flags is invalid");
-
-       ret = contacts_connect();
-       if (ret == CONTACTS_ERROR_PERMISSION_DENIED)
-               return ret;
-       else if (ret == CONTACTS_ERROR_NONE)
-               return ret;
-
-       if (flags & CONTACTS_CONNECT_FLAG_RETRY) {
-               int i;
-               int waiting_time = 500;
-               for (i=0;i<9;i++) {
-                       usleep(waiting_time * 1000);
-                       CTS_DBG("retry cnt=%d, ret=%x, %d",(i+1), ret, waiting_time);
-                       ret = contacts_connect();
-                       if (ret == CONTACTS_ERROR_NONE)
-                               break;
-                       if (6 < i)
-                               waiting_time += 30000;
-                       else
-                               waiting_time *= 2;
+       int ret;
+       contacts_h contact = NULL;
+       unsigned int id = ctsvc_client_get_pid();
+
+       ret = ctsvc_client_handle_get_p_with_id(id, &contact);
+       if (CONTACTS_ERROR_NO_DATA == ret) {
+               ret = ctsvc_client_handle_create(id, &contact);
+               if (CONTACTS_ERROR_NONE != ret)
+               {
+                       CTS_ERR("ctsvc_client_handle_create() Fail(%d)", ret);
+                       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+                               return CONTACTS_ERROR_INTERNAL;
+                       return ret;
                }
        }
+       else if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_client_handle_get_p_with_id() Fail(%d)", ret);
+               return ret;
+       }
 
-       return ret;
-}
+       ret = ctsvc_client_connect_with_flags(contact, flags);
+       if ((CONTACTS_ERROR_IPC_NOT_AVALIABLE == ret)
+                       || (CONTACTS_ERROR_PERMISSION_DENIED == ret))
+               return CONTACTS_ERROR_IPC;
 
-static void _ctsvc_ipc_disconnected_cb(void *user_data)
-{
-       ctsvc_ipc_set_disconnected(true);
-}
-
-static void _ctsvc_ipc_initialized_cb(void *user_data)
-{
-       ctsvc_ipc_recovery();
-       ctsvc_ipc_recover_for_change_subscription();
-       ctsvc_ipc_set_disconnected(false);
+       return ret;
 }
 
-
 API int contacts_connect(void)
 {
        CTS_FN_CALL;
        int ret;
-
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-       if (0 == _ctsvc_connection) {
-               ret = ctsvc_ipc_connect();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_connect() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-
-               ret = ctsvc_socket_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_socket_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       contacts_h contact = NULL;
+       unsigned int id = ctsvc_client_get_pid();
+
+       ret = ctsvc_client_handle_get_p_with_id(id, &contact);
+       if (CONTACTS_ERROR_NO_DATA == ret) {
+               ret = ctsvc_client_handle_create(id, &contact);
+               if (CONTACTS_ERROR_NONE != ret)
+               {
+                       CTS_ERR("ctsvc_client_handle_create() Fail(%d)", ret);
+                       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+                               return CONTACTS_ERROR_INTERNAL;
                        return ret;
                }
-
-               ret = ctsvc_inotify_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_inotify_init() Failed(%d)", ret);
-                       ctsvc_socket_final();
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-               ctsvc_inotify_subscribe_ipc_ready(_ctsvc_ipc_initialized_cb, NULL);
-
-               ctsvc_view_uri_init();
-               ctsvc_ipc_create_for_change_subscription();
-               ctsvc_ipc_set_disconnected_cb(_ctsvc_ipc_disconnected_cb, NULL);
        }
-       else
-               CTS_DBG("System : Contacts service has been already connected(%d)", _ctsvc_connection + 1);
-
-       _ctsvc_connection++;
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       else if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_client_handle_get_p_with_id() Fail(%d)", ret);
+               return ret;
+       }
+       ret = ctsvc_client_connect(contact);
+       if ((CONTACTS_ERROR_IPC_NOT_AVALIABLE == ret)
+                       || (CONTACTS_ERROR_PERMISSION_DENIED == ret))
+               return CONTACTS_ERROR_IPC;
 
-       return CONTACTS_ERROR_NONE;
+       return ret;
 }
 
 API int contacts_disconnect(void)
 {
-       int ret;
-
        CTS_FN_CALL;
+       int ret;
+       contacts_h contact = NULL;
+       unsigned int id = ctsvc_client_get_pid();
 
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-       if (1 == _ctsvc_connection) {
-               ctsvc_ipc_destroy_for_change_subscription();
-
-               ret = ctsvc_ipc_disconnect();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       CTS_ERR("ctsvc_ipc_disconnect() Failed(%d)", ret);
-                       return ret;
-               }
-
-               ctsvc_view_uri_deinit();
-               ctsvc_inotify_unsubscribe_ipc_ready();
-               ctsvc_inotify_close();
-               ctsvc_socket_final();
-               ctsvc_ipc_unset_disconnected_cb();
-       }
-       else if (1 < _ctsvc_connection)
-               CTS_DBG("System : connection count is %d", _ctsvc_connection);
-       else {
-               CTS_DBG("System : please call contacts_connect(), connection count is (%d)", _ctsvc_connection);
-               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
+       ret = ctsvc_client_handle_get_p_with_id(id, &contact);
+       RETV_IF(CONTACTS_ERROR_NO_DATA == ret, CONTACTS_ERROR_NONE);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p_with_id() Fail(%d)", ret);
 
-       _ctsvc_connection--;
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       ret = ctsvc_client_disconnect(contact);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_disconnect() Fail(%d)", ret);
+       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+               ret = CONTACTS_ERROR_IPC;
 
-       return CONTACTS_ERROR_NONE;
+       return ret;
 }
 
 API int contacts_connect_on_thread(void)
 {
+       CTS_FN_CALL;
        int ret;
-
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-
-       if (0 == _ctsvc_connection_on_thread) {
-               ret = ctsvc_ipc_connect();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_connect() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       contacts_h contact = NULL;
+       unsigned int id = ctsvc_client_get_tid();
+
+       ret = ctsvc_client_handle_get_p_with_id(id, &contact);
+       if (CONTACTS_ERROR_NO_DATA == ret) {
+               ret = ctsvc_client_handle_create(id, &contact);
+               if (CONTACTS_ERROR_NONE != ret)
+               {
+                       CTS_ERR("ctsvc_client_handle_create() Fail(%d)", ret);
+                       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+                               return CONTACTS_ERROR_INTERNAL;
                        return ret;
                }
-
-               ret = ctsvc_socket_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_socket_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-
-               ret = ctsvc_inotify_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_inotify_init() Failed(%d)", ret);
-                       ctsvc_socket_final();
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-               ctsvc_inotify_subscribe_ipc_ready(_ctsvc_ipc_initialized_cb, NULL);
-
-               ctsvc_view_uri_init();
-               ctsvc_ipc_create_for_change_subscription();
-               ctsvc_ipc_set_disconnected_cb(_ctsvc_ipc_disconnected_cb, NULL);
        }
-       else if (0 < _ctsvc_connection_on_thread)
-               CTS_DBG("System : Contacts service has been already connected");
-
-       _ctsvc_connection_on_thread++;
+       else if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_client_handle_get_p_with_id() Fail(%d)", ret);
+               return ret;
+       }
 
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       ret = ctsvc_client_connect_on_thread(contact);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_connect_on_thread() Fail(%d)", ret);
+       if ((CONTACTS_ERROR_IPC_NOT_AVALIABLE == ret)
+                       || (CONTACTS_ERROR_PERMISSION_DENIED == ret))
+               return CONTACTS_ERROR_IPC;
 
-       return CONTACTS_ERROR_NONE;
+       return ret;
 }
 
 API int contacts_disconnect_on_thread(void)
 {
+       CTS_FN_CALL;
        int ret;
+       contacts_h contact = NULL;
+       unsigned int id = ctsvc_client_get_tid();
 
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+       ret = ctsvc_client_handle_get_p_with_id(id, &contact);
+       RETV_IF(CONTACTS_ERROR_NO_DATA == ret, CONTACTS_ERROR_NONE);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p_with_id() Fail(%d)", ret);
 
-       if (1 == _ctsvc_connection_on_thread) {
-               ctsvc_ipc_destroy_for_change_subscription();
+       ret = ctsvc_client_disconnect_on_thread(contact);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_disconnect_on_thread() Fail(%d)", ret);
+       if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
+               ret = CONTACTS_ERROR_IPC;
 
-               ret = ctsvc_ipc_disconnect();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_disconnect() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-
-               ctsvc_view_uri_deinit();
-               ctsvc_inotify_unsubscribe_ipc_ready();
-               ctsvc_inotify_close();
-               ctsvc_socket_final();
-               ctsvc_ipc_unset_disconnected_cb();
-               CTS_DBG("System : connection_on_thread was destroyed successfully");
-       }
-       else if (1 < _ctsvc_connection_on_thread) {
-               CTS_DBG("System : connection count is %d", _ctsvc_connection_on_thread);
-       }
-       else {
-               CTS_DBG("System : please call contacts_connect_on_thread(), connection count is (%d)", _ctsvc_connection_on_thread);
-               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-
-       _ctsvc_connection_on_thread--;
-
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-
-       return CONTACTS_ERROR_NONE;
+       return ret;
 }
 
diff --git a/client/ctsvc_client_service_helper.c b/client/ctsvc_client_service_helper.c
new file mode 100644 (file)
index 0000000..e51d8e0
--- /dev/null
@@ -0,0 +1,278 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_socket.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_inotify.h"
+#include "ctsvc_client_ipc.h"
+#include "ctsvc_client_utils.h"
+#include "ctsvc_client_handle.h"
+#include "ctsvc_client_service_helper.h"
+
+static int _ctsvc_connection = 0;
+static __thread int _ctsvc_connection_on_thread = 0;
+
+int ctsvc_client_get_thread_connection_count()
+{
+       return _ctsvc_connection_on_thread;
+}
+
+int ctsvc_client_connect_with_flags(contacts_h contact, unsigned int flags)
+{
+       CTS_FN_CALL;
+       int ret = CONTACTS_ERROR_NONE;
+
+       /* If new flag is defined, errer check should be updated */
+       RETVM_IF(flags & 0x11111110, CONTACTS_ERROR_INVALID_PARAMETER, "flags is invalid");
+
+       ret = ctsvc_client_connect(contact);
+       if (ret == CONTACTS_ERROR_PERMISSION_DENIED)
+               return ret;
+       else if (ret == CONTACTS_ERROR_NONE)
+               return ret;
+
+       if (flags & CONTACTS_CONNECT_FLAG_RETRY) {
+               int i;
+               int waiting_time = 500;
+               for (i=0;i<9;i++) {
+                       usleep(waiting_time * 1000);
+                       CTS_DBG("retry cnt=%d, ret=%x, %d",(i+1), ret, waiting_time);
+                       ret = ctsvc_client_connect(contact);
+                       if (ret == CONTACTS_ERROR_NONE)
+                               break;
+                       if (6 < i)
+                               waiting_time += 30000;
+                       else
+                               waiting_time *= 2;
+               }
+       }
+
+       return ret;
+}
+
+static void _ctsvc_ipc_initialized_cb(void *user_data)
+{
+       CTS_FN_CALL;
+       if (true == ctsvc_ipc_get_disconnected()) {
+               ctsvc_ipc_set_disconnected(false);
+               ctsvc_ipc_recovery();
+               ctsvc_ipc_recover_for_change_subscription();
+       }
+}
+
+int ctsvc_client_connect(contacts_h contact)
+{
+       CTS_FN_CALL;
+       int ret;
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+       if (0 == base->connection_count) {
+               ret = ctsvc_ipc_connect(contact, ctsvc_client_get_pid());
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_connect() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+       }
+       base->connection_count++;
+
+       if (0 == _ctsvc_connection) {
+               ret = ctsvc_socket_init();
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_socket_init() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+
+               ret = ctsvc_inotify_init();
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_inotify_init() Fail(%d)", ret);
+                       ctsvc_socket_final();
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+               ctsvc_view_uri_init();
+       }
+       else
+               CTS_DBG("System : Contacts service has been already connected(%d)", _ctsvc_connection + 1);
+
+       if (1 == base->connection_count)
+               ctsvc_inotify_subscribe_ipc_ready(contact, _ctsvc_ipc_initialized_cb, NULL);
+
+       _ctsvc_connection++;
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_disconnect(contacts_h contact)
+{
+       CTS_FN_CALL;
+       int ret;
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+
+       if (1 == base->connection_count) {
+               ret = ctsvc_ipc_disconnect(contact, ctsvc_client_get_pid(), _ctsvc_connection);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       CTS_ERR("ctsvc_ipc_disconnect() Fail(%d)", ret);
+                       return ret;
+               }
+               ctsvc_inotify_unsubscribe_ipc_ready(contact);
+       }
+       base->connection_count--;
+
+       if (1 == _ctsvc_connection) {
+               ctsvc_ipc_destroy_for_change_subscription(true);
+               ctsvc_view_uri_deinit();
+               ctsvc_inotify_close();
+               ctsvc_socket_final();
+
+       }
+       else if (1 < _ctsvc_connection)
+               CTS_DBG("System : connection count is %d", _ctsvc_connection);
+       else {
+               CTS_DBG("System : please call contacts_connect(), connection count is (%d)", _ctsvc_connection);
+               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+               return CONTACTS_ERROR_DB;
+       }
+
+       _ctsvc_connection--;
+
+       if (0 == base->connection_count) {
+               CTS_INFO("connection_count is 0. remove handle");
+               ret = ctsvc_client_handle_remove(ctsvc_client_get_pid(), contact);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_handle_remove() Fail(%d)", ret);
+       }
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_connect_on_thread(contacts_h contact)
+{
+       int ret;
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+
+       if (0 == base->connection_count) {
+               ret = ctsvc_ipc_connect(contact, ctsvc_client_get_tid());
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_connect() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+       }
+       base->connection_count++;
+
+       if (0 == _ctsvc_connection_on_thread) {
+               ret = ctsvc_socket_init();
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_socket_init() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+
+               ret = ctsvc_inotify_init();
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_inotify_init() Fail(%d)", ret);
+                       ctsvc_socket_final();
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+               ctsvc_view_uri_init();
+       }
+       else if (0 < _ctsvc_connection_on_thread)
+               CTS_DBG("System : Contacts service has been already connected");
+
+       if (1 == base->connection_count)
+               ctsvc_inotify_subscribe_ipc_ready(contact, _ctsvc_ipc_initialized_cb, NULL);
+
+       _ctsvc_connection_on_thread++;
+
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_client_disconnect_on_thread(contacts_h contact)
+{
+       int ret;
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+
+       if (1 == base->connection_count) {
+               ret = ctsvc_ipc_disconnect(contact, ctsvc_client_get_tid(), _ctsvc_connection_on_thread);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_disconnect() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+               ctsvc_inotify_unsubscribe_ipc_ready(contact);
+       }
+       base->connection_count--;
+
+       if (1 == _ctsvc_connection_on_thread) {
+               if (0 == _ctsvc_connection)
+                       ctsvc_ipc_destroy_for_change_subscription(true);
+               ctsvc_view_uri_deinit();
+               ctsvc_inotify_close();
+               ctsvc_socket_final();
+               CTS_DBG("System : connection_on_thread was destroyed successfully");
+       }
+       else if (1 < _ctsvc_connection_on_thread) {
+               CTS_DBG("System : connection count is %d", _ctsvc_connection_on_thread);
+       }
+       else {
+               CTS_DBG("System : please call contacts_connect_on_thread(), connection count is (%d)", _ctsvc_connection_on_thread);
+               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+               return CONTACTS_ERROR_DB;
+       }
+
+       _ctsvc_connection_on_thread--;
+
+       if (0 == base->connection_count) {
+               CTS_INFO("connection_count is 0. remove handle");
+               ret = ctsvc_client_handle_remove(ctsvc_client_get_tid(), contact);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_handle_remove() Fail(%d)", ret);
+       }
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
similarity index 64%
rename from common/ctsvc_vcard.h
rename to client/ctsvc_client_service_helper.h
index d06e400..d0d0bf2 100644 (file)
@@ -1,27 +1,34 @@
-/*\r
- * Contacts Service\r
- *\r
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Contact: Dohyung Jin <dh.jin@samsung.com>\r
- *                 Jongwon Lee <gogosing.lee@samsung.com>\r
- *                 Donghee Ye <donghee.ye@samsung.com>\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __TIZEN_SOCIAL_CTSVC_VCARD_H__\r
-#define __TIZEN_SOCIAL_CTSVC_VCARD_H__\r
-\r
-#endif /*  __TIZEN_SOCIAL_CTSVC_VCARD_H__ */\r
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_SERVICE_HELPER_H__
+#define __CTSVC_CLIENT_SERVICE_HELPER_H__
+
+int ctsvc_client_connect_with_flags(contacts_h contact, unsigned int flags);
+int ctsvc_client_connect(contacts_h contact);
+int ctsvc_client_disconnect(contacts_h contact);
+int ctsvc_client_connect_on_thread(contacts_h contact);
+int ctsvc_client_disconnect_on_thread(contacts_h contact);
+int ctsvc_client_get_thread_connection_count();
+
+#endif /* __CTSVC_CLIENT_SERVICE_HELPER_H__ */
\ No newline at end of file
index e524538..3dcf5ac 100755 (executable)
 #include "ctsvc_client_ipc.h"
 #include "ctsvc_mutex.h"
 
+typedef struct
+{
+       contacts_setting_name_display_order_changed_cb cb;
+       void *user_data;
+}ctsvc_name_display_order_changed_cb_info_s;
+
+typedef struct
+{
+       contacts_setting_name_sorting_order_changed_cb cb;
+       void *user_data;
+}ctsvc_name_sorting_order_changed_cb_info_s;
+
+static GSList *__setting_name_display_order_subscribe_list = NULL;
+static GSList *__setting_name_sorting_order_subscribe_list = NULL;
+
+static const char CONTACTS_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.read";
+static const char CONTACTS_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/contact.write";
+static const char PHONELOG_READ_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.read";
+static const char PHONELOG_WRITE_PRIVILEGE_ID[] =  "http://tizen.org/privilege/callhistory.write";
+
+
 API int contacts_setting_get_name_display_order(contacts_name_display_order_e *name_display_order)
 {
        int ret = CONTACTS_ERROR_NONE;
@@ -42,9 +63,18 @@ API int contacts_setting_get_name_display_order(contacts_name_display_order_e *n
        }
 
        if (outdata) {
-               ctsvc_ipc_unmarshal_int(outdata, &ret);
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
                if (CONTACTS_ERROR_NONE == ret) {
-                       ctsvc_ipc_unmarshal_int(outdata, (int *)name_display_order);
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, (int *)name_display_order)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
                }
                pims_ipc_data_destroy(outdata);
        }
@@ -66,9 +96,17 @@ API int contacts_setting_get_name_sorting_order(contacts_name_sorting_order_e *n
        }
 
        if (outdata) {
-               ctsvc_ipc_unmarshal_int(outdata, &ret);
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
                if (CONTACTS_ERROR_NONE == ret) {
-                       ctsvc_ipc_unmarshal_int(outdata, (int *)name_sorting_order);
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, (int *)name_sorting_order)) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
                }
                pims_ipc_data_destroy(outdata);
        }
@@ -108,8 +146,11 @@ API int contacts_setting_set_name_display_order(contacts_name_display_order_e na
        pims_ipc_data_destroy(indata);
 
        if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
                pims_ipc_data_destroy(outdata);
        }
 
@@ -148,28 +189,26 @@ API int contacts_setting_set_name_sorting_order(contacts_name_sorting_order_e na
        pims_ipc_data_destroy(indata);
 
        if (outdata) {
-               unsigned int size = 0;
-               ret = *(int*) pims_ipc_data_get(outdata, &size);
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
                pims_ipc_data_destroy(outdata);
        }
 
        return ret;
 }
 
-typedef struct
-{
-       contacts_setting_name_display_order_changed_cb cb;
-       void *user_data;
-}ctsvc_name_display_order_changed_cb_info_s;
-
-static GSList *__setting_name_display_order_subscribe_list = NULL;
-
 static void __ctsvc_setting_name_display_order_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
 {
+       int ret;
        int value = -1;
-       if (data)
-               ctsvc_ipc_unmarshal_int(data, &value);
 
+       if (data) {
+               ret = ctsvc_ipc_unmarshal_int(data, &value);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+       }
        if (__setting_name_display_order_subscribe_list) {
                GSList *l;
                for (l = __setting_name_display_order_subscribe_list;l;l=l->next) {
@@ -180,6 +219,59 @@ static void __ctsvc_setting_name_display_order_subscriber_callback(pims_ipc_h ip
        }
 }
 
+static void __ctsvc_setting_name_sorting_order_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
+{
+       int ret;
+       int value = -1;
+
+       if (data) {
+               ret = ctsvc_ipc_unmarshal_int(data, &value);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "() Fail(%d)", ret);
+       }
+
+       if (__setting_name_sorting_order_subscribe_list) {
+               GSList *l;
+               for (l = __setting_name_sorting_order_subscribe_list;l;l=l->next) {
+                       ctsvc_name_sorting_order_changed_cb_info_s *cb_info = l->data;
+                       if (cb_info->cb)
+                               cb_info->cb((contacts_name_sorting_order_e)value, cb_info->user_data);
+               }
+       }
+}
+
+int ctsvc_setting_recover_for_change_subscription()
+{
+       GSList *it;
+
+       for (it = __setting_name_display_order_subscribe_list; it; it=it->next) {
+               ctsvc_name_display_order_changed_cb_info_s *cb_info = it->data;
+               if (cb_info->cb) {
+                       if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
+                                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_SETTING_DISPLAY_ORDER_CHANGED,
+                                               __ctsvc_setting_name_display_order_subscriber_callback, NULL) != 0) {
+                               CTS_ERR("pims_ipc_subscribe() Fail");
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       break;
+               }
+       }
+
+       for (it = __setting_name_sorting_order_subscribe_list; it; it=it->next) {
+               ctsvc_name_sorting_order_changed_cb_info_s *cb_info = it->data;
+               if (cb_info->cb) {
+                       if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
+                                               CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_SETTING_SORTING_ORDER_CHANGED,
+                                               __ctsvc_setting_name_sorting_order_subscriber_callback, NULL) != 0) {
+                               CTS_ERR("pims_ipc_subscribe() Fail");
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       break;
+               }
+       }
+
+       return CONTACTS_ERROR_NONE;
+}
+
 API int contacts_setting_add_name_display_order_changed_cb(
        contacts_setting_name_display_order_changed_cb cb, void* user_data)
 {
@@ -194,13 +286,19 @@ API int contacts_setting_add_name_display_order_changed_cb(
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
        RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (contact read)");
 
+       ret = ctsvc_ipc_create_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_create_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
-       if (!__setting_name_display_order_subscribe_list) {
+       if (NULL == __setting_name_display_order_subscribe_list) {
                if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
                                        CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_SETTING_DISPLAY_ORDER_CHANGED,
                                        __ctsvc_setting_name_display_order_subscriber_callback, NULL) != 0) {
-                       CTS_ERR("pims_ipc_subscribe error\n");
+                       CTS_ERR("pims_ipc_subscribe() Fail");
                        ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_IPC;
                }
@@ -209,12 +307,18 @@ API int contacts_setting_add_name_display_order_changed_cb(
        for (l = __setting_name_display_order_subscribe_list;l;l=l->next) {
                ctsvc_name_display_order_changed_cb_info_s *cb_info = l->data;
                if (cb_info->cb == cb && cb_info->user_data == user_data) {
-                       CTS_ERR("The same callback(%s) is already exist");
+                       CTS_ERR("The same callback(%x) is already exist", cb);
+                       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
        cb_info = calloc(1, sizeof(ctsvc_name_display_order_changed_cb_info_s));
+       if (NULL == cb_info) {
+               CTS_ERR("calloc() Failed");
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        cb_info->user_data = user_data;
        cb_info->cb = cb;
        __setting_name_display_order_subscribe_list = g_slist_append(__setting_name_display_order_subscribe_list, cb_info);
@@ -226,13 +330,20 @@ API int contacts_setting_add_name_display_order_changed_cb(
 API int contacts_setting_remove_name_display_order_changed_cb(
        contacts_setting_name_display_order_changed_cb cb, void* user_data)
 {
+       int ret;
        RETVM_IF(cb == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : callback is NULL");
 
+       ret = ctsvc_ipc_destroy_for_change_subscription(false);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_destroy_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
        if (__setting_name_display_order_subscribe_list) {
                GSList *l;
-               for(l = __setting_name_display_order_subscribe_list;l;l=l->next) {
+               for (l = __setting_name_display_order_subscribe_list;l;l=l->next) {
                        ctsvc_name_display_order_changed_cb_info_s *cb_info = l->data;
                        if (cb == cb_info->cb && user_data == cb_info->user_data) {
                                __setting_name_display_order_subscribe_list = g_slist_remove(__setting_name_display_order_subscribe_list, cb_info);
@@ -252,30 +363,6 @@ API int contacts_setting_remove_name_display_order_changed_cb(
        return CONTACTS_ERROR_NONE;
 }
 
-typedef struct
-{
-       contacts_setting_name_sorting_order_changed_cb cb;
-       void *user_data;
-}ctsvc_name_sorting_order_changed_cb_info_s;
-
-static GSList *__setting_name_sorting_order_subscribe_list = NULL;
-
-static void __ctsvc_setting_name_sorting_order_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data)
-{
-       int value = -1;
-       if (data)
-               ctsvc_ipc_unmarshal_int(data, &value);
-
-       if (__setting_name_sorting_order_subscribe_list) {
-               GSList *l;
-               for (l = __setting_name_sorting_order_subscribe_list;l;l=l->next) {
-                       ctsvc_name_sorting_order_changed_cb_info_s *cb_info = l->data;
-                       if (cb_info->cb)
-                               cb_info->cb((contacts_name_sorting_order_e)value, cb_info->user_data);
-               }
-       }
-}
-
 API int contacts_setting_add_name_sorting_order_changed_cb(
        contacts_setting_name_sorting_order_changed_cb cb, void* user_data)
 {
@@ -290,13 +377,19 @@ API int contacts_setting_add_name_sorting_order_changed_cb(
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission fail (%d)", ret);
        RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied (contact read)");
 
+       ret = ctsvc_ipc_create_for_change_subscription();
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_create_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
-       if (!__setting_name_sorting_order_subscribe_list) {
+       if (NULL == __setting_name_sorting_order_subscribe_list) {
                if (pims_ipc_subscribe(ctsvc_ipc_get_handle_for_change_subsciption(),
                                        CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_SETTING_SORTING_ORDER_CHANGED,
                                        __ctsvc_setting_name_sorting_order_subscriber_callback, NULL) != 0) {
-                       CTS_ERR("pims_ipc_subscribe error\n");
+                       CTS_ERR("pims_ipc_subscribe() Fail");
                        ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_IPC;
                }
@@ -305,12 +398,18 @@ API int contacts_setting_add_name_sorting_order_changed_cb(
        for (l = __setting_name_sorting_order_subscribe_list;l;l=l->next) {
                ctsvc_name_sorting_order_changed_cb_info_s *cb_info = l->data;
                if (cb_info->cb == cb && cb_info->user_data == user_data) {
-                       CTS_ERR("The same callback(%s) is already exist");
+                       CTS_ERR("The same callback(%x) is already exist", cb);
+                       ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
        cb_info = calloc(1, sizeof(ctsvc_name_sorting_order_changed_cb_info_s));
+       if (NULL == cb_info) {
+               CTS_ERR("calloc() Failed");
+               ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        cb_info->user_data = user_data;
        cb_info->cb = cb;
        __setting_name_sorting_order_subscribe_list = g_slist_append(__setting_name_sorting_order_subscribe_list, cb_info);
@@ -322,13 +421,20 @@ API int contacts_setting_add_name_sorting_order_changed_cb(
 API int contacts_setting_remove_name_sorting_order_changed_cb(
        contacts_setting_name_sorting_order_changed_cb cb, void* user_data)
 {
+       int ret;
        RETVM_IF(cb == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : callback is NULL");
 
+       ret = ctsvc_ipc_destroy_for_change_subscription(false);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_ipc_destroy_for_change_subscription() Fail(%d)", ret);
+               return ret;
+       }
+
        ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_PUBSUB);
 
        if (__setting_name_sorting_order_subscribe_list) {
                GSList *l;
-               for(l = __setting_name_sorting_order_subscribe_list;l;l=l->next) {
+               for (l = __setting_name_sorting_order_subscribe_list;l;l=l->next) {
                        ctsvc_name_sorting_order_changed_cb_info_s *cb_info = l->data;
                        if (cb == cb_info->cb && user_data == cb_info->user_data) {
                                __setting_name_sorting_order_subscribe_list = g_slist_remove(__setting_name_sorting_order_subscribe_list, cb_info);
diff --git a/client/ctsvc_client_setting.h b/client/ctsvc_client_setting.h
new file mode 100644 (file)
index 0000000..c7d9b4c
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_CLIENT_SETTING_H__
+#define __CTSVC_CLIENT_SETTING_H__
+
+int ctsvc_setting_recover_for_change_subscription();
+
+#endif /* __CTSVC_CLIENT_SETTING_H__ */
diff --git a/client/ctsvc_client_utils.c b/client/ctsvc_client_utils.c
new file mode 100644 (file)
index 0000000..52cfe54
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+
+inline unsigned int ctsvc_client_get_pid()
+{
+       return (unsigned int)getpid();
+}
+
+inline unsigned int ctsvc_client_get_tid()
+{
+       return (unsigned int)syscall(SYS_gettid);
+}
+
similarity index 77%
rename from client/ctsvc_client_service.h
rename to client/ctsvc_client_utils.h
index 4d3e4ef..3c84dc7 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_CLIENT_SERVICE_H__
-#define __TIZEN_SOCIAL_CTSVC_CLIENT_SERVICE_H__
+#ifndef __CTSVC_CLIENT_UTILS_H__
+#define __CTSVC_CLIENT_UTILS_H__
 
-int ctsvc_client_get_thread_connection_count();
+unsigned int ctsvc_client_get_pid();
+unsigned int ctsvc_client_get_tid();
+
+#endif /*  __CTSVC_CLIENT_UTILS_H__ */
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_CLIENT_SERVICE_H__ */
 
diff --git a/common/ctsvc_db_notification.c b/common/ctsvc_db_notification.c
deleted file mode 100644 (file)
index a710943..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <glib.h>
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_inotify.h"
-
-API int contacts_db_add_changed_cb( const char* view_uri, contacts_db_changed_cb cb,
-               void* user_data )
-{
-       int ret;
-
-       RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : view_uri is null");
-       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : callback is null");
-
-       ret = ctsvc_inotify_subscribe(view_uri, cb, user_data);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
-                       "ctsvc_inotify_subscribe(%s) Failed(%d)", view_uri, ret);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_db_remove_changed_cb( const char* view_uri, contacts_db_changed_cb cb,
-               void* user_data )
-{
-       int ret;
-
-       RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : view_uri is null");
-       RETVM_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : callback is null");
-
-       ret = ctsvc_inotify_unsubscribe(view_uri, cb, user_data);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
-                       "ctsvc_inotify_unsubscribe(%s) Failed(%d)", view_uri, ret);
-
-       return CONTACTS_ERROR_NONE;
-}
-
index 17c60da..9a88d6e 100644 (file)
@@ -45,7 +45,7 @@ static inline bool __ctsvc_filters_property_check(const property_info_s *propert
        return false;
 }
 
-API int contacts_filter_create( const char* view_uri, contacts_filter_h* out_filter )
+API int contacts_filter_create(const char* view_uri, contacts_filter_h* out_filter)
 {
        ctsvc_composite_filter_s *com_filter;
 
@@ -63,7 +63,7 @@ API int contacts_filter_create( const char* view_uri, contacts_filter_h* out_fil
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_operator( contacts_filter_h filter, contacts_filter_operator_e op )
+API int contacts_filter_add_operator(contacts_filter_h filter, contacts_filter_operator_e op)
 {
        ctsvc_composite_filter_s *com_filter;
 
@@ -73,7 +73,7 @@ API int contacts_filter_add_operator( contacts_filter_h filter, contacts_filter_
 
        RETVM_IF(g_slist_length(com_filter->filter_ops) != (g_slist_length(com_filter->filters)-1),
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : Please check the operator of filter");
-       com_filter->filter_ops = g_slist_append(com_filter->filter_ops, (void*)op );
+       com_filter->filter_ops = g_slist_append(com_filter->filter_ops, (void*)op);
        return CONTACTS_ERROR_NONE;
 }
 
@@ -90,7 +90,7 @@ API int contacts_filter_add_filter(contacts_filter_h filter1, contacts_filter_h
 
        RETVM_IF(g_slist_length(s_filter1->filter_ops) != (g_slist_length(s_filter1->filters)),
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : Please check the operator of filter");
-       RETVM_IF (0 != strcmp(s_filter1->view_uri, s_filter2->view_uri), CONTACTS_ERROR_INVALID_PARAMETER,
+       RETVM_IF (STRING_EQUAL != strcmp(s_filter1->view_uri, s_filter2->view_uri), CONTACTS_ERROR_INVALID_PARAMETER,
                                "The filter view_uri is different (filter1:%s, filter2:%s)", s_filter1->view_uri, s_filter2->view_uri);
        ret = ctsvc_filter_clone(filter2, &new_filter);
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_filter_clone is failed (%d)", ret);
@@ -139,7 +139,10 @@ static int __ctsvc_attribute_filter_create(ctsvc_composite_filter_s *com_filter,
        }
 
        filter = (ctsvc_attribute_filter_s *)calloc(1, sizeof(ctsvc_attribute_filter_s));
-       RETVM_IF(NULL == filter, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == filter) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        filter->filter_type = filter_type;
        filter->property_id = property_id;
        filter->match = match;
@@ -149,8 +152,8 @@ static int __ctsvc_attribute_filter_create(ctsvc_composite_filter_s *com_filter,
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_str( contacts_filter_h filter, unsigned int property_id,
-               contacts_match_str_flag_e match, const char* match_value )
+API int contacts_filter_add_str(contacts_filter_h filter, unsigned int property_id,
+               contacts_match_str_flag_e match, const char* match_value)
 {
        ctsvc_composite_filter_s *com_filter;
        ctsvc_attribute_filter_s *str_filter;
@@ -168,8 +171,8 @@ API int contacts_filter_add_str( contacts_filter_h filter, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_int( contacts_filter_h filter, unsigned int property_id,
-               contacts_match_int_flag_e match, int match_value )
+API int contacts_filter_add_int(contacts_filter_h filter, unsigned int property_id,
+               contacts_match_int_flag_e match, int match_value)
 {
        ctsvc_composite_filter_s *com_filter;
        ctsvc_attribute_filter_s *int_filter;
@@ -177,7 +180,7 @@ API int contacts_filter_add_int( contacts_filter_h filter, unsigned int property
 
        RETV_IF(NULL == filter, CONTACTS_ERROR_INVALID_PARAMETER);
        RETVM_IF(property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO &&
-                       (match >= CONTACTS_MATCH_GREATER_THAN && match <= CONTACTS_MATCH_LESS_THAN_OR_EQUAL),
+                       (CONTACTS_MATCH_GREATER_THAN <= match && match <= CONTACTS_MATCH_LESS_THAN_OR_EQUAL),
                        CONTACTS_ERROR_INVALID_PARAMETER, "Not support this condition");
 
        com_filter = (ctsvc_composite_filter_s*)filter;
@@ -191,8 +194,8 @@ API int contacts_filter_add_int( contacts_filter_h filter, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_lli( contacts_filter_h filter, unsigned int property_id,
-               contacts_match_int_flag_e match, long long int match_value )
+API int contacts_filter_add_lli(contacts_filter_h filter, unsigned int property_id,
+               contacts_match_int_flag_e match, long long int match_value)
 {
        ctsvc_composite_filter_s *com_filter;
        ctsvc_attribute_filter_s *lli_filter;
@@ -211,8 +214,8 @@ API int contacts_filter_add_lli( contacts_filter_h filter, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_double( contacts_filter_h filter, unsigned int property_id,
-               contacts_match_int_flag_e match, double match_value )
+API int contacts_filter_add_double(contacts_filter_h filter, unsigned int property_id,
+               contacts_match_int_flag_e match, double match_value)
 {
        ctsvc_composite_filter_s *com_filter;
        ctsvc_attribute_filter_s *double_filter;
@@ -231,7 +234,7 @@ API int contacts_filter_add_double( contacts_filter_h filter, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_filter_add_bool( contacts_filter_h filter, unsigned int property_id, bool match_value )
+API int contacts_filter_add_bool(contacts_filter_h filter, unsigned int property_id, bool match_value)
 {
        ctsvc_composite_filter_s *com_filter;
        ctsvc_attribute_filter_s *bool_filter;
@@ -257,7 +260,7 @@ static int __ctsvc_composite_filter_destroy(ctsvc_composite_filter_s *com_filter
 
        RETV_IF(NULL == com_filter, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor=com_filter->filters;cursor;cursor=cursor->next) {
+       for (cursor=com_filter->filters;cursor;cursor=cursor->next) {
                ctsvc_filter_s *sub_filter = (ctsvc_filter_s *)cursor->data;
 
                if (sub_filter->filter_type == CTSVC_FILTER_COMPOSITE)
@@ -279,7 +282,7 @@ static int __ctsvc_composite_filter_destroy(ctsvc_composite_filter_s *com_filter
 }
 
 
-API int contacts_filter_destroy( contacts_filter_h filter )
+API int contacts_filter_destroy(contacts_filter_h filter)
 {
        RETV_IF(NULL == filter, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -290,7 +293,10 @@ static int __ctsvc_attribute_filter_clone(ctsvc_attribute_filter_s *src, ctsvc_a
 {
        ctsvc_attribute_filter_s *out;
        out = (ctsvc_attribute_filter_s *)calloc(1, sizeof(ctsvc_attribute_filter_s));
-       RETVM_IF(NULL == out, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == out) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        out->filter_type = src->filter_type;
        out->property_id = src->property_id;
        out->match = src->match;
@@ -314,15 +320,13 @@ static int __ctsvc_attribute_filter_clone(ctsvc_attribute_filter_s *src, ctsvc_a
 static int __ctsvc_composite_filter_clone(ctsvc_composite_filter_s * filter,
                ctsvc_composite_filter_s **out_filter)
 {
-       int ret;
        GSList *cursor;
        ctsvc_composite_filter_s *out;
 
        RETV_IF(NULL == filter, CONTACTS_ERROR_INVALID_PARAMETER);
-       ret = contacts_filter_create(filter->view_uri, (contacts_filter_h *)&out);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_filter_create() Fail(%d)", ret);
+       contacts_filter_create(filter->view_uri, (contacts_filter_h *)&out);
 
-       for(cursor=filter->filters;cursor;cursor=cursor->next) {
+       for (cursor=filter->filters;cursor;cursor=cursor->next) {
                ctsvc_filter_s *src = (ctsvc_filter_s *)cursor->data;
                ctsvc_filter_s *dest = NULL;
 
index 31b22e4..82a7441 100644 (file)
@@ -1,30 +1,30 @@
-/*\r
- * Contacts Service\r
- *\r
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Contact: Dohyung Jin <dh.jin@samsung.com>\r
- *                 Jongwon Lee <gogosing.lee@samsung.com>\r
- *                 Donghee Ye <donghee.ye@samsung.com>\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __TIZEN_SOCIAL_CTSVC_FILTER_H__\r
-#define __TIZEN_SOCIAL_CTSVC_FILTER_H__\r
-\r
-int ctsvc_filter_clone(contacts_filter_h filter, contacts_filter_h *out_filter);\r
-\r
-#endif /*  __TIZEN_SOCIAL_CTSVC_FILTER_H__ */\r
-\r
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_FILTER_H__
+#define __CTSVC_FILTER_H__
+
+int ctsvc_filter_clone(contacts_filter_h filter, contacts_filter_h *out_filter);
+
+#endif /* __CTSVC_FILTER_H__ */
+
diff --git a/common/ctsvc_handle.c b/common/ctsvc_handle.c
new file mode 100644 (file)
index 0000000..7cdffc5
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "ctsvc_internal.h"
+#include "ctsvc_handle.h"
+
+int ctsvc_handle_create(contacts_h *contact)
+{
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       ctsvc_base_s *base = calloc(1, sizeof(ctsvc_base_s));
+       if (NULL == base)
+       {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+       *contact = (contacts_h)base;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_handle_destroy(contacts_h contact)
+{
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       free(base->zone_name);
+       free(base);
+       base = NULL;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_handle_clone(contacts_h contact, contacts_h *pcontact)
+{
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(NULL == pcontact, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       ctsvc_base_s *clone = calloc(1, sizeof(ctsvc_base_s));
+       if (NULL == clone) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+       clone->zone_name = SAFE_STRDUP(base->zone_name);
+       clone->connection_count = base->connection_count;
+       clone->version = base->version;
+
+       *pcontact = (contacts_h)clone;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_handle_set_zone_name(contacts_h contact, const char *value)
+{
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       FREEandSTRDUP(base->zone_name, value);
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_handle_get_zone_name(contacts_h contact, char **value)
+{
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+       if (base->zone_name && *(base->zone_name))
+               *value = strdup(base->zone_name);
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_handle_compare(contacts_h contact1, contacts_h contact2)
+{
+       if (NULL == contact1 && NULL == contact2)
+               return 0;
+       else if (NULL == contact1)
+               return 1;
+       else if (NULL == contact2)
+               return 1;
+
+       ctsvc_base_s *base1 = (ctsvc_base_s *)contact1;
+       ctsvc_base_s *base2 = (ctsvc_base_s *)contact2;
+
+       return g_strcmp0(base1->zone_name, base2->zone_name);
+}
+
diff --git a/common/ctsvc_handle.h b/common/ctsvc_handle.h
new file mode 100644 (file)
index 0000000..675ba37
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef __CTSVC_HANDLE_H__
+#define __CTSVC_HANDLE_H__
+
+#include "contacts_types.h"
+
+int ctsvc_handle_create(contacts_h *contact);
+int ctsvc_handle_destroy(contacts_h contact);
+int ctsvc_handle_clone(contacts_h contact, contacts_h *pcontact);
+int ctsvc_handle_set_zone_name(contacts_h contact, const char *value);
+int ctsvc_handle_get_zone_name(contacts_h contact, char **value);
+int ctsvc_handle_compare(contacts_h contact1, contacts_h contact2);
+
+
+#endif /* __CTSVC_HANDLE_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 641a6a1..b8bfc4c
@@ -28,6 +28,8 @@
 #include "ctsvc_internal.h"
 #include "ctsvc_notify.h"
 #include "ctsvc_view.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_handle.h"
 
 #include <stdbool.h>
 
@@ -37,6 +39,7 @@
 
 typedef struct
 {
+       contacts_h contact;
        int wd;
        char *view_uri;
        contacts_db_changed_cb cb;
@@ -46,32 +49,17 @@ typedef struct
 
 struct socket_init_noti_info {
        int wd;
+       int subscribe_count;
        void (*cb)(void *);
        void *cb_data;
 };
 
-static struct socket_init_noti_info *_ctsvc_socket_init_noti = NULL;
-static int socket_init_noti_count = 0;
+static GHashTable *_ctsvc_socket_init_noti_table = NULL;
 static int __ctsvc_inoti_ref = 0;
 static int __inoti_fd = -1;
 static guint __inoti_handler = 0;
 static GSList *__noti_list = NULL;
 
-void ctsvc_inotify_call_blocked_callback() {
-       noti_info *noti;
-       GSList *it = NULL;
-
-       for (it = __noti_list;it;it=it->next) {
-               noti = (noti_info *)it->data;
-
-               if (noti->cb && noti->blocked) {
-                       CTS_DBG("%s", noti->view_uri);
-                       noti->blocked = false;
-                       noti->cb(noti->view_uri, noti->cb_data);
-               }
-       }
-}
-
 static inline void __ctsvc_inotify_handle_callback(GSList *noti_list, int wd, uint32_t mask)
 {
        noti_info *noti;
@@ -83,8 +71,8 @@ static inline void __ctsvc_inotify_handle_callback(GSList *noti_list, int wd, ui
                if (noti->wd == wd) {
 
 #ifdef _CONTACTS_IPC_CLIENT
-                       if( ctsvc_ipc_is_busy() ){
-                               // hold the line
+                       if (ctsvc_ipc_is_busy()) {
+                               /* hold the line */
                                noti->blocked = true;
                                continue;
                        }
@@ -97,6 +85,15 @@ static inline void __ctsvc_inotify_handle_callback(GSList *noti_list, int wd, ui
        }
 }
 
+static void _ctsvc_inotify_socket_init_noti_table_foreach_cb(gpointer key, gpointer value, gpointer user_data)
+{
+       struct socket_init_noti_info *noti_info = value;
+
+       int wd = GPOINTER_TO_INT(user_data);
+       if (noti_info->wd == wd)
+               noti_info->cb(noti_info->cb_data);
+}
+
 static gboolean __ctsvc_inotify_gio_cb(GIOChannel *src, GIOCondition cond, gpointer data)
 {
        int fd, ret;
@@ -107,24 +104,23 @@ static gboolean __ctsvc_inotify_gio_cb(GIOChannel *src, GIOCondition cond, gpoin
 
        while (0 < (ret = read(fd, &ie, sizeof(ie)))) {
                if (sizeof(ie) == ret) {
+                       if (_ctsvc_socket_init_noti_table)
+                               g_hash_table_foreach(_ctsvc_socket_init_noti_table, _ctsvc_inotify_socket_init_noti_table_foreach_cb, GINT_TO_POINTER(ie.wd));
 
-                       if (_ctsvc_socket_init_noti && _ctsvc_socket_init_noti->wd == ie.wd) // socket initialized
-                               _ctsvc_socket_init_noti->cb(_ctsvc_socket_init_noti->cb_data);
-
-                       else if (__noti_list)
+                       if (__noti_list)
                                __ctsvc_inotify_handle_callback(__noti_list, ie.wd, ie.mask);
-
-                       while (0 < ie.len) {
+                       while (0 != ie.len) {
                                ret = read(fd, name, (ie.len<sizeof(name))?ie.len:sizeof(name));
                                if (-1 == ret) {
                                        if (EINTR == errno)
                                                continue;
                                        else
-                                               break;
+                                               return TRUE;
                                }
-                               if (ie.len <= ret)
-                                       break;
-                               ie.len -= ret;
+                               if (ie.len < ret)
+                                       ie.len = 0;
+                               else
+                                       ie.len -= ret;
                        }
                }
                else {
@@ -135,7 +131,7 @@ static gboolean __ctsvc_inotify_gio_cb(GIOChannel *src, GIOCondition cond, gpoin
                                        if (EINTR == errno)
                                                continue;
                                        else
-                                               break;
+                                               return TRUE;
                                }
                                ret += read_size;
                        }
@@ -173,12 +169,12 @@ int ctsvc_inotify_init(void)
        }
        __inoti_fd = inotify_init();
        RETVM_IF(-1 == __inoti_fd, CONTACTS_ERROR_SYSTEM,
-                       "System: inotify_init() Failed(%d)", errno);
+                       "System: inotify_init() Fail(%d)", errno);
 
        ret = fcntl(__inoti_fd, F_SETFD, FD_CLOEXEC);
-       WARN_IF(ret < 0, "fcntl failed(%d)", ret);
+       WARN_IF(ret < 0, "fcntl Fail(%d)", ret);
        ret = fcntl(__inoti_fd, F_SETFL, O_NONBLOCK);
-       WARN_IF(ret < 0, "fcntl failed(%d)", ret);
+       WARN_IF(ret < 0, "fcntl Fail(%d)", ret);
 
        __inoti_handler = __ctsvc_inotify_attach_handler(__inoti_fd);
        if (__inoti_handler <= 0) {
@@ -204,7 +200,7 @@ static inline int __ctsvc_inotify_watch(int fd, const char *notipath)
 
        ret = inotify_add_watch(fd, notipath, IN_CLOSE_WRITE);
        RETVM_IF(-1 == ret, CONTACTS_ERROR_SYSTEM,
-                       "System: inotify_add_watch() Failed(%d)", errno);
+                       "System: inotify_add_watch() Fail(%d)", errno);
 
        return CONTACTS_ERROR_NONE;
 }
@@ -266,51 +262,83 @@ static inline const char* __ctsvc_noti_get_file_path(const char *view_uri)
                return CTSVC_NOTI_SDN_CHANGED;
        case CTSVC_RECORD_RESULT:
        default:
-               CTS_ERR("Invalid parameter : The type(%d) is not supported", view_uri);
+               CTS_ERR("Invalid parameter : The type(%s) is not supported", view_uri);
                return NULL;
        }
        return NULL;
 }
 
-int ctsvc_inotify_subscribe_ipc_ready(void (*cb)(void *), void *user_data)
+int ctsvc_inotify_subscribe_ipc_ready(contacts_h contact, void (*cb)(void *), void *user_data)
 {
-       if (0 == socket_init_noti_count) {
-               int wd = __ctsvc_inotify_get_wd(__inoti_fd, CTSVC_NOTI_IPC_READY);
+       char *noti_path = NULL;
+       struct socket_init_noti_info *noti_info = NULL;
+
+       ctsvc_zone_get_canonicalize_path(contact, CTSVC_NOTI_IPC_READY, &noti_path);
+       if (NULL == _ctsvc_socket_init_noti_table)
+               _ctsvc_socket_init_noti_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);
+       else
+               noti_info = g_hash_table_lookup(_ctsvc_socket_init_noti_table, noti_path);
+
+       if (NULL == noti_info) {
+               int wd = __ctsvc_inotify_get_wd(__inoti_fd, noti_path);
                if (-1 == wd) {
-                       CTS_ERR("__ctsvc_inotify_get_wd() Failed(errno : %d)", errno);
+                       CTS_ERR("__ctsvc_inotify_get_wd() Failed(noti_path=%s, errno : %d)", noti_path, errno);
+                       free(noti_path);
                        if (errno == EACCES)
                                return CONTACTS_ERROR_PERMISSION_DENIED;
                        return CONTACTS_ERROR_SYSTEM;
                }
-               int ret = __ctsvc_inotify_watch(__inoti_fd, CTSVC_NOTI_IPC_READY);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_inotify_watch() Failed");
 
-               _ctsvc_socket_init_noti = calloc(1, sizeof(struct socket_init_noti_info));
-               _ctsvc_socket_init_noti->wd = wd;
-               _ctsvc_socket_init_noti->cb = cb;
-               _ctsvc_socket_init_noti->cb_data = user_data;
-       }
-       socket_init_noti_count++;
+               int ret = __ctsvc_inotify_watch(__inoti_fd, noti_path);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("__ctsvc_inotify_watch() Failed");
+                       free(noti_path);
+                       return ret;
+               }
+
+               noti_info = calloc(1, sizeof(struct socket_init_noti_info));
+               if (NULL == noti_info) {
+                       CTS_ERR("calloc() return NULL");
+                       free(noti_path);
+                       return ret;
+               }
 
+               noti_info->wd = wd;
+               noti_info->cb = cb;
+               noti_info->cb_data = user_data;
+               g_hash_table_insert(_ctsvc_socket_init_noti_table, strdup(noti_path), noti_info);
+       }
+       free(noti_path);
+       noti_info->subscribe_count++;
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_inotify_unsubscribe_ipc_ready()
+int ctsvc_inotify_unsubscribe_ipc_ready(contacts_h contact)
 {
-       RETV_IF(socket_init_noti_count <= 0, CONTACTS_ERROR_SYSTEM);
-       if (1 == socket_init_noti_count) {
-               int wd = _ctsvc_socket_init_noti->wd;
-               inotify_rm_watch(__inoti_fd, wd);
+       RETVM_IF(NULL == _ctsvc_socket_init_noti_table, CONTACTS_ERROR_INVALID_PARAMETER, "_ctsvc_socket_init_noti_table is NULL");
 
-               free(_ctsvc_socket_init_noti);
-               _ctsvc_socket_init_noti = NULL;
+       char *noti_path = NULL;
+       struct socket_init_noti_info *noti_info = NULL;
+
+       ctsvc_zone_get_canonicalize_path(contact, CTSVC_NOTI_IPC_READY, &noti_path);
+       noti_info = g_hash_table_lookup(_ctsvc_socket_init_noti_table, noti_path);
+       RETVM_IF(NULL == noti_info, CONTACTS_ERROR_INVALID_PARAMETER, "g_hash_table_lookup() return NULL");
+
+       if (1 == noti_info->subscribe_count) {
+               int wd = noti_info->wd;
+               inotify_rm_watch(__inoti_fd, wd);
+               g_hash_table_remove(_ctsvc_socket_init_noti_table, noti_path); /* free noti_info automatically */
+       }
+       else {
+               noti_info->subscribe_count--;
        }
-       socket_init_noti_count--;
+
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_inotify_subscribe(const char *view_uri,
-                       contacts_db_changed_cb cb, void *data)
+
+int ctsvc_inotify_subscribe(contacts_h contact, const char *view_uri,
+                       void *cb, void *data)
 {
        int ret, wd;
        noti_info *noti, *same_noti = NULL;
@@ -325,8 +353,13 @@ int ctsvc_inotify_subscribe(const char *view_uri,
        RETVM_IF(NULL == path, CONTACTS_ERROR_INVALID_PARAMETER,
                        "__ctsvc_noti_get_file_path(%s) Failed", view_uri);
 
-       wd = __ctsvc_inotify_get_wd(__inoti_fd, path);
+       char *noti_path = NULL;
+       ret = ctsvc_zone_get_canonicalize_path(contact, path, &noti_path);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_zone_get_canonicalize_path() Fail(%d)", ret);
+
+       wd = __ctsvc_inotify_get_wd(__inoti_fd, noti_path);
        if (-1 == wd) {
+               free(noti_path);
                CTS_ERR("__ctsvc_inotify_get_wd() Failed(errno : %d)", errno);
                if (errno == EACCES)
                        return CONTACTS_ERROR_PERMISSION_DENIED;
@@ -337,7 +370,8 @@ int ctsvc_inotify_subscribe(const char *view_uri,
                if (it->data) {
                        same_noti = it->data;
                        if (same_noti->wd == wd && same_noti->cb == cb &&
-                                       strcmp(same_noti->view_uri, view_uri) == 0 && same_noti->cb_data == data)
+                                       STRING_EQUAL == strcmp(same_noti->view_uri, view_uri) && same_noti->cb_data == data &&
+                                       0 == ctsvc_handle_compare(contact, same_noti->contact))
                                break;
                        else
                                same_noti = NULL;
@@ -345,12 +379,14 @@ int ctsvc_inotify_subscribe(const char *view_uri,
        }
 
        if (same_noti) {
-               __ctsvc_inotify_watch(__inoti_fd, path);
+               __ctsvc_inotify_watch(__inoti_fd, noti_path);
+               free(noti_path);
                CTS_ERR("The same callback(%s) is already exist", view_uri);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __ctsvc_inotify_watch(__inoti_fd, path);
+       ret = __ctsvc_inotify_watch(__inoti_fd, noti_path);
+       free(noti_path);
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_inotify_watch() Failed");
 
        noti = calloc(1, sizeof(noti_info));
@@ -360,15 +396,15 @@ int ctsvc_inotify_subscribe(const char *view_uri,
        noti->view_uri = strdup(view_uri);
        noti->cb_data = data;
        noti->cb = cb;
+       ctsvc_handle_clone(contact, &(noti->contact));
        noti->blocked = false;
 
        __noti_list = g_slist_append(__noti_list, noti);
-
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_del_noti(GSList **noti_list, int wd,
-               const char *view_uri, contacts_db_changed_cb cb, void *user_data)
+static inline int __ctsvc_del_noti(GSList **noti_list, contacts_h contact, int wd,
+               const char *view_uri, void *cb, void *user_data)
 {
        int del_cnt, remain_cnt;
        GSList *it, *result;
@@ -381,9 +417,11 @@ static inline int __ctsvc_del_noti(GSList **noti_list, int wd,
                noti_info *noti = it->data;
                if (noti && wd == noti->wd) {
                        if (cb == noti->cb && user_data == noti->cb_data
-                               && 0 == strcmp(noti->view_uri, view_uri)) {
+                                       && STRING_EQUAL == strcmp(noti->view_uri, view_uri)
+                                       && 0 == ctsvc_handle_compare(contact, noti->contact)) {
                                it = it->next;
-                               result = g_slist_remove(result , noti);
+                               result = g_slist_remove(result, noti);
+                               ctsvc_handle_destroy(noti->contact);
                                free(noti->view_uri);
                                free(noti);
                                del_cnt++;
@@ -402,10 +440,11 @@ static inline int __ctsvc_del_noti(GSList **noti_list, int wd,
        return remain_cnt;
 }
 
-int ctsvc_inotify_unsubscribe(const char *view_uri, contacts_db_changed_cb cb, void *user_data)
+int ctsvc_inotify_unsubscribe(contacts_h contact, const char *view_uri, void *cb, void *user_data)
 {
        int ret, wd;
        const char *path;
+       char *noti_path = NULL;
 
        RETV_IF(NULL==cb, CONTACTS_ERROR_INVALID_PARAMETER);
        RETVM_IF(__inoti_fd < 0, CONTACTS_ERROR_SYSTEM,
@@ -415,29 +454,39 @@ int ctsvc_inotify_unsubscribe(const char *view_uri, contacts_db_changed_cb cb, v
        RETVM_IF(NULL == path, CONTACTS_ERROR_INVALID_PARAMETER,
                        "__ctsvc_noti_get_file_path(%s) Failed", view_uri);
 
-       wd = __ctsvc_inotify_get_wd(__inoti_fd, path);
+       ret = ctsvc_zone_get_canonicalize_path(contact, path, &noti_path);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_zone_get_canonicalize_path() Fail(%d)", ret);
+
+       wd = __ctsvc_inotify_get_wd(__inoti_fd, noti_path);
        if (-1 == wd) {
+               free(noti_path);
                CTS_ERR("__ctsvc_inotify_get_wd() Failed(errno : %d)", errno);
                if (errno == EACCES)
                        return CONTACTS_ERROR_PERMISSION_DENIED;
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       ret = __ctsvc_del_noti(&__noti_list, wd, view_uri, cb, user_data);
-       WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_del_noti() Failed(%d)", ret);
+       ret = __ctsvc_del_noti(&__noti_list, contact, wd, view_uri, cb, user_data);
+       WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_del_noti() Fail(%d)", ret);
 
-       if (0 == ret)
+       if (0 == ret) {
+               free(noti_path);
                return inotify_rm_watch(__inoti_fd, wd);
+       }
+
+       ret = __ctsvc_inotify_watch(__inoti_fd, noti_path);
+       free(noti_path);
 
-       return __ctsvc_inotify_watch(__inoti_fd, path);
+       return ret;
 }
 
 static void __clear_nslot_list(gpointer data, gpointer user_data)
 {
        noti_info *noti = (noti_info *)data;
 
+       ctsvc_handle_destroy(noti->contact);
        free(noti->view_uri);
-       free(noti );
+       free(noti);
 }
 
 static inline gboolean __ctsvc_inotify_detach_handler(guint id)
@@ -475,3 +524,4 @@ void ctsvc_inotify_close(void)
                __inoti_fd = -1;
        }
 }
+
old mode 100755 (executable)
new mode 100644 (file)
index 66c0897..8f946a9
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_INOTIFY_H__
-#define __TIZEN_SOCIAL_CTSVC_INOTIFY_H__
+#ifndef __CTSVC_INOTIFY_H__
+#define __CTSVC_INOTIFY_H__
 
 #include "contacts_db.h"
 
 int ctsvc_inotify_init(void);
 void ctsvc_inotify_close(void);
-int ctsvc_inotify_subscribe(const char *view_uri, contacts_db_changed_cb cb, void *data);
-int ctsvc_inotify_unsubscribe(const char *view_uri, contacts_db_changed_cb cb, void *user_data);
-void ctsvc_inotify_call_blocked_callback();
-int ctsvc_inotify_subscribe_ipc_ready(void (*cb)(void *), void *user_data);
-int ctsvc_inotify_unsubscribe_ipc_ready();
+int ctsvc_inotify_subscribe(contacts_h contact, const char *view_uri, contacts_db_changed_cb cb, void *data);
+int ctsvc_inotify_unsubscribe(contacts_h contact, const char *view_uri, contacts_db_changed_cb cb, void *user_data);
 
+int ctsvc_inotify_subscribe_ipc_ready(contacts_h contact, void (*cb)(void *), void *user_data);
+int ctsvc_inotify_unsubscribe_ipc_ready(contacts_h contact);
 
-#endif //__TIZEN_SOCIAL_CTSVC_INOTIFY_H__
+#endif /* __CTSVC_INOTIFY_H__ */
\ No newline at end of file
index bc86fb4..3e61dd6 100644 (file)
@@ -21,8 +21,8 @@
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_INTERNAL_H__
-#define __TIZEN_SOCIAL_CTSVC_INTERNAL_H__
+#ifndef __CTSVC_INTERNAL_H__
+#define __CTSVC_INTERNAL_H__
 
 #include <stdio.h>
 #include <assert.h>
@@ -36,8 +36,8 @@
 #endif
 #define API __attribute__ ((visibility("default")))
 
-//#define CONTACTS_DEBUGGING
-//#define CONTACTS_TIMECHECK
+/*#define CONTACTS_DEBUGGING */
+/*#define CONTACTS_TIMECHECK */
 
 #define LOG_TAG "CONTACTS_SERVICE"
 #include <dlog.h>
@@ -77,7 +77,7 @@
        #define CTS_DBG(fmt, arg...)
        #define CTS_WARN(fmt, arg...)
        #define CTS_ERR(fmt, arg...) ERR(fmt, ##arg)
-       #define CTS_INFO(fmt, arg...)
+       #define CTS_INFO(fmt, arg...) INFO(fmt, ##arg)
        #define CTS_VERBOSE(fmt, arg...)
 
        #define G_DISABLE_ASSERT
 } while (0)
 
 
-// TO DISABLE THIS MACRO, DEFINE "G_DISABLE_ASSERT"
+/* TO DISABLE THIS MACRO, DEFINE "G_DISABLE_ASSERT" */
 #define ASSERT_NOT_REACHED(fmt, arg...) do { \
         CTS_ERR(fmt, ##arg); \
         assert(!"DO NOT REACH HERE!"); \
-       } while(0)
+       } while (0)
 
 
 #define CONTACTS_FREE(ptr) \
- do { \
-  if (ptr) \
-    free(ptr); \
-  ptr = NULL; \
- } while(0)
+       do { \
+               free(ptr); \
+               ptr = NULL; \
+       } while (0)
 
-// Thread-local storage
+/* Thread-local storage */
 #ifdef _CONTACTS_IPC_SERVER
 #define TLS __thread
 #elif _CONTACTS_IPC_CLIENT
 #define TLS __thread
-#else   //_CONTACTS_NATIVE
+#else /* _CONTACTS_NATIVE */
 #define TLS
 #endif
 
-#endif /* __TIZEN_SOCIAL_CTSVC_INTERNAL_H__ */
+#endif /* __CTSVC_INTERNAL_H__ */
 
index 5871b8d..56f2e82 100644 (file)
@@ -28,7 +28,7 @@
 #include "ctsvc_list.h"
 #include "ctsvc_record.h"
 
-API int contacts_list_create( contacts_list_h* out_list )
+API int contacts_list_create(contacts_list_h* out_list)
 {
        ctsvc_list_s *list_s;
 
@@ -43,7 +43,7 @@ API int contacts_list_create( contacts_list_h* out_list )
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_list_get_count( contacts_list_h list, int *count )
+API int contacts_list_get_count(contacts_list_h list, int *count)
 {
        ctsvc_list_s *list_s;
 
@@ -57,7 +57,7 @@ API int contacts_list_get_count( contacts_list_h list, int *count )
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_add_child( contacts_list_h list, contacts_record_h child_record )
+int ctsvc_list_add_child(contacts_list_h list, contacts_record_h child_record)
 {
        ctsvc_list_s *s_list;
        ctsvc_record_s *s_record;
@@ -81,7 +81,7 @@ int ctsvc_list_add_child( contacts_list_h list, contacts_record_h child_record )
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_list_add( contacts_list_h list, contacts_record_h child_record )
+API int contacts_list_add(contacts_list_h list, contacts_record_h child_record)
 {
        ctsvc_list_s *s_list;
        ctsvc_record_s *s_record;
@@ -105,7 +105,7 @@ API int contacts_list_add( contacts_list_h list, contacts_record_h child_record
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_prepend( contacts_list_h list, contacts_record_h child_record )
+int ctsvc_list_prepend(contacts_list_h list, contacts_record_h child_record)
 {
        ctsvc_list_s *s_list;
        ctsvc_record_s *s_record;
@@ -129,7 +129,7 @@ int ctsvc_list_prepend( contacts_list_h list, contacts_record_h child_record )
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_reverse( contacts_list_h list)
+int ctsvc_list_reverse(contacts_list_h list)
 {
        ctsvc_list_s *s_list;
 
@@ -143,7 +143,7 @@ int ctsvc_list_reverse( contacts_list_h list)
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_remove_child( contacts_list_h list, contacts_record_h record, bool insert_delete_list )
+int ctsvc_list_remove_child(contacts_list_h list, contacts_record_h record, bool insert_delete_list)
 {
        GList *cursor = NULL;
        ctsvc_list_s *s_list;
@@ -168,7 +168,7 @@ int ctsvc_list_remove_child( contacts_list_h list, contacts_record_h record, boo
                        s_list->records = g_list_remove(s_list->records, s_record);
                        if (insert_delete_list) {
                                err = contacts_record_clone(record, &delete_record);
-                               RETVM_IF(CONTACTS_ERROR_NONE != err, err,"contacts_record_clone() Failed(%d)", err);
+                               RETVM_IF(CONTACTS_ERROR_NONE != err, err,"contacts_record_clone() Fail(%d)", err);
                                s_list->deleted_records = g_list_append(s_list->deleted_records, delete_record);
                        }
                        return CONTACTS_ERROR_NONE;
@@ -178,7 +178,7 @@ int ctsvc_list_remove_child( contacts_list_h list, contacts_record_h record, boo
        return CONTACTS_ERROR_NO_DATA;
 }
 
-API int contacts_list_remove( contacts_list_h list, contacts_record_h record )
+API int contacts_list_remove(contacts_list_h list, contacts_record_h record)
 {
        GList *cursor = NULL;
        ctsvc_list_s *s_list;
@@ -193,7 +193,7 @@ API int contacts_list_remove( contacts_list_h list, contacts_record_h record )
 
        for (cursor=s_list->records;cursor;cursor=cursor->next) {
                ctsvc_record_s *data = (ctsvc_record_s *)cursor->data;
-               if (data == s_record){
+               if (data == s_record) {
                        s_list->count--;
                        if (s_list->cursor == cursor)
                                s_list->cursor = cursor->next;
@@ -205,7 +205,7 @@ API int contacts_list_remove( contacts_list_h list, contacts_record_h record )
        return CONTACTS_ERROR_NO_DATA;
 }
 
-API int contacts_list_get_current_record_p( contacts_list_h list, contacts_record_h* record )
+API int contacts_list_get_current_record_p(contacts_list_h list, contacts_record_h* record)
 {
        ctsvc_list_s *list_s;
 
@@ -225,7 +225,7 @@ API int contacts_list_get_current_record_p( contacts_list_h list, contacts_recor
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_get_nth_record_p( contacts_list_h list, int index, contacts_record_h* record )
+int ctsvc_list_get_nth_record_p(contacts_list_h list, int index, contacts_record_h* record)
 {
        GList *cursor = NULL;
        ctsvc_list_s *list_s;
@@ -248,7 +248,7 @@ int ctsvc_list_get_nth_record_p( contacts_list_h list, int index, contacts_recor
        return CONTACTS_ERROR_NO_DATA;
 }
 
-static int __ctsvc_list_move_cursor( contacts_list_h list, bool next )
+static int __ctsvc_list_move_cursor(contacts_list_h list, bool next)
 {
        ctsvc_list_s *list_s;
 
@@ -266,19 +266,19 @@ static int __ctsvc_list_move_cursor( contacts_list_h list, bool next )
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_list_prev( contacts_list_h list )
+API int contacts_list_prev(contacts_list_h list)
 {
        return __ctsvc_list_move_cursor(list, false);
 }
 
-API int contacts_list_next( contacts_list_h list )
+API int contacts_list_next(contacts_list_h list)
 {
        return __ctsvc_list_move_cursor(list, true);
 }
 
 
 
-API int contacts_list_first( contacts_list_h list )
+API int contacts_list_first(contacts_list_h list)
 {
        ctsvc_list_s *list_s;
 
@@ -292,7 +292,7 @@ API int contacts_list_first( contacts_list_h list )
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_list_last( contacts_list_h list )
+API int contacts_list_last(contacts_list_h list)
 {
        ctsvc_list_s *list_s;
 
@@ -306,7 +306,7 @@ API int contacts_list_last( contacts_list_h list )
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_list_destroy( contacts_list_h list, bool delete_child )
+API int contacts_list_destroy(contacts_list_h list, bool delete_child)
 {
        ctsvc_list_s *s_list;
        GList *cursor = NULL;
@@ -315,12 +315,12 @@ API int contacts_list_destroy( contacts_list_h list, bool delete_child )
        s_list = (ctsvc_list_s *)list;
 
        if (delete_child) {
-               for(cursor = s_list->records;cursor;cursor=cursor->next)
+               for (cursor = s_list->records;cursor;cursor=cursor->next)
                        contacts_record_destroy((contacts_record_h)(cursor->data), true);
        }
        g_list_free(s_list->records);
 
-       for(cursor = s_list->deleted_records;cursor;cursor=cursor->next)
+       for (cursor = s_list->deleted_records;cursor;cursor=cursor->next)
                contacts_record_destroy((contacts_record_h)(cursor->data), true);
        g_list_free(s_list->deleted_records);
 
@@ -341,10 +341,10 @@ int ctsvc_list_clone(contacts_list_h list, contacts_list_h* out_list)
        list_s = (ctsvc_list_s *)list;
 
        contacts_list_create(&new_list);
-       for(cursor = list_s->records;cursor;cursor=cursor->next) {
+       for (cursor = list_s->records;cursor;cursor=cursor->next) {
                err = contacts_record_clone((contacts_record_h)cursor->data, &new_record);
                if (CONTACTS_ERROR_NONE != err) {
-                       CTS_ERR("contacts_record_clone() Failed(%d)", err);
+                       CTS_ERR("contacts_record_clone() Fail(%d)", err);
                        contacts_list_destroy(new_list, true);
                        return err;
                }
@@ -352,10 +352,10 @@ int ctsvc_list_clone(contacts_list_h list, contacts_list_h* out_list)
        }
        ctsvc_list_reverse(new_list);
 
-       for(cursor = list_s->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list_s->deleted_records;cursor;cursor=cursor->next) {
                err = contacts_record_clone((contacts_record_h)cursor->data, &new_record);
                if (CONTACTS_ERROR_NONE != err) {
-                       CTS_ERR("contacts_record_clone() Failed(%d)", err);
+                       CTS_ERR("contacts_record_clone() Fail(%d)", err);
                        contacts_list_destroy(new_list, true);
                        return err;
                }
@@ -370,7 +370,7 @@ int ctsvc_list_clone(contacts_list_h list, contacts_list_h* out_list)
 }
 
 
-int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count )
+int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count)
 {
        ctsvc_list_s *list_s;
 
@@ -380,8 +380,7 @@ int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count )
        RETV_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER);
        list_s = (ctsvc_list_s *)list;
 
-       if( NULL == list_s->deleted_records )
-       {
+       if (NULL == list_s->deleted_records) {
                return CONTACTS_ERROR_NONE;
        }
 
@@ -390,7 +389,7 @@ int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count )
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_list_get_deleted_nth_record_p( contacts_list_h list, int index, contacts_record_h* record )
+int ctsvc_list_get_deleted_nth_record_p(contacts_list_h list, int index, contacts_record_h* record)
 {
        ctsvc_list_s *list_s;
 
index b13f6bf..f0d72d6 100644 (file)
@@ -1,40 +1,40 @@
-/*\r
- * Contacts Service\r
- *\r
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Contact: Dohyung Jin <dh.jin@samsung.com>\r
- *                 Jongwon Lee <gogosing.lee@samsung.com>\r
- *                 Donghee Ye <donghee.ye@samsung.com>\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __TIZEN_SOCIAL_CTSVC_LIST_H__\r
-#define __TIZEN_SOCIAL_CTSVC_LIST_H__\r
-\r
-#include "contacts_views.h"\r
-\r
-int ctsvc_list_clone(contacts_list_h list, contacts_list_h* out_list);\r
-int ctsvc_list_get_nth_record_p( contacts_list_h list, int index, contacts_record_h* record );\r
-int ctsvc_list_add_child( contacts_list_h list, contacts_record_h child_record );\r
-int ctsvc_list_prepend( contacts_list_h list, contacts_record_h child_record );\r
-int ctsvc_list_reverse( contacts_list_h list);\r
-int ctsvc_list_remove_child( contacts_list_h list, contacts_record_h record, bool insert_delete_list );\r
-\r
-int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count );\r
-int ctsvc_list_get_deleted_nth_record_p( contacts_list_h list, int index, contacts_record_h* record );\r
-int ctsvc_list_append_deleted_record(contacts_list_h list, contacts_record_h record);\r
-\r
-#endif /*  __TIZEN_SOCIAL_CTSVC_LIST_H__ */\r
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_LIST_H__
+#define __CTSVC_LIST_H__
+
+#include "contacts_views.h"
+
+int ctsvc_list_clone(contacts_list_h list, contacts_list_h* out_list);
+int ctsvc_list_get_nth_record_p(contacts_list_h list, int index, contacts_record_h* record);
+int ctsvc_list_add_child(contacts_list_h list, contacts_record_h child_record);
+int ctsvc_list_prepend(contacts_list_h list, contacts_record_h child_record);
+int ctsvc_list_reverse(contacts_list_h list);
+int ctsvc_list_remove_child(contacts_list_h list, contacts_record_h record, bool insert_delete_list);
+
+int ctsvc_list_get_deleted_count(contacts_list_h list, unsigned int *count);
+int ctsvc_list_get_deleted_nth_record_p(contacts_list_h list, int index, contacts_record_h* record);
+int ctsvc_list_append_deleted_record(contacts_list_h list, contacts_record_h record);
+
+#endif /* __CTSVC_LIST_H__ */
old mode 100755 (executable)
new mode 100644 (file)
index 41dd830..0d7bb68
@@ -53,122 +53,124 @@ int ctsvc_check_language(UChar *word)
                type = CTSVC_LANG_NUMBER;
        }
        else if (u_isalpha(word[0])) {
-               // refer to the uchar.h
-               // #define U_GC_L_MASK  (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK|U_GC_LM_MASK|U_GC_LO_MASK)
-               // U_GC_LU_MASK : U_UPPERCASE_LETTER
-               // U_GC_LL_MASK : U_LOWERCASE_LETTER
-               // U_GC_LT_MASK : U_TITLECASE_LETTER
-               // U_GC_LM_MASK : U_MODIFIER_LETTER
-               // U_GC_LO_MASK : U_OTHER_LETTER
+               /*
+                * refer to the uchar.h
+                * #define U_GC_L_MASK  (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK|U_GC_LM_MASK|U_GC_LO_MASK)
+                * U_GC_LU_MASK : U_UPPERCASE_LETTER
+                * U_GC_LL_MASK : U_LOWERCASE_LETTER
+                * U_GC_LT_MASK : U_TITLECASE_LETTER
+                * U_GC_LM_MASK : U_MODIFIER_LETTER
+                * U_GC_LO_MASK : U_OTHER_LETTER
+                */
 
                UBlockCode code = ublock_getCode(word[0]);
                CTS_VERBOSE("Character unicode block is %d", code);
 
-               switch (code){
-               //english
-               case UBLOCK_BASIC_LATIN:                                                        // = 1, /*[0000]*/
-               case UBLOCK_LATIN_1_SUPPLEMENT:                                 // =2, /*[0080]*/
-               case UBLOCK_LATIN_EXTENDED_A:                                           // =3, /*[0100]*/
-               case UBLOCK_LATIN_EXTENDED_B:                                           // =4, /*[0180]*/
-               case UBLOCK_LATIN_EXTENDED_ADDITIONAL:                  // =38, /*[1E00]*/
+               switch (code) {
+               /* english */
+               case UBLOCK_BASIC_LATIN:          /* =1, [0000] */
+               case UBLOCK_LATIN_1_SUPPLEMENT:   /* =2, [0080] */
+               case UBLOCK_LATIN_EXTENDED_A:     /* =3, [0100] */
+               case UBLOCK_LATIN_EXTENDED_B:     /* =4, [0180] */
+               case UBLOCK_LATIN_EXTENDED_ADDITIONAL: /* =38, [1E00] */
                        type = CTSVC_LANG_ENGLISH;
-                       // type = CTSVC_LANG_CATALAN;   // ca, Spain - Catalan
-                       // type = CTSVC_LANG_GERMAN:     // de, Germany - German
-                       // type = CTSVC_LANG_BASQUE:    // eu, Spain - Basque
-                       // type = CTSVC_LANG_DUTCH;             // nl_Nl, Netherlands Dutch
-                       // type = CTSVC_LANG_FRENCH;    // fr_CA, fr_FR
-                       // type = CTSVC_LANG_ITALIAN:   // it_IT, Italy - Italian
-                       // type = CTSVC_LANG_PORTUGUESE:         // pt_BR, pt_PT, Portugal
-                       // type = CTSVC_LANG_SPANISH: // es_ES, es_US, El Salvador - Spanish
-                       // type =  CTSVC_LANG_NORWAY: // nb, Norway
-                       // type = CTSVC_LANG_DANISH: // da, Denmark - Danish
-                       // type = CTSVC_LANG_AZERBAIJAN: // az, Azerbaijan
-                       // type = CTSVC_LANG_ROMANIA: // ro, Romania
-                       // type = CTSVC_LANG_CZECH: // cs, Czech Republic - Czech
-                       // type = CTSVC_LANG_ESTONIAN: // et, Estonia - Estonian
-                       // type = CTSVC_LANG_FINNISH: // fi, Finland - Finnish
-                       // type = CTSVC_LANG_IRISH: // ga, Ireland - Irish
-                       // type = CTSVC_LANG_GALICIAN: // gl, Spain - Galician
-                       // type = CTSVC_LANG_HUNGARIAN: // hu, Hungary - Hungarian
-                       // type = CTSVC_LANG_SWEDISH: // sv, Finland - Swedish
-                       // type = CTSVC_LANG_SLOVENIAN: // sl, Slovenia - Slovenian
-                       // type = CTSVC_LANG_SLOVAK: // sk, Slovakia - Slovak
-                       // type = CTSVC_LANG_LITHUANIAN: // lt, Lithuania - Lithuanian
-                       // type = CTSVC_LANG_POLISH: // pl, Polish
-                       // type = CTSVC_LANG_LATVIAN: // lv, Latvia - Latvian
-                       // type = CTSVC_LANG_CROATIAN: // hr, Bosnia and Herzegovina - Croatian
-                       // type = CTSVC_LANG_ICELANDIC: // is, Iceland - Icelandic
+                       /* type = CTSVC_LANG_CATALAN; */   /* ca, Spain - Catalan */
+                       /* type = CTSVC_LANG_GERMAN; */    /* de, Germany - German */
+                       /* type = CTSVC_LANG_BASQUE; */    /* eu, Spain - Basque */
+                       /* type = CTSVC_LANG_DUTCH; */     /* nl_Nl, Netherlands Dutch */
+                       /* type = CTSVC_LANG_FRENCH; */    /* fr_CA, fr_FR */
+                       /* type = CTSVC_LANG_ITALIAN; */   /* it_IT, Italy - Italian */
+                       /* type = CTSVC_LANG_PORTUGUESE; *//* pt_BR, pt_PT, Portugal */
+                       /* type = CTSVC_LANG_SPANISH; */   /*/ es_ES, es_US, El Salvador - Spanish */
+                       /* type = CTSVC_LANG_NORWAY; */    /* nb, Norway */
+                       /* type = CTSVC_LANG_DANISH; */    /* da, Denmark - Danish */
+                       /* type = CTSVC_LANG_AZERBAIJAN; *//* az, Azerbaijan */
+                       /* type = CTSVC_LANG_ROMANIA; */   /* ro, Romania */
+                       /* type = CTSVC_LANG_CZECH; */     /* cs, Czech Republic - Czech */
+                       /* type = CTSVC_LANG_ESTONIAN; */  /* et, Estonia - Estonian */
+                       /* type = CTSVC_LANG_FINNISH; */   /* fi, Finland - Finnish */
+                       /* type = CTSVC_LANG_IRISH; */     /* ga, Ireland - Irish */
+                       /* type = CTSVC_LANG_GALICIAN; */  /* gl, Spain - Galician */
+                       /* type = CTSVC_LANG_HUNGARIAN; */ /* hu, Hungary - Hungarian */
+                       /* type = CTSVC_LANG_SWEDISH; */   /* sv, Finland - Swedish */
+                       /* type = CTSVC_LANG_SLOVENIAN; */ /* sl, Slovenia - Slovenian */
+                       /* type = CTSVC_LANG_SLOVAK; */    /* sk, Slovakia - Slovak */
+                       /* type = CTSVC_LANG_LITHUANIAN; *//* lt, Lithuania - Lithuanian */
+                       /* type = CTSVC_LANG_POLISH; */    /* pl, Polish */
+                       /* type = CTSVC_LANG_LATVIAN; */   /* lv, Latvia - Latvian */
+                       /* type = CTSVC_LANG_CROATIAN; */  /* hr, Bosnia and Herzegovina - Croatian */
+                       /* type = CTSVC_LANG_ICELANDIC; */ /* is, Iceland - Icelandic */
                        break;
 
-               //korean
-               case UBLOCK_HANGUL_JAMO:                                                // =30, /*[1100]*/
-               case UBLOCK_HANGUL_COMPATIBILITY_JAMO:          // =65, /*[3130]*/
-               case UBLOCK_HANGUL_SYLLABLES:                           // =74, /*[AC00]*/
-               case UBLOCK_HANGUL_JAMO_EXTENDED_A:             // = 180, /*[A960]*/
-               case UBLOCK_HANGUL_JAMO_EXTENDED_B:             // = 185, /*[D7B0]*/
+               /* korean */
+               case UBLOCK_HANGUL_JAMO:                /* =30, [1100] */
+               case UBLOCK_HANGUL_COMPATIBILITY_JAMO:  /* =65, [3130] */
+               case UBLOCK_HANGUL_SYLLABLES:           /* =74, [AC00] */
+               case UBLOCK_HANGUL_JAMO_EXTENDED_A:     /* =180, [A960] */
+               case UBLOCK_HANGUL_JAMO_EXTENDED_B:     /* =185, [D7B0] */
                        type = CTSVC_LANG_KOREAN;
                        break;
 
-               // chainese
-               case UBLOCK_CJK_RADICALS_SUPPLEMENT:                     //=58, /*[2E80]*/
-               case UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION:                 //=61, /*[3000]*/
-               case UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS:  //=68, /*[3200]*/
-               case UBLOCK_CJK_STROKES:                                                         // =130, /*[31C0]*/
-               case UBLOCK_CJK_COMPATIBILITY:                                           // =69, /*[3300]*/
-               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A: //=70, /*[3400]*/
-               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS:                              //=71, /*[4E00]*/
-               case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS:                //=79, /*[F900]*/
-               case UBLOCK_CJK_COMPATIBILITY_FORMS:                             //=83, /*[FE30]*/
-               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B :       // =94, /*[20000]*/
-               case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT:         // =95, /*[2F800]*/
-               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C:         // =197, /*[2A700]*/
-               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D:         // =209, /*[2B740]*/
+               /* chainese */
+               case UBLOCK_CJK_RADICALS_SUPPLEMENT:                 /* =58, [2E80] */
+               case UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION:             /* =61, [3000] */
+               case UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS:         /* =68, [3200] */
+               case UBLOCK_CJK_STROKES:                             /* =130, [31C0] */
+               case UBLOCK_CJK_COMPATIBILITY:                       /* =69, [3300] */
+               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A:      /* =70, [3400] */
+               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS:                  /* =71, [4E00] */
+               case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS:            /* =79, [F900] */
+               case UBLOCK_CJK_COMPATIBILITY_FORMS:                 /* =83, [FE30] */
+               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B :     /* =94, [20000] */
+               case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT: /* =95, [2F800] */
+               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C:      /* =197, [2A700] */
+               case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D:      /* =209, [2B740] */
                        type = CTSVC_LANG_CHINESE;
                        break;
 
-               // japanese
-               case UBLOCK_HIRAGANA:                                                           // =62, /*[3040]*/
-               case UBLOCK_KATAKANA:                                                           // =63, /*[30A0]*/
-               case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS:               // =107, /*[31F0]*/
-               case UBLOCK_JAVANESE:                                                           // =181, /*[A980]*/
+               /* japanese */
+               case UBLOCK_HIRAGANA:                      /* =62, [3040] */
+               case UBLOCK_KATAKANA:                      /* =63, [30A0] */
+               case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS:  /* =107, [31F0] */
+               case UBLOCK_JAVANESE:                      /* =181, [A980] */
                        type = CTSVC_LANG_JAPANESE;
                        break;
 
-               case UBLOCK_GREEK:                                              // =8, /*[0370]*/
-               case UBLOCK_GREEK_EXTENDED:                             // =39, /*[1F00]*/
+               case UBLOCK_GREEK:              /* =8, [0370] */
+               case UBLOCK_GREEK_EXTENDED:     /* =39, [1F00] */
                        type = CTSVC_LANG_GREEK;
                        break;
 
-               case UBLOCK_CYRILLIC:                                                           // =9, /*[0400]*/
-               case UBLOCK_CYRILLIC_EXTENDED_A:                                        // = 158, /*[2DE0]*/
-               case UBLOCK_CYRILLIC_EXTENDED_B:                                        // = 160, /*[A640]*/
-               case UBLOCK_CYRILLIC_SUPPLEMENTARY:                             // = 97, UBLOCK_CYRILLIC_SUPPLEMENT = UBLOCK_CYRILLIC_SUPPLEMENTARY, /*[0500]*/
+               case UBLOCK_CYRILLIC:                 /* =9, [0400] */
+               case UBLOCK_CYRILLIC_EXTENDED_A:      /* =158, [2DE0] */
+               case UBLOCK_CYRILLIC_EXTENDED_B:      /* =160, [A640] */
+               case UBLOCK_CYRILLIC_SUPPLEMENTARY:   /* =97, UBLOCK_CYRILLIC_SUPPLEMENT = UBLOCK_CYRILLIC_SUPPLEMENTARY, [0500] */
                        type = CTSVC_LANG_RUSSIAN;
-                       // type = CTSVC_LANG_BULGARIAN: // bg, Bulgaria - Bulgarian
-                       // type = CTSVC_LANG_MACEDONIA: // mk, Macedonia
-                       // type = CTSVC_LANG_KAZAKHSTAN: // kk, Kazakhstan
-                       // type = CTSVC_LANG_SERBIAN: // sr, Serbia - Serbian
-                       // type = CTSVC_LANG_UKRAINE: // uk, Ukraine
+                       /* type = CTSVC_LANG_BULGARIAN: */  /* bg, Bulgaria - Bulgarian */
+                       /* type = CTSVC_LANG_MACEDONIA: */  /* mk, Macedonia */
+                       /* type = CTSVC_LANG_KAZAKHSTAN: */ /* kk, Kazakhstan */
+                       /* type = CTSVC_LANG_SERBIAN: */    /* sr, Serbia - Serbian */
+                       /* type = CTSVC_LANG_UKRAINE: */    /* uk, Ukraine */
                        break;
 
-               case UBLOCK_ARMENIAN:                                           //=10, /*[0530]*/
+               case UBLOCK_ARMENIAN:             /* =10, [0530] */
                        type = CTSVC_LANG_ARMENIAN;
                        break;
-               case UBLOCK_ARABIC:                                             //=12, /*[0600]*/
+               case UBLOCK_ARABIC:               /* =12, [0600] */
                        type = CTSVC_LANG_ARABIC;
                        break;
-               case UBLOCK_DEVANAGARI:                                 // =15, /*[0900]*/
-               case UBLOCK_DEVANAGARI_EXTENDED:                // = 179, /*[A8E0]*/:
+               case UBLOCK_DEVANAGARI:           /* =15, [0900] */
+               case UBLOCK_DEVANAGARI_EXTENDED:  /* =179, [A8E0] */
                        type = CTSVC_LANG_HINDI;
                        break;
-               case UBLOCK_GEORGIAN:                                           //=29, /*[10A0]*/
-               case UBLOCK_GEORGIAN_SUPPLEMENT:                // = 135, /*[2D00]*/
+               case UBLOCK_GEORGIAN:             /* =29, [10A0] */
+               case UBLOCK_GEORGIAN_SUPPLEMENT:  /* =135, [2D00] */
                        type = CTSVC_LANG_GEORGIAN;
                        break;
-               case UBLOCK_OLD_TURKIC:                                 // = 191, /*[10C00]*/
+               case UBLOCK_OLD_TURKIC:           /* =191, [10C00] */
                        type = CTSVC_LANG_TURKISH;
                        break;
-               case UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS:              // =87, /*[FF00]*/      // hangul : FFA0 ~ FFDC
+               case UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS: /* =87, [FF00]  hangul : FFA0 ~ FFDC */
                {
                        if (CTSVC_COMPARE_BETWEEN((UChar)0xFF21, word[0], (UChar)0xFF3A)
                                || CTSVC_COMPARE_BETWEEN((UChar)0xFF41, word[0], (UChar)0xFF5A))
@@ -195,7 +197,7 @@ int ctsvc_check_language(UChar *word)
        return type;
 }
 
-// check language type by first word(char*) using UBLOCK
+/* check language type by first word(char*) using UBLOCK */
 int ctsvc_check_language_type(const char *src)
 {
        int length = 0;
@@ -214,16 +216,16 @@ int ctsvc_check_language_type(const char *src)
 
                u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, temp, -1, &status);
                        RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                                       "u_strFromUTF8() Failed(%s)", u_errorName(status));
+                                       "u_strFromUTF8() Fail(%s)", u_errorName(status));
 
                u_strToUpper(tmp_result, array_sizeof(tmp_result), tmp_result, -1, NULL, &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "u_strToLower() Failed(%s)", u_errorName(status));
+                               "u_strToLower() Fail(%s)", u_errorName(status));
 
                unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
                                (UChar *)result, array_sizeof(result), &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
+                               "unorm_normalize(%s) Fail(%s)", src, u_errorName(status));
 
                CTS_VERBOSE("0x%x%x", (0xFF00 & (tmp_result[0])) >> 8,  (0xFF & (tmp_result[0])));
 
old mode 100755 (executable)
new mode 100644 (file)
index 349aa59..5e084bf
@@ -16,8 +16,8 @@
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_LOCALIZE_UTILS_H__
-#define __TIZEN_SOCIAL_CTSVC_LOCALIZE_UTILS_H__
+#ifndef __CTSVC_LOCALIZE_UTILS_H__
+#define __CTSVC_LOCALIZE_UTILS_H__
 
 #include <unicode/utypes.h>
 
@@ -100,4 +100,4 @@ int ctsvc_check_utf8(char c);
 int ctsvc_check_language(UChar *word);
 int ctsvc_check_language_type(const char *src);
 
-#endif // __TIZEN_SOCIAL_CTSVC_LOCALIZE_UTILS_H__
+#endif /* __CTSVC_LOCALIZE_UTILS_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 4a86362..212755b
@@ -37,10 +37,12 @@ static cts_mutex_fns __ctsvc_mutex_funtions =
 
 static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t sockfd_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t trans_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t ipc_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t ipc_pubsub_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t access_control_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t timeout_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 
 static int __old_type = 0;
 static int __defered_ref = 0;
@@ -56,9 +58,6 @@ static inline pthread_mutex_t* __ctsvc_mutex_get_mutex(int type)
        case CTS_MUTEX_SOCKET_FD:
                ret_val = &sockfd_mutex;
                break;
-       case CTS_MUTEX_TRANSACTION:
-               ret_val = &trans_mutex;
-               break;
        case CTS_MUTEX_PIMS_IPC_CALL:
                ret_val = &ipc_mutex;
                break;
@@ -68,6 +67,12 @@ static inline pthread_mutex_t* __ctsvc_mutex_get_mutex(int type)
        case CTS_MUTEX_ACCESS_CONTROL:
                ret_val = &access_control_mutex;
                break;
+       case CTS_MUTEX_HANDLE:
+               ret_val = &handle_mutex;
+               break;
+       case CTS_MUTEX_TIMEOUT:
+               ret_val = &timeout_mutex;
+               break;
        default:
                CTS_ERR("unknown type(%d)", type);
                ret_val = NULL;
@@ -81,11 +86,13 @@ void ctsvc_mutex_lock(int type)
        int ret;
        pthread_mutex_t *mutex;
 
-       // If user use pthread_cancel, lock can be occured
-       // protect it, call pthread_set_canceltype as PTHREAD_CANCEL_DEFERRED
-       // But, if another module call PTHREAD_CANCEL_ASYNCHRONOUS,
-       // it can be occured again
-       // So, Do not use the pthread_cancel with contacts_service API
+       /*
+        * If user use pthread_cancel, lock can be occured
+        * protect it, call pthread_set_canceltype as PTHREAD_CANCEL_DEFERRED
+        * But, if another module call PTHREAD_CANCEL_ASYNCHRONOUS,
+        * it can be occured again
+        * So, Do not use the pthread_cancel with contacts_service API
+        */
        if (__defered_ref == 0)
                pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &__old_type);
        else
@@ -97,7 +104,7 @@ void ctsvc_mutex_lock(int type)
 
        if (__ctsvc_mutex_funtions.lock) {
                ret = __ctsvc_mutex_funtions.lock(mutex);
-               WARN_IF(ret, "mutex_lock Failed(%d)", ret);
+               WARN_IF(ret, "mutex_lock Fail(%d)", ret);
        }
 }
 
@@ -110,7 +117,7 @@ void ctsvc_mutex_unlock(int type)
 
        if (__ctsvc_mutex_funtions.unlock) {
                ret = __ctsvc_mutex_funtions.unlock(mutex);
-               WARN_IF(ret, "mutex_unlock Failed(%d)", ret);
+               WARN_IF(ret, "mutex_unlock Fail(%d)", ret);
        }
 
        __defered_ref--;
old mode 100755 (executable)
new mode 100644 (file)
index 011785b..c3959bb
@@ -25,14 +25,15 @@ enum {
        CTS_MUTEX_CONNECTION,
        CTS_MUTEX_UPDTATED_LIST_MEMPOOL,
        CTS_MUTEX_SOCKET_FD,
-       CTS_MUTEX_TRANSACTION,
        CTS_MUTEX_PIMS_IPC_CALL,
        CTS_MUTEX_PIMS_IPC_PUBSUB,
        CTS_MUTEX_ACCESS_CONTROL,
+       CTS_MUTEX_HANDLE,
+       CTS_MUTEX_TIMEOUT,
 };
 
 void ctsvc_mutex_lock(int type);
 void ctsvc_mutex_unlock(int type);
 
 
-#endif //__CTSVC_MUTEX_H__
+#endif /* __CTSVC_MUTEX_H__ */
\ No newline at end of file
index e016185..c3298ea 100644 (file)
@@ -17,8 +17,8 @@
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_NOTIFY_H__
-#define __TIZEN_SOCIAL_CTSVC_NOTIFY_H__
+#ifndef __CTSVC_NOTIFY_H__
+#define __CTSVC_NOTIFY_H__
 
 #define CTSVC_NOTI_IPC_READY   "/opt/usr/data/contacts-svc/.CONTACTS_SVC_IPC_READY"
 #define CTSVC_NOTI_ADDRESSBOOK_CHANGED  "/opt/usr/data/contacts-svc/.CONTACTS_SVC_AB_CHANGED"
@@ -50,4 +50,4 @@
 #define CTSVC_SETTING_DISPLAY_ORDER_CHANGED "contacts.setting.display_order"
 #define CTSVC_SETTING_SORTING_ORDER_CHANGED "contacts.setting.sorting_order"
 
-#endif /* __TIZEN_SOCIAL_CTSVC_NOTIFY_H__ */
+#endif /* __CTSVC_NOTIFY_H__ */
index dc6e894..a1bf80f 100644 (file)
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_query.h"
 #include "ctsvc_filter.h"
 
 typedef enum {
@@ -54,7 +51,7 @@ static bool __ctsvc_query_property_check(const property_info_s *properties,
        return false;
 }
 
-API int contacts_query_create( const char* view_uri, contacts_query_h* out_query )
+API int contacts_query_create(const char* view_uri, contacts_query_h* out_query)
 {
        ctsvc_query_s *query;
 
@@ -91,7 +88,10 @@ API int contacts_query_set_projection(contacts_query_h query, unsigned int prope
                free(query_s->projection);
 
        query_s->projection = calloc(count, sizeof(unsigned int));
-       RETVM_IF(NULL == query_s->projection, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == query_s->projection) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        memcpy(query_s->projection, property_ids, sizeof(unsigned int) * count);
        query_s->projection_count = count;
 
@@ -131,7 +131,7 @@ API int contacts_query_set_sort(contacts_query_h query, unsigned int property_id
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_query_destroy( contacts_query_h query )
+API int contacts_query_destroy(contacts_query_h query)
 {
        ctsvc_query_s *s_query;
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
old mode 100755 (executable)
new mode 100644 (file)
index 5b22b47..00b3cfb
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -54,14 +52,12 @@ extern ctsvc_record_plugin_cb_s profile_plugin_cbs;
 extern ctsvc_record_plugin_cb_s nickname_plugin_cbs;
 extern ctsvc_record_plugin_cb_s email_plugin_cbs;
 extern ctsvc_record_plugin_cb_s result_plugin_cbs;
-#ifdef ENABLE_SIM_FEATURE
 extern ctsvc_record_plugin_cb_s sdn_plugin_cbs;
 extern ctsvc_record_plugin_cb_s speeddial_plugin_cbs;
-#endif // ENABLE_SIM_FEATURE
 extern ctsvc_record_plugin_cb_s extension_plugin_cbs;
 #ifdef ENABLE_LOG_FEATURE
 extern ctsvc_record_plugin_cb_s phonelog_plugin_cbs;
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 static const ctsvc_record_plugin_cb_s *__ctsvc_record_get_plugin_cb(int r_type)
 {
@@ -115,13 +111,11 @@ static const ctsvc_record_plugin_cb_s *__ctsvc_record_get_plugin_cb(int r_type)
 #ifdef ENABLE_LOG_FEATURE
        case CTSVC_RECORD_PHONELOG:
                return &phonelog_plugin_cbs;
-#endif // ENABLE_LOG_FEATURE
-#ifdef ENABLE_SIM_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        case CTSVC_RECORD_SPEEDDIAL:
                return &speeddial_plugin_cbs;
        case CTSVC_RECORD_SDN:
                return &sdn_plugin_cbs;
-#endif // ENABLE_SIM_FEATURE
        case CTSVC_RECORD_UPDATED_INFO:
                return &updated_info_plugin_cbs;
        case CTSVC_RECORD_RESULT:
@@ -135,8 +129,10 @@ static const ctsvc_record_plugin_cb_s *__ctsvc_record_get_plugin_cb(int r_type)
                CTS_ERR("Invalid parameter: Operation restricted."); \
                return CONTACTS_ERROR_INVALID_PARAMETER;
 
-// This function is used for view_uri which is able to CRUD.
-// The view_uri's property should be sequencial value because it is used to find index at the below logic.
+/*
+ * This function is used for view_uri which is able to CRUD.
+ * The view_uri's property should be sequencial value because it is used to find index at the below logic.
+ */
 bool ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned int property_id, contacts_property_flag_e flag)
 {
        int index = property_id & 0x000000FF;
@@ -144,25 +140,29 @@ bool ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned i
        if (CTSVC_RECORD_RESULT == s_record->r_type)
                return true;
 
-       // Check it when getting value of property
-       // property_flag and properties_flags is set when getting record with query
+       /*
+        * Check it when getting value of property
+        * property_flag and properties_flags is set when getting record with query
+        */
        if (CTSVC_PROPERTY_FLAG_PROJECTION == flag) {
-               // all property get.
+               /* all property get. */
                if (NULL == s_record->properties_flags)
                        return true;
-               // Or before inserting record from DB, just get after setting.
-               // properties_flags is not NULL when just setting dirty
+               /*
+                * Or before inserting record from DB, just get after setting.
+                * properties_flags is not NULL when just setting dirty
+                */
                if (0 == (CTSVC_PROPERTY_FLAG_PROJECTION & s_record->property_flag))
                        return true;
        }
 
-       // Check it when updating record
+       /* Check it when updating record */
        if (CTSVC_PROPERTY_FLAG_DIRTY == flag) {
-               // all property is clean
+               /* all property is clean */
                if (NULL == s_record->properties_flags)
                        return false;
        }
-       return ( s_record->properties_flags[index] & flag) ? true : false;
+       return (s_record->properties_flags[index] & flag) ? true : false;
 }
 
 int ctsvc_record_set_property_flag(ctsvc_record_s* _record, int property_id, contacts_property_flag_e flag)
@@ -188,26 +188,25 @@ int ctsvc_record_set_property_flag(ctsvc_record_s* _record, int property_id, con
 }
 
 #define __CHECK_READ_ONLY_PROPERTY() \
-       if( CTSVC_READ_ONLY_CHECK(property_id, CTSVC_READ_ONLY_PROPERTY) ) \
-       { \
+       if (CTSVC_READ_ONLY_CHECK(property_id, CTSVC_READ_ONLY_PROPERTY)) { \
                CTS_ERR("Invalid parameter: Don't try to change read-only property.(0x%0x)", property_id); \
                return CONTACTS_ERROR_INVALID_PARAMETER; \
        }
 
 #define __CHECK_PROJECTED_PROPERTY() \
-       if( false == ctsvc_record_check_property_flag( s_record, property_id, CTSVC_PROPERTY_FLAG_PROJECTION ) ) \
-       { \
+       if (false == ctsvc_record_check_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_PROJECTION)) { \
                CTS_ERR("Invalid parameter: Don't try to get un-projected property(0x%0x).", property_id); \
                return CONTACTS_ERROR_INVALID_PARAMETER; \
        }
 
-// Record constuct/destruct
-API int contacts_record_create( const char* view_uri, contacts_record_h* out_record )
+/* Record constuct/destruct */
+API int contacts_record_create(const char* view_uri, contacts_record_h* out_record)
 {
        int ret;
        ctsvc_record_type_e r_type;
        const ctsvc_record_plugin_cb_s *plugin_cb;
 
+       RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_record = NULL;
 
@@ -218,7 +217,7 @@ API int contacts_record_create( const char* view_uri, contacts_record_h* out_rec
        plugin_cb = __ctsvc_record_get_plugin_cb(r_type);
        if (plugin_cb && plugin_cb->create) {
                ret = plugin_cb->create(out_record);
-               if( CONTACTS_ERROR_NONE == ret ) {
+               if (CONTACTS_ERROR_NONE == ret) {
                        CTSVC_RECORD_INIT_BASE((ctsvc_record_s*)*out_record, r_type, plugin_cb, ctsvc_view_get_uri(view_uri));
                }
                return ret;
@@ -227,7 +226,7 @@ API int contacts_record_create( const char* view_uri, contacts_record_h* out_rec
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_destroy( contacts_record_h record, bool delete_child )
+API int contacts_record_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_record_s *s_record;
 
@@ -240,7 +239,7 @@ API int contacts_record_destroy( contacts_record_h record, bool delete_child )
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_clone( contacts_record_h record, contacts_record_h* out_record )
+API int contacts_record_clone(contacts_record_h record, contacts_record_h* out_record)
 {
        ctsvc_record_s *s_record;
 
@@ -256,7 +255,7 @@ API int contacts_record_clone( contacts_record_h record, contacts_record_h* out_
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_uri_p( contacts_record_h record, const char** out_str )
+API int contacts_record_get_uri_p(contacts_record_h record, const char** out_str)
 {
     int ret = CONTACTS_ERROR_NONE;
 
@@ -269,8 +268,8 @@ API int contacts_record_get_uri_p( contacts_record_h record, const char** out_st
     return ret;
 }
 
-// Record get/set int,str, etc..
-API int contacts_record_get_str( contacts_record_h record, unsigned int property_id, char** out_str )
+/* Record get/set int,str, etc.. */
+API int contacts_record_get_str(contacts_record_h record, unsigned int property_id, char** out_str)
 {
        ctsvc_record_s *s_record;
 
@@ -288,7 +287,7 @@ API int contacts_record_get_str( contacts_record_h record, unsigned int property
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_lli( contacts_record_h record, unsigned int property_id, long long int *value )
+API int contacts_record_get_lli(contacts_record_h record, unsigned int property_id, long long int *value)
 {
        ctsvc_record_s *s_record;
 
@@ -306,7 +305,7 @@ API int contacts_record_get_lli( contacts_record_h record, unsigned int property
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_double( contacts_record_h record, unsigned int property_id, double *value )
+API int contacts_record_get_double(contacts_record_h record, unsigned int property_id, double *value)
 {
        ctsvc_record_s *s_record;
 
@@ -324,7 +323,7 @@ API int contacts_record_get_double( contacts_record_h record, unsigned int prope
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_str_p( contacts_record_h record, unsigned int property_id, char** out_str )
+API int contacts_record_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str)
 {
        ctsvc_record_s *s_record;
 
@@ -337,12 +336,12 @@ API int contacts_record_get_str_p( contacts_record_h record, unsigned int proper
        __CHECK_PROJECTED_PROPERTY();
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->get_str_p)
-               return s_record->plugin_cbs->get_str_p(record, property_id, out_str );
+               return s_record->plugin_cbs->get_str_p(record, property_id, out_str);
 
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_int( contacts_record_h record, unsigned int property_id, int* out_value )
+API int contacts_record_get_int(contacts_record_h record, unsigned int property_id, int* out_value)
 {
        ctsvc_record_s *s_record;
 
@@ -360,7 +359,7 @@ API int contacts_record_get_int( contacts_record_h record, unsigned int property
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_set_str( contacts_record_h record, unsigned int property_id, const char* value )
+API int contacts_record_set_str(contacts_record_h record, unsigned int property_id, const char* value)
 {
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -369,7 +368,7 @@ API int contacts_record_set_str( contacts_record_h record, unsigned int property
        return ctsvc_record_set_str(record, property_id, value);
 }
 
-int ctsvc_record_set_str( contacts_record_h record, unsigned int property_id, const char* value )
+int ctsvc_record_set_str(contacts_record_h record, unsigned int property_id, const char* value)
 {
        char *str;
        ctsvc_record_s *s_record;
@@ -384,8 +383,9 @@ int ctsvc_record_set_str( contacts_record_h record, unsigned int property_id, co
                str = NULL;
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->set_str) {
-               ret = s_record->plugin_cbs->set_str(record, property_id, str);
-               if (CONTACTS_ERROR_NONE == ret)
+               bool is_dirty = false;
+               ret = s_record->plugin_cbs->set_str(record, property_id, str, &is_dirty);
+               if (CONTACTS_ERROR_NONE == ret && is_dirty)
                        ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
 
                return ret;
@@ -394,7 +394,7 @@ int ctsvc_record_set_str( contacts_record_h record, unsigned int property_id, co
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_bool( contacts_record_h record, unsigned int property_id, bool* value )
+API int contacts_record_get_bool(contacts_record_h record, unsigned int property_id, bool* value)
 {
        ctsvc_record_s *s_record;
 
@@ -412,7 +412,7 @@ API int contacts_record_get_bool( contacts_record_h record, unsigned int propert
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int        contacts_record_set_bool( contacts_record_h record, unsigned int property_id, bool value )
+API int contacts_record_set_bool(contacts_record_h record, unsigned int property_id, bool value)
 {
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -421,7 +421,7 @@ API int     contacts_record_set_bool( contacts_record_h record, unsigned int propert
        return ctsvc_record_set_bool(record, property_id, value);
 }
 
-int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, bool value )
+int ctsvc_record_set_bool(contacts_record_h record, unsigned int property_id, bool value)
 {
        int ret;
        ctsvc_record_s *s_record;
@@ -429,8 +429,9 @@ int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, b
        __CHECK_PROJECTED_PROPERTY();
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->set_bool) {
-               ret = s_record->plugin_cbs->set_bool(record, property_id, value);
-               if (CONTACTS_ERROR_NONE == ret)
+               bool is_dirty = false;
+               ret = s_record->plugin_cbs->set_bool(record, property_id, value, &is_dirty);
+               if (CONTACTS_ERROR_NONE == ret && is_dirty)
                        ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
                return ret;
        }
@@ -438,7 +439,7 @@ int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, b
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_set_int( contacts_record_h record, unsigned int property_id, int value )
+API int contacts_record_set_int(contacts_record_h record, unsigned int property_id, int value)
 {
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -453,7 +454,7 @@ API int contacts_record_set_int( contacts_record_h record, unsigned int property
        return ctsvc_record_set_int(record, property_id, value);
 }
 
-int ctsvc_record_set_int( contacts_record_h record, unsigned int property_id, int value )
+int ctsvc_record_set_int(contacts_record_h record, unsigned int property_id, int value)
 {
        int ret;
        ctsvc_record_s *s_record;
@@ -461,15 +462,16 @@ int ctsvc_record_set_int( contacts_record_h record, unsigned int property_id, in
        __CHECK_PROJECTED_PROPERTY();
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->set_int) {
-               ret = s_record->plugin_cbs->set_int(record, property_id, value);
-               if (CONTACTS_ERROR_NONE == ret)
+               bool is_dirty = false;
+               ret = s_record->plugin_cbs->set_int(record, property_id, value, &is_dirty);
+               if (CONTACTS_ERROR_NONE == ret && is_dirty)
                        ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
                return ret;
        }
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value )
+API int contacts_record_set_lli(contacts_record_h record, unsigned int property_id, long long int value)
 {
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -478,7 +480,7 @@ API int contacts_record_set_lli( contacts_record_h record, unsigned int property
        return ctsvc_record_set_lli(record, property_id, value);
 }
 
-int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value )
+int ctsvc_record_set_lli(contacts_record_h record, unsigned int property_id, long long int value)
 {
        int ret;
        ctsvc_record_s *s_record;
@@ -486,8 +488,9 @@ int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, lo
        __CHECK_PROJECTED_PROPERTY();
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->set_lli) {
-               ret = s_record->plugin_cbs->set_lli(record, property_id, value);
-               if (CONTACTS_ERROR_NONE == ret)
+               bool is_dirty = false;
+               ret = s_record->plugin_cbs->set_lli(record, property_id, value, &is_dirty);
+               if (CONTACTS_ERROR_NONE == ret && is_dirty)
                        ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
                return ret;
        }
@@ -495,7 +498,7 @@ int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, lo
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_set_double( contacts_record_h record, unsigned int property_id, double value )
+API int contacts_record_set_double(contacts_record_h record, unsigned int property_id, double value)
 {
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -504,7 +507,7 @@ API int contacts_record_set_double( contacts_record_h record, unsigned int prope
        return ctsvc_record_set_double(record, property_id, value);
 }
 
-int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id, double value )
+int ctsvc_record_set_double(contacts_record_h record, unsigned int property_id, double value)
 {
        int ret;
        ctsvc_record_s *s_record;
@@ -513,8 +516,9 @@ int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id,
        __CHECK_PROJECTED_PROPERTY();
 
        if (s_record->plugin_cbs && s_record->plugin_cbs->set_double) {
-               ret = s_record->plugin_cbs->set_double(record, property_id, value);
-               if (CONTACTS_ERROR_NONE == ret)
+               bool is_dirty = false;
+               ret = s_record->plugin_cbs->set_double(record, property_id, value, &is_dirty);
+               if (CONTACTS_ERROR_NONE == ret && is_dirty)
                        ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
                return ret;
        }
@@ -522,9 +526,9 @@ int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-// Record get/set child records
-API int        contacts_record_add_child_record( contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+/* Record get/set child records */
+API int contacts_record_add_child_record(contacts_record_h record,
+               unsigned int property_id, contacts_record_h child_record)
 {
        ctsvc_record_s *s_record;
 
@@ -538,8 +542,8 @@ API int     contacts_record_add_child_record( contacts_record_h record,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int        contacts_record_remove_child_record( contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+API int contacts_record_remove_child_record(contacts_record_h record,
+               unsigned int property_id, contacts_record_h child_record)
 {
        ctsvc_record_s *s_record;
 
@@ -553,8 +557,8 @@ API int     contacts_record_remove_child_record( contacts_record_h record,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_child_record_count( contacts_record_h record,
-               unsigned int property_id, int *count )
+API int contacts_record_get_child_record_count(contacts_record_h record,
+               unsigned int property_id, int *count)
 {
        ctsvc_record_s *s_record;
 
@@ -570,8 +574,8 @@ API int contacts_record_get_child_record_count( contacts_record_h record,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_get_child_record_at_p( contacts_record_h record,
-               unsigned int property_id, int index, contacts_record_h* out_record )
+API int contacts_record_get_child_record_at_p(contacts_record_h record,
+               unsigned int property_id, int index, contacts_record_h* out_record)
 {
        ctsvc_record_s *s_record;
 
@@ -587,8 +591,8 @@ API int contacts_record_get_child_record_at_p( contacts_record_h record,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-API int contacts_record_clone_child_record_list( contacts_record_h record,
-               unsigned int property_id, contacts_list_h* out_list )
+API int contacts_record_clone_child_record_list(contacts_record_h record,
+               unsigned int property_id, contacts_list_h* out_list)
 {
        ctsvc_record_s *s_record;
 
@@ -604,7 +608,7 @@ API int contacts_record_clone_child_record_list( contacts_record_h record,
        __INVALID_PARAMETER_ERROR_HANDLING();
 }
 
-int ctsvc_record_set_projection_flags( contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count)
+int ctsvc_record_set_projection_flags(contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count)
 {
        int i;
 
index c79a34e..3e499be 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_RECORD_H__
-#define __TIZEN_SOCIAL_CTSVC_RECORD_H__
+#ifndef __CTSVC_RECORD_H__
+#define __CTSVC_RECORD_H__
 
 #define CTSVC_RECORD_INIT_BASE(base, type, cb, uri) do {\
-    (base)->r_type = (type);\
-    (base)->plugin_cbs = (cb);\
-    (base)->view_uri = (uri);\
-    (base)->property_max_count = 0;\
+       (base)->r_type = (type);\
+       (base)->plugin_cbs = (cb);\
+       (base)->view_uri = (uri);\
+       (base)->property_max_count = 0;\
 } while (0)
 
-#define CTSVC_RECORD_COPY_BASE(dest, src) do {\
-       (dest)->r_type = (src)->r_type;\
-       (dest)->plugin_cbs = (src)->plugin_cbs;\
-       (dest)->view_uri = (src)->view_uri;\
-       (dest)->property_max_count = (src)->property_max_count;\
-       (dest)->property_flag = (src)->property_flag;\
-       if ((src)->properties_flags) \
-       {\
-               (dest)->properties_flags  = calloc((dest)->property_max_count, sizeof(char));\
-               if ((dest)->properties_flags) { \
-                       memcpy((dest)->properties_flags,(src)->properties_flags,sizeof(char)*(dest)->property_max_count);\
-               } \
-       }\
-} while (0)
+static inline int ctsvc_record_copy_base(ctsvc_record_s *dest, ctsvc_record_s *src)
+{
+       dest->r_type = src->r_type;
+       dest->plugin_cbs = src->plugin_cbs;
+       dest->view_uri = src->view_uri;
+       dest->property_max_count = src->property_max_count;
+       dest->property_flag = src->property_flag;
+       if (src->properties_flags) {
+               dest->properties_flags = calloc(dest->property_max_count, sizeof(char));
+               if (NULL == dest->properties_flags) {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+               if (dest->properties_flags) {
+                       memcpy(dest->properties_flags,src->properties_flags,sizeof(char)*dest->property_max_count);
+               }
+       }
+       return CONTACTS_ERROR_NONE;
+}
 
 #define CTSVC_RECORD_RESET_PROPERTY_FLAGS(base)do {\
-    if ((base)->properties_flags) \
-    {\
-        free((base)->properties_flags); \
-        (base)->property_max_count = 0;\
-        (base)->properties_flags = NULL;\
-        (base)->property_flag = 0;\
-    }\
+       if ((base)->properties_flags) \
+       {\
+               free((base)->properties_flags); \
+               (base)->property_max_count = 0;\
+               (base)->properties_flags = NULL;\
+               (base)->property_flag = 0;\
+       }\
 } while (0)
 
 int ctsvc_record_set_property_flag(ctsvc_record_s* _record, int property_id, contacts_property_flag_e flag);
-int ctsvc_record_set_projection_flags( contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count);
-int ctsvc_record_set_str( contacts_record_h record, unsigned int property_id, const char* value );
-int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, bool value );
-int ctsvc_record_set_int( contacts_record_h record, unsigned int property_id, int value );
-int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value );
-int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id, double value );
+int ctsvc_record_set_projection_flags(contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count);
+int ctsvc_record_set_str(contacts_record_h record, unsigned int property_id, const char* value);
+int ctsvc_record_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+int ctsvc_record_set_int(contacts_record_h record, unsigned int property_id, int value);
+int ctsvc_record_set_lli(contacts_record_h record, unsigned int property_id, long long int value);
+int ctsvc_record_set_double(contacts_record_h record, unsigned int property_id, double value);
 bool ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned int property_id, contacts_property_flag_e flag);
 
-#endif /* __TIZEN_SOCIAL_CTSVC_RECORD_H__ */
+#endif /* __CTSVC_RECORD_H__ */
index 5a88da6..7765ce2 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 
 #include "ctsvc_internal.h"
 
 static int __ctsvc_addressbook_create(contacts_record_h *out_record);
 static int __ctsvc_addressbook_destroy(contacts_record_h record, bool delete_child);
-static int __ctsvc_addressbook_clone( contacts_record_h record, contacts_record_h* out_record );
+static int __ctsvc_addressbook_clone(contacts_record_h record, contacts_record_h* out_record);
 static int __ctsvc_addressbook_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_addressbook_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_addressbook_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_addressbook_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_addressbook_set_str(contacts_record_h record, unsigned int property_id, const char* str);
+static int __ctsvc_addressbook_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_addressbook_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s addressbook_plugin_cbs = {
        .create = __ctsvc_addressbook_create,
@@ -75,7 +73,7 @@ static int __ctsvc_addressbook_destroy(contacts_record_h record, bool delete_chi
 {
        ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s*)record;
 
-       addressbook->base.plugin_cbs = NULL;    // help to find double destroy bug (refer to the contacts_record_destroy)
+       addressbook->base.plugin_cbs = NULL;   /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(addressbook->base.properties_flags);
        free(addressbook->name);
        free(addressbook);
@@ -83,7 +81,7 @@ static int __ctsvc_addressbook_destroy(contacts_record_h record, bool delete_chi
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_addressbook_clone( contacts_record_h record, contacts_record_h* out_record )
+static int __ctsvc_addressbook_clone(contacts_record_h record, contacts_record_h* out_record)
 {
        ctsvc_addressbook_s *src = (ctsvc_addressbook_s*)record;
        ctsvc_addressbook_s *dest;
@@ -92,7 +90,12 @@ static int __ctsvc_addressbook_clone( contacts_record_h record, contacts_record_
        RETVM_IF(NULL == dest, CONTACTS_ERROR_OUT_OF_MEMORY,
                        "Out of memory : calloc is failed");
 
-       CTSVC_RECORD_COPY_BASE(&(dest->base), &(src->base));
+       int ret = ctsvc_record_copy_base(&(dest->base), &(src->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               free(dest);
+               return ret;
+       }
 
        dest->id = src->id;
        dest->account_id = src->account_id;
@@ -105,7 +108,7 @@ static int __ctsvc_addressbook_clone( contacts_record_h record, contacts_record_
 }
 
 static int __ctsvc_addressbook_get_str_real(contacts_record_h record,
-               unsigned int property_id, char** out_str, bool copy )
+               unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s*)record;
 
@@ -131,12 +134,13 @@ static int __ctsvc_addressbook_get_str(contacts_record_h record, unsigned int pr
 }
 
 static int __ctsvc_addressbook_set_str(contacts_record_h record,
-               unsigned int property_id, const char* str )
+               unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ADDRESSBOOK_NAME:
+               CHECK_DIRTY_STR(addressbook->name, str, is_dirty);
                FREEandSTRDUP(addressbook->name, str);
                break;
        default :
@@ -169,23 +173,26 @@ static int __ctsvc_addressbook_get_int(contacts_record_h record,
 }
 
 static int __ctsvc_addressbook_set_int(contacts_record_h record,
-               unsigned int property_id, int value)
+               unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ADDRESSBOOK_ID:
+               CHECK_DIRTY_VAL(addressbook->id, value, is_dirty);
                addressbook->id = value;
                break;
        case CTSVC_PROPERTY_ADDRESSBOOK_MODE:
                RETVM_IF(value != CONTACTS_ADDRESS_BOOK_MODE_NONE
                                                && value != CONTACTS_ADDRESS_BOOK_MODE_READONLY,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : address_book mode is %d", value);
+               CHECK_DIRTY_VAL(addressbook->mode, value, is_dirty);
                addressbook->mode = value;
                break;
        case CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID:
-               RETVM_IF(addressbook->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < addressbook->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (addressbook)", property_id);
+               CHECK_DIRTY_VAL(addressbook->account_id, value, is_dirty);
                addressbook->account_id = value;
                break;
        default:
old mode 100755 (executable)
new mode 100644 (file)
index 5e45bdd..bb9dbd3
@@ -35,45 +35,45 @@ static int __ctsvc_activity_create(contacts_record_h *out_record);
 static int __ctsvc_activity_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_activity_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_activity_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_activity_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_activity_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_activity_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_activity_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
-static int __ctsvc_activity_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
-static int __ctsvc_activity_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count );
-static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record );
-static int __ctsvc_activity_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list );
+static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_activity_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
+static int __ctsvc_activity_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
+static int __ctsvc_activity_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
+static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record);
+static int __ctsvc_activity_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list);
 
 static int __ctsvc_activity_photo_create(contacts_record_h *out_record);
 static int __ctsvc_activity_photo_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_activity_photo_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_activity_photo_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_activity_photo_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_activity_photo_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_activity_photo_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 
 static int __ctsvc_address_create(contacts_record_h *out_ecord);
 static int __ctsvc_address_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_address_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_address_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_address_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_address_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_address_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 static int __ctsvc_company_create(contacts_record_h *out_record);
 static int __ctsvc_company_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_company_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_company_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_company_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_company_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_company_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_contact_create(contacts_record_h *out_record);
 static int __ctsvc_contact_destroy(contacts_record_h record, bool delete_child);
@@ -81,26 +81,26 @@ static int __ctsvc_contact_clone(contacts_record_h record, contacts_record_h *ou
 static int __ctsvc_contact_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_contact_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_contact_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value);
-static int __ctsvc_contact_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list );
-static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record );
-static int __ctsvc_contact_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count );
-static int __ctsvc_contact_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
-static int __ctsvc_contact_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
+static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
+static int __ctsvc_contact_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list);
+static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record);
+static int __ctsvc_contact_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
+static int __ctsvc_contact_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
+static int __ctsvc_contact_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
 
 static int __ctsvc_email_create(contacts_record_h *out_record);
 static int __ctsvc_email_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_email_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_email_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_email_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_email_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_email_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 static int __ctsvc_event_create(contacts_record_h *out_record);
 static int __ctsvc_event_destroy(contacts_record_h record, bool delete_child);
@@ -108,123 +108,123 @@ static int __ctsvc_event_clone(contacts_record_h record, contacts_record_h *out_
 static int __ctsvc_event_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_event_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_event_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 static int __ctsvc_extension_create(contacts_record_h *out_record);
 static int __ctsvc_extension_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_extension_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_extension_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_extension_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_extension_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_extension_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_extension_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_group_relation_create(contacts_record_h *out_record);
 static int __ctsvc_group_relation_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_group_relation_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_group_relation_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_group_relation_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_group_relation_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_group_relation_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_messenger_create(contacts_record_h *out_record);
 static int __ctsvc_messenger_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_messenger_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_messenger_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_messenger_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_messenger_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_messenger_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_name_create(contacts_record_h *out_record);
 static int __ctsvc_name_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_name_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_name_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_name_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_name_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_name_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_name_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_nickname_create(contacts_record_h *out_record);
 static int __ctsvc_nickname_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_nickname_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_nickname_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_nickname_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_nickname_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_nickname_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_nickname_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_note_create(contacts_record_h *out_record);
 static int __ctsvc_note_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_note_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_note_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_note_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_note_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_note_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_number_create(contacts_record_h *out_record);
 static int __ctsvc_number_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_number_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_number_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_number_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_number_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_number_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 static int __ctsvc_profile_create(contacts_record_h *out_record);
 static int __ctsvc_profile_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_profile_clone(contacts_record_h record, contacts_record_h *out_reord);
 static int __ctsvc_profile_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_profile_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_profile_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_profile_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_relationship_create(contacts_record_h *out_record);
 static int __ctsvc_relationship_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_relationship_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_relationship_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_relationship_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_relationship_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_relationship_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_image_create(contacts_record_h *out_record);
 static int __ctsvc_image_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_image_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_image_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_image_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_image_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_image_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 static int __ctsvc_simple_contact_create(contacts_record_h *out_record);
 static int __ctsvc_simple_contact_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_simple_contact_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *out);
 static int __ctsvc_simple_contact_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_simple_contact_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_simple_contact_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_simple_contact_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_simple_contact_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static int __ctsvc_url_create(contacts_record_h *out_record);
 static int __ctsvc_url_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_url_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_url_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_url_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_url_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_url_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 static GHashTable *__ctsvc_temp_image_file_hash_table = NULL;
 
@@ -655,8 +655,8 @@ static int __ctsvc_activity_create(contacts_record_h *out_record)
 
        activity->photos = calloc(1, sizeof(ctsvc_list_s));
        if (NULL == activity->photos) {
+               CTS_ERR("calloc() Fail");
                free(activity);
-               CTS_ERR("calloc() return NULL");
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
        activity->photos->l_type = CTSVC_RECORD_ACTIVITY_PHOTO;
@@ -866,7 +866,7 @@ static int __ctsvc_url_create(contacts_record_h *out_record)
 static int __ctsvc_name_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_name_s *name = (ctsvc_name_s*)record;
-       name->base.plugin_cbs = NULL;   // help to find double destroy bug (refer to the contacts_record_destroy)
+       name->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(name->base.properties_flags);
 
        free(name->first);
@@ -900,7 +900,7 @@ static void __ctsvc_temp_image_hash_table_remove(char *filename)
 
        if (NULL == __ctsvc_temp_image_file_hash_table) {
                if (unlink(filename) < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
                return;
        }
@@ -908,7 +908,7 @@ static void __ctsvc_temp_image_hash_table_remove(char *filename)
        count = GPOINTER_TO_INT(g_hash_table_lookup(__ctsvc_temp_image_file_hash_table, filename));
        if (count < 1) {
                if (unlink(filename) < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
        }
        else if (1 == count) {
@@ -927,7 +927,7 @@ static void __ctsvc_temp_image_hash_table_remove(char *filename)
 static int __ctsvc_company_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_company_s *company = (ctsvc_company_s*)record;
-       company->base.plugin_cbs = NULL;        // help to find double destroy bug (refer to the contacts_record_destroy)
+       company->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(company->base.properties_flags);
 
        free(company->label);
@@ -950,7 +950,7 @@ static int __ctsvc_company_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_note_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_note_s *note = (ctsvc_note_s*)record;
-       note->base.plugin_cbs = NULL;   // help to find double destroy bug (refer to the contacts_record_destroy)
+       note->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(note->base.properties_flags);
 
        free(note->note);
@@ -962,7 +962,7 @@ static int __ctsvc_note_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_number_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
-       number->base.plugin_cbs = NULL; // help to find double destroy bug (refer to the contacts_record_destroy)
+       number->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(number->base.properties_flags);
 
        free(number->label);
@@ -978,7 +978,7 @@ static int __ctsvc_number_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_email_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_email_s *email = (ctsvc_email_s*)record;
-       email->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       email->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(email->base.properties_flags);
 
        free(email->label);
@@ -991,7 +991,7 @@ static int __ctsvc_email_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_group_relation_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_group_relation_s *group = (ctsvc_group_relation_s*)record;
-       group->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       group->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(group->base.properties_flags);
 
        free(group->group_name);
@@ -1003,7 +1003,7 @@ static int __ctsvc_group_relation_destroy(contacts_record_h record, bool delete_
 static int __ctsvc_activity_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
-       activity->base.plugin_cbs = NULL;       // help to find double destroy bug (refer to the contacts_record_destroy)
+       activity->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(activity->base.properties_flags);
 
        free(activity->source_name);
@@ -1019,7 +1019,7 @@ static int __ctsvc_activity_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_activity_photo_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
-       photo->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       photo->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(photo->base.properties_flags);
 
        free(photo->photo_url);
@@ -1031,7 +1031,7 @@ static int __ctsvc_activity_photo_destroy(contacts_record_h record, bool delete_
 static int __ctsvc_event_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_event_s *event = (ctsvc_event_s*)record;
-       event->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       event->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(event->base.properties_flags);
 
        free(event->label);
@@ -1056,7 +1056,7 @@ static int __ctsvc_messenger_destroy(contacts_record_h record, bool delete_child
 static int __ctsvc_address_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_address_s *address = (ctsvc_address_s*)record;
-       address->base.plugin_cbs = NULL;        // help to find double destroy bug (refer to the contacts_record_destroy)
+       address->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(address->base.properties_flags);
 
        free(address->label);
@@ -1074,7 +1074,7 @@ static int __ctsvc_address_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_url_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_url_s *url = (ctsvc_url_s*)record;
-       url->base.plugin_cbs = NULL;    // help to find double destroy bug (refer to the contacts_record_destroy)
+       url->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(url->base.properties_flags);
 
        free(url->label);
@@ -1086,7 +1086,7 @@ static int __ctsvc_url_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_nickname_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
-       nickname->base.plugin_cbs = NULL;       // help to find double destroy bug (refer to the contacts_record_destroy)
+       nickname->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(nickname->base.properties_flags);
 
        free(nickname->label);
@@ -1099,7 +1099,7 @@ static int __ctsvc_nickname_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_profile_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
-       profile->base.plugin_cbs = NULL;        // help to find double destroy bug (refer to the contacts_record_destroy)
+       profile->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(profile->base.properties_flags);
 
        free(profile->uid);
@@ -1117,7 +1117,7 @@ static int __ctsvc_profile_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_relationship_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
-       relationship->base.plugin_cbs = NULL;   // help to find double destroy bug (refer to the contacts_record_destroy)
+       relationship->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(relationship->base.properties_flags);
 
        free(relationship->label);
@@ -1130,7 +1130,7 @@ static int __ctsvc_relationship_destroy(contacts_record_h record, bool delete_ch
 static int __ctsvc_image_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_image_s *image = (ctsvc_image_s*)record;
-       image->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       image->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(image->base.properties_flags);
 
        free(image->label);
@@ -1145,7 +1145,7 @@ static int __ctsvc_image_destroy(contacts_record_h record, bool delete_child)
 static int __ctsvc_extension_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_extension_s *data = (ctsvc_extension_s*)record;
-       data->base.plugin_cbs = NULL;   // help to find double destroy bug (refer to the contacts_record_destroy)
+       data->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(data->base.properties_flags);
 
        free(data->data2);
@@ -1167,7 +1167,7 @@ static int __ctsvc_extension_destroy(contacts_record_h record, bool delete_child
 static int __ctsvc_simple_contact_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_simple_contact_s *contact= (ctsvc_simple_contact_s*)record;
-       contact->base.plugin_cbs = NULL;        // help to find double destroy bug (refer to the contacts_record_destroy)
+       contact->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(contact->base.properties_flags);
 
        free(contact->display_name);
@@ -1189,134 +1189,110 @@ static int __ctsvc_contact_create(contacts_record_h *out_record)
        RETVM_IF(NULL == contact, CONTACTS_ERROR_OUT_OF_MEMORY,
                        "Out of memory : calloc is failed");
 
-       contact->name = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->name) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->name->l_type = CTSVC_RECORD_NAME;
-
-       contact->company = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->company) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->company->l_type = CTSVC_RECORD_COMPANY;
-
-       contact->note = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->note) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->note->l_type = CTSVC_RECORD_NOTE;
-
-       contact->numbers = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->numbers) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->numbers->l_type = CTSVC_RECORD_NUMBER;
-
-       contact->emails = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->emails) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->emails->l_type = CTSVC_RECORD_EMAIL;
-
-       contact->grouprelations = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->grouprelations) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->grouprelations->l_type = CTSVC_RECORD_GROUP_RELATION;
-
-       contact->events = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->events) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->events->l_type = CTSVC_RECORD_EVENT;
-
-       contact->messengers = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->messengers) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->messengers->l_type = CTSVC_RECORD_MESSENGER;
-
-       contact->postal_addrs = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->postal_addrs) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
-
-       contact->urls = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->urls) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->urls->l_type = CTSVC_RECORD_URL;
-
-       contact->nicknames = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->nicknames) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->nicknames->l_type = CTSVC_RECORD_NICKNAME;
-
-       contact->profiles = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->profiles) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->profiles->l_type = CTSVC_RECORD_PROFILE;
-
-       contact->relationships = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->relationships) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
-
-       contact->images = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->images) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->images->l_type = CTSVC_RECORD_IMAGE;
-
-       contact->extensions = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == contact->extensions) {
-               __ctsvc_contact_destroy((contacts_record_h)contact, true);
-               CTS_ERR("calloc() return NULL");
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       contact->extensions->l_type = CTSVC_RECORD_EXTENSION;
-
-       *out_record = (contacts_record_h)contact;
-       return CONTACTS_ERROR_NONE;
+       do {
+               contact->name = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->name)
+                       break;
+               contact->name->l_type = CTSVC_RECORD_NAME;
+
+               contact->company = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->company)
+                       break;
+               contact->company->l_type = CTSVC_RECORD_COMPANY;
+
+               contact->note = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->note)
+                       break;
+               contact->note->l_type = CTSVC_RECORD_NOTE;
+
+               contact->numbers = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->numbers)
+                       break;
+               contact->numbers->l_type = CTSVC_RECORD_NUMBER;
+
+               contact->emails = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->emails)
+                       break;
+               contact->emails->l_type = CTSVC_RECORD_EMAIL;
+
+               contact->grouprelations = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->grouprelations)
+                       break;
+               contact->grouprelations->l_type = CTSVC_RECORD_GROUP_RELATION;
+
+               contact->events = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->events)
+                       break;
+               contact->events->l_type = CTSVC_RECORD_EVENT;
+
+               contact->messengers = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->messengers)
+                       break;
+               contact->messengers->l_type = CTSVC_RECORD_MESSENGER;
+
+               contact->postal_addrs = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->postal_addrs)
+                       break;
+               contact->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
+
+               contact->urls = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->urls)
+                       break;
+               contact->urls->l_type = CTSVC_RECORD_URL;
+
+               contact->nicknames = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->nicknames)
+                       break;
+               contact->nicknames->l_type = CTSVC_RECORD_NICKNAME;
+
+               contact->profiles = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->profiles)
+                       break;
+               contact->profiles->l_type = CTSVC_RECORD_PROFILE;
+
+               contact->relationships = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->relationships)
+                       break;
+               contact->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
+
+               contact->images = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->images)
+                       break;
+               contact->images->l_type = CTSVC_RECORD_IMAGE;
+
+               contact->extensions = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == contact->extensions)
+                       break;
+               contact->extensions->l_type = CTSVC_RECORD_EXTENSION;
+
+               *out_record = (contacts_record_h)contact;
+               return CONTACTS_ERROR_NONE;
+       } while (0);
+
+       CTS_ERR("calloc() Fail");
+       free(contact->extensions);
+       free(contact->images);
+       free(contact->relationships);
+       free(contact->profiles);
+       free(contact->nicknames);
+       free(contact->urls);
+       free(contact->postal_addrs);
+       free(contact->messengers);
+       free(contact->events);
+       free(contact->grouprelations);
+       free(contact->emails);
+       free(contact->numbers);
+       free(contact->note);
+       free(contact->company);
+       free(contact->name);
+       free(contact);
+       return CONTACTS_ERROR_OUT_OF_MEMORY;
 }
 
 static int __ctsvc_contact_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
-       contact->base.plugin_cbs = NULL;        // help to find double destroy bug (refer to the contacts_record_destroy)
+       contact->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(contact->base.properties_flags);
 
        free(contact->display_name);
@@ -1673,7 +1649,7 @@ static int __ctsvc_activity_get_int(contacts_record_h record, unsigned int prope
 }
 
 static int __ctsvc_activity_add_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        ctsvc_activity_s *s_activity = (ctsvc_activity_s *)record;
        ctsvc_activity_photo_s *s_activity_photo = (ctsvc_activity_photo_s *)child_record;
@@ -1686,7 +1662,7 @@ static int __ctsvc_activity_add_child_record(contacts_record_h record,
 }
 
 static int __ctsvc_activity_remove_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        ctsvc_activity_s *s_activity = (ctsvc_activity_s *)record;
        ctsvc_activity_photo_s *s_activity_photo = (ctsvc_activity_photo_s *)child_record;
@@ -1699,7 +1675,7 @@ static int __ctsvc_activity_remove_child_record(contacts_record_h record,
 }
 
 static int __ctsvc_activity_get_child_record_count(contacts_record_h record,
-               unsigned int property_id, int *count )
+               unsigned int property_id, int *count)
 {
        ctsvc_activity_s *s_activity = (ctsvc_activity_s *)record;
        RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO, CONTACTS_ERROR_INVALID_PARAMETER, "property_id(%d) is not supported", property_id);
@@ -1711,7 +1687,7 @@ static int __ctsvc_activity_get_child_record_count(contacts_record_h record,
 }
 
 static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record,
-               unsigned int property_id, int index, contacts_record_h* out_record )
+               unsigned int property_id, int index, contacts_record_h* out_record)
 {
        int count = 0;
        ctsvc_activity_s *s_activity = (ctsvc_activity_s *)record;
@@ -1732,7 +1708,7 @@ static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record,
 
 
 static int __ctsvc_activity_clone_child_record_list(contacts_record_h record,
-               unsigned int property_id, contacts_list_h* out_list )
+               unsigned int property_id, contacts_list_h* out_list)
 {
        int count;
        ctsvc_activity_s *s_activity = (ctsvc_activity_s *)record;
@@ -1854,36 +1830,42 @@ static int __ctsvc_extension_get_int(contacts_record_h record, unsigned int prop
 }
 
 
-static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_CONTACT_ID:
+               CHECK_DIRTY_VAL(contact->id, value, is_dirty);
                contact->id = value;
                break;
        case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
+               CHECK_DIRTY_VAL(contact->display_source_type, value, is_dirty);
                contact->display_source_type = value;
                break;
        case CTSVC_PROPERTY_CONTACT_PERSON_ID:
-               RETVM_IF(contact->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (contact)", property_id);
+               CHECK_DIRTY_VAL(contact->person_id, value, is_dirty);
                contact->person_id = value;
                break;
        case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
+               CHECK_DIRTY_VAL(contact->changed_time, value, is_dirty);
                contact->changed_time = value;
                break;
        case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
-               RETVM_IF(contact->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (contact)", property_id);
+               CHECK_DIRTY_VAL(contact->addressbook_id, value, is_dirty);
                contact->addressbook_id = value;
                break;
        case CTSVC_PROPERTY_CONTACT_LINK_MODE:
                RETVM_IF(value != CONTACTS_CONTACT_LINK_MODE_NONE
                                                && value != CONTACTS_CONTACT_LINK_MODE_IGNORE_ONCE,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : link mode is in invalid range (%d)", value);
-               RETVM_IF(contact->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (contact)", property_id);
+               CHECK_DIRTY_VAL(contact->link_mode, value, is_dirty);
                contact->link_mode = value;
                break;
        default:
@@ -1893,23 +1875,27 @@ static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_CONTACT_ID:
+               CHECK_DIRTY_VAL(contact->contact_id, value, is_dirty);
                contact->contact_id = value;
                break;
        case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
+               CHECK_DIRTY_VAL(contact->display_source_type, value, is_dirty);
                contact->display_source_type = value;
                break;
        case CTSVC_PROPERTY_CONTACT_PERSON_ID:
+               CHECK_DIRTY_VAL(contact->person_id, value, is_dirty);
                contact->person_id = value;
                break;
        case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
-               RETVM_IF(contact->contact_id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < contact->contact_id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalide parameter : property_id(%d) is a read-only value (contact)", property_id);
+               CHECK_DIRTY_VAL(contact->addressbook_id, value, is_dirty);
                contact->addressbook_id = value;
                break;
        default:
@@ -1919,17 +1905,19 @@ static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_name_s *name = (ctsvc_name_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NAME_ID:
+               CHECK_DIRTY_VAL(name->id, value, is_dirty);
                name->id = value;
                break;
        case CTSVC_PROPERTY_NAME_CONTACT_ID:
-               RETVM_IF(name->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < name->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (name)", property_id);
+               CHECK_DIRTY_VAL(name->contact_id, value, is_dirty);
                name->contact_id = value;
                break;
        default:
@@ -1939,24 +1927,27 @@ static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_company_s *company = (ctsvc_company_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_COMPANY_ID:
+               CHECK_DIRTY_VAL(company->id, value, is_dirty);
                company->id = value;
                break;
        case CTSVC_PROPERTY_COMPANY_CONTACT_ID:
-               RETVM_IF(company->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < company->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (company)", property_id);
+               CHECK_DIRTY_VAL(company->contact_id, value, is_dirty);
                company->contact_id = value;
                break;
        case CTSVC_PROPERTY_COMPANY_TYPE:
                RETVM_IF(value < CONTACTS_COMPANY_TYPE_OTHER
-                                               || value > CONTACTS_COMPANY_TYPE_WORK,
+                                               || CONTACTS_COMPANY_TYPE_WORK < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : company type is in invalid range (%d)", value);
 
+               CHECK_DIRTY_VAL(company->type, value, is_dirty);
                company->type = value;
                break;
        default:
@@ -1966,17 +1957,19 @@ static int __ctsvc_company_set_int(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_note_s *note = (ctsvc_note_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NOTE_ID:
+               CHECK_DIRTY_VAL(note->id, value, is_dirty);
                note->id = value;
                break;
        case CTSVC_PROPERTY_NOTE_CONTACT_ID:
-               RETVM_IF(note->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < note->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (note)", property_id);
+               CHECK_DIRTY_VAL(note->contact_id, value, is_dirty);
                note->contact_id = value;
                break;
        default:
@@ -1986,20 +1979,23 @@ static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NUMBER_ID:
+               CHECK_DIRTY_VAL(number->id, value, is_dirty);
                number->id = value;
                break;
        case CTSVC_PROPERTY_NUMBER_CONTACT_ID:
-               RETVM_IF(number->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < number->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (number)", property_id);
+               CHECK_DIRTY_VAL(number->contact_id, value, is_dirty);
                number->contact_id = value;
                break;
        case CTSVC_PROPERTY_NUMBER_TYPE:
+               CHECK_DIRTY_VAL(number->type, value, is_dirty);
                number->type = value;
                break;
        default:
@@ -2009,24 +2005,27 @@ static int __ctsvc_number_set_int(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_email_s *email = (ctsvc_email_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EMAIL_ID:
+               CHECK_DIRTY_VAL(email->id, value, is_dirty);
                email->id = value;
                break;
        case CTSVC_PROPERTY_EMAIL_CONTACT_ID:
-               RETVM_IF(email->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < email->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (email)", property_id);
+               CHECK_DIRTY_VAL(email->contact_id, value, is_dirty);
                email->contact_id = value;
                break;
        case CTSVC_PROPERTY_EMAIL_TYPE:
                RETVM_IF(value < CONTACTS_EMAIL_TYPE_OTHER
-                                               || value > CONTACTS_EMAIL_TYPE_MOBILE,
+                                               || CONTACTS_EMAIL_TYPE_MOBILE < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : email type is in invalid range (%d)", value);
 
+               CHECK_DIRTY_VAL(email->type, value, is_dirty);
                email->type = value;
                break;
        default:
@@ -2036,24 +2035,27 @@ static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_url_s *url = (ctsvc_url_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_URL_ID:
+               CHECK_DIRTY_VAL(url->id, value, is_dirty);
                url->id = value;
                break;
        case CTSVC_PROPERTY_URL_CONTACT_ID:
-               RETVM_IF(url->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < url->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (url)", property_id);
+               CHECK_DIRTY_VAL(url->contact_id, value, is_dirty);
                url->contact_id = value;
                break;
        case CTSVC_PROPERTY_URL_TYPE:
                RETVM_IF(value < CONTACTS_URL_TYPE_OTHER
-                                               || value > CONTACTS_URL_TYPE_WORK ,
+                                               || CONTACTS_URL_TYPE_WORK < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : url type is in invalid range (%d)", value);
 
+               CHECK_DIRTY_VAL(url->type, value, is_dirty);
                url->type = value;
                break;
        default:
@@ -2063,29 +2065,34 @@ static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EVENT_ID:
+               CHECK_DIRTY_VAL(event->id, value, is_dirty);
                event->id = value;
                break;
        case CTSVC_PROPERTY_EVENT_CONTACT_ID:
-               RETVM_IF(event->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < event->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (event)", property_id);
+               CHECK_DIRTY_VAL(event->contact_id, value, is_dirty);
                event->contact_id = value;
                break;
        case CTSVC_PROPERTY_EVENT_TYPE:
                RETVM_IF(value < CONTACTS_EVENT_TYPE_OTHER
-                                               || value > CONTACTS_EVENT_TYPE_ANNIVERSARY,
+                                               || CONTACTS_EVENT_TYPE_ANNIVERSARY < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : event type is in invalid range (%d)", value);
+               CHECK_DIRTY_VAL(event->type, value, is_dirty);
                event->type = value;
                break;
        case CTSVC_PROPERTY_EVENT_DATE:
+               CHECK_DIRTY_VAL(event->date, value, is_dirty);
                event->date = value;
                break;
        case CTSVC_PROPERTY_EVENT_CALENDAR_TYPE:
+               CHECK_DIRTY_VAL(event->calendar_type, value, is_dirty);
                event->calendar_type = value;
                break;
        default:
@@ -2095,17 +2102,19 @@ static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NICKNAME_ID:
+               CHECK_DIRTY_VAL(nickname->id, value, is_dirty);
                nickname->id = value;
                break;
        case CTSVC_PROPERTY_NICKNAME_CONTACT_ID:
-               RETVM_IF(nickname->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < nickname->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (nickname)", property_id);
+               CHECK_DIRTY_VAL(nickname->contact_id, value, is_dirty);
                nickname->contact_id = value;
                break;
        default:
@@ -2115,23 +2124,26 @@ static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_address_s *address = (ctsvc_address_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ADDRESS_ID:
+               CHECK_DIRTY_VAL(address->id, value, is_dirty);
                address->id = value;
                break;
        case CTSVC_PROPERTY_ADDRESS_CONTACT_ID:
-               RETVM_IF(address->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < address->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (address)", property_id);
+               CHECK_DIRTY_VAL(address->contact_id, value, is_dirty);
                address->contact_id = value;
                break;
        case CTSVC_PROPERTY_ADDRESS_TYPE:
                RETVM_IF(value < CONTACTS_ADDRESS_TYPE_OTHER
-                                               || value > CONTACTS_ADDRESS_TYPE_PARCEL,
+                                               || CONTACTS_ADDRESS_TYPE_PARCEL < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : address type is %d", value);
+               CHECK_DIRTY_VAL(address->type, value, is_dirty);
                address->type = value;
                break;
        default:
@@ -2141,24 +2153,27 @@ static int __ctsvc_address_set_int(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_messenger_s *messenger = (ctsvc_messenger_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_MESSENGER_ID:
+               CHECK_DIRTY_VAL(messenger->id, value, is_dirty);
                messenger->id = value;
                break;
        case CTSVC_PROPERTY_MESSENGER_CONTACT_ID:
-               RETVM_IF(messenger->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < messenger->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (messenger)", property_id);
+               CHECK_DIRTY_VAL(messenger->contact_id, value, is_dirty);
                messenger->contact_id = value;
                break;
        case CTSVC_PROPERTY_MESSENGER_TYPE:
                RETVM_IF(value < CONTACTS_MESSENGER_TYPE_OTHER
-                                                       || value > CONTACTS_MESSENGER_TYPE_IRC,
+                                                       || CONTACTS_MESSENGER_TYPE_IRC < value,
                                        CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : messenger type is in invalid range (%d)", value);
 
+               CHECK_DIRTY_VAL(messenger->type, value, is_dirty);
                messenger->type = value;
                break;
        default:
@@ -2168,22 +2183,25 @@ static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_group_relation_s *group = (ctsvc_group_relation_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_GROUP_RELATION_ID:
+               CHECK_DIRTY_VAL(group->id, value, is_dirty);
                group->id = value;
                break;
        case CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID:
-               RETVM_IF(group->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (group)", property_id);
+               CHECK_DIRTY_VAL(group->contact_id, value, is_dirty);
                group->contact_id = value;
                break;
        case CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID:
-               RETVM_IF(group->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (group)", property_id);
+               CHECK_DIRTY_VAL(group->group_id, value, is_dirty);
                group->group_id = value;
                break;
        default:
@@ -2193,20 +2211,23 @@ static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_activity_s *activity = (ctsvc_activity_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ACTIVITY_ID:
+               CHECK_DIRTY_VAL(activity->id, value, is_dirty);
                activity->id = value;
                break;
        case CTSVC_PROPERTY_ACTIVITY_CONTACT_ID:
-               RETVM_IF(activity->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < activity->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (activity)", property_id);
+               CHECK_DIRTY_VAL(activity->contact_id, value, is_dirty);
                activity->contact_id = value;
                break;
        case CTSVC_PROPERTY_ACTIVITY_TIMESTAMP:
+               CHECK_DIRTY_VAL(activity->timestamp, value, is_dirty);
                activity->timestamp = value;
                break;
        default:
@@ -2216,18 +2237,21 @@ static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ACTIVITY_PHOTO_ID:
+               CHECK_DIRTY_VAL(photo->id, value, is_dirty);
                photo->id = value;
                break;
        case CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID:
+               CHECK_DIRTY_VAL(photo->activity_id, value, is_dirty);
                photo->activity_id = value;
                break;
        case CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX:
+               CHECK_DIRTY_VAL(photo->sort_index, value, is_dirty);
                photo->sort_index = value;
                break;
        default:
@@ -2237,20 +2261,23 @@ static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_profile_s *profile = (ctsvc_profile_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PROFILE_ID:
+               CHECK_DIRTY_VAL(profile->id, value, is_dirty);
                profile->id = value;
                break;
        case CTSVC_PROPERTY_PROFILE_CONTACT_ID:
-               RETVM_IF(profile->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < profile->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (profile)", property_id);
+               CHECK_DIRTY_VAL(profile->contact_id, value, is_dirty);
                profile->contact_id = value;
                break;
        case CTSVC_PROPERTY_PROFILE_ORDER:
+               CHECK_DIRTY_VAL(profile->order, value, is_dirty);
                profile->order = value;
                break;
        default:
@@ -2260,24 +2287,26 @@ static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_RELATIONSHIP_ID:
+               CHECK_DIRTY_VAL(relationship->id, value, is_dirty);
                relationship->id = value;
                break;
        case CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID:
-               RETVM_IF(relationship->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < relationship->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (relationship)", property_id);
+               CHECK_DIRTY_VAL(relationship->contact_id, value, is_dirty);
                relationship->contact_id = value;
                break;
        case CTSVC_PROPERTY_RELATIONSHIP_TYPE:
                RETVM_IF(value < CONTACTS_RELATIONSHIP_TYPE_OTHER
-                                               || value > CONTACTS_RELATIONSHIP_TYPE_CUSTOM,
+                                               || CONTACTS_RELATIONSHIP_TYPE_CUSTOM < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : relationship type is in invalid range (%d)", value);
-
+               CHECK_DIRTY_VAL(relationship->type, value, is_dirty);
                relationship->type = value;
                break;
        default:
@@ -2287,23 +2316,26 @@ static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int p
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_image_s *image = (ctsvc_image_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_IMAGE_ID:
+               CHECK_DIRTY_VAL(image->id, value, is_dirty);
                image->id = value;
                break;
        case CTSVC_PROPERTY_IMAGE_CONTACT_ID:
-               RETVM_IF(image->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < image->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (image)", property_id);
+               CHECK_DIRTY_VAL(image->contact_id, value, is_dirty);
                image->contact_id = value;
                break;
        case CTSVC_PROPERTY_IMAGE_TYPE:
                RETVM_IF(value < CONTACTS_IMAGE_TYPE_OTHER || CONTACTS_IMAGE_TYPE_CUSTOM < value,
                                CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : image type is in invalid range (%d)", value);
+               CHECK_DIRTY_VAL(image->type, value, is_dirty);
                image->type = value;
                break;
        default:
@@ -2313,20 +2345,23 @@ static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_extension_s *extension = (ctsvc_extension_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EXTENSION_ID:
+               CHECK_DIRTY_VAL(extension->id, value, is_dirty);
                extension->id = value;
                break;
        case CTSVC_PROPERTY_EXTENSION_CONTACT_ID:
-               RETVM_IF(extension->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < extension->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (extension)", property_id);
+               CHECK_DIRTY_VAL(extension->contact_id, value, is_dirty);
                extension->contact_id = value;
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA1:
+               CHECK_DIRTY_VAL(extension->data1, value, is_dirty);
                extension->data1 = value;
                break;
        default:
@@ -2336,7 +2371,7 @@ static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_contact_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_contact_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
        switch(property_id) {
@@ -2434,7 +2469,7 @@ static int __ctsvc_contact_get_record_list_p(contacts_record_h record,
 }
 
 static int __ctsvc_contact_get_child_record_count(contacts_record_h record,
-               unsigned int property_id, int *count )
+               unsigned int property_id, int *count)
 {
        int ret;
        contacts_list_h list = NULL;
@@ -2444,14 +2479,14 @@ static int __ctsvc_contact_get_child_record_count(contacts_record_h record,
        if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
                return ret;
 
-       if(list)
+       if (list)
                contacts_list_get_count(list, count);
 
        return CONTACTS_ERROR_NONE;
 }
 
 static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record,
-               unsigned int property_id, int index, contacts_record_h* out_record )
+               unsigned int property_id, int index, contacts_record_h* out_record)
 {
        int ret;
        int count;
@@ -2472,7 +2507,7 @@ static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record,
 }
 
 static int __ctsvc_contact_clone_child_record_list(contacts_record_h record,
-               unsigned int property_id, contacts_list_h* out_list )
+               unsigned int property_id, contacts_list_h* out_list)
 {
        int ret;
        int count;
@@ -2598,7 +2633,7 @@ static int __ctsvc_contact_get_child_record_id(contacts_record_h child_record)
 }
 
 static int __ctsvc_contact_add_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        int ret;
        contacts_list_h list = NULL;
@@ -2623,7 +2658,7 @@ static int __ctsvc_contact_add_child_record(contacts_record_h record,
 }
 
 static int __ctsvc_contact_remove_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        int id;
        int ret;
@@ -2640,7 +2675,7 @@ static int __ctsvc_contact_remove_child_record(contacts_record_h record,
 }
 
 static int __ctsvc_simple_contact_get_str_real(contacts_record_h record,
-               unsigned int property_id, char** out_str, bool copy )
+               unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s *)record;
 
@@ -2680,7 +2715,7 @@ static int __ctsvc_simple_contact_get_str(contacts_record_h record, unsigned int
        return __ctsvc_simple_contact_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_name_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_name_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_name_s *name = (ctsvc_name_s *)record;
 
@@ -2726,7 +2761,7 @@ static int __ctsvc_name_get_str(contacts_record_h record, unsigned int property_
        return __ctsvc_name_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_company_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_company_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_company_s *company = (ctsvc_company_s *)record;
 
@@ -2778,7 +2813,7 @@ static int __ctsvc_company_get_str(contacts_record_h record, unsigned int proper
        return __ctsvc_company_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_note_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_note_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_note_s *note = (ctsvc_note_s *)record;
 
@@ -2803,7 +2838,7 @@ static int __ctsvc_note_get_str(contacts_record_h record, unsigned int property_
        return __ctsvc_note_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_number_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_number_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
 
@@ -2831,7 +2866,7 @@ static int __ctsvc_number_get_str(contacts_record_h record, unsigned int propert
        return __ctsvc_number_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_email_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_email_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_email_s *email = (ctsvc_email_s*)record;
 
@@ -2859,7 +2894,7 @@ static int __ctsvc_email_get_str(contacts_record_h record, unsigned int property
        return __ctsvc_email_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_url_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_url_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_url_s *url = (ctsvc_url_s *)record;
 
@@ -2887,7 +2922,7 @@ static int __ctsvc_url_get_str(contacts_record_h record, unsigned int property_i
        return __ctsvc_url_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_event_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_event_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
@@ -2912,7 +2947,7 @@ static int __ctsvc_event_get_str(contacts_record_h record, unsigned int property
        return __ctsvc_event_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_nickname_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_nickname_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)record;
 
@@ -2937,7 +2972,7 @@ static int __ctsvc_nickname_get_str(contacts_record_h record, unsigned int prope
        return __ctsvc_nickname_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_address_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_address_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_address_s *address = (ctsvc_address_s *)record;
 
@@ -2983,7 +3018,7 @@ static int __ctsvc_address_get_str(contacts_record_h record, unsigned int proper
        return __ctsvc_address_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_messenger_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_messenger_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_messenger_s *messenger = (ctsvc_messenger_s *)record;
 
@@ -3012,7 +3047,7 @@ static int __ctsvc_messenger_get_str(contacts_record_h record, unsigned int prop
 }
 
 static int __ctsvc_group_relation_get_str_real(contacts_record_h record,
-               unsigned int property_id, char** out_str, bool copy )
+               unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_group_relation_s *group_relation = (ctsvc_group_relation_s *)record;
 
@@ -3038,7 +3073,7 @@ static int __ctsvc_group_relation_get_str(contacts_record_h record, unsigned int
        return __ctsvc_group_relation_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_activity_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_activity_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_activity_s *activity = (ctsvc_activity_s *)record;
 
@@ -3072,7 +3107,7 @@ static int __ctsvc_activity_get_str(contacts_record_h record, unsigned int prope
        return __ctsvc_activity_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_activity_photo_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_activity_photo_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s *)record;
 
@@ -3097,7 +3132,7 @@ static int __ctsvc_activity_photo_get_str(contacts_record_h record, unsigned int
        return __ctsvc_activity_photo_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_profile_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_profile_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_profile_s *profile = (ctsvc_profile_s *)record;
 
@@ -3143,7 +3178,7 @@ static int __ctsvc_profile_get_str(contacts_record_h record, unsigned int proper
        return __ctsvc_profile_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_relationship_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_relationship_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
 
@@ -3171,7 +3206,7 @@ static int __ctsvc_relationship_get_str(contacts_record_h record, unsigned int p
        return __ctsvc_relationship_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_image_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_image_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_image_s *image = (ctsvc_image_s *)record;
 
@@ -3199,7 +3234,7 @@ static int __ctsvc_image_get_str(contacts_record_h record, unsigned int property
        return __ctsvc_image_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_extension_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_extension_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_extension_s *extension = (ctsvc_extension_s *)record;
 
@@ -3254,12 +3289,13 @@ static int __ctsvc_extension_get_str(contacts_record_h record, unsigned int prop
        return __ctsvc_extension_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
+               CHECK_DIRTY_STR(contact->display_name, str, is_dirty);
                FREEandSTRDUP(contact->display_name, str);
                break;
 /*
@@ -3267,18 +3303,23 @@ static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int proper
                return CONTACTS_ERROR_INVALID_PARAMETER;
 */
        case CTSVC_PROPERTY_CONTACT_RINGTONE:
+               CHECK_DIRTY_STR(contact->ringtone_path, str, is_dirty);
                FREEandSTRDUP(contact->ringtone_path, str);
                break;
        case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
+               CHECK_DIRTY_STR(contact->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(contact->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_CONTACT_UID:
+               CHECK_DIRTY_STR(contact->uid, str, is_dirty);
                FREEandSTRDUP(contact->uid, str);
                break;
        case CTSVC_PROPERTY_CONTACT_VIBRATION:
+               CHECK_DIRTY_STR(contact->vibration, str, is_dirty);
                FREEandSTRDUP(contact->vibration, str);
                break;
        case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
+               CHECK_DIRTY_STR(contact->message_alert, str, is_dirty);
                FREEandSTRDUP(contact->message_alert, str);
                break;
        default :
@@ -3289,12 +3330,13 @@ static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int proper
 }
 
 
-static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
+               CHECK_DIRTY_STR(contact->display_name, str, is_dirty);
                FREEandSTRDUP(contact->display_name, str);
                break;
 /*
@@ -3302,18 +3344,23 @@ static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int
                return CONTACTS_ERROR_INVALID_PARAMETER;
 */
        case CTSVC_PROPERTY_CONTACT_RINGTONE:
+               CHECK_DIRTY_STR(contact->ringtone_path, str, is_dirty);
                FREEandSTRDUP(contact->ringtone_path, str);
                break;
        case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
+               CHECK_DIRTY_STR(contact->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(contact->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_CONTACT_UID:
+               CHECK_DIRTY_STR(contact->uid, str, is_dirty);
                FREEandSTRDUP(contact->uid, str);
                break;
        case CTSVC_PROPERTY_CONTACT_VIBRATION:
+               CHECK_DIRTY_STR(contact->vibration, str, is_dirty);
                FREEandSTRDUP(contact->vibration, str);
                break;
        case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
+               CHECK_DIRTY_STR(contact->message_alert, str, is_dirty);
                FREEandSTRDUP(contact->message_alert, str);
                break;
        default :
@@ -3323,33 +3370,41 @@ static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_name_s *name = (ctsvc_name_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NAME_FIRST:
+               CHECK_DIRTY_STR(name->first, str, is_dirty);
                FREEandSTRDUP(name->first, str);
                break;
        case CTSVC_PROPERTY_NAME_LAST:
+               CHECK_DIRTY_STR(name->last, str, is_dirty);
                FREEandSTRDUP(name->last, str);
                break;
        case CTSVC_PROPERTY_NAME_ADDITION:
+               CHECK_DIRTY_STR(name->addition, str, is_dirty);
                FREEandSTRDUP(name->addition, str);
                break;
        case CTSVC_PROPERTY_NAME_SUFFIX:
+               CHECK_DIRTY_STR(name->suffix, str, is_dirty);
                FREEandSTRDUP(name->suffix, str);
                break;
        case CTSVC_PROPERTY_NAME_PREFIX:
+               CHECK_DIRTY_STR(name->prefix, str, is_dirty);
                FREEandSTRDUP(name->prefix, str);
                break;
        case CTSVC_PROPERTY_NAME_PHONETIC_FIRST:
+               CHECK_DIRTY_STR(name->phonetic_first, str, is_dirty);
                FREEandSTRDUP(name->phonetic_first, str);
                break;
        case CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE:
+               CHECK_DIRTY_STR(name->phonetic_middle, str, is_dirty);
                FREEandSTRDUP(name->phonetic_middle, str);
                break;
        case CTSVC_PROPERTY_NAME_PHONETIC_LAST:
+               CHECK_DIRTY_STR(name->phonetic_last, str, is_dirty);
                FREEandSTRDUP(name->phonetic_last, str);
                break;
        default :
@@ -3359,43 +3414,53 @@ static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_company_s *company = (ctsvc_company_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_COMPANY_LABEL:
+               CHECK_DIRTY_STR(company->label, str, is_dirty);
                FREEandSTRDUP(company->label, str);
                break;
        case CTSVC_PROPERTY_COMPANY_NAME:
+               CHECK_DIRTY_STR(company->name, str, is_dirty);
                FREEandSTRDUP(company->name, str);
                break;
        case CTSVC_PROPERTY_COMPANY_DEPARTMENT:
+               CHECK_DIRTY_STR(company->department, str, is_dirty);
                FREEandSTRDUP(company->department, str);
                break;
        case CTSVC_PROPERTY_COMPANY_JOB_TITLE:
+               CHECK_DIRTY_STR(company->job_title, str, is_dirty);
                FREEandSTRDUP(company->job_title, str);
                break;
        case CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME:
+               CHECK_DIRTY_STR(company->assistant_name, str, is_dirty);
                FREEandSTRDUP(company->assistant_name, str);
                break;
        case CTSVC_PROPERTY_COMPANY_ROLE:
+               CHECK_DIRTY_STR(company->role, str, is_dirty);
                FREEandSTRDUP(company->role, str);
                break;
        case CTSVC_PROPERTY_COMPANY_LOGO:
-               if (company->logo && company->is_vcard && (NULL == str || 0 != strcmp(company->logo, str))) {
+               if (company->logo && company->is_vcard && (NULL == str || STRING_EQUAL != strcmp(company->logo, str))) {
                        company->is_vcard = false;
                        __ctsvc_temp_image_hash_table_remove(company->logo);
                }
+               CHECK_DIRTY_STR(company->logo, str, is_dirty);
                FREEandSTRDUP(company->logo, str);
                break;
        case CTSVC_PROPERTY_COMPANY_LOCATION:
+               CHECK_DIRTY_STR(company->location, str, is_dirty);
                FREEandSTRDUP(company->location, str);
                break;
        case CTSVC_PROPERTY_COMPANY_DESCRIPTION:
+               CHECK_DIRTY_STR(company->description, str, is_dirty);
                FREEandSTRDUP(company->description, str);
                break;
        case CTSVC_PROPERTY_COMPANY_PHONETIC_NAME:
+               CHECK_DIRTY_STR(company->phonetic_name, str, is_dirty);
                FREEandSTRDUP(company->phonetic_name, str);
                break;
        default :
@@ -3405,12 +3470,13 @@ static int __ctsvc_company_set_str(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_note_s *note = (ctsvc_note_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NOTE_NOTE:
+               CHECK_DIRTY_STR(note->note, str, is_dirty);
                FREEandSTRDUP(note->note, str);
                break;
        default :
@@ -3420,15 +3486,17 @@ static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NUMBER_LABEL:
+               CHECK_DIRTY_STR(number->label, str, is_dirty);
                FREEandSTRDUP(number->label, str);
                break;
        case CTSVC_PROPERTY_NUMBER_NUMBER:
+               CHECK_DIRTY_STR(number->number, str, is_dirty);
                FREEandSTRDUP(number->number, str);
                break;
        default :
@@ -3438,15 +3506,17 @@ static int __ctsvc_number_set_str(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_email_s *email = (ctsvc_email_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EMAIL_EMAIL:
+               CHECK_DIRTY_STR(email->email_addr, str, is_dirty);
                FREEandSTRDUP(email->email_addr, str);
                break;
        case CTSVC_PROPERTY_EMAIL_LABEL:
+               CHECK_DIRTY_STR(email->label, str, is_dirty);
                FREEandSTRDUP(email->label, str);
                break;
        default :
@@ -3456,15 +3526,17 @@ static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_url_s *url = (ctsvc_url_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_URL_URL:
+               CHECK_DIRTY_STR(url->url, str, is_dirty);
                FREEandSTRDUP(url->url, str);
                break;
        case CTSVC_PROPERTY_URL_LABEL:
+               CHECK_DIRTY_STR(url->label, str, is_dirty);
                FREEandSTRDUP(url->label, str);
                break;
        default :
@@ -3474,12 +3546,13 @@ static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EVENT_LABEL:
+               CHECK_DIRTY_STR(event->label, str, is_dirty);
                FREEandSTRDUP(event->label, str);
                break;
        default :
@@ -3489,12 +3562,13 @@ static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NICKNAME_NAME:
+               CHECK_DIRTY_STR(nickname->nickname, str, is_dirty);
                FREEandSTRDUP(nickname->nickname, str);
                break;
        default :
@@ -3504,33 +3578,41 @@ static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_address_s *address = (ctsvc_address_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ADDRESS_LABEL:
+               CHECK_DIRTY_STR(address->label, str, is_dirty);
                FREEandSTRDUP(address->label, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_POSTBOX:
+               CHECK_DIRTY_STR(address->pobox, str, is_dirty);
                FREEandSTRDUP(address->pobox, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_POSTAL_CODE:
+               CHECK_DIRTY_STR(address->postalcode, str, is_dirty);
                FREEandSTRDUP(address->postalcode, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_REGION:
+               CHECK_DIRTY_STR(address->region, str, is_dirty);
                FREEandSTRDUP(address->region, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_LOCALITY:
+               CHECK_DIRTY_STR(address->locality, str, is_dirty);
                FREEandSTRDUP(address->locality, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_STREET:
+               CHECK_DIRTY_STR(address->street, str, is_dirty);
                FREEandSTRDUP(address->street, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_COUNTRY:
+               CHECK_DIRTY_STR(address->country, str, is_dirty);
                FREEandSTRDUP(address->country, str);
                break;
        case CTSVC_PROPERTY_ADDRESS_EXTENDED:
+               CHECK_DIRTY_STR(address->extended, str, is_dirty);
                FREEandSTRDUP(address->extended, str);
                break;
        default :
@@ -3540,15 +3622,17 @@ static int __ctsvc_address_set_str(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_messenger_s *messenger = (ctsvc_messenger_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_MESSENGER_LABEL:
+               CHECK_DIRTY_STR(messenger->label, str, is_dirty);
                FREEandSTRDUP(messenger->label, str);
                break;
        case CTSVC_PROPERTY_MESSENGER_IM_ID:
+               CHECK_DIRTY_STR(messenger->im_id, str, is_dirty);
                FREEandSTRDUP(messenger->im_id, str);
                break;
        default :
@@ -3558,12 +3642,13 @@ static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_group_relation_s *group_relation = (ctsvc_group_relation_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME:
+               CHECK_DIRTY_STR(group_relation->group_name, str, is_dirty);
                FREEandSTRDUP(group_relation->group_name, str);
                break;
 /*
@@ -3577,21 +3662,25 @@ static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_activity_s *activity = (ctsvc_activity_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME:
+               CHECK_DIRTY_STR(activity->source_name, str, is_dirty);
                FREEandSTRDUP(activity->source_name, str);
                break;
        case CTSVC_PROPERTY_ACTIVITY_STATUS:
+               CHECK_DIRTY_STR(activity->status, str, is_dirty);
                FREEandSTRDUP(activity->status, str);
                break;
        case CTSVC_PROPERTY_ACTIVITY_SERVICE_OPERATION:
+               CHECK_DIRTY_STR(activity->service_operation, str, is_dirty);
                FREEandSTRDUP(activity->service_operation, str);
                break;
        case CTSVC_PROPERTY_ACTIVITY_URI:
+               CHECK_DIRTY_STR(activity->uri, str, is_dirty);
                FREEandSTRDUP(activity->uri, str);
                break;
        default :
@@ -3601,12 +3690,13 @@ static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ACTIVITY_PHOTO_URL:
+               CHECK_DIRTY_STR(photo->photo_url, str, is_dirty);
                FREEandSTRDUP(photo->photo_url, str);
                break;
        default :
@@ -3616,33 +3706,41 @@ static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_profile_s *profile = (ctsvc_profile_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PROFILE_UID:
+               CHECK_DIRTY_STR(profile->uid, str, is_dirty);
                FREEandSTRDUP(profile->uid, str);
                break;
        case CTSVC_PROPERTY_PROFILE_TEXT:
+               CHECK_DIRTY_STR(profile->text, str, is_dirty);
                FREEandSTRDUP(profile->text, str);
                break;
        case CTSVC_PROPERTY_PROFILE_SERVICE_OPERATION:
+               CHECK_DIRTY_STR(profile->service_operation, str, is_dirty);
                FREEandSTRDUP(profile->service_operation, str);
                break;
        case CTSVC_PROPERTY_PROFILE_MIME:
+               CHECK_DIRTY_STR(profile->mime, str, is_dirty);
                FREEandSTRDUP(profile->mime, str);
                break;
        case CTSVC_PROPERTY_PROFILE_APP_ID:
+               CHECK_DIRTY_STR(profile->app_id, str, is_dirty);
                FREEandSTRDUP(profile->app_id, str);
                break;
        case CTSVC_PROPERTY_PROFILE_URI:
+               CHECK_DIRTY_STR(profile->uri, str, is_dirty);
                FREEandSTRDUP(profile->uri, str);
                break;
        case CTSVC_PROPERTY_PROFILE_CATEGORY:
+               CHECK_DIRTY_STR(profile->category, str, is_dirty);
                FREEandSTRDUP(profile->category, str);
                break;
        case CTSVC_PROPERTY_PROFILE_EXTRA_DATA:
+               CHECK_DIRTY_STR(profile->extra_data, str, is_dirty);
                FREEandSTRDUP(profile->extra_data, str);
                break;
        default :
@@ -3652,15 +3750,17 @@ static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_RELATIONSHIP_LABEL:
+               CHECK_DIRTY_STR(relationship->label, str, is_dirty);
                FREEandSTRDUP(relationship->label, str);
                break;
        case CTSVC_PROPERTY_RELATIONSHIP_NAME:
+               CHECK_DIRTY_STR(relationship->name, str, is_dirty);
                FREEandSTRDUP(relationship->name, str);
                break;
        default :
@@ -3670,19 +3770,21 @@ static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int p
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_image_s *image = (ctsvc_image_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_IMAGE_LABEL:
+               CHECK_DIRTY_STR(image->label, str, is_dirty);
                FREEandSTRDUP(image->label, str);
                break;
        case CTSVC_PROPERTY_IMAGE_PATH:
-               if (image->path && image->is_vcard && (NULL == str || 0 != strcmp(image->path, str))) {
+               if (image->path && image->is_vcard && (NULL == str || STRING_EQUAL != strcmp(image->path, str))) {
                        image->is_vcard = false;
                        __ctsvc_temp_image_hash_table_remove(image->path);
                }
+               CHECK_DIRTY_STR(image->path, str, is_dirty);
                FREEandSTRDUP(image->path, str);
                break;
        default :
@@ -3692,42 +3794,53 @@ static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty )
 {
        ctsvc_extension_s *extension = (ctsvc_extension_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EXTENSION_DATA2:
+               CHECK_DIRTY_STR(extension->data2, str, is_dirty);
                FREEandSTRDUP(extension->data2, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA3:
+               CHECK_DIRTY_STR(extension->data3, str, is_dirty);
                FREEandSTRDUP(extension->data3, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA4:
+               CHECK_DIRTY_STR(extension->data4, str, is_dirty);
                FREEandSTRDUP(extension->data4, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA5:
+               CHECK_DIRTY_STR(extension->data5, str, is_dirty);
                FREEandSTRDUP(extension->data5, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA6:
+               CHECK_DIRTY_STR(extension->data6, str, is_dirty);
                FREEandSTRDUP(extension->data6, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA7:
+               CHECK_DIRTY_STR(extension->data7, str, is_dirty);
                FREEandSTRDUP(extension->data7, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA8:
+               CHECK_DIRTY_STR(extension->data8, str, is_dirty);
                FREEandSTRDUP(extension->data8, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA9:
+               CHECK_DIRTY_STR(extension->data9, str, is_dirty);
                FREEandSTRDUP(extension->data9, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA10:
+               CHECK_DIRTY_STR(extension->data10, str, is_dirty);
                FREEandSTRDUP(extension->data10, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA11:
+               CHECK_DIRTY_STR(extension->data11, str, is_dirty);
                FREEandSTRDUP(extension->data11, str);
                break;
        case CTSVC_PROPERTY_EXTENSION_DATA12:
+               CHECK_DIRTY_STR(extension->data12, str, is_dirty);
                FREEandSTRDUP(extension->data12, str);
                break;
        default :
@@ -3737,7 +3850,7 @@ static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s *)record;
        switch (property_id) {
@@ -3757,7 +3870,7 @@ static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s *)record;
        switch (property_id) {
@@ -3778,7 +3891,7 @@ static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned in
 }
 
 
-static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
        switch (property_id) {
@@ -3792,7 +3905,7 @@ static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_email_s *email = (ctsvc_email_s *)record;
        switch (property_id) {
@@ -3806,11 +3919,11 @@ static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_event_s *event = (ctsvc_event_s *)record;
        switch (property_id) {
-       case CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH:
+       case CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH: /* deprecated */
                *value = event->is_leap_month;
                break;
        default:
@@ -3820,7 +3933,7 @@ static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_image_s *image = (ctsvc_image_s *)record;
        switch (property_id) {
@@ -3834,7 +3947,7 @@ static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_address_s *address = (ctsvc_address_s *)record;
        switch (property_id) {
@@ -3848,18 +3961,21 @@ static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_contact_s *contact = (ctsvc_contact_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_CONTACT_IS_FAVORITE:
+               CHECK_DIRTY_VAL(contact->is_favorite, value, is_dirty);
                contact->is_favorite = value;
                break;
        case CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER:
+               CHECK_DIRTY_VAL(contact->has_phonenumber, value, is_dirty);
                contact->has_phonenumber = value;
                break;
        case CTSVC_PROPERTY_CONTACT_HAS_EMAIL:
+               CHECK_DIRTY_VAL(contact->has_email, value, is_dirty);
                contact->has_email = value;
                break;
 /*
@@ -3873,12 +3989,13 @@ static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_number_s *number = (ctsvc_number_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_NUMBER_IS_DEFAULT:
+               CHECK_DIRTY_VAL(number->is_default, value, is_dirty);
                number->is_default = value;
                break;
        default:
@@ -3888,12 +4005,13 @@ static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_email_s *email = (ctsvc_email_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EMAIL_IS_DEFAULT:
+               CHECK_DIRTY_VAL(email->is_default, value, is_dirty);
                email->is_default = value;
                break;
        default:
@@ -3903,12 +4021,13 @@ static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH:
+               CHECK_DIRTY_VAL(event->is_leap_month, value, is_dirty);
                event->is_leap_month = value;
                break;
        default:
@@ -3918,12 +4037,13 @@ static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_image_s *image = (ctsvc_image_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_IMAGE_IS_DEFAULT:
+               CHECK_DIRTY_VAL(image->is_default, value, is_dirty);
                image->is_default = value;
                break;
        default:
@@ -3933,12 +4053,13 @@ static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_address_s *address = (ctsvc_address_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_ADDRESS_IS_DEFAULT:
+               CHECK_DIRTY_VAL(address->is_default, value, is_dirty);
                address->is_default = value;
                break;
        default:
@@ -3956,7 +4077,7 @@ static int __ctsvc_contact_clone(contacts_record_h record, contacts_record_h *ou
        src_data = (ctsvc_contact_s*)record;
        out_data = calloc(1, sizeof(ctsvc_contact_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_contact_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_contact_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->person_id = src_data->person_id;
@@ -4028,7 +4149,12 @@ static int __ctsvc_contact_clone(contacts_record_h record, contacts_record_h *ou
        ctsvc_list_clone((contacts_list_h)src_data->extensions, (contacts_list_h*)&out_data->extensions);
        out_data->extensions->l_type = CTSVC_RECORD_EXTENSION;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_contact_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
 
@@ -4044,7 +4170,7 @@ static int __ctsvc_activity_clone(contacts_record_h record, contacts_record_h *o
        src_data = (ctsvc_activity_s*)record;
        out_data = calloc(1, sizeof(ctsvc_activity_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_activity_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_activity_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4057,7 +4183,12 @@ static int __ctsvc_activity_clone(contacts_record_h record, contacts_record_h *o
        ctsvc_list_clone((contacts_list_h)src_data->photos, (contacts_list_h*)&out_data->photos);
        out_data->photos->l_type = CTSVC_RECORD_ACTIVITY_PHOTO;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_activity_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4071,14 +4202,19 @@ static int __ctsvc_activity_photo_clone(contacts_record_h record, contacts_recor
        src_data = (ctsvc_activity_photo_s*)record;
        out_data = calloc(1, sizeof(ctsvc_activity_photo_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_activity_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_activity_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->activity_id = src_data->activity_id;
        out_data->photo_url = SAFE_STRDUP(src_data->photo_url);
        out_data->sort_index = src_data->sort_index;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_activity_photo_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4092,7 +4228,7 @@ static int __ctsvc_address_clone(contacts_record_h record, contacts_record_h *ou
        src_data = (ctsvc_address_s*)record;
        out_data = calloc(1, sizeof(ctsvc_address_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_address_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_address_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4107,7 +4243,12 @@ static int __ctsvc_address_clone(contacts_record_h record, contacts_record_h *ou
        out_data->extended = SAFE_STRDUP(src_data->extended);
        out_data->country = SAFE_STRDUP(src_data->country);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_address_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4121,7 +4262,7 @@ static int __ctsvc_company_clone(contacts_record_h record, contacts_record_h *ou
        src_data = (ctsvc_company_s*)record;
        out_data = calloc(1, sizeof(ctsvc_company_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_company_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_company_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4141,7 +4282,12 @@ static int __ctsvc_company_clone(contacts_record_h record, contacts_record_h *ou
        out_data->description = SAFE_STRDUP(src_data->description);
        out_data->phonetic_name = SAFE_STRDUP(src_data->phonetic_name);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_company_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4155,7 +4301,7 @@ static int __ctsvc_email_clone(contacts_record_h record, contacts_record_h *out_
        src_data = (ctsvc_email_s*)record;
        out_data = calloc(1, sizeof(ctsvc_email_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_email_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_email_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->is_default = src_data->is_default;
@@ -4164,7 +4310,12 @@ static int __ctsvc_email_clone(contacts_record_h record, contacts_record_h *out_
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->email_addr = SAFE_STRDUP(src_data->email_addr);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_email_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4178,7 +4329,7 @@ static int __ctsvc_event_clone(contacts_record_h record, contacts_record_h *out_
        src_data = (ctsvc_event_s*)record;
        out_data = calloc(1, sizeof(ctsvc_event_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_event_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_event_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4188,7 +4339,12 @@ static int __ctsvc_event_clone(contacts_record_h record, contacts_record_h *out_
        out_data->calendar_type = src_data->calendar_type;
        out_data->is_leap_month = src_data->is_leap_month;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_event_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4202,11 +4358,11 @@ static int __ctsvc_extension_clone(contacts_record_h record, contacts_record_h *
        src_data = (ctsvc_extension_s*)record;
        out_data = calloc(1, sizeof(ctsvc_extension_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_extension_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_extension_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
-//     out_data->is_default = src_data->is_default;
+       /* out_data->is_default = src_data->is_default; */
        out_data->data1 = src_data->data1;
        out_data->data2 = SAFE_STRDUP(src_data->data2);
        out_data->data3 = SAFE_STRDUP(src_data->data3);
@@ -4220,7 +4376,12 @@ static int __ctsvc_extension_clone(contacts_record_h record, contacts_record_h *
        out_data->data11 = SAFE_STRDUP(src_data->data11);
        out_data->data12 = SAFE_STRDUP(src_data->data12);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_extension_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4234,14 +4395,19 @@ static int __ctsvc_group_relation_clone(contacts_record_h record, contacts_recor
        src_data = (ctsvc_group_relation_s*)record;
        out_data = calloc(1, sizeof(ctsvc_group_relation_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_group_relation_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_group_relation_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->group_id = src_data->group_id;
        out_data->contact_id = src_data->contact_id;
        out_data->group_name = SAFE_STRDUP(src_data->group_name);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_group_relation_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4255,7 +4421,7 @@ static int __ctsvc_messenger_clone(contacts_record_h record, contacts_record_h *
        src_data = (ctsvc_messenger_s*)record;
        out_data = calloc(1, sizeof(ctsvc_messenger_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_messenger_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_messenger_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4263,7 +4429,12 @@ static int __ctsvc_messenger_clone(contacts_record_h record, contacts_record_h *
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->im_id = SAFE_STRDUP(src_data->im_id);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_messenger_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4277,7 +4448,7 @@ static int __ctsvc_name_clone(contacts_record_h record, contacts_record_h *out_r
        src_data = (ctsvc_name_s*)record;
        out_data = calloc(1, sizeof(ctsvc_name_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_name_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_name_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->is_default = src_data->is_default;
        out_data->id = src_data->id;
@@ -4294,7 +4465,12 @@ static int __ctsvc_name_clone(contacts_record_h record, contacts_record_h *out_r
        out_data->lookup = SAFE_STRDUP(src_data->lookup);
        out_data->reverse_lookup = SAFE_STRDUP(src_data->reverse_lookup);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_name_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4308,7 +4484,7 @@ static int __ctsvc_nickname_clone(contacts_record_h record, contacts_record_h *o
        src_data = (ctsvc_nickname_s*)record;
        out_data = calloc(1, sizeof(ctsvc_nickname_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_nickname_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_nickname_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4316,7 +4492,12 @@ static int __ctsvc_nickname_clone(contacts_record_h record, contacts_record_h *o
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->nickname = SAFE_STRDUP(src_data->nickname);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_nickname_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4330,13 +4511,18 @@ static int __ctsvc_note_clone(contacts_record_h record, contacts_record_h *out_r
        src_data = (ctsvc_note_s*)record;
        out_data = calloc(1, sizeof(ctsvc_note_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_note_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_note_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
        out_data->note = SAFE_STRDUP(src_data->note);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_note_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4350,7 +4536,7 @@ static int __ctsvc_number_clone(contacts_record_h record, contacts_record_h *out
        src_data = (ctsvc_number_s*)record;
        out_data = calloc(1, sizeof(ctsvc_number_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_number_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_number_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->is_default = src_data->is_default;
        out_data->id = src_data->id;
@@ -4360,7 +4546,12 @@ static int __ctsvc_number_clone(contacts_record_h record, contacts_record_h *out
        out_data->number = SAFE_STRDUP(src_data->number);
        out_data->lookup = SAFE_STRDUP(src_data->lookup);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_number_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4374,7 +4565,7 @@ static int __ctsvc_profile_clone(contacts_record_h record, contacts_record_h *ou
        src_data = (ctsvc_profile_s*)record;
        out_data = calloc(1, sizeof(ctsvc_profile_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_profile_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_profile_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4388,7 +4579,12 @@ static int __ctsvc_profile_clone(contacts_record_h record, contacts_record_h *ou
        out_data->category = SAFE_STRDUP(src_data->category);
        out_data->extra_data = SAFE_STRDUP(src_data->extra_data);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_profile_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
 
@@ -4403,7 +4599,7 @@ static int __ctsvc_relationship_clone(contacts_record_h record, contacts_record_
        src_data = (ctsvc_relationship_s*)record;
        out_data = calloc(1, sizeof(ctsvc_relationship_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_relationship_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_relationship_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4411,7 +4607,12 @@ static int __ctsvc_relationship_clone(contacts_record_h record, contacts_record_
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->name = SAFE_STRDUP(src_data->name);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_relationship_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4425,7 +4626,7 @@ static int __ctsvc_image_clone(contacts_record_h record, contacts_record_h *out_
        src_data = (ctsvc_image_s*)record;
        out_data = calloc(1, sizeof(ctsvc_image_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_image_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_image_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->is_default = src_data->is_default;
        out_data->id = src_data->id;
@@ -4437,7 +4638,12 @@ static int __ctsvc_image_clone(contacts_record_h record, contacts_record_h *out_
                __ctsvc_temp_image_hash_table_insert(src_data->path);
        out_data->path = SAFE_STRDUP(src_data->path);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_image_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4451,7 +4657,7 @@ static int __ctsvc_simple_contact_clone(contacts_record_h record, contacts_recor
        src_data = (ctsvc_simple_contact_s*)record;
        out_data = calloc(1, sizeof(ctsvc_simple_contact_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_simple_contact_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_simple_contact_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->contact_id = src_data->contact_id;
        out_data->person_id = src_data->person_id;
@@ -4469,7 +4675,12 @@ static int __ctsvc_simple_contact_clone(contacts_record_h record, contacts_recor
        out_data->message_alert = SAFE_STRDUP(src_data->message_alert);
        out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_simple_contact_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -4483,7 +4694,7 @@ static int __ctsvc_url_clone(contacts_record_h record, contacts_record_h *out_re
        src_data = (ctsvc_url_s*)record;
        out_data = calloc(1, sizeof(ctsvc_url_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_url_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_url_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->contact_id = src_data->contact_id;
@@ -4491,7 +4702,12 @@ static int __ctsvc_url_clone(contacts_record_h record, contacts_record_h *out_re
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->url = SAFE_STRDUP(src_data->url);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_url_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
index 5405bb7..5087c97 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -32,12 +30,12 @@ static int __ctsvc_group_create(contacts_record_h *out_record);
 static int __ctsvc_group_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_group_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_group_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_group_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_group_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_group_get_bool( contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_group_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_group_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_group_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_group_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_group_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_group_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_group_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_group_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_group_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 
 ctsvc_record_plugin_cb_s group_plugin_cbs = {
@@ -77,7 +75,7 @@ static int __ctsvc_group_create(contacts_record_h *out_record)
 static int __ctsvc_group_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
-       group->base.plugin_cbs = NULL;  // help to find double destroy bug (refer to the contacts_record_destroy)
+       group->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(group->base.properties_flags);
 
        free(group->name);
@@ -93,13 +91,14 @@ static int __ctsvc_group_destroy(contacts_record_h record, bool delete_child)
 
 static int __ctsvc_group_clone(contacts_record_h record, contacts_record_h *out_record)
 {
-    ctsvc_group_s *out_data = NULL;
-    ctsvc_group_s *src_data = NULL;
+       ctsvc_group_s *out_data = NULL;
+       ctsvc_group_s *src_data = NULL;
 
-    src_data = (ctsvc_group_s*)record;
-    out_data = calloc(1, sizeof(ctsvc_group_s));
-    RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_group_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+       src_data = (ctsvc_group_s*)record;
+       out_data = calloc(1, sizeof(ctsvc_group_s));
+       RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
+               "Out of memeory : calloc(ctsvc_group_s) Fail(%d)",
+               CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->addressbook_id = src_data->addressbook_id;
@@ -111,7 +110,12 @@ static int __ctsvc_group_clone(contacts_record_h record, contacts_record_h *out_
        out_data->ringtone_path = SAFE_STRDUP(src_data->ringtone_path);
        out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_group_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -135,7 +139,7 @@ static int __ctsvc_group_get_int(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_group_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
 
@@ -175,17 +179,19 @@ static int __ctsvc_group_get_str(contacts_record_h record, unsigned int property
        return __ctsvc_group_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_group_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_group_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_GROUP_ID:
+               CHECK_DIRTY_VAL(group->id, value, is_dirty);
                group->id = value;
                break;
        case CTSVC_PROPERTY_GROUP_ADDRESSBOOK_ID:
-               RETVM_IF(group->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (group)", property_id);
+               CHECK_DIRTY_VAL(group->addressbook_id, value, is_dirty);
                group->addressbook_id = value;
                break;
        default:
@@ -195,27 +201,33 @@ static int __ctsvc_group_set_int(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_group_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_GROUP_NAME:
+               CHECK_DIRTY_STR(group->name, str, is_dirty);
                FREEandSTRDUP(group->name, str);
                break;
        case CTSVC_PROPERTY_GROUP_RINGTONE:
+               CHECK_DIRTY_STR(group->ringtone_path, str, is_dirty);
                FREEandSTRDUP(group->ringtone_path, str);
                break;
        case CTSVC_PROPERTY_GROUP_IMAGE:
+               CHECK_DIRTY_STR(group->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(group->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_GROUP_VIBRATION:
+               CHECK_DIRTY_STR(group->vibration, str, is_dirty);
                FREEandSTRDUP(group->vibration, str);
                break;
        case CTSVC_PROPERTY_GROUP_MESSAGE_ALERT:
+               CHECK_DIRTY_STR(group->message_alert, str, is_dirty);
                FREEandSTRDUP(group->message_alert, str);
                break;
        case CTSVC_PROPERTY_GROUP_EXTRA_DATA:
+               CHECK_DIRTY_STR(group->extra_data, str, is_dirty);
                FREEandSTRDUP(group->extra_data, str);
                break;
        default :
@@ -225,7 +237,7 @@ static int __ctsvc_group_set_str(contacts_record_h record, unsigned int property
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_group_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
        switch (property_id) {
@@ -239,14 +251,15 @@ static int __ctsvc_group_get_bool(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_group_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_group_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_group_s *group = (ctsvc_group_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_GROUP_IS_READ_ONLY:
-               RETVM_IF(group->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (group)", property_id);
+               CHECK_DIRTY_VAL(group->is_read_only, value, is_dirty);
                group->is_read_only = value;
                break;
        default:
@@ -255,4 +268,3 @@ static int __ctsvc_group_set_bool(contacts_record_h record, unsigned int propert
        }
        return CONTACTS_ERROR_NONE;
 }
-
index 8f926b8..6a31254 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_list.h"
@@ -35,13 +33,13 @@ static int __ctsvc_my_profile_clone(contacts_record_h record, contacts_record_h
 static int __ctsvc_my_profile_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_my_profile_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_my_profile_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_my_profile_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_my_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_my_profile_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list );
-static int __ctsvc_my_profile_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record );
-static int __ctsvc_my_profile_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count );
-static int __ctsvc_my_profile_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
-static int __ctsvc_my_profile_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
+static int __ctsvc_my_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_my_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_my_profile_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* out_list);
+static int __ctsvc_my_profile_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* out_record);
+static int __ctsvc_my_profile_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
+static int __ctsvc_my_profile_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
+static int __ctsvc_my_profile_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
 
 ctsvc_record_plugin_cb_s my_profile_plugin_cbs = {
        .create = __ctsvc_my_profile_create,
@@ -73,126 +71,104 @@ static int __ctsvc_my_profile_create(contacts_record_h *out_record)
        RETVM_IF(NULL == my_profile, CONTACTS_ERROR_OUT_OF_MEMORY,
                        "Out of memory : calloc is failed");
 
-       my_profile->name = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->name) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->name->l_type = CTSVC_RECORD_NAME;
-
-       my_profile->company = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->company) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->company->l_type = CTSVC_RECORD_COMPANY;
-
-       my_profile->note = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->note) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->note->l_type = CTSVC_RECORD_NOTE;
-
-       my_profile->numbers = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->numbers) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->numbers->l_type = CTSVC_RECORD_NUMBER;
-
-       my_profile->emails = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->emails) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->emails->l_type = CTSVC_RECORD_EMAIL;
-
-       my_profile->events = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->events) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->events->l_type = CTSVC_RECORD_EVENT;
-
-       my_profile->messengers = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->messengers) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->messengers->l_type = CTSVC_RECORD_MESSENGER;
-
-       my_profile->postal_addrs = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->postal_addrs) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
-
-       my_profile->urls = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->urls) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->urls->l_type = CTSVC_RECORD_URL;
-
-       my_profile->nicknames = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->nicknames) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->nicknames->l_type = CTSVC_RECORD_NICKNAME;
-
-       my_profile->profiles = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->profiles) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->profiles->l_type = CTSVC_RECORD_PROFILE;
-
-       my_profile->relationships = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->relationships) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
-
-       my_profile->images = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->images) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->images->l_type = CTSVC_RECORD_IMAGE;
-
-       my_profile->extensions = calloc(1, sizeof(ctsvc_list_s));
-       if (NULL == my_profile->extensions) {
-               CTS_ERR("calloc() return NULL");
-               __ctsvc_my_profile_destroy((contacts_record_h)my_profile, true);
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       my_profile->extensions->l_type = CTSVC_RECORD_EXTENSION;
-
-       *out_record = (contacts_record_h)my_profile;
-       return CONTACTS_ERROR_NONE;
+       do {
+               my_profile->name = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->name)
+                       break;
+               my_profile->name->l_type = CTSVC_RECORD_NAME;
+
+               my_profile->company = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->company)
+                       break;
+               my_profile->company->l_type = CTSVC_RECORD_COMPANY;
+
+               my_profile->note = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->note)
+                       break;
+               my_profile->note->l_type = CTSVC_RECORD_NOTE;
+
+               my_profile->numbers = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->numbers)
+                       break;
+               my_profile->numbers->l_type = CTSVC_RECORD_NUMBER;
+
+               my_profile->emails = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->emails)
+                       break;
+               my_profile->emails->l_type = CTSVC_RECORD_EMAIL;
+
+               my_profile->events = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->events)
+                       break;
+               my_profile->events->l_type = CTSVC_RECORD_EVENT;
+
+               my_profile->messengers = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->messengers)
+                       break;
+               my_profile->messengers->l_type = CTSVC_RECORD_MESSENGER;
+
+               my_profile->postal_addrs = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->postal_addrs)
+                       break;
+               my_profile->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
+
+               my_profile->urls = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->urls)
+                       break;
+               my_profile->urls->l_type = CTSVC_RECORD_URL;
+
+               my_profile->nicknames = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->nicknames)
+                       break;
+               my_profile->nicknames->l_type = CTSVC_RECORD_NICKNAME;
+
+               my_profile->profiles = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->profiles)
+                       break;
+               my_profile->profiles->l_type = CTSVC_RECORD_PROFILE;
+
+               my_profile->relationships = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->relationships)
+                       break;
+               my_profile->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
+
+               my_profile->images = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->images)
+                       break;
+               my_profile->images->l_type = CTSVC_RECORD_IMAGE;
+
+               my_profile->extensions = calloc(1, sizeof(ctsvc_list_s));
+               if (NULL == my_profile->extensions)
+                       break;
+               my_profile->extensions->l_type = CTSVC_RECORD_EXTENSION;
+
+               *out_record = (contacts_record_h)my_profile;
+               return CONTACTS_ERROR_NONE;
+       } while (0);
+
+       CTS_ERR("calloc() Fail");
+       free(my_profile->extensions);
+       free(my_profile->images);
+       free(my_profile->relationships);
+       free(my_profile->profiles);
+       free(my_profile->nicknames);
+       free(my_profile->urls);
+       free(my_profile->postal_addrs);
+       free(my_profile->messengers);
+       free(my_profile->events);
+       free(my_profile->emails);
+       free(my_profile->numbers);
+       free(my_profile->note);
+       free(my_profile->company);
+       free(my_profile->name);
+       free(my_profile);
+       return CONTACTS_ERROR_OUT_OF_MEMORY;
 }
 
 static int __ctsvc_my_profile_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s*)record;
-       my_profile->base.plugin_cbs = NULL;     // help to find double destroy bug (refer to the contacts_record_destroy)
+       my_profile->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(my_profile->base.properties_flags);
 
        free(my_profile->display_name);
@@ -254,20 +230,23 @@ static int __ctsvc_my_profile_get_int(contacts_record_h record, unsigned int pro
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_my_profile_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_my_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_MY_PROFILE_ID:
+               CHECK_DIRTY_VAL(my_profile->id, value, is_dirty);
                my_profile->id = value;
                break;
        case CTSVC_PROPERTY_MY_PROFILE_CHANGED_TIME:
+               CHECK_DIRTY_VAL(my_profile->changed_time, value, is_dirty);
                my_profile->changed_time = value;
                break;
        case CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID:
-               RETVM_IF(my_profile->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < my_profile->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (my_profile)", property_id);
+               CHECK_DIRTY_VAL(my_profile->addressbook_id, value, is_dirty);
                my_profile->addressbook_id = value;
                break;
        default:
@@ -277,7 +256,7 @@ static int __ctsvc_my_profile_set_int(contacts_record_h record, unsigned int pro
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_my_profile_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_my_profile_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s*)record;
        switch(property_id) {
@@ -363,7 +342,7 @@ static int __ctsvc_my_profile_get_record_list_p(contacts_record_h record,
 }
 
 static int __ctsvc_my_profile_get_child_record_count(contacts_record_h record,
-               unsigned int property_id, int *count )
+               unsigned int property_id, int *count)
 {
        int ret;
        contacts_list_h list = NULL;
@@ -373,14 +352,14 @@ static int __ctsvc_my_profile_get_child_record_count(contacts_record_h record,
        if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
                return ret;
 
-       if(list)
+       if (list)
                contacts_list_get_count(list, count);
 
        return CONTACTS_ERROR_NONE;
 }
 
 static int __ctsvc_my_profile_get_child_record_at_p(contacts_record_h record,
-               unsigned int property_id, int index, contacts_record_h* out_record )
+               unsigned int property_id, int index, contacts_record_h* out_record)
 {
        int ret;
        int count;
@@ -403,7 +382,7 @@ static int __ctsvc_my_profile_get_child_record_at_p(contacts_record_h record,
 }
 
 static int __ctsvc_my_profile_clone_child_record_list(contacts_record_h record,
-               unsigned int property_id, contacts_list_h* out_list )
+               unsigned int property_id, contacts_list_h* out_list)
 {
        int ret;
        int count;
@@ -485,7 +464,7 @@ static int __ctsvc_my_profile_reset_child_record_id(contacts_record_h child_reco
 
 
 static int __ctsvc_my_profile_add_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        int ret;
        contacts_list_h list = NULL;
@@ -560,7 +539,7 @@ static int __ctsvc_my_profile_get_child_record_id(contacts_record_h child_record
 
 
 static int __ctsvc_my_profile_remove_child_record(contacts_record_h record,
-               unsigned int property_id, contacts_record_h child_record )
+               unsigned int property_id, contacts_record_h child_record)
 {
        int id;
        int ret;
@@ -576,18 +555,21 @@ static int __ctsvc_my_profile_remove_child_record(contacts_record_h record,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_my_profile_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_my_profile_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty )
 {
        ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME:
+               CHECK_DIRTY_STR(my_profile->display_name, str, is_dirty);
                FREEandSTRDUP(my_profile->display_name, str);
                break;
        case CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL:
+               CHECK_DIRTY_STR(my_profile->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(my_profile->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_MY_PROFILE_UID:
+               CHECK_DIRTY_STR(my_profile->uid, str, is_dirty);
                FREEandSTRDUP(my_profile->uid, str);
                break;
        default :
@@ -605,7 +587,7 @@ static int __ctsvc_my_profile_clone(contacts_record_h record, contacts_record_h
        src_data = (ctsvc_my_profile_s*)record;
        out_data = calloc(1, sizeof(ctsvc_my_profile_s));
        RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_my_profile_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                       "Out of memeory : calloc(ctsvc_my_profile_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->addressbook_id = src_data->addressbook_id;
@@ -658,7 +640,12 @@ static int __ctsvc_my_profile_clone(contacts_record_h record, contacts_record_h
        ctsvc_list_clone((contacts_list_h)src_data->extensions, (contacts_list_h*)&out_data->extensions);
        out_data->extensions->l_type = CTSVC_RECORD_EXTENSION;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_my_profile_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
 
old mode 100755 (executable)
new mode 100644 (file)
index cc779ff..d2212bc
@@ -17,8 +17,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -30,11 +28,10 @@ static int __ctsvc_person_clone(contacts_record_h record, contacts_record_h *out
 static int __ctsvc_person_get_int(contacts_record_h record, unsigned int property_id, int *out);
 static int __ctsvc_person_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_person_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_person_get_bool( contacts_record_h record, unsigned int property_id, bool *value );
-static int __ctsvc_person_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_person_set_str(contacts_record_h record, unsigned int property_id, const char* str );
-static int __ctsvc_person_set_bool(contacts_record_h record, unsigned int property_id, bool value);
-
+static int __ctsvc_person_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_person_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_person_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
+static int __ctsvc_person_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s person_plugin_cbs = {
        .create = __ctsvc_person_create,
@@ -72,7 +69,7 @@ static int __ctsvc_person_create(contacts_record_h* out_record)
 static int __ctsvc_person_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_person_s *person = (ctsvc_person_s*)record;
-       person->base.plugin_cbs = NULL; // help to find double-destroy bug (refer to the contacts_record_destroy)
+       person->base.plugin_cbs = NULL; /* help to find double-destroy bug (refer to the contacts_record_destroy) */
        free(person->base.properties_flags);
 
        free(person->display_name);
@@ -96,7 +93,7 @@ static int __ctsvc_person_clone(contacts_record_h record, contacts_record_h *out
     src_data = (ctsvc_person_s*)record;
     out_data = calloc(1, sizeof(ctsvc_person_s));
     RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_person_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                        "Out of memeory : calloc(ctsvc_person_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->is_favorite = src_data->is_favorite;
        out_data->has_phonenumber = src_data->has_phonenumber;
@@ -113,7 +110,12 @@ static int __ctsvc_person_clone(contacts_record_h record, contacts_record_h *out
        out_data->message_alert = SAFE_STRDUP(src_data->message_alert);
        out_data->status = SAFE_STRDUP(src_data->status);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_person_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -139,7 +141,7 @@ static int __ctsvc_person_get_int(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_person_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_person_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_person_s *person = (ctsvc_person_s *)record;
        switch(property_id) {
@@ -184,7 +186,7 @@ static int __ctsvc_person_get_str(contacts_record_h record, unsigned int propert
        return __ctsvc_person_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_person_get_bool(contacts_record_h record, unsigned int property_id, bool *value )
+static int __ctsvc_person_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
 {
        ctsvc_person_s *person = (ctsvc_person_s *)record;
        switch (property_id) {
@@ -204,18 +206,21 @@ static int __ctsvc_person_get_bool(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_person_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_person_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_person_s *person = (ctsvc_person_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID:
+               CHECK_DIRTY_VAL(person->name_contact_id, value, is_dirty);
                person->name_contact_id = value;
                break;
        case CTSVC_PROPERTY_PERSON_ID:
+               CHECK_DIRTY_VAL(person->person_id, value, is_dirty);
                person->person_id = value;
                break;
        case CTSVC_PROPERTY_PERSON_LINK_COUNT:
+               CHECK_DIRTY_VAL(person->link_count, value, is_dirty);
                person->link_count = value;
                break;
        default:
@@ -225,27 +230,33 @@ static int __ctsvc_person_set_int(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_person_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_person_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty)
 {
        ctsvc_person_s *person = (ctsvc_person_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PERSON_DISPLAY_NAME:
+               CHECK_DIRTY_STR(person->display_name, str, is_dirty);
                FREEandSTRDUP( person->display_name, str);
                break;
        case CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX:
+               CHECK_DIRTY_STR(person->display_name_index, str, is_dirty);
                FREEandSTRDUP( person->display_name_index, str);
                break;
        case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
+               CHECK_DIRTY_STR(person->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(person->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_PERSON_RINGTONE:
+               CHECK_DIRTY_STR(person->ringtone_path, str, is_dirty);
                FREEandSTRDUP(person->ringtone_path, str);
                break;
        case CTSVC_PROPERTY_PERSON_VIBRATION:
+               CHECK_DIRTY_STR(person->vibration, str, is_dirty);
                FREEandSTRDUP(person->vibration, str);
                break;
        case CTSVC_PROPERTY_PERSON_MESSAGE_ALERT:
+               CHECK_DIRTY_STR(person->message_alert, str, is_dirty);
                FREEandSTRDUP(person->message_alert, str);
                break;
        default :
@@ -255,12 +266,13 @@ static int __ctsvc_person_set_str(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_person_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_person_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_person_s *person = (ctsvc_person_s *)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PERSON_IS_FAVORITE:
+               CHECK_DIRTY_VAL(person->is_favorite, value, is_dirty);
                if (person->is_favorite != value) {
                        person->is_favorite = value;
                }
index 0aa3c2a..045d4c1 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 
 #include "ctsvc_internal.h"
@@ -33,10 +31,10 @@ static int __ctsvc_phonelog_create(contacts_record_h *out_record);
 static int __ctsvc_phonelog_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_phonelog_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_phonelog_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_phonelog_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
+static int __ctsvc_phonelog_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_phonelog_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_phonelog_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_phonelog_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s phonelog_plugin_cbs = {
        .create = __ctsvc_phonelog_create,
@@ -76,7 +74,7 @@ static int __ctsvc_phonelog_create(contacts_record_h *out_record)
 static int __ctsvc_phonelog_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_phonelog_s* phonelog = (ctsvc_phonelog_s*)record;
-       phonelog->base.plugin_cbs = NULL;       // help to find double destroy bug (refer to the contacts_record_destroy)
+       phonelog->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(phonelog->base.properties_flags);
 
        free(phonelog->address);
@@ -94,7 +92,7 @@ static int __ctsvc_phonelog_clone(contacts_record_h record, contacts_record_h *o
     src_data = (ctsvc_phonelog_s*)record;
     out_data = calloc(1, sizeof(ctsvc_phonelog_s));
     RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_phonelog_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                        "Out of memeory : calloc(ctsvc_phonelog_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->address = SAFE_STRDUP(src_data->address);
@@ -105,7 +103,12 @@ static int __ctsvc_phonelog_clone(contacts_record_h record, contacts_record_h *o
        out_data->extra_data2 = SAFE_STRDUP(src_data->extra_data2);
        out_data->sim_slot_no = src_data->sim_slot_no;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_phonelog_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -141,7 +144,7 @@ static int __ctsvc_phonelog_get_int(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_phonelog_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_phonelog_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_phonelog_s* phonelog = (ctsvc_phonelog_s*)record;
 
@@ -169,22 +172,25 @@ static int __ctsvc_phonelog_get_str(contacts_record_h record, unsigned int prope
        return __ctsvc_phonelog_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_phonelog_s* phonelog = (ctsvc_phonelog_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PHONELOG_ID:
+               CHECK_DIRTY_VAL(phonelog->id, value, is_dirty);
                phonelog->id = value;
                break;
        case CTSVC_PROPERTY_PHONELOG_PERSON_ID:
-               RETVM_IF(phonelog->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (phonelog)", property_id);
+               CHECK_DIRTY_VAL(phonelog->person_id, value, is_dirty);
                phonelog->person_id = value;
                break;
        case CTSVC_PROPERTY_PHONELOG_LOG_TIME:
-               RETVM_IF(phonelog->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (phonelog)", property_id);
+               CHECK_DIRTY_VAL(phonelog->log_time, value, is_dirty);
                phonelog->log_time = value;
                break;
        case CTSVC_PROPERTY_PHONELOG_LOG_TYPE:
@@ -194,21 +200,25 @@ static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int prope
                                        && value <= CONTACTS_PLOG_TYPE_MMS_BLOCKED)
                                || (CONTACTS_PLOG_TYPE_EMAIL_RECEIVED <= value
                                        && value <= CONTACTS_PLOG_TYPE_EMAIL_SENT)
-                       )
+                       ) {
+                       CHECK_DIRTY_VAL(phonelog->log_type, value, is_dirty);
                        phonelog->log_type = value;
+               }
                else {
                        CTS_ERR("Invalid parameter : log type is in invalid range (%d)", value);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1:
-               RETVM_IF(phonelog->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (phonelog)", property_id);
+               CHECK_DIRTY_VAL(phonelog->extra_data1, value, is_dirty);
                phonelog->extra_data1 = value;
                break;
        case CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO:
-               RETVM_IF(phonelog->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property_id(%d) is a read-only value (phonelog)", property_id);
+               CHECK_DIRTY_VAL(phonelog->sim_slot_no, value, is_dirty);
                phonelog->sim_slot_no = value;
                break;
        default:
@@ -218,17 +228,19 @@ static int __ctsvc_phonelog_set_int(contacts_record_h record, unsigned int prope
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_phonelog_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_phonelog_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty)
 {
        ctsvc_phonelog_s* phonelog = (ctsvc_phonelog_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_PHONELOG_ADDRESS:
-               RETVM_IF(phonelog->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property_id(%d) is a read-only value (phonelog)", property_id);
+               CHECK_DIRTY_STR(phonelog->address, str, is_dirty);
                FREEandSTRDUP(phonelog->address, str);
                break;
        case CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2:
+               CHECK_DIRTY_STR(phonelog->extra_data2, str, is_dirty);
                FREEandSTRDUP(phonelog->extra_data2, str);
                break;
        default :
index c1d7f32..46fd3b8 100644 (file)
 #include "ctsvc_view.h"
 
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
 #include "ctsvc_server_sim.h"
-#endif // ENABLE_SIM_FEATURE
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
 
 static int __ctsvc_result_create(contacts_record_h* out_record);
 static int __ctsvc_result_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_result_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_result_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
 static int __ctsvc_result_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
-static int __ctsvc_result_get_int(contacts_record_h record, unsigned int property_id, int* out_value );
-static int __ctsvc_result_get_lli(contacts_record_h record, unsigned int property_id, long long int* out_value );
-static int __ctsvc_result_get_bool(contacts_record_h record, unsigned int property_id, bool* out_value );
-static int __ctsvc_result_get_double(contacts_record_h record, unsigned int property_id, double* out_value );
-static int __ctsvc_result_set_int(contacts_record_h record, unsigned int property_id, int value );
-static int __ctsvc_result_set_lli(contacts_record_h record, unsigned int property_id, long long int value );
-static int __ctsvc_result_set_bool(contacts_record_h record, unsigned int property_id, bool value );
-static int __ctsvc_result_set_str(contacts_record_h record, unsigned int property_id, const char *str );
-static int __ctsvc_result_set_double(contacts_record_h record, unsigned int property_id, double value );
+static int __ctsvc_result_get_int(contacts_record_h record, unsigned int property_id, int* out_value);
+static int __ctsvc_result_get_bool(contacts_record_h record, unsigned int property_id, bool* out_value);
+static int __ctsvc_result_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty );
+static int __ctsvc_result_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty );
+static int __ctsvc_result_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s result_plugin_cbs = {
        .create = __ctsvc_result_create,
@@ -51,13 +45,13 @@ ctsvc_record_plugin_cb_s result_plugin_cbs = {
        .get_str_p = __ctsvc_result_get_str_p,
        .get_int = __ctsvc_result_get_int,
        .get_bool = __ctsvc_result_get_bool,
-       .get_lli = __ctsvc_result_get_lli,
-       .get_double = __ctsvc_result_get_double,
+       .get_lli = NULL,
+       .get_double = NULL,
        .set_str = __ctsvc_result_set_str,
        .set_int = __ctsvc_result_set_int,
        .set_bool = __ctsvc_result_set_bool,
-       .set_lli = __ctsvc_result_set_lli,
-       .set_double = __ctsvc_result_set_double,
+       .set_lli = NULL,
+       .set_double = NULL,
        .add_child_record = NULL,
        .remove_child_record = NULL,
        .get_child_record_count = NULL,
@@ -81,14 +75,14 @@ static int __ctsvc_result_destroy(contacts_record_h record, bool delete_child)
        GSList *cursor;
        ctsvc_result_s* result = (ctsvc_result_s*)record;
 
-       for(cursor = result->values;cursor;cursor=cursor->next){
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                ctsvc_result_value_s *data = cursor->data;
                if (data->type == CTSVC_VIEW_DATA_TYPE_STR)
                        free(data->value.s);
                free(data);
        }
        g_slist_free(result->values);
-       result->base.plugin_cbs = NULL; // help to find double destroy bug (refer to the contacts_record_destroy)
+       result->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(result->base.properties_flags);
 
        free(result);
@@ -98,20 +92,20 @@ static int __ctsvc_result_destroy(contacts_record_h record, bool delete_child)
 
 static int __ctsvc_result_clone(contacts_record_h record, contacts_record_h *out_record)
 {
-       ctsvc_result_s *out_data = NULL;
-       ctsvc_result_s *src_data = NULL;
-       GSList *cursor;
+    ctsvc_result_s *out_data = NULL;
+    ctsvc_result_s *src_data = NULL;
+    GSList *cursor;
 
-       src_data = (ctsvc_result_s*)record;
-       out_data = calloc(1, sizeof(ctsvc_result_s));
-       RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                       "Out of memeory : calloc(ctsvc_result_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+    src_data = (ctsvc_result_s*)record;
+    out_data = calloc(1, sizeof(ctsvc_result_s));
+    RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
+                        "Out of memeory : calloc(ctsvc_result_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
-       for(cursor=src_data->values;cursor;cursor=cursor->next) {
+       for (cursor=src_data->values;cursor;cursor=cursor->next) {
                ctsvc_result_value_s *src = cursor->data;
                ctsvc_result_value_s *dest = calloc(1, sizeof(ctsvc_result_value_s));
                if (NULL == dest) {
-                       CTS_ERR("calloc() return NULL");
+                       CTS_ERR("calloc() Fail");
                        __ctsvc_result_destroy((contacts_record_h)out_data, true);
                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
@@ -140,7 +134,12 @@ static int __ctsvc_result_clone(contacts_record_h record, contacts_record_h *out
                out_data->values = g_slist_append(out_data->values, (void*)dest);
        }
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_result_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
 
@@ -148,23 +147,22 @@ static int __ctsvc_result_clone(contacts_record_h record, contacts_record_h *out
 }
 
 static int __ctsvc_result_get_str_real(contacts_record_h record, unsigned int property_id,
-               char** out_str, bool copy )
+               char** out_str, bool copy)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
 
        GSList *cursor;
 
-       for(cursor = result->values;cursor;cursor=cursor->next){
+       if (CTSVC_VIEW_DATA_TYPE_STR != (CTSVC_VIEW_DATA_TYPE_STR & property_id)) {
+               CTS_ERR("property_id is not str type.");
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                ctsvc_result_value_s *data = cursor->data;
                if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_STR) {
-                               *out_str = GET_STR(copy, data->value.s);
-                               return CONTACTS_ERROR_NONE;
-                       }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
+                       *out_str = GET_STR(copy, data->value.s);
+                       return CONTACTS_ERROR_NONE;
                }
        }
 
@@ -181,145 +179,91 @@ static int __ctsvc_result_get_str(contacts_record_h record, unsigned int propert
        return __ctsvc_result_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_result_get_int(contacts_record_h record, unsigned int property_id, int* out_value )
+static int __ctsvc_result_get_int(contacts_record_h record, unsigned int property_id, int* out_value)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
 
        GSList *cursor;
-       //TODO: check the value type of property_id is int
-       for(cursor = result->values;cursor;cursor=cursor->next){
+
+       if (CTSVC_VIEW_DATA_TYPE_INT != (CTSVC_VIEW_DATA_TYPE_INT & property_id)) {
+               CTS_ERR("property_id is not int type.");
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                ctsvc_result_value_s *data = cursor->data;
                if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_INT) {
-                               *out_value = data->value.i;
-                               return CONTACTS_ERROR_NONE;
-                       }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
+                       *out_value = data->value.i;
+                       return CONTACTS_ERROR_NONE;
                }
        }
 
        return CONTACTS_ERROR_NO_DATA;
 }
 
-static int __ctsvc_result_set_int(contacts_record_h record, unsigned int property_id, int value )
+static int __ctsvc_result_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
        GSList *cursor;
        ctsvc_result_value_s *data;
 
-       // TODO: check the value type of property_id is int
-       for(cursor = result->values;cursor;cursor=cursor->next){
+       if (CTSVC_VIEW_DATA_TYPE_INT != (CTSVC_VIEW_DATA_TYPE_INT & property_id)) {
+               CTS_ERR("property_id is not int type.");
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                data = cursor->data;
                if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_INT) {
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
-
-                               if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO)
-                                       data->value.i = ctsvc_server_sim_get_sim_slot_no_by_info_id(value);
-                               else
-#endif // ENABLE_SIM_FEATURE
-#endif
-                               data->value.i = value;
-                               return CONTACTS_ERROR_NONE;
+                       if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
+                               CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
+                               data->value.i = ctsvc_server_sim_get_sim_slot_no_by_info_id(value);
                        }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
+                       else
+#endif /* _CONTACTS_IPC_SERVER */
+                       {
+                               CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
+                               data->value.i = value;
                        }
+                       return CONTACTS_ERROR_NONE;
                }
        }
 
        data = calloc(1, sizeof(ctsvc_result_value_s));
-       RETVM_IF(NULL == data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-
+       if (NULL == data) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        data->property_id = property_id;
        data->type = CTSVC_VIEW_DATA_TYPE_INT;
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
-       if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO)
+       if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
+               CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
                data->value.i = ctsvc_server_sim_get_sim_slot_no_by_info_id(value);
-       else
-#endif // ENABLE_SIM_FEATURE
-#endif
-       data->value.i = value;
-       result->values = g_slist_append(result->values, (void*)data);
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_result_set_lli(contacts_record_h record, unsigned int property_id, long long int value )
-{
-       ctsvc_result_s* result = (ctsvc_result_s *)record;
-       GSList *cursor;
-       ctsvc_result_value_s *data;
-
-       // TODO: check the value type of property_id is int
-       for(cursor = result->values;cursor;cursor=cursor->next){
-               data = cursor->data;
-               if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_LLI) {
-                               data->value.l = value;
-                               return CONTACTS_ERROR_NONE;
-                       }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
-               }
        }
-
-       data = calloc(1, sizeof(ctsvc_result_value_s));
-       RETVM_IF(NULL == data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-       data->property_id = property_id;
-       data->type = CTSVC_VIEW_DATA_TYPE_LLI;
-       data->value.l = value;
-       result->values = g_slist_append(result->values, (void*)data);
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_result_set_double(contacts_record_h record, unsigned int property_id, double value )
-{
-       ctsvc_result_s* result = (ctsvc_result_s *)record;
-       GSList *cursor;
-       ctsvc_result_value_s *data;
-
-       for(cursor = result->values;cursor;cursor=cursor->next){
-               data = cursor->data;
-               if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_DOUBLE) {
-                               data->value.d = value;
-                               return CONTACTS_ERROR_NONE;
-                       }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
-               }
+       else
+#endif /* _CONTACTS_IPC_SERVER */
+       {
+               CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
+               data->value.i = value;
        }
-
-       data = calloc(1, sizeof(ctsvc_result_value_s));
-       RETVM_IF(NULL == data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-       data->property_id = property_id;
-       data->type = CTSVC_VIEW_DATA_TYPE_DOUBLE;
-       data->value.d = value;
        result->values = g_slist_append(result->values, (void*)data);
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_result_set_bool(contacts_record_h record, unsigned int property_id, bool value )
+static int __ctsvc_result_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
        GSList *cursor;
        ctsvc_result_value_s *data;
 
-       // TODO: check the value type of property_id is int
+       /* TODO: check the value type of property_id is int */
        for(cursor = result->values;cursor;cursor=cursor->next){
                data = cursor->data;
                if (data->property_id == property_id) {
                        if (data->type == CTSVC_VIEW_DATA_TYPE_BOOL) {
+                               CHECK_DIRTY_VAL(data->value.b, value, is_dirty);
                                data->value.b = value;
                                return CONTACTS_ERROR_NONE;
                        }
@@ -331,16 +275,19 @@ static int __ctsvc_result_set_bool(contacts_record_h record, unsigned int proper
        }
 
        data = calloc(1, sizeof(ctsvc_result_value_s));
-       RETVM_IF(NULL == data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-
+       if (NULL == data) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        data->property_id = property_id;
        data->type = CTSVC_VIEW_DATA_TYPE_BOOL;
-       data->value.i = value;
+       CHECK_DIRTY_VAL(data->value.b, value, is_dirty);
+       data->value.b = value;
        result->values = g_slist_append(result->values, (void*)data);
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_result_set_str(contacts_record_h record, unsigned int property_id, const char *str )
+static int __ctsvc_result_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
        GSList *cursor;
@@ -348,38 +295,43 @@ static int __ctsvc_result_set_str(contacts_record_h record, unsigned int propert
        char *full_path = NULL;
        int str_len;
 
-       // TODO: check the value type of property_id is int
-       for(cursor = result->values;cursor;cursor=cursor->next){
+       if (CTSVC_VIEW_DATA_TYPE_STR != (CTSVC_VIEW_DATA_TYPE_STR & property_id)) {
+               CTS_ERR("property_id is not str type.");
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                data = cursor->data;
                if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_STR) {
-                               switch (property_id) {
-                               case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
-                               case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
-                                       if (str) {
-                                               str_len = strlen(CTSVC_CONTACT_IMG_FULL_LOCATION) + strlen(str) + 2;
-                                               full_path = calloc(1, str_len);
-                                               RETVM_IF(NULL == full_path, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-                                               snprintf(full_path, str_len, "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, str);
+                       switch (property_id) {
+                       case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
+                       case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
+                               if (str) {
+                                       str_len = strlen(CTSVC_CONTACT_IMG_FULL_LOCATION) + strlen(str) + 2;
+                                       full_path = calloc(1, str_len);
+                                       if (NULL == full_path) {
+                                               CTS_ERR("calloc() Fail");
+                                               return CONTACTS_ERROR_OUT_OF_MEMORY;
                                        }
-                                       free(data->value.s);
-                                       data->value.s = full_path;
-                                       return CONTACTS_ERROR_NONE;
-                               default:
-                                       FREEandSTRDUP(data->value.s, str);
-                                       return CONTACTS_ERROR_NONE;
+                                       snprintf(full_path, str_len, "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, str);
                                }
-                       }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
+                               CHECK_DIRTY_STR(data->value.s, full_path, is_dirty);
+                               free(data->value.s);
+                               data->value.s = full_path;
+                               return CONTACTS_ERROR_NONE;
+                       default:
+                               CHECK_DIRTY_STR(data->value.s, str, is_dirty);
+                               FREEandSTRDUP(data->value.s, str);
+                               return CONTACTS_ERROR_NONE;
                        }
                }
        }
 
        data = calloc(1, sizeof(ctsvc_result_value_s));
-       RETVM_IF(NULL == data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
-
+       if (NULL == data) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        data->property_id = property_id;
        data->type = CTSVC_VIEW_DATA_TYPE_STR;
        switch (property_id) {
@@ -389,17 +341,18 @@ static int __ctsvc_result_set_str(contacts_record_h record, unsigned int propert
                        str_len = strlen(CTSVC_CONTACT_IMG_FULL_LOCATION) + strlen(str) + 2;
                        full_path = calloc(1, str_len);
                        if (NULL == full_path) {
-                               CTS_ERR("calloc() return NULL");
-                               free(data->value.s);
+                               CTS_ERR("calloc() Fail");
                                free(data);
                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
                        snprintf(full_path, str_len, "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, str);
                }
+               CHECK_DIRTY_STR(data->value.s, full_path, is_dirty);
                free(data->value.s);
                data->value.s = full_path;
                break;
        default:
+               CHECK_DIRTY_STR(data->value.s, str, is_dirty);
                data->value.s = SAFE_STRDUP(str);
                break;
        }
@@ -408,11 +361,11 @@ static int __ctsvc_result_set_str(contacts_record_h record, unsigned int propert
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_result_get_bool(contacts_record_h record, unsigned int property_id, bool* out_value )
+static int __ctsvc_result_get_bool(contacts_record_h record, unsigned int property_id, bool* out_value)
 {
        ctsvc_result_s* result = (ctsvc_result_s *)record;
        GSList *cursor;
-       for(cursor = result->values;cursor;cursor=cursor->next){
+       for (cursor = result->values;cursor;cursor=cursor->next) {
                ctsvc_result_value_s *data = cursor->data;
                if (data->property_id == property_id) {
                        if (data->type == CTSVC_VIEW_DATA_TYPE_BOOL) {
@@ -429,45 +382,3 @@ static int __ctsvc_result_get_bool(contacts_record_h record, unsigned int proper
        return CONTACTS_ERROR_NO_DATA;
 }
 
-static int __ctsvc_result_get_lli(contacts_record_h record, unsigned int property_id, long long int* out_value )
-{
-       ctsvc_result_s* result = (ctsvc_result_s *)record;
-       GSList *cursor;
-       for(cursor = result->values;cursor;cursor=cursor->next){
-               ctsvc_result_value_s *data = cursor->data;
-               if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_LLI) {
-                               *out_value = data->value.l;
-                               return CONTACTS_ERROR_NONE;
-                               }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
-               }
-       }
-
-       return CONTACTS_ERROR_NO_DATA;
-}
-
-static int __ctsvc_result_get_double(contacts_record_h record, unsigned int property_id, double* out_value )
-{
-       ctsvc_result_s* result = (ctsvc_result_s *)record;
-       GSList *cursor;
-       for(cursor = result->values;cursor;cursor=cursor->next){
-               ctsvc_result_value_s *data = cursor->data;
-               if (data->property_id == property_id) {
-                       if (data->type == CTSVC_VIEW_DATA_TYPE_DOUBLE) {
-                               *out_value = data->value.d;
-                               return CONTACTS_ERROR_NONE;
-                               }
-                       else {
-                               CTS_ERR("use another get_type API, (type : %d)", data->type);
-                               return CONTACTS_ERROR_INVALID_PARAMETER;
-                       }
-               }
-       }
-
-       return CONTACTS_ERROR_NO_DATA;
-}
-
index 5b261ef..7250fa4 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -32,10 +30,10 @@ static int __ctsvc_sdn_create(contacts_record_h* out_record);
 static int __ctsvc_sdn_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_sdn_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_sdn_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_sdn_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_sdn_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_sdn_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_sdn_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_sdn_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_sdn_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_sdn_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_sdn_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s sdn_plugin_cbs = {
        .create = __ctsvc_sdn_create,
@@ -73,7 +71,7 @@ static int __ctsvc_sdn_create(contacts_record_h* out_record)
 static int __ctsvc_sdn_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_sdn_s* sdn = (ctsvc_sdn_s*)record;
-       sdn->base.plugin_cbs = NULL;    // help to find double destroy bug (refer to the contacts_record_destroy)
+       sdn->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(sdn->base.properties_flags);
 
        free(sdn->name);
@@ -91,14 +89,19 @@ static int __ctsvc_sdn_clone(contacts_record_h record, contacts_record_h *out_re
     src_data = (ctsvc_sdn_s*)record;
     out_data = calloc(1, sizeof(ctsvc_sdn_s));
     RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_sdn_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                        "Out of memeory : calloc(ctsvc_sdn_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->name = SAFE_STRDUP(src_data->name);
        out_data->number = SAFE_STRDUP(src_data->number);
        out_data->sim_slot_no = src_data->sim_slot_no;
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_sdn_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -122,7 +125,7 @@ static int __ctsvc_sdn_get_int(contacts_record_h record, unsigned int property_i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_sdn_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_sdn_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_sdn_s* sdn = (ctsvc_sdn_s*)record;
 
@@ -150,15 +153,17 @@ static int __ctsvc_sdn_get_str(contacts_record_h record, unsigned int property_i
        return __ctsvc_sdn_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_sdn_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_sdn_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_sdn_s* sdn = (ctsvc_sdn_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_SDN_ID:
+               CHECK_DIRTY_VAL(sdn->id, value, is_dirty);
                sdn->id = value;
                break;
        case CTSVC_PROPERTY_SDN_SIM_SLOT_NO:
+               CHECK_DIRTY_VAL(sdn->sim_slot_no, value, is_dirty);
                sdn->sim_slot_no = value;
                break;
        default:
@@ -168,15 +173,17 @@ static int __ctsvc_sdn_set_int(contacts_record_h record, unsigned int property_i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_sdn_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_sdn_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty)
 {
        ctsvc_sdn_s* sdn = (ctsvc_sdn_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_SDN_NAME:
+               CHECK_DIRTY_STR(sdn->name, str, is_dirty);
                FREEandSTRDUP(sdn->name, str);
                break;
        case CTSVC_PROPERTY_SDN_NUMBER:
+               CHECK_DIRTY_STR(sdn->number, str, is_dirty);
                FREEandSTRDUP(sdn->number, str);
                break;
        default :
index 10e7ee7..a091034 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -32,10 +30,10 @@ static int __ctsvc_speeddial_create(contacts_record_h* out_record);
 static int __ctsvc_speeddial_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_speeddial_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_speeddial_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_speeddial_get_str(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_speeddial_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str );
-static int __ctsvc_speeddial_set_int(contacts_record_h record, unsigned int property_id, int value);
-static int __ctsvc_speeddial_set_str(contacts_record_h record, unsigned int property_id, const char* str );
+static int __ctsvc_speeddial_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_speeddial_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
+static int __ctsvc_speeddial_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+static int __ctsvc_speeddial_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
 
 
 ctsvc_record_plugin_cb_s speeddial_plugin_cbs = {
@@ -74,7 +72,7 @@ static int __ctsvc_speeddial_create(contacts_record_h* out_record)
 static int __ctsvc_speeddial_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_speeddial_s* speeddial = (ctsvc_speeddial_s*)record;
-       speeddial->base.plugin_cbs = NULL;      // help to find double destroy bug (refer to the contacts_record_destroy)
+       speeddial->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(speeddial->base.properties_flags);
 
        free(speeddial->display_name);
@@ -94,7 +92,7 @@ static int __ctsvc_speeddial_clone(contacts_record_h record, contacts_record_h *
     src_data = (ctsvc_speeddial_s*)record;
     out_data = calloc(1, sizeof(ctsvc_speeddial_s));
     RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_speeddial_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                        "Out of memeory : calloc(ctsvc_speeddial_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->dial_number = src_data->dial_number;
@@ -106,7 +104,12 @@ static int __ctsvc_speeddial_clone(contacts_record_h record, contacts_record_h *
        out_data->label = SAFE_STRDUP(src_data->label);
        out_data->number = SAFE_STRDUP(src_data->number);
 
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_speeddial_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -136,7 +139,7 @@ static int __ctsvc_speeddial_get_int(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_speeddial_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
+static int __ctsvc_speeddial_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
 {
        ctsvc_speeddial_s *speeddial = (ctsvc_speeddial_s*)record;
 
@@ -170,23 +173,27 @@ static int __ctsvc_speeddial_get_str(contacts_record_h record, unsigned int prop
        return __ctsvc_speeddial_get_str_real(record, property_id, out_str, true);
 }
 
-static int __ctsvc_speeddial_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_speeddial_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_speeddial_s *speeddial = (ctsvc_speeddial_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE:
+               CHECK_DIRTY_VAL(speeddial->number_type, value, is_dirty);
                speeddial->number_type = value;
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_PERSON_ID:
+               CHECK_DIRTY_VAL(speeddial->person_id, value, is_dirty);
                speeddial->person_id = value;
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER:
-               RETVM_IF(speeddial->id > 0, CONTACTS_ERROR_INVALID_PARAMETER,
+               RETVM_IF(0 < speeddial->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : property_id(%d) is a read-only value (speeddial)", property_id);
+               CHECK_DIRTY_VAL(speeddial->dial_number, value, is_dirty);
                speeddial->dial_number = value;
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID:
+               CHECK_DIRTY_VAL(speeddial->number_id, value, is_dirty);
                speeddial->number_id = value;
                break;
        default:
@@ -196,21 +203,25 @@ static int __ctsvc_speeddial_set_int(contacts_record_h record, unsigned int prop
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_speeddial_set_str(contacts_record_h record, unsigned int property_id, const char* str )
+static int __ctsvc_speeddial_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty)
 {
        ctsvc_speeddial_s *speeddial = (ctsvc_speeddial_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME:
+               CHECK_DIRTY_STR(speeddial->display_name, str, is_dirty);
                FREEandSTRDUP(speeddial->display_name, str);
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER:
+               CHECK_DIRTY_STR(speeddial->number, str, is_dirty);
                FREEandSTRDUP(speeddial->number, str);
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL:
+               CHECK_DIRTY_STR(speeddial->image_thumbnail_path, str, is_dirty);
                FREEandSTRDUP(speeddial->image_thumbnail_path, str);
                break;
        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL:
+               CHECK_DIRTY_STR(speeddial->label, str, is_dirty);
                FREEandSTRDUP(speeddial->label, str);
                break;
        default :
old mode 100755 (executable)
new mode 100644 (file)
index 1378c2d..9418c30
@@ -17,8 +17,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
@@ -28,9 +26,9 @@ static int __ctsvc_updated_info_create(contacts_record_h* out_record);
 static int __ctsvc_updated_info_destroy(contacts_record_h record, bool delete_child);
 static int __ctsvc_updated_info_clone(contacts_record_h record, contacts_record_h *out_record);
 static int __ctsvc_updated_info_get_int(contacts_record_h record, unsigned int property_id, int *out);
-static int __ctsvc_updated_info_set_int(contacts_record_h record, unsigned int property_id, int value);
+static int __ctsvc_updated_info_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
 static int __ctsvc_updated_info_get_bool(contacts_record_h record, unsigned int property_id, bool *out);
-static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value);
+static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
 
 ctsvc_record_plugin_cb_s updated_info_plugin_cbs = {
        .create = __ctsvc_updated_info_create,
@@ -68,7 +66,7 @@ static int __ctsvc_updated_info_create(contacts_record_h* out_record)
 static int __ctsvc_updated_info_destroy(contacts_record_h record, bool delete_child)
 {
        ctsvc_updated_info_s* updated_info = (ctsvc_updated_info_s*)record;
-       updated_info->base.plugin_cbs = NULL;   // help to find double destroy bug (refer to the contacts_record_destroy)
+       updated_info->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
        free(updated_info->base.properties_flags);
        free(updated_info);
 
@@ -83,14 +81,21 @@ static int __ctsvc_updated_info_clone(contacts_record_h record, contacts_record_
     src_data = (ctsvc_updated_info_s*)record;
     out_data = calloc(1, sizeof(ctsvc_updated_info_s));
     RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
-                        "Out of memeory : calloc(ctsvc_updated_info_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+                        "Out of memeory : calloc(ctsvc_updated_info_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
 
        out_data->id = src_data->id;
        out_data->changed_type = src_data->changed_type;
        out_data->changed_ver = src_data->changed_ver;
        out_data->addressbook_id = src_data->addressbook_id;
-
-       CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
+       out_data->image_changed = src_data->image_changed;
+       out_data->last_changed_type = src_data->last_changed_type;
+
+       int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_record_copy_base() Fail");
+               __ctsvc_updated_info_destroy((contacts_record_h)out_data, true);
+               return ret;
+       }
 
        *out_record = (contacts_record_h)out_data;
        return CONTACTS_ERROR_NONE;
@@ -123,27 +128,32 @@ static int __ctsvc_updated_info_get_int(contacts_record_h record, unsigned int p
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_updated_info_set_int(contacts_record_h record, unsigned int property_id, int value)
+static int __ctsvc_updated_info_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
 {
        ctsvc_updated_info_s* updated_info = (ctsvc_updated_info_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_UPDATE_INFO_ID :
+               CHECK_DIRTY_VAL(updated_info->id, value, is_dirty);
                updated_info->id = value;
                break;
        case CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID:
+               CHECK_DIRTY_VAL(updated_info->addressbook_id, value, is_dirty);
                updated_info->addressbook_id = value;
                break;
        case CTSVC_PROPERTY_UPDATE_INFO_TYPE:
                RETVM_IF(value < CONTACTS_CHANGE_INSERTED
-                                               || value > CONTACTS_CHANGE_DELETED,
+                                               || CONTACTS_CHANGE_DELETED < value,
                                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : update info type is in invalid range (%d)", value);
+               CHECK_DIRTY_VAL(updated_info->changed_type, value, is_dirty);
                updated_info->changed_type = value;
                break;
        case CTSVC_PROPERTY_UPDATE_INFO_VERSION:
+               CHECK_DIRTY_VAL(updated_info->changed_ver, value, is_dirty);
                updated_info->changed_ver = value;
                break;
        case CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE:
+               CHECK_DIRTY_VAL(updated_info->last_changed_type, value, is_dirty);
                updated_info->last_changed_type = value;
                break;
        default:
@@ -168,12 +178,13 @@ static int __ctsvc_updated_info_get_bool(contacts_record_h record, unsigned int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
 {
        ctsvc_updated_info_s* updated_info = (ctsvc_updated_info_s*)record;
 
        switch(property_id) {
        case CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED :
+               CHECK_DIRTY_VAL(updated_info->image_changed, value, is_dirty);
                updated_info->image_changed = value;
                break;
        default:
index c35e62f..0ab3684 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <glib.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_mutex.h"
 
 API int contacts_sim_import_all_contacts()
 {
-#ifndef ENABLE_SIM_FEATURE
-       return CONTACTS_ERROR_NOT_SUPPORTED;
-#endif // ENABLE_SIM_FEATURE
-
        int ret;
 
        ctsvc_mutex_lock(CTS_MUTEX_SOCKET_FD);
@@ -45,10 +39,6 @@ API int contacts_sim_import_all_contacts()
 
 API int contacts_sim_get_initialization_status(bool *completed)
 {
-#ifndef ENABLE_SIM_FEATURE
-       return CONTACTS_ERROR_NOT_SUPPORTED;
-#endif // ENABLE_SIM_FEATURE
-
        int ret;
 
        RETVM_IF(completed == NULL, CONTACTS_ERROR_INVALID_PARAMETER,
index 53ecb81..e7b555c 100644 (file)
@@ -112,7 +112,6 @@ static inline int __ctsvc_safe_read(int fd, char *buf, int buf_size)
        return read_size;
 }
 
-#ifdef ENABLE_SIM_FEATURE
 static int __ctsvc_socket_handle_return(int fd, ctsvc_socket_msg_s *msg)
 {
        CTS_FN_CALL;
@@ -184,7 +183,7 @@ int ctsvc_request_sim_import(int sim_slot_no)
        RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_write() Failed(errno = %d)", errno);
 
        ret = __ctsvc_socket_handle_return(__ctsvc_sockfd, &msg);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_socket_handle_return() Failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_socket_handle_return() Fail(%d)", ret);
        CTS_DBG("attach_num = %d", msg.attach_num);
 
        for (i=0;i<msg.attach_num;i++)
@@ -215,13 +214,13 @@ int ctsvc_request_sim_get_initialization_status(int sim_slot_no, bool *completed
        RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_write() Failed(errno = %d)", errno);
 
        ret = __ctsvc_socket_handle_return(__ctsvc_sockfd, &msg);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_socket_handle_return() Failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_socket_handle_return() Fail(%d)", ret);
        CTS_DBG("attach_num = %d", msg.attach_num);
 
        ret = __ctsvc_safe_read(__ctsvc_sockfd, dest, msg.attach_sizes[0]);
        RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_read() Failed(errno = %d)", errno);
 
-       if(atoi(dest) ==0)
+       if (atoi(dest) ==0)
                *completed = false;
        else
                *completed = true;
@@ -230,5 +229,3 @@ int ctsvc_request_sim_get_initialization_status(int sim_slot_no, bool *completed
 
        return msg.val;
 }
-
-#endif // ENABLE_SIM_FEATURE
index ad38a33..8844eb9 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_SOCKET_H__
-#define __TIZEN_SOCIAL_CTSVC_SOCKET_H__
+#ifndef __CTSVC_SOCKET_H__
+#define __CTSVC_SOCKET_H__
 
 #include "contacts.h"
 
 #define CTSVC_SOCKET_PATH "/tmp/.contacts-svc.sock"
 #define CTSVC_SOCKET_MSG_SIZE 1024
 
-// for use current contacts-svc-helper daemon
-// Message type
+/* for use current contacts-svc-helper daemon */
+/* Message type */
 enum{
        CTSVC_SOCKET_MSG_TYPE_REQUEST_RETURN_VALUE,
        CTSVC_SOCKET_MSG_TYPE_REQUEST_IMPORT_SIM,
@@ -46,13 +46,10 @@ typedef struct{
        int attach_sizes[CTSVC_SOCKET_MSG_REQUEST_MAX_ATTACH];
 }ctsvc_socket_msg_s;
 
-#ifdef ENABLE_SIM_FEATURE
 int ctsvc_request_sim_import(int sim_slot_no);
 int ctsvc_request_sim_get_initialization_status(int sim_slot_no, bool* completed);
-#endif // ENABLE_SIM_FEATURE
-
 int ctsvc_socket_init(void);
 void ctsvc_socket_final(void);
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_SOCKET_H__ */
+#endif /* __CTSVC_SOCKET_H__ */
 
index f69b654..d24619f 100644 (file)
@@ -21,8 +21,8 @@
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_STRUCT_H__
-#define __TIZEN_SOCIAL_CTSVC_STRUCT_H__
+#ifndef __CTSVC_STRUCT_H__
+#define __CTSVC_STRUCT_H__
 
 #include <stdbool.h>
 #include <stdlib.h>
 
 #include "contacts_views.h"
 
-#define CTSVC_IMG_FULL_PATH_SIZE_MAX 1024              // current max length file path is 256
+#define CTSVC_IMG_FULL_PATH_SIZE_MAX 1024  /* current max length file path is 256 */
+#define CTSVC_PATH_MAX_LEN 1024
+#define CTSVC_STR_SHORT_LEN 1024
 #define CTSVC_IMG_FULL_LOCATION "/opt/usr/data/contacts-svc/img"
 #define CTSVC_CONTACT_IMG_FULL_LOCATION "/opt/usr/data/contacts-svc/img/contact"
+#define STRING_EQUAL 0
 
 #define SAFE_STR(src) (src)?src:""
 #define SAFE_STRDUP(src) (src)?strdup(src):NULL
 #define SAFE_STRLEN(src) ((src)?strlen(src):0)
 #define FREEandSTRDUP(dest, src) \
-       do{ \
+       do { \
                free(dest);\
                if (src) dest = strdup(src);\
                else dest = NULL; \
-       }while (0)
+       } while (0)
 #define GET_STR(copy, str)     (copy)?(SAFE_STRDUP(str)):(str)
+#define CHECK_DIRTY_STR(src1, src2, is_dirty) \
+       do { \
+               if (src1 && NULL == src2) \
+                       *is_dirty = true; \
+               else if (NULL == src1 && src2) \
+                       *is_dirty = true; \
+               else if (src1 && src2 && 0 != strcmp(src1, src2)) \
+                       *is_dirty = true; \
+       } while (0)
+#define CHECK_DIRTY_VAL(src1, src2, is_dirty) \
+       do { \
+               if (src1 != src2) \
+                       *is_dirty = true; \
+       } while(0)
 
 enum {
        CTSVC_DATA_NAME = 1,
@@ -119,7 +136,7 @@ typedef struct{
 }property_info_s;
 
 typedef int (*__ctsvc_record_create_cb)(contacts_record_h* out_record);
-typedef int (*__ctsvc_record_destroy_cb)(contacts_record_h record, bool delete_child );
+typedef int (*__ctsvc_record_destroy_cb)(contacts_record_h record, bool delete_child);
 typedef int (*__ctsvc_record_clone_cb)(contacts_record_h record, contacts_record_h* out_record);
 
 typedef int (*__ctsvc_record_get_str_cb)(contacts_record_h record, unsigned int property_id,char** out_str);
@@ -129,11 +146,11 @@ typedef int (*__ctsvc_record_get_bool_cb)(contacts_record_h record, unsigned int
 typedef int (*__ctsvc_record_get_lli_cb)(contacts_record_h record, unsigned int property_id, long long int *value);
 typedef int (*__ctsvc_record_get_double_cb)(contacts_record_h record, unsigned int property_id, double *value);
 
-typedef int (*__ctsvc_record_set_str_cb)(contacts_record_h record, unsigned int property_id, const char* value);
-typedef int (*__ctsvc_record_set_int_cb)(contacts_record_h record, unsigned int property_id, int value);
-typedef int (*__ctsvc_record_set_bool_cb)(contacts_record_h record, unsigned int property_id, bool value);
-typedef int (*__ctsvc_record_set_lli_cb)(contacts_record_h record, unsigned int property_id, long long int value);
-typedef int (*__ctsvc_record_set_double_cb)(contacts_record_h record, unsigned int property_id, double value);
+typedef int (*__ctsvc_record_set_str_cb)(contacts_record_h record, unsigned int property_id, const char* value, bool *is_dirty);
+typedef int (*__ctsvc_record_set_int_cb)(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
+typedef int (*__ctsvc_record_set_bool_cb)(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
+typedef int (*__ctsvc_record_set_lli_cb)(contacts_record_h record, unsigned int property_id, long long int value, bool *is_dirty);
+typedef int (*__ctsvc_record_set_double_cb)(contacts_record_h record, unsigned int property_id, double value, bool *is_dirty);
 
 typedef int (*__ctsvc_record_add_child_record_cb)(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
 typedef int (*__ctsvc_record_remove_child_record_cb)(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
@@ -179,8 +196,8 @@ typedef struct  {
 typedef struct {
        int filter_type;
        char *view_uri;
-       GSList *filter_ops;     //ctsvc_filter_operator_e op;
-       GSList *filters;        //ctsvc_filter_h l_filter;
+       GSList *filter_ops; /* ctsvc_filter_operator_e op; */
+       GSList *filters;    /* ctsvc_filter_h l_filter; */
        property_info_s *properties;
        unsigned int property_count;
 }ctsvc_composite_filter_s;
@@ -301,9 +318,9 @@ typedef struct {
        int type;
        char *label;
        char *number;
-       char *cleaned;          // internally used
-       char *normalized;       // internally used
-       char *lookup;           // internally used : for min match
+       char *cleaned;     /* internally used */
+       char *normalized;  /* internally used */
+       char *lookup;      /* internally used : for min match */
 }ctsvc_number_s;
 
 typedef struct {
@@ -348,7 +365,7 @@ typedef struct {
        int type;
        char *label;
        int date;
-       bool is_leap_month;
+       bool is_leap_month;  /* deprecated */
        int calendar_type;
 }ctsvc_event_s;
 
@@ -437,7 +454,7 @@ typedef struct {
        int id;
        int activity_id;
        char *photo_url;
-       int     sort_index;
+       int sort_index;
 }ctsvc_activity_photo_s;
 
 typedef struct {
@@ -495,7 +512,7 @@ typedef struct {
        int id;
        int person_id;
        int changed_time;
-       int changed_ver;                // internally used, check when updating contact
+       int changed_ver;   /* internally used, check when updating contact */
        int addressbook_id;
        int link_mode;
        bool has_phonenumber;
@@ -572,7 +589,7 @@ typedef struct {
        int changed_ver;
        int addressbook_id;
        bool image_changed;
-       int last_changed_type;  // it is used for _contacts_my_profile_updated_info
+       int last_changed_type;  /* it is used for _contacts_my_profile_updated_info */
 }ctsvc_updated_info_s;
 
 typedef struct {
@@ -605,5 +622,10 @@ typedef struct {
        GSList *values;
 }ctsvc_result_s;
 
+typedef struct {
+       char *zone_name;
+       int version;
+       int connection_count;
+}ctsvc_base_s;
 
-#endif /* __TIZEN_SOCIAL_CTSVC_STRUCT_H__ */
+#endif /* __CTSVC_STRUCT_H__ */
index 6494a53..766587b 100644 (file)
 #include <unistd.h>
 #include <unicode/ucnv.h>
 #include <unicode/ustring.h>
+#include <sys/time.h>
 
 #ifdef _CONTACTS_IPC_CLIENT
-#include <pims-ipc.h>
 #include "ctsvc_client_ipc.h"
 #endif
 
 #include "contacts.h"
-#include "ctsvc_vcard.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_record.h"
 #include "ctsvc_list.h"
@@ -120,24 +119,24 @@ enum {
 
 enum{
        CTSVC_VCARD_IMG_NONE,
-       CTSVC_VCARD_IMG_PNG,            // Portable Network Graphics
-       // vcard  2.1 spec
-       CTSVC_VCARD_IMG_JPEG,   // ISO JPEG format
-       CTSVC_VCARD_IMG_GIF,            //Graphics Interchange Format
-       CTSVC_VCARD_IMG_TIFF,           // Tagged Image File Format
-       CTSVC_VCARD_IMG_CGM,            //ISO Computer Graphics Metafile
-       CTSVC_VCARD_IMG_WMF,    // MS Windows Metafile
-       CTSVC_VCARD_IMG_BMP,            // MS Windows Bitmap
-       CTSVC_VCARD_IMG_MET,            // IBM PM Metafile
-       CTSVC_VCARD_IMG_PMB,            // IBM PM Bitmap
-       CTSVC_VCARD_IMG_DIB,            // MS Windows DIB
-       CTSVC_VCARD_IMG_PICT,           // Apple Picture format
-       CTSVC_VCARD_IMG_PDF,            // Adobe Page Description Format
-       CTSVC_VCARD_IMG_PS,             // Adobe PostScript format
-       CTSVC_VCARD_IMG_QTIME,  // Apple QuickTime format
-       CTSVC_VCARD_IMG_MPEG,   // ISO MPEG format
-       CTSVC_VCARD_IMG_MPEG2,  // ISO MPEG version 2 format
-       CTSVC_VCARD_IMG_AVI,            // Intel AVI format
+       CTSVC_VCARD_IMG_PNG,    /* Portable Network Graphics */
+       /* vcard  2.1 spec */
+       CTSVC_VCARD_IMG_JPEG,   /* ISO JPEG format */
+       CTSVC_VCARD_IMG_GIF,    /* Graphics Interchange Format */
+       CTSVC_VCARD_IMG_TIFF,   /* Tagged Image File Format */
+       CTSVC_VCARD_IMG_CGM,    /* ISO Computer Graphics Metafile */
+       CTSVC_VCARD_IMG_WMF,    /* MS Windows Metafile */
+       CTSVC_VCARD_IMG_BMP,    /* MS Windows Bitmap */
+       CTSVC_VCARD_IMG_MET,    /* IBM PM Metafile */
+       CTSVC_VCARD_IMG_PMB,    /* IBM PM Bitmap */
+       CTSVC_VCARD_IMG_DIB,    /* MS Windows DIB */
+       CTSVC_VCARD_IMG_PICT,   /* Apple Picture format */
+       CTSVC_VCARD_IMG_PDF,    /* Adobe Page Description Format */
+       CTSVC_VCARD_IMG_PS,     /* Adobe PostScript format */
+       CTSVC_VCARD_IMG_QTIME,  /* Apple QuickTime format */
+       CTSVC_VCARD_IMG_MPEG,   /* ISO MPEG format */
+       CTSVC_VCARD_IMG_MPEG2,  /* ISO MPEG version 2 format */
+       CTSVC_VCARD_IMG_AVI,    /* Intel AVI format */
 };
 
 static const char *content_name[CTSVC_VCARD_VALUE_MAX] = {0};
@@ -146,9 +145,9 @@ const char *CTSVC_CRLF = "\r\n";
 static void __ctsvc_vcard_initial(void)
 {
        if (NULL == *content_name) {
-               //content_name[CTSVC_VCARD_VALUE_NAME] = "NAME"; /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_PROFILE] = "PROFILE"; /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_SOURCE] = "SOURCE"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_NAME] = "NAME"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_PROFILE] = "PROFILE"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_SOURCE] = "SOURCE"; // not supported */
                content_name[CTSVC_VCARD_VALUE_FN] = "FN";
                content_name[CTSVC_VCARD_VALUE_N] = "N";
                content_name[CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME] = "X-PHONETIC-FIRST-NAME";
@@ -160,31 +159,31 @@ static void __ctsvc_vcard_initial(void)
                content_name[CTSVC_VCARD_VALUE_X_ANNIVERSARY] = "ANNIVERSARY";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_EVENT] = "X-TIZEN-EVENT";
                content_name[CTSVC_VCARD_VALUE_ADR] = "ADR";
-               //content_name[CTSVC_VCARD_VALUE_LABEL] = "LABEL"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_LABEL] = "LABEL"; // not supported */
                content_name[CTSVC_VCARD_VALUE_TEL] = "TEL";
                content_name[CTSVC_VCARD_VALUE_EMAIL] = "EMAIL";
-               //content_name[CTSVC_VCARD_VALUE_MAILER] = "MAILER"; /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_TZ] = "TZ"; /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_GEO] = "GEO"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_MAILER] = "MAILER"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_TZ] = "TZ"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_GEO] = "GEO"; // not supported */
                content_name[CTSVC_VCARD_VALUE_TITLE] = "TITLE";
                content_name[CTSVC_VCARD_VALUE_ROLE] = "ROLE";
                content_name[CTSVC_VCARD_VALUE_LOGO] = "LOGO";
-               //content_name[CTSVC_VCARD_VALUE_AGENT] = "AGENT"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_AGENT] = "AGENT"; // not supported */
                content_name[CTSVC_VCARD_VALUE_ORG] = "ORG";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_LOCATION] = "X-TIZEN-COMPANY-LOCATION";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_DESCRIPTION] = "X-TIZEN-COMPANY-DESCRIPTION";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_PHONETIC_NAME] = "X-TIZEN-COMPANY-PHONETIC-NAME";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_ASSISTANT_NAME] = "X-TIZEN-COMPANY-ASSISTANT-NAME";
-               //content_name[CTSVC_VCARD_VALUE_CATEGORIES] = "CATEGORIES"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_CATEGORIES] = "CATEGORIES"; // not supported */
                content_name[CTSVC_VCARD_VALUE_NOTE] = "NOTE";
-               //content_name[CTSVC_VCARD_VALUE_PRODID] = "PRODID"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_PRODID] = "PRODID"; // not supported */
                content_name[CTSVC_VCARD_VALUE_REV] = "REV";
-               //content_name[CTSVC_VCARD_VALUE_SORT-STRING] = "SORT-STRING"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_SORT-STRING] = "SORT-STRING"; // not supported */
                content_name[CTSVC_VCARD_VALUE_UID] = "UID";
                content_name[CTSVC_VCARD_VALUE_URL] = "URL";
-               //content_name[CTSVC_VCARD_VALUE_VERSION] = "VERSION"; /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_CLASS] = "CLASS";         /* not supported */
-               //content_name[CTSVC_VCARD_VALUE_KEY] = "KEY"; /* not supported */
+               /* content_name[CTSVC_VCARD_VALUE_VERSION] = "VERSION"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_CLASS] = "CLASS"; // not supported */
+               /* content_name[CTSVC_VCARD_VALUE_KEY] = "KEY"; // not supported */
                content_name[CTSVC_VCARD_VALUE_X_MSN] = "X-MSN";
                content_name[CTSVC_VCARD_VALUE_X_YAHOO] = "X-YAHOO";
                content_name[CTSVC_VCARD_VALUE_X_ICQ] = "X-ICQ";
@@ -196,7 +195,7 @@ static void __ctsvc_vcard_initial(void)
                content_name[CTSVC_VCARD_VALUE_X_GOOGLE_TALK] = "X-GOOGLE-TALK";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER] = "X-TIZEN-MESSENGER";
                content_name[CTSVC_VCARD_VALUE_X_TIZEN_RELATIONSHIP] = "X-TIZEN-RELATIONSHIP";
-               //content_name[CTSVC_VCARD_VALUE_X_CHILDREN] = "X-CHILDREN";
+               /* content_name[CTSVC_VCARD_VALUE_X_CHILDREN] = "X-CHILDREN"; */
                content_name[CTSVC_VCARD_VALUE_END] = "END";
        }
 };
@@ -275,7 +274,7 @@ static int __ctsvc_vcard_append_str(char **buf, int *buf_size, int len, const ch
                                *r = *s;
                                break;
                        case 0xA1:
-                               if (*(s+1) && 0xAC == *(s+1)) { // en/em backslash
+                               if (*(s+1) && 0xAC == *(s+1)) { /* en/em backslash */
                                        *r = '\\';
                                        r++;
                                        str_len++;
@@ -308,7 +307,7 @@ static int __ctsvc_vcard_append_str(char **buf, int *buf_size, int len, const ch
                                }
                                break;
                        case 0x81:
-                               if (*(s+1) && 0x5F == *(s+1)) { // en/em backslash
+                               if (*(s+1) && 0x5F == *(s+1)) { /* en/em backslash */
                                        *r = '\\';
                                        r++;
                                        str_len++;
@@ -362,18 +361,21 @@ static inline int __ctsvc_vcard_add_folding(char **buf, int *buf_size, int buf_l
 {
        int char_len = 0;
        char *buf_copy = NULL;
-       int len, result_len;
+       int len, result_len = 0;
        char *r;
        const char *s;
        bool content_start = false;
        bool encode_64 = false;
 
        buf_copy = calloc(1, *buf_size);
-       RETVM_IF(NULL == buf_copy, -1, "calloc() return NULL");
+       if (NULL == buf_copy) {
+               CTS_ERR("calloc() Fail");
+               return 0;
+       }
 
        s = *buf;
        r = buf_copy;
-       len = result_len = 0;
+       len = result_len;
 
        while (*s) {
                if (*buf_size < result_len + 5) {
@@ -392,7 +394,7 @@ static inline int __ctsvc_vcard_add_folding(char **buf, int *buf_size, int buf_l
                if (false == content_start) {
                        if (':' == *s)
                                content_start = true;
-                       else if (0 == strncmp(s, "ENCODING=BASE64", strlen("ENCODING=BASE64")))
+                       else if (STRING_EQUAL == strncmp(s, "ENCODING=BASE64", strlen("ENCODING=BASE64")))
                                encode_64 = true;
                }
 
@@ -463,15 +465,19 @@ static inline int __ctsvc_vcard_append_name(ctsvc_list_s *names, char **buf, int
        CTSVC_VCARD_APPEND_STR(buf, buf_size, len, CTSVC_CRLF);
 
        if (name->first && name->last) {
-               contacts_name_display_order_e order;
+               contacts_name_display_order_e order = CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST;
+#ifdef _CONTACTS_IPC_CLIENT
                contacts_setting_get_name_display_order(&order);
+#endif
                if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == order) {
                        snprintf(display, sizeof(display), "%s %s", name->first, name->last);
                }
+#ifdef _CONTACTS_IPC_CLIENT
                else {
-                       //CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST
+                       /* CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST */
                        snprintf(display, sizeof(display), "%s, %s", name->last, name->first);
                }
+#endif
        }
        else
                snprintf(display, sizeof(display), "%s%s", SAFE_STR(name->first), SAFE_STR(name->last));
@@ -500,8 +506,7 @@ static inline int __ctsvc_vcard_append_name(ctsvc_list_s *names, char **buf, int
 
 static inline const char* __ctsvc_get_img_suffix(int type)
 {
-       switch (type)
-       {
+       switch (type) {
        case CTSVC_VCARD_IMG_TIFF:
                return "tiff";
        case CTSVC_VCARD_IMG_GIF:
@@ -611,8 +616,7 @@ static inline int __ctsvc_vcard_get_image_type(char *val)
 
 static inline const char* __ctsvc_get_image_type_str(int type)
 {
-       switch (type)
-       {
+       switch (type) {
        case CTSVC_VCARD_IMG_TIFF:
                return "TIFF";
        case CTSVC_VCARD_IMG_GIF:
@@ -657,18 +661,13 @@ static inline int __ctsvc_vcard_put_company_logo(const char *path, char **buf, i
        gsize read_len;
        char *suffix;
        gchar *buf_image;
-       guchar *image = calloc(1, CTSVC_VCARD_PHOTO_MAX_SIZE);
-       RETVM_IF(NULL == image, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       guchar image[CTSVC_VCARD_PHOTO_MAX_SIZE] = {0};
 
        suffix = strrchr(path, '.');
        type = __ctsvc_vcard_get_image_type(suffix);
 
        fd = open(path, O_RDONLY);
-       if (fd < 0) {
-               free(image);
-               CTS_ERR("System : Open Failed(%d)", errno);
-               return CONTACTS_ERROR_SYSTEM;
-       }
+       RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : Open Fail(%d)", errno);
 
        read_len = 0;
        while ((ret = read(fd, image+read_len, sizeof(image)-read_len))) {
@@ -681,14 +680,9 @@ static inline int __ctsvc_vcard_put_company_logo(const char *path, char **buf, i
                read_len += ret;
        }
        close(fd);
-       if (ret < 0) {
-               free(image);
-               CTS_ERR("System : read() Failed(%d)", errno);
-               return CONTACTS_ERROR_SYSTEM;
-       }
+       RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : read() Fail(%d)", errno);
 
        buf_image = g_base64_encode(image, read_len);
-       free(image);
        if (buf_image) {
                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name[CTSVC_VCARD_VALUE_LOGO]);
                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, ";ENCODING=BASE64;TYPE=");
@@ -928,7 +922,7 @@ static inline int __ctsvc_vcard_append_nicknames(ctsvc_list_s *nickname_list, ch
                        }
                }
        }
-       if (!first)
+       if (false == first)
                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, CTSVC_CRLF);
 
        return len;
@@ -1046,32 +1040,32 @@ static void __ctsvc_vcard_get_clean_number_for_export(char *str, char *dest)
                if (3 == char_len) {
                        if (*s == 0xef) {
                                if (*(s+1) == 0xbc) {
-                                       if (0x90 <= *(s+2) && *(s+2) <= 0x99) {                         // ef bc 90 : '0' ~ ef bc 99 : '9'
+                                       if (0x90 <= *(s+2) && *(s+2) <= 0x99) {  /* ef bc 90 : '0' ~ ef bc 99 : '9' */
                                                *r = '0' + (*(s+2) - 0x90);
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x8b == *(s+2)) {                                                              // ef bc 8b : '+'
+                                       else if (0x8b == *(s+2)) {   /* ef bc 8b : '+' */
                                                *r = '+';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x8a == *(s+2)) {                                                              // ef bc 8a : '*'
+                                       else if (0x8a == *(s+2)) {   /* ef bc 8a : '*' */
                                                *r = '*';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x83 == *(s+2)) {                                                              // ef bc 83 : '#'
+                                       else if (0x83 == *(s+2)) {   /* ef bc 83 : '#' */
                                                *r = '#';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x8c == *(s+2)) {                                                              // ef bc 8c : ','
+                                       else if (0x8c == *(s+2)) {   /* ef bc 8c : ',' */
                                                *r = 'p';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x9b == *(s+2)) {                                                              // ef bc 9b : ';'
+                                       else if (0x9b == *(s+2)) {   /* ef bc 9b : ';' */
                                                *r = 'w';
                                                r++;
                                                s+=3;
@@ -1091,7 +1085,6 @@ static void __ctsvc_vcard_get_clean_number_for_export(char *str, char *dest)
                else if (1 == char_len) {
                        switch (*s) {
                                case '/':
-                               case 'N':
                                case '.':
                                case '0' ... '9':
                                case '#':
@@ -1117,6 +1110,20 @@ static void __ctsvc_vcard_get_clean_number_for_export(char *str, char *dest)
                                        r++;
                                        s++;
                                        break;
+                               case 'a' ... 'o':
+                               case 'q' ... 'v':
+                               case 'x' ... 'z':
+                                       *r = *s - 0x20;
+                                       r++;
+                                       s++;
+                                       break;
+                               case 'A' ... 'O':
+                               case 'Q' ... 'V':
+                               case 'X' ... 'Z':
+                                       *r = *s;
+                                       r++;
+                                       s++;
+                                       break;
                                default:
                                        s++;
                                        break;
@@ -1268,7 +1275,7 @@ static inline int __ctsvc_vcard_append_events(ctsvc_list_s *event_list, char **b
 
        for (cursor=event_list->records;cursor;cursor=cursor->next) {
                data = cursor->data;
-               if (!data->date) continue;
+               if (0 == data->date) continue;
 
                event[0] = '\0';
                if (CONTACTS_EVENT_TYPE_BIRTH == data->type) {
@@ -1373,7 +1380,7 @@ static inline int __ctsvc_vcard_append_messengers(ctsvc_list_s *messenger_list,
                                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name_messenger);
                                CTSVC_VCARD_APPEND_CONTENT(buf, buf_size, len, messenger->im_id);
                        }
-                       else if(content_name_x_type) {
+                       else if (content_name_x_type) {
                                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER]);
                                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, ";TYPE=");
                                CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name_x_type);
@@ -1473,30 +1480,21 @@ static inline int __ctsvc_vcard_put_photo(ctsvc_list_s *image_list, char **buf,
        gsize read_len;
        char *suffix;
        gchar *buf_image;
+       guchar image[CTSVC_VCARD_PHOTO_MAX_SIZE] = {0};
 
-       guchar *image = NULL;
        GList *cursor;
        ctsvc_image_s *data;
 
        for (cursor=image_list->records;cursor;cursor=cursor->next) {
                data = cursor->data;
-               if (!data->path) continue;
+               if (NULL == data->path) continue;
 
                suffix = strrchr(data->path, '.');
                type = __ctsvc_vcard_get_image_type(suffix);
 
                fd = open(data->path, O_RDONLY);
-               if (fd < 0) {
-                       CTS_ERR("System : Open Failed(%d)", errno);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
+               RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : Open Fail(%d)", errno);
 
-               image = calloc(1, CTSVC_VCARD_PHOTO_MAX_SIZE);
-               if (NULL == image) {
-                       CTS_ERR("calloc() return NULL");
-                       close(fd);
-                       return CONTACTS_ERROR_OUT_OF_MEMORY;
-               }
                read_len = 0;
                while ((ret = read(fd, image+read_len, sizeof(image)-read_len))) {
                        if (-1 == ret) {
@@ -1508,14 +1506,10 @@ static inline int __ctsvc_vcard_put_photo(ctsvc_list_s *image_list, char **buf,
                        read_len += ret;
                }
                close(fd);
-               if (ret < 0) {
-                       free(image);
-                       CTS_ERR("System : read() Failed(%d)", errno);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
+               RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : read() Fail(%d)", errno);
 
                buf_image = g_base64_encode(image, read_len);
-               free(image);
+
                if (buf_image) {
                        CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name[CTSVC_VCARD_VALUE_PHOTO]);
                        CTSVC_VCARD_APPEND_STR(buf, buf_size, len, ";ENCODING=BASE64;TYPE=");
@@ -1527,6 +1521,7 @@ static inline int __ctsvc_vcard_put_photo(ctsvc_list_s *image_list, char **buf,
                        g_free(buf_image);
                }
        }
+
        return len;
 }
 
@@ -1704,7 +1699,10 @@ static int __ctsvc_vcard_make(ctsvc_contact_s *contact, char **vcard_stream)
        __ctsvc_vcard_initial();
 
        buf = calloc(1, buf_size);
-       RETVM_IF(NULL == buf, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == buf) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        len = __ctsvc_vcard_append_start_vcard_3_0(&buf, &buf_size, len);
        if (len < 0) {
@@ -1743,7 +1741,10 @@ static int __ctsvc_vcard_make_from_my_profile(ctsvc_my_profile_s *my_profile, ch
        __ctsvc_vcard_initial();
 
        buf = calloc(1, buf_size);
-       RETVM_IF(NULL == buf, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == buf) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        len = __ctsvc_vcard_append_start_vcard_3_0(&buf, &buf_size, len);
        if (len < 0) {
@@ -1806,14 +1807,14 @@ API int contacts_vcard_make_from_my_profile(contacts_record_h record, char **vca
        return __ctsvc_vcard_make_from_my_profile(my_profile, vcard_stream);
 }
 
-
+#ifdef _CONTACTS_IPC_CLIENT
 static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *list_contacts, char **buf, int *buf_size, int len)
 {
        int changed_time = 0;
        ctsvc_contact_s *contact;
        GList *cursor = NULL;
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->id == person->name_contact_id && contact->name) {
                        len = __ctsvc_vcard_append_name(contact->name, buf, buf_size, len);
@@ -1821,7 +1822,7 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->company && contact->company->cursor) {
                        len = __ctsvc_vcard_append_company(contact->company, buf, buf_size, len);
@@ -1829,21 +1830,21 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->note && contact->note->cursor) {
                        len = __ctsvc_vcard_append_note(contact->note, buf, buf_size, len);
                        RETV_IF(len < 0, len);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->postal_addrs && contact->postal_addrs->cursor) {
                        len = __ctsvc_vcard_append_postals(contact->postal_addrs, buf, buf_size, len);
                        RETV_IF(len < 0, len);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->numbers && contact->numbers->cursor) {
                        len = __ctsvc_vcard_append_numbers(contact->numbers, buf, buf_size, len);
@@ -1851,7 +1852,7 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->emails && contact->emails->cursor) {
                        len = __ctsvc_vcard_append_emails(contact->emails, buf, buf_size, len);
@@ -1859,14 +1860,14 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->nicknames && contact->nicknames->cursor) {
                        len = __ctsvc_vcard_append_nicknames(contact->nicknames, buf, buf_size, len);
                        RETV_IF(len < 0, len);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->urls && contact->urls->cursor) {
                        len = __ctsvc_vcard_append_webs(contact->urls, buf, buf_size, len);
@@ -1874,21 +1875,21 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->events && contact->events->cursor) {
                        len = __ctsvc_vcard_append_events(contact->events, buf, buf_size, len);
                        RETV_IF(len < 0, len);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->images && contact->images->cursor) {
                        len = __ctsvc_vcard_put_photo(contact->images, buf, buf_size, len);
                        RETV_IF(len < 0, len);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->messengers && contact->messengers->cursor) {
                        len = __ctsvc_vcard_append_messengers(contact->messengers, buf, buf_size, len);
@@ -1896,7 +1897,7 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->relationships && contact->relationships->cursor) {
                        len = __ctsvc_vcard_append_relationships(contact->relationships, buf, buf_size, len);
@@ -1904,14 +1905,14 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
                }
        }
 
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && contact->uid && DEFAULT_ADDRESS_BOOK_ID == contact->addressbook_id) {
                        CTSVC_VCARD_APPEND_STR(buf, buf_size, len, content_name[CTSVC_VCARD_VALUE_UID]);
                        CTSVC_VCARD_APPEND_CONTENT(buf, buf_size, len, contact->uid);
                }
        }
-       for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+       for (cursor=list_contacts->records;cursor;cursor=cursor->next) {
                contact = (ctsvc_contact_s *)cursor->data;
                if (contact && changed_time < contact->changed_time)
                        changed_time = contact->changed_time;
@@ -1935,7 +1936,9 @@ static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *lis
 #endif
        return len;
 }
+#endif /* _CONTACTS_IPC_CLIENT */
 
+#ifdef _CONTACTS_IPC_CLIENT
 static int __ctsvc_vcard_make_from_person(ctsvc_person_s *person, ctsvc_list_s *list_contacts,
                char **vcard_stream)
 {
@@ -1949,7 +1952,10 @@ static int __ctsvc_vcard_make_from_person(ctsvc_person_s *person, ctsvc_list_s *
        __ctsvc_vcard_initial();
 
        buf = calloc(1, buf_size);
-       RETVM_IF(NULL == buf, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == buf) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        len = __ctsvc_vcard_append_start_vcard_3_0(&buf, &buf_size, len);
        if (len < 0) {
@@ -1978,7 +1984,9 @@ static int __ctsvc_vcard_make_from_person(ctsvc_person_s *person, ctsvc_list_s *
 
        return CONTACTS_ERROR_NONE;
 }
+#endif /* _CONTACTS_IPC_CLIENT */
 
+#ifdef _CONTACTS_IPC_CLIENT
 API int contacts_vcard_make_from_person(contacts_record_h record, char **vcard_stream)
 {
        int ret;
@@ -2004,14 +2012,14 @@ API int contacts_vcard_make_from_person(contacts_record_h record, char **vcard_s
                if (CONTACTS_ERROR_NONE != (ret = contacts_db_get_records_with_query(query, 0, 0, &list))) break;
                if (CONTACTS_ERROR_NONE != (ret = __ctsvc_vcard_make_from_person(person, (ctsvc_list_s *)list, vcard_stream))) break;
        } while (0);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_vcard_make_from_person() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_vcard_make_from_person() Fail(%d)", ret);
        contacts_query_destroy(query);
        contacts_filter_destroy(filter);
        contacts_list_destroy(list, true);
        return ret;
 }
+#endif
 
-////////////////////////////////////////////////////////////////////////////
 static inline char* __ctsvc_vcard_remove_empty_line(char *src)
 {
        while (*src) {
@@ -2110,7 +2118,7 @@ static inline bool __ctsvc_vcard_check_base64_encoded(char *src)
        while (*tmp) {
                if ('B' == *tmp) {
                        ret = strncmp(tmp, "BASE64", sizeof("BASE64") - 1);
-                       if (!ret)
+                       if (STRING_EQUAL == ret)
                                return true;
                } else if (':' == *tmp || '\r' == *tmp) {
                        break;
@@ -2129,7 +2137,7 @@ static inline int __ctsvc_vcard_check_quoted(char *src, int max, int *quoted)
        while (*src && max) {
                if ('Q' == *src) {
                        ret = strncmp(src, "QUOTED-PRINTABLE", sizeof("QUOTED-PRINTABLE") - 1);
-                       if (!ret) {
+                       if (STRING_EQUAL == ret) {
                                *quoted = TRUE;
                                return TRUE;
                        }
@@ -2218,7 +2226,7 @@ static inline char* __ctsvc_vcard_translate_charset(char *src, int len)
        while (*val) {
                if ('C' == *val) {
                        ret = strncmp(val, "CHARSET", sizeof("CHARSET") - 1);
-                       if (!ret) {
+                       if (STRING_EQUAL == ret) {
                                val += sizeof("CHARSET");
                                break;
                        }
@@ -2252,25 +2260,27 @@ static inline char* __ctsvc_vcard_translate_charset(char *src, int len)
 
                temp_size = (src_len+1) * sizeof(UChar);
                temp = malloc(temp_size);
-               RETVM_IF(NULL == temp, NULL, "malloc() return NULL");
+               if (NULL == temp) {
+                       CTS_ERR("malloc() Fail");
+                       return NULL;
+               }
                conv = ucnv_open(enc, &err);
-               WARN_IF(U_FAILURE(err), "ucnv_open() Failed(%d), enc=%s", err, enc);
+               WARN_IF(U_FAILURE(err), "ucnv_open() Fail(%d), enc=%s", err, enc);
                ucnv_toUChars(conv, temp, temp_size, val, src_len, &err);
-               WARN_IF(U_FAILURE(err), "ucnv_toUChars() Failed(%d), enc=%s", err, enc);
+               WARN_IF(U_FAILURE(err), "ucnv_toUChars() Fail(%d), enc=%s", err, enc);
                ucnv_close(conv);
 
                dest_size = temp_size*2;
                dest = malloc(dest_size);
                if (NULL == dest) {
-                       CTS_ERR("malloc() return NULL");
-                       ucnv_close(conv);
+                       CTS_ERR("malloc() Fail");
                        free(temp);
                        return NULL;
                }
                conv = ucnv_open("UTF-8", &err);
-               WARN_IF(U_FAILURE(err), "ucnv_open() Failed(%d), enc=%s", err, enc);
+               WARN_IF(U_FAILURE(err), "ucnv_open() Fail(%d), enc=%s", err, enc);
                ucnv_fromUChars(conv, dest, dest_size, temp, u_strlen(temp), &err);
-               WARN_IF(U_FAILURE(err), "ucnv_fromUChars() Failed(%d), enc=%s", err, enc);
+               WARN_IF(U_FAILURE(err), "ucnv_fromUChars() Fail(%d), enc=%s", err, enc);
                ucnv_close(conv);
                free(temp);
 
@@ -2285,8 +2295,8 @@ static void __ctsvc_vcard_get_prefix(char **prefix, char *src)
        if (temp) {
                int len = (int)temp - (int)src;
                *prefix = calloc(len+1, sizeof(char));
-               RETM_IF(NULL == *prefix, "calloc() return NULL");
-               snprintf(*prefix, len+1, "%s", src);
+               if (*prefix)
+                       snprintf(*prefix, len+1, "%s", src);
        }
        else {
                *prefix = NULL;
@@ -2360,7 +2370,10 @@ static char* __ctsvc_vcard_get_val(int ver, char *src, char **prefix, char **des
 
                *cursor = '\0';
                *dest = strdup(src);
-               RETVM_IF(NULL == *dest, NULL, "strdup() return NULL");
+               if (NULL == *dest) {
+                       CTS_ERR("strdup() Fail");
+                       return NULL;
+               }
                if (CTSVC_VCARD_VER_2_1 != ver)
                        __ctsvc_vcard_remove_folding(*dest);
 
@@ -2416,7 +2429,7 @@ static char* __ctsvc_vcard_remove_escape_char(char *str)
                                *r = *n;
                                s++;
                                break;
-                       case 0xA1: // en/em backslash
+                       case 0xA1:  /* en/em backslash */
                                if (*(n+1) && 0xAC == *(n+1)) {
                                        *r = *n;
                                        r++;
@@ -2424,7 +2437,7 @@ static char* __ctsvc_vcard_remove_escape_char(char *str)
                                        s+=2;
                                }
                                break;
-                       case 0x81:  // en/em backslash
+                       case 0x81:  /* en/em backslash */
                                if (*(n+1) && 0x5F == *(n+1)) {
                                        *r = *n;
                                        r++;
@@ -2464,7 +2477,7 @@ static inline int __ctsvc_vcard_get_display_name(ctsvc_list_s *name_list, char *
        contacts_list_get_count((contacts_list_h)name_list, &count);
        if (count <= 0) {
                ret = contacts_record_create(_contacts_name._uri, &name);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)name_list, name);
        }
        else {
@@ -2472,14 +2485,12 @@ static inline int __ctsvc_vcard_get_display_name(ctsvc_list_s *name_list, char *
        }
 
        ret = contacts_record_get_str_p(name, _contacts_name.first, &first_name);
-       WARN_IF(ret != CONTACTS_ERROR_NONE, "contacts_record_get_str_p is failed(%d)", ret);
+       WARN_IF(ret != CONTACTS_ERROR_NONE, "contacts_record_get_str_p Fail(%d)", ret);
        ret = contacts_record_get_str_p(name, _contacts_name.last, &last_name);
-       WARN_IF(ret != CONTACTS_ERROR_NONE, "contacts_record_get_str_p is failed(%d)", ret);
+       WARN_IF(ret != CONTACTS_ERROR_NONE, "contacts_record_get_str_p Fail(%d)", ret);
 
-       if ((NULL == first_name || '\0' == *first_name) && (NULL == last_name || '\0' == *last_name)) {
-               ret = contacts_record_set_str(name, _contacts_name.first, __ctsvc_vcard_remove_escape_char(temp));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
-       }
+       if ((NULL == first_name || '\0' == *first_name) && (NULL == last_name || '\0' == *last_name))
+               contacts_record_set_str(name, _contacts_name.first, __ctsvc_vcard_remove_escape_char(temp));
 
        return CONTACTS_ERROR_NONE;
 }
@@ -2521,15 +2532,14 @@ static inline int __ctsvc_vcard_get_name(ctsvc_list_s *name_list, char *val)
        contacts_list_get_count((contacts_list_h)name_list, &count);
        if (count <= 0) {
                ret = contacts_record_create(_contacts_name._uri, &name);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)name_list, name);
        }
        else {
                contacts_list_get_current_record_p((contacts_list_h)name_list, &name);
        }
 
-       ret = contacts_record_set_str(name, _contacts_name.first, NULL); // remove FN
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(name, _contacts_name.first, NULL);  /* remove FN */
 
        while (true) {
                bool separator = false;
@@ -2562,7 +2572,7 @@ static inline int __ctsvc_vcard_get_phonetic_name(ctsvc_list_s *name_list, int t
        contacts_list_get_count((contacts_list_h)name_list, &count);
        if (count <= 0) {
                ret = contacts_record_create(_contacts_name._uri, &name);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)name_list, name);
        }
        else {
@@ -2570,18 +2580,12 @@ static inline int __ctsvc_vcard_get_phonetic_name(ctsvc_list_s *name_list, int t
        }
 
        __ctsvc_strtok(start, separator);
-       if (CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME == type) {
-               ret = contacts_record_set_str(name, _contacts_name.phonetic_first, __ctsvc_vcard_remove_escape_char(start));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
-       }
-       else if (CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME == type) {
-               ret = contacts_record_set_str(name, _contacts_name.phonetic_middle, __ctsvc_vcard_remove_escape_char(start));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
-       }
-       else if (CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME == type) {
-               ret = contacts_record_set_str(name, _contacts_name.phonetic_last, __ctsvc_vcard_remove_escape_char(start));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
-       }
+       if (CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME == type)
+               contacts_record_set_str(name, _contacts_name.phonetic_first, __ctsvc_vcard_remove_escape_char(start));
+       else if (CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME == type)
+               contacts_record_set_str(name, _contacts_name.phonetic_middle, __ctsvc_vcard_remove_escape_char(start));
+       else if (CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME == type)
+               contacts_record_set_str(name, _contacts_name.phonetic_last, __ctsvc_vcard_remove_escape_char(start));
 
        return CONTACTS_ERROR_NONE;
 }
@@ -2604,8 +2608,8 @@ static inline int __ctsvc_vcard_get_nickname(ctsvc_list_s *nickname_list, char *
                ret = contacts_record_create(_contacts_nickname._uri, &nickname);
                if (ret < CONTACTS_ERROR_NONE) {
                        GList *cursor = NULL;
-                       CTS_ERR("contacts_record_create is failed(%d)", ret);
-                       for(cursor = nickname_list->records;cursor;cursor=cursor->next)
+                       CTS_ERR("contacts_record_create Fail(%d)", ret);
+                       for (cursor = nickname_list->records;cursor;cursor=cursor->next)
                                contacts_record_destroy((contacts_record_h)(cursor->data), true);
                        g_list_free(nickname_list->records);
                        nickname_list->records = NULL;
@@ -2613,8 +2617,7 @@ static inline int __ctsvc_vcard_get_nickname(ctsvc_list_s *nickname_list, char *
                        nickname_list->count = 0;
                        return ret;
                }
-               ret = contacts_record_set_str(nickname, _contacts_nickname.name, __ctsvc_vcard_remove_escape_char(start));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+               contacts_record_set_str(nickname, _contacts_nickname.name, __ctsvc_vcard_remove_escape_char(start));
                contacts_list_add((contacts_list_h)nickname_list, nickname);
 
                temp = strtok(NULL, separator);
@@ -2633,7 +2636,7 @@ static inline int __ctsvc_vcard_get_photo(contacts_record_h contact, ctsvc_list_
        contacts_record_h image;
        struct timeval tv;
 
-       temp = strchr(val , ':');
+       temp = strchr(val, ':');
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : val is invalid");
 
        *temp = '\0';
@@ -2641,18 +2644,17 @@ static inline int __ctsvc_vcard_get_photo(contacts_record_h contact, ctsvc_list_
        type = __ctsvc_vcard_get_image_type(prefix);
 
        buf = g_base64_decode(temp+1, &size);
-       if (0 == size) {
+       if ((0 == size) || (NULL == buf)) {
                g_free(buf);
                return CONTACTS_ERROR_NONE;
        }
-       RETVM_IF(NULL == buf, CONTACTS_ERROR_OUT_OF_MEMORY, "g_base64_decode() return NULL");
 
        gettimeofday(&tv, NULL);
        ret = snprintf(dest, sizeof(dest), "%s/vcard-image-%ld%ld.%s",
                        CTSVC_VCARD_IMAGE_LOCATION, tv.tv_sec, tv.tv_usec, __ctsvc_get_img_suffix(type));
 
        fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0660);
-       RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : open Failed(%d)", errno);
+       RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : open Fail(%d)", errno);
 
        while (0 < size) {
                ret = write(fd, buf, size);
@@ -2660,12 +2662,12 @@ static inline int __ctsvc_vcard_get_photo(contacts_record_h contact, ctsvc_list_
                        if (EINTR == errno)
                                continue;
                        else {
-                               CTS_ERR("write() Failed(%d)", errno);
+                               CTS_ERR("write() Fail(%d)", errno);
                                close(fd);
                                if (ENOSPC == errno)
-                                       return CONTACTS_ERROR_FILE_NO_SPACE;            // No space
+                                       return CONTACTS_ERROR_FILE_NO_SPACE;   /* No space */
                                else
-                                       return CONTACTS_ERROR_SYSTEM;           // IO error
+                                       return CONTACTS_ERROR_SYSTEM;   /* IO error */
                        }
                }
                size -= ret;
@@ -2675,15 +2677,14 @@ static inline int __ctsvc_vcard_get_photo(contacts_record_h contact, ctsvc_list_
        g_free(buf);
 
        ret = contacts_record_create(_contacts_image._uri, &image);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
-       ret = contacts_record_set_str(image, _contacts_image.path, dest);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(image, _contacts_image.path, dest);
        ((ctsvc_image_s *)image)->is_vcard = true;
 
        contacts_list_add((contacts_list_h)image_list, image);
 
-       // _contacts_contact.image_thumbnail_path is a read-only property
+       /* _contacts_contact.image_thumbnail_path is a read-only property */
        ((ctsvc_contact_s *)contact)->image_thumbnail_path = strdup(dest);
 
        return CONTACTS_ERROR_NONE;
@@ -2700,7 +2701,7 @@ static inline void __ctsvc_vcard_get_event_type(contacts_record_h event, char *v
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -2710,11 +2711,9 @@ static inline void __ctsvc_vcard_get_event_type(contacts_record_h event, char *v
                }
                if (strstr(lower, "anniversary"))
                        type = CONTACTS_EVENT_TYPE_ANNIVERSARY;
-               else if (NULL != (result = strstr(lower, "x-"))) {
-                       int ret;
+               else if ((result = strstr(lower, "x-"))) {
                        type = CONTACTS_EVENT_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(event, _contacts_event.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(event, _contacts_event.label, temp+(result-lower)+2);
                }
 
                free(lower);
@@ -2728,37 +2727,37 @@ static inline int __ctsvc_vcard_get_event(ctsvc_list_s *event_list, int type, ch
 {
        int ret;
        contacts_record_h event;
-       char *dest, *src, *temp;
+       char *dest, *src, *date;
 
-       temp = __ctsvc_get_content_value(val);
-       if (NULL == temp) {
+       date = __ctsvc_get_content_value(val);
+       if (NULL == date) {
                CTS_ERR("Invalid parameter : vcard");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       dest = src = val;
+       dest = src = date;
        while (*src) {
                if ('0' <= *src && *src <= '9') {
                        *dest = *src;
                        dest++;
                }
                src++;
-               if (8 <= dest - val)
+               if (8 <= dest - date)
                        break;
        }
        *dest = '\0';
-       if ('\0' == *val) {
-               CTS_ERR("Invalid parameter : val(%d)", val);
+       if ('\0' == *date) {
+               CTS_ERR("Invalid parameter : date(%d)", date);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        ret = contacts_record_create(_contacts_event._uri, &event);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("contacts_record_create is failed(%d)", ret);
+               CTS_ERR("contacts_record_create Fail(%d)", ret);
                return ret;
        }
 
-       contacts_record_set_int(event, _contacts_event.date, atoi(val));
+       contacts_record_set_int(event, _contacts_event.date, atoi(date));
 
        if (CTSVC_VCARD_VALUE_BDAY == type)
                contacts_record_set_int(event, _contacts_event.type, CONTACTS_EVENT_TYPE_BIRTH);
@@ -2782,7 +2781,7 @@ static inline void __ctsvc_vcard_get_company_type(contacts_record_h company, cha
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -2797,10 +2796,8 @@ static inline void __ctsvc_vcard_get_company_type(contacts_record_h company, cha
 
                result = strstr(lower, "x-");
                if (result) {
-                       int ret;
                        type = CONTACTS_COMPANY_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(company, _contacts_company.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(company, _contacts_company.label, temp+(result-lower)+2);
                }
 
                free(lower);
@@ -2811,7 +2808,6 @@ static inline void __ctsvc_vcard_get_company_type(contacts_record_h company, cha
 
 static contacts_record_h __ctsvc_vcard_get_company_empty_record(ctsvc_list_s *company_list, int property_id)
 {
-       int ret;
        contacts_record_h record_temp = NULL;
        contacts_record_h record = NULL;
        contacts_list_h list = (contacts_list_h)company_list;
@@ -2819,8 +2815,7 @@ static contacts_record_h __ctsvc_vcard_get_company_empty_record(ctsvc_list_s *co
        contacts_list_last(list);
        while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record_temp)) {
                char *value = NULL;
-               ret = contacts_record_get_str_p(record_temp, property_id, &value);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_get_str_p() Fail(%d)", ret);
+               contacts_record_get_str_p(record_temp, property_id, &value);
                if (NULL == value) {
                        record = record_temp;
                        break;
@@ -2833,22 +2828,20 @@ static contacts_record_h __ctsvc_vcard_get_company_empty_record(ctsvc_list_s *co
 
 static inline int __ctsvc_vcard_get_company_value(ctsvc_list_s *company_list, int property_id, char *val)
 {
-       int ret;
        char *value;
        contacts_record_h company;
 
        company = __ctsvc_vcard_get_company_empty_record(company_list, property_id);
        if (NULL == company) {
                int ret = contacts_record_create(_contacts_company._uri, &company);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)company_list, company);
        }
 
        value = __ctsvc_get_content_value(val);
        RETV_IF(NULL == value, CONTACTS_ERROR_NO_DATA);
 
-       ret = contacts_record_set_str(company, property_id, __ctsvc_vcard_remove_escape_char(value));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(company, property_id, __ctsvc_vcard_remove_escape_char(value));
 
        return CONTACTS_ERROR_NONE;
 }
@@ -2862,7 +2855,7 @@ static inline int __ctsvc_vcard_get_company(ctsvc_list_s *company_list, char *pr
        company = __ctsvc_vcard_get_company_empty_record(company_list, _contacts_company.name);
        if (NULL == company) {
                int ret = contacts_record_create(_contacts_company._uri, &company);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)company_list, company);
        }
 
@@ -2873,10 +2866,8 @@ static inline int __ctsvc_vcard_get_company(ctsvc_list_s *company_list, char *pr
        contacts_record_set_str(company, _contacts_company.name, __ctsvc_vcard_remove_escape_char(start));
 
        if (depart) {
-               int ret;
                __ctsvc_strtok(depart, separator);
-               ret = contacts_record_set_str(company, _contacts_company.department, __ctsvc_vcard_remove_escape_char(depart));
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+               contacts_record_set_str(company, _contacts_company.department, __ctsvc_vcard_remove_escape_char(depart));
        }
 
        __ctsvc_vcard_get_company_type(company, prefix);
@@ -2897,29 +2888,28 @@ static inline int __ctsvc_vcard_get_company_logo(ctsvc_list_s *company_list, cha
        company = __ctsvc_vcard_get_company_empty_record(company_list, _contacts_company.logo);
        if (NULL == company) {
                ret = contacts_record_create(_contacts_company._uri, &company);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
                contacts_list_add((contacts_list_h)company_list, company);
        }
 
-       temp = strchr(val , ':');
+       temp = strchr(val, ':');
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : val is invalid");
 
        *temp = '\0';
        type = __ctsvc_vcard_get_image_type(prefix);
 
        buf = g_base64_decode(temp+1, &size);
-       if (0 == size) {
+       if ((0 == size) || (NULL == buf)) {
                g_free(buf);
                return CONTACTS_ERROR_NONE;
        }
-       RETVM_IF(NULL == buf, CONTACTS_ERROR_OUT_OF_MEMORY, "g_base64_decode() return NULL");
 
        gettimeofday(&tv, NULL);
        ret = snprintf(dest, sizeof(dest), "%s/%d-%ld%ld-logo.%s", CTSVC_VCARD_IMAGE_LOCATION,
                        getpid(), tv.tv_sec, tv.tv_usec, __ctsvc_get_img_suffix(type));
 
        fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0660);
-       RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : open Failed(%d)", errno);
+       RETVM_IF(fd < 0, CONTACTS_ERROR_SYSTEM, "System : open Fail(%d)", errno);
 
        while (0 < size) {
                ret = write(fd, buf, size);
@@ -2927,12 +2917,12 @@ static inline int __ctsvc_vcard_get_company_logo(ctsvc_list_s *company_list, cha
                        if (EINTR == errno)
                                continue;
                        else {
-                               CTS_ERR("write() Failed(%d)", errno);
+                               CTS_ERR("write() Fail(%d)", errno);
                                close(fd);
                                if (ENOSPC == errno)
-                                       return CONTACTS_ERROR_FILE_NO_SPACE;            // No space
+                                       return CONTACTS_ERROR_FILE_NO_SPACE;   /* No space */
                                else
-                                       return CONTACTS_ERROR_SYSTEM;           // IO error
+                                       return CONTACTS_ERROR_SYSTEM;   /* IO error */
                        }
                }
                size -= ret;
@@ -2954,14 +2944,13 @@ static inline int __ctsvc_vcard_get_note(ctsvc_list_s *note_list, char *val)
        contacts_record_h note;
 
        ret = contacts_record_create(_contacts_note._uri, &note);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
        contacts_list_add((contacts_list_h)note_list, note);
 
        temp = __ctsvc_get_content_value(val);
        RETV_IF(NULL == temp, CONTACTS_ERROR_NO_DATA);
 
-       ret = contacts_record_set_str(note, _contacts_note.note, __ctsvc_vcard_remove_escape_char(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(note, _contacts_note.note, __ctsvc_vcard_remove_escape_char(temp));
 
        return CONTACTS_ERROR_NONE;
 }
@@ -3045,7 +3034,7 @@ static inline void __ctsvc_vcard_get_url_type(contacts_record_h url, char *val)
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3059,10 +3048,8 @@ static inline void __ctsvc_vcard_get_url_type(contacts_record_h url, char *val)
                if (result) type = CONTACTS_URL_TYPE_WORK;
                result = strstr(lower, "x-");
                if (result) {
-                       int ret;
                        type = CONTACTS_URL_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(url, _contacts_url.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(url, _contacts_url.label, temp+(result-lower)+2);
                }
 
                free(lower);
@@ -3081,10 +3068,9 @@ static inline int __ctsvc_vcard_get_url(ctsvc_list_s* url_list, char *prefix, ch
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard");
 
        ret = contacts_record_create(_contacts_url._uri, &url);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
-       ret = contacts_record_set_str(url, _contacts_url.url, __ctsvc_vcard_remove_escape_char(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(url, _contacts_url.url, __ctsvc_vcard_remove_escape_char(temp));
        __ctsvc_vcard_get_url_type(url, prefix);
        contacts_list_add((contacts_list_h)url_list, url);
 
@@ -3102,7 +3088,7 @@ static inline bool __ctsvc_vcard_get_number_type(contacts_record_h number, char
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3149,11 +3135,8 @@ static inline bool __ctsvc_vcard_get_number_type(contacts_record_h number, char
                        else if (strstr(lower, "x-main"))
                                type |= CONTACTS_NUMBER_TYPE_MAIN;
                        else {
-                               int ret;
                                type = CONTACTS_NUMBER_TYPE_CUSTOM;
-                               ret = contacts_record_set_str(number, _contacts_number.label, temp+(result-lower)+2);
-                               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
-
+                               contacts_record_set_str(number, _contacts_number.label, temp+(result-lower)+2);
                        }
                }
 
@@ -3175,32 +3158,32 @@ static char* __ctsvc_vcard_get_clean_number_for_import(char *str)
                if (3 == char_len) {
                        if (*s == 0xef) {
                                if (*(s+1) == 0xbc) {
-                                       if (0x90 <= *(s+2) && *(s+2) <= 0x99) {                         // ef bc 90 : '0' ~ ef bc 99 : '9'
+                                       if (0x90 <= *(s+2) && *(s+2) <= 0x99) {   /* ef bc 90 : '0' ~ ef bc 99 : '9' */
                                                *r = '0' + (*(s+2) - 0x90);
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x8b == *(s+2)) {                                                              // ef bc 8b : '+'
+                                       else if (0x8b == *(s+2)) {   /* ef bc 8b : '+' */
                                                *r = '+';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x8a == *(s+2)) {                                                              // ef bc 8a : '*'
+                                       else if (0x8a == *(s+2)) {   /* ef bc 8a : '*' */
                                                *r = '*';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0x83 == *(s+2)) {                                                              // ef bc 83 : '#'
+                                       else if (0x83 == *(s+2)) {   /* ef bc 83 : '#' */
                                                *r = '#';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0xb0 == *(s+2) || 0x8c == *(s+2)) {            // ef bc b0 : 'P', ef bc 8c : ','
+                                       else if (0xb0 == *(s+2) || 0x8c == *(s+2)) {   /* ef bc b0 : 'P', ef bc 8c : ',' */
                                                *r = ',';
                                                r++;
                                                s+=3;
                                        }
-                                       else if (0xb7 == *(s+2) || 0x9b == *(s+2)) {            // ef bc b7 : 'W', ef bc 9b : ';'
+                                       else if (0xb7 == *(s+2) || 0x9b == *(s+2)) {   /* ef bc b7 : 'W', ef bc 9b : ';' */
                                                *r = ';';
                                                r++;
                                                s+=3;
@@ -3232,7 +3215,6 @@ static char* __ctsvc_vcard_get_clean_number_for_import(char *str)
                else if (1 == char_len) {
                        switch (*s) {
                                case '/':
-                               case 'N':
                                case '.':
                                case '0' ... '9':
                                case '#':
@@ -3258,6 +3240,20 @@ static char* __ctsvc_vcard_get_clean_number_for_import(char *str)
                                        r++;
                                        s++;
                                        break;
+                               case 'a' ... 'o':
+                               case 'q' ... 'v':
+                               case 'x' ... 'z':
+                                       *r = *s - 0x20;
+                                       r++;
+                                       s++;
+                                       break;
+                               case 'A' ... 'O':
+                               case 'Q' ... 'V':
+                               case 'X' ... 'Z':
+                                       *r = *s;
+                                       r++;
+                                       s++;
+                                       break;
                                default:
                                        s++;
                                        break;
@@ -3282,11 +3278,10 @@ static inline int __ctsvc_vcard_get_number(ctsvc_list_s *numbers, char *prefix,
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard");
 
        ret = contacts_record_create(_contacts_number._uri, &number);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
        temp = __ctsvc_vcard_remove_escape_char(temp);
-       ret = contacts_record_set_str(number, _contacts_number.number, __ctsvc_vcard_get_clean_number_for_import(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(number, _contacts_number.number, __ctsvc_vcard_get_clean_number_for_import(temp));
 
        is_default = __ctsvc_vcard_get_number_type(number, prefix);
                contacts_record_set_bool(number, _contacts_number.is_default, is_default);
@@ -3306,7 +3301,7 @@ static inline bool __ctsvc_vcard_get_email_type(contacts_record_h email, char *v
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3322,11 +3317,9 @@ static inline bool __ctsvc_vcard_get_email_type(contacts_record_h email, char *v
                        type = CONTACTS_EMAIL_TYPE_WORK;
                else if (strstr(lower, "cell"))
                        type = CONTACTS_EMAIL_TYPE_MOBILE;
-               else if (NULL != (result = strstr(lower, "x-"))) {
-                       int ret;
+               else if ((result = strstr(lower, "x-"))) {
                        type = CONTACTS_EMAIL_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(email, _contacts_email.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(email, _contacts_email.label, temp+(result-lower)+2);
                }
 
                free(lower);
@@ -3348,10 +3341,9 @@ static inline int __ctsvc_vcard_get_email(ctsvc_list_s* emails, char *prefix, ch
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard");
 
        ret = contacts_record_create(_contacts_email._uri, &email);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
-       ret = contacts_record_set_str(email, _contacts_email.email, __ctsvc_vcard_remove_escape_char(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(email, _contacts_email.email, __ctsvc_vcard_remove_escape_char(temp));
        is_default = __ctsvc_vcard_get_email_type(email, prefix);
                contacts_record_set_bool(email, _contacts_email.is_default, is_default);
        contacts_list_add((contacts_list_h)emails, email);
@@ -3370,7 +3362,7 @@ static inline bool __ctsvc_vcard_get_postal_type(contacts_record_h address, char
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3392,10 +3384,8 @@ static inline bool __ctsvc_vcard_get_postal_type(contacts_record_h address, char
                if (result) type |= CONTACTS_ADDRESS_TYPE_WORK;
                result = strstr(lower, "x-");
                if (result) {
-                       int ret;
                        type = CONTACTS_ADDRESS_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(address, _contacts_address.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(address, _contacts_address.label, temp+(result-lower)+2);
                }
                result = strstr(val, "pref");
                if (result) pref = true;
@@ -3467,7 +3457,7 @@ static inline void __ctsvc_vcard_get_messenger_type(contacts_record_h messenger,
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3481,10 +3471,8 @@ static inline void __ctsvc_vcard_get_messenger_type(contacts_record_h messenger,
                if (result) type = CONTACTS_MESSENGER_TYPE_IRC;
                result = strstr(lower, "x-");
                if (result) {
-                       int ret;
                        type = CONTACTS_MESSENGER_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(messenger, _contacts_messenger.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(messenger, _contacts_messenger.label, temp+(result-lower)+2);
                }
                free(lower);
                temp = strtok_r(NULL, ";", &last);
@@ -3502,10 +3490,9 @@ static inline int __ctsvc_vcard_get_messenger(ctsvc_list_s* messenger_list, int
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard");
 
        ret = contacts_record_create(_contacts_messenger._uri, &messenger);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
-       ret = contacts_record_set_str(messenger, _contacts_messenger.im_id, __ctsvc_vcard_remove_escape_char(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(messenger, _contacts_messenger.im_id, __ctsvc_vcard_remove_escape_char(temp));
 
        switch (type) {
        case CTSVC_VCARD_VALUE_X_MSN:
@@ -3552,7 +3539,7 @@ static inline void __ctsvc_vcard_get_relationship_type(contacts_record_h relatio
        while (temp) {
                lower = strdup(temp);
                if (NULL == lower) {
-                       CTS_ERR("strdup() return NULL");
+                       CTS_ERR("strdup() Fail");
                        break;
                }
                lower_temp = lower;
@@ -3588,11 +3575,9 @@ static inline void __ctsvc_vcard_get_relationship_type(contacts_record_h relatio
                        type = CONTACTS_RELATIONSHIP_TYPE_SISTER;
                else if (strstr(lower, "spouse"))
                        type = CONTACTS_RELATIONSHIP_TYPE_SPOUSE;
-               else if (NULL != (result = strstr(lower, "x-"))) {
-                       int ret;
+               else if ((result = strstr(lower, "x-"))) {
                        type = CONTACTS_RELATIONSHIP_TYPE_CUSTOM;
-                       ret = contacts_record_set_str(relationship, _contacts_relationship.label, temp+(result-lower)+2);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str(relationship, _contacts_relationship.label, temp+(result-lower)+2);
                }
                free(lower);
                temp = strtok_r(NULL, ";", &last);
@@ -3611,10 +3596,9 @@ static inline int __ctsvc_vcard_get_relationship(ctsvc_list_s* relationship_list
        RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard");
 
        ret = contacts_record_create(_contacts_relationship._uri, &relationship);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create Fail(%d)", ret);
 
-       ret = contacts_record_set_str(relationship, _contacts_relationship.name, __ctsvc_vcard_remove_escape_char(temp));
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+       contacts_record_set_str(relationship, _contacts_relationship.name, __ctsvc_vcard_remove_escape_char(temp));
        __ctsvc_vcard_get_relationship_type(relationship, prefix);
        contacts_list_add((contacts_list_h)relationship_list, relationship);
 
@@ -3636,10 +3620,12 @@ static char* __ctsvc_vcard_decode_base64_val(char *val)
                src++;
 
        decoded_str = g_base64_decode(src, &size);
-       RETVM_IF(NULL == decoded_str, NULL, "g_base64_decode() return NULL");
 
        dest = calloc((src-val)+size+1, sizeof(char));
-       RETVM_IF(NULL == dest, NULL, "calloc() return NULL");
+       if (NULL == dest) {
+               CTS_ERR("calloc() Fail");
+               return NULL;
+       }
 
        snprintf(dest, (src-val)+1, "%s", val);
        snprintf(dest+(src-val), size+1, "%s", decoded_str);
@@ -3650,7 +3636,6 @@ static char* __ctsvc_vcard_decode_base64_val(char *val)
 
 static inline int __ctsvc_vcard_get_contact(int ver, char *vcard, contacts_record_h *record)
 {
-       int ret;
        int type;
        char *cursor, *new_start, *val, *prefix;
        ctsvc_contact_s *contact = (ctsvc_contact_s*)*record;
@@ -3691,14 +3676,14 @@ static inline int __ctsvc_vcard_get_contact(int ver, char *vcard, contacts_recor
 
                if (base64_encoded) {
                        char *temp = __ctsvc_vcard_decode_base64_val(val);
-                       free(val);
-                       val = temp;
-                       if (NULL == val) {
-                               CTS_ERR("__ctsvc_vcard_decode_base64_val() return NULL");
-                               cursor = new_start;
+                       if (NULL == temp) {
+                               CTS_ERR("__ctsvc_vcard_decode_base64_val() Fail");
                                free(prefix);
-                               continue;
+                               free(val);
+                               return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
+                       free(val);
+                       val = temp;
                }
 
                switch (type) {
@@ -3765,8 +3750,7 @@ static inline int __ctsvc_vcard_get_contact(int ver, char *vcard, contacts_recor
                                contact->changed_time = __ctsvc_vcard_get_time(val);
                        break;
                case CTSVC_VCARD_VALUE_UID:
-                       ret = contacts_record_set_str((contacts_record_h)contact, _contacts_contact.uid, __ctsvc_vcard_remove_escape_char(val));
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Fail(%d)", ret);
+                       contacts_record_set_str((contacts_record_h)contact, _contacts_contact.uid, __ctsvc_vcard_remove_escape_char(val));
                        break;
                case CTSVC_VCARD_VALUE_URL:
                        __ctsvc_vcard_get_url(contact->urls, prefix, val);
@@ -3792,7 +3776,7 @@ static inline int __ctsvc_vcard_get_contact(int ver, char *vcard, contacts_recor
                        free(prefix);
                        return CONTACTS_ERROR_NONE;
                default:
-                       CTS_ERR("Invalid parameter : __ctsvc_vcard_check_content_type() Failed(%d)", type);
+                       CTS_ERR("Invalid parameter : __ctsvc_vcard_check_content_type() Fail(%d)", type);
                        free(val);
                        free(prefix);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -3826,7 +3810,7 @@ static inline int __ctsvc_vcard_check_version(const char *src)
                if (start) break;
        }
 
-       if (0 == strcmp(src, ver3))
+       if (STRING_EQUAL == strcmp(src, ver3))
                return CTSVC_VCARD_VER_3_0;
        else
                return CTSVC_VCARD_VER_2_1;
@@ -3842,11 +3826,11 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
        free(contact->reverse_display_name);
        contact->reverse_display_name = NULL;
 
-       if (contact->name->count > 0 && contact->name->records != NULL && contact->name->records->data != NULL) {
+       if (0 < contact->name->count && contact->name->records && contact->name->records->data) {
                name = (ctsvc_name_s *)contact->name->records->data;
        }
 
-       if (name && ( name->first || name->last || name->prefix || name->addition || name->suffix)) {
+       if (name && (name->first || name->last || name->prefix || name->addition || name->suffix)) {
                int reverse_lang_type = -1;
                char *display = NULL;
                char *reverse_display = NULL;
@@ -3855,14 +3839,14 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                char *temp_display = NULL;
                contacts_name_display_order_e name_display_order = CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST;
 
-               ///////////////////////////////////////////////
-               // Make reverse display name (Last name first)
-               // Default         : Prefix Last, First Middle(addition), Suffix
-               // Korean, Chinese : Prefix LastFirstMiddleSuffix
-               // Japanese        : Prefix Last Middle First Suffix
-               // reverse sort name does not include prefix
-               //    But, if there is only prefix, reverse sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make reverse display name (Last name first)
+                * Default         : Prefix Last, First Middle(addition), Suffix
+                * Korean, Chinese : Prefix LastFirstMiddleSuffix
+                * Japanese        : Prefix Last Middle First Suffix
+                * reverse sort name does not include prefix
+                *    But, if there is only prefix, reverse sort_name is prefix
+                */
                temp_display_len = SAFE_STRLEN(name->first)
                                                + SAFE_STRLEN(name->addition)
                                                + SAFE_STRLEN(name->last)
@@ -3870,7 +3854,11 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                if (0 < temp_display_len) {
                        temp_display_len += 7;
                        temp_display = calloc(1, temp_display_len);
-                       RETM_IF(NULL == temp_display, "calloc() return NULL");
+                       if (NULL == temp_display) {
+                               CTS_ERR("calloc() Fail");
+                               return;
+                       }
+
                        len=0;
 
                        if (name->last) {
@@ -3900,22 +3888,22 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                                }
                        }
 
-                       if(reverse_lang_type == CTSVC_LANG_JAPANESE) {
-                               // make temp_display name Prefix - Last - Middle - First - Suffix
-                               if(name->addition) {
+                       if (reverse_lang_type == CTSVC_LANG_JAPANESE) {
+                               /* make temp_display name Prefix - Last - Middle - First - Suffix */
+                               if (name->addition) {
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->addition);
                                }
 
-                               if(name->first) {
+                               if (name->first) {
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->first);
                                }
                        }
                        else {
-                               // make temp_display name Prefix - Last - First -Middle - Suffix
+                               /* make temp_display name Prefix - Last - First -Middle - Suffix */
                                if (name->first) {
                                        if (*temp_display) {
                                                if (reverse_lang_type < 0) {
@@ -3959,11 +3947,11 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        }
                }
 
-               if(name->prefix && temp_display) {
+               if (name->prefix && temp_display) {
                        display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                        reverse_display = calloc(1, display_len);
                        if (NULL == reverse_display) {
-                               CTS_ERR("calloc() return NULL");
+                               CTS_ERR("calloc() Fail");
                                free(temp_display);
                                return;
                        }
@@ -3977,24 +3965,18 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        reverse_display = strdup(name->prefix);
                }
 
-               ///////////////////////////////////////////////
-               // Make display name (First name first)
-               // Default         : Prefix First Middle Last, Suffix
-               // Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
-               // Japanese        : Prefix First Middle Last Suffix
-               // sort name does not include prefix
-               //    But, if there is only prefix, sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make display name (First name first)
+                * Default         : Prefix First Middle Last, Suffix
+                * Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
+                * Japanese        : Prefix First Middle Last Suffix
+                * sort name does not include prefix
+                *    But, if there is only prefix, sort_name is prefix
+                */
 
                if (reverse_lang_type == CTSVC_LANG_KOREAN ||
-                       reverse_lang_type == CTSVC_LANG_CHINESE) {
+                       reverse_lang_type == CTSVC_LANG_CHINESE)
                        display = strdup(reverse_display);
-                       if (NULL == display) {
-                               free(reverse_display);
-                               CTS_ERR("strdup() return NULL");
-                               return;
-                       }
-               }
                else {
                        int lang_type = -1;
                        temp_display = NULL;
@@ -4004,13 +3986,14 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                                                                + SAFE_STRLEN(name->suffix);
                        if (0 < temp_display_len) {
                                temp_display_len += 6;
-                               // make reverse_temp_display_name
+                               /* make reverse_temp_display_name */
                                temp_display = calloc(1, temp_display_len);
                                if (NULL == temp_display) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(reverse_display);
                                        return;
                                }
+
                                len = 0;
 
                                if (name->first) {
@@ -4031,7 +4014,7 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->last);
                                }
 
-                               if(name->suffix) {
+                               if (name->suffix) {
                                        if (*temp_display) {
                                                lang_type = ctsvc_check_language_type(temp_display);
                                                if (lang_type == CTSVC_LANG_JAPANESE)
@@ -4043,11 +4026,11 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                                }
                        }
 
-                       if(name->prefix && temp_display) {
+                       if (name->prefix && temp_display) {
                                display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                                display = calloc(1, display_len);
                                if (NULL == display) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(temp_display);
                                        free(reverse_display);
                                        return;
@@ -4060,24 +4043,22 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        }
                        else if (name->prefix) {
                                display = strdup(name->prefix);
-                               if (NULL == display) {
-                                       CTS_ERR("strdup() return NULL");
-                                       free(temp_display);
-                                       free(reverse_display);
-                                       return;
-                               }
                        }
                }
 
+#ifdef _CONTACTS_IPC_CLIENT
                contacts_setting_get_name_display_order(&name_display_order);
+#endif
                if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == name_display_order) {
                        contact->display_name = display;
                        free(reverse_display);
                }
+#ifdef _CONTACTS_IPC_CLIENT
                else {
                        contact->display_name = reverse_display;
                        free(display);
                }
+#endif
 
                contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME;
        }
@@ -4096,7 +4077,7 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        }
                }
 
-               if (!set_display_name &&
+               if (false == set_display_name &&
                                contact->nicknames && contact->nicknames->records) {
                        for (cur=contact->nicknames->records;cur;cur=cur->next) {
                                ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)cur->data;
@@ -4109,7 +4090,7 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        }
                }
 
-               if (!set_display_name &&
+               if (false == set_display_name &&
                                contact->numbers && contact->numbers->records) {
                        for (cur=contact->numbers->records;cur;cur=cur->next) {
                                ctsvc_number_s *number = (ctsvc_number_s *)cur->data;
@@ -4122,7 +4103,7 @@ static inline void __ctsvc_vcard_make_contact_display_name(ctsvc_contact_s *cont
                        }
                }
 
-               if (!set_display_name &&
+               if (false == set_display_name &&
                                contact->emails && contact->emails->records) {
                        for (cur=contact->emails->records;cur;cur=cur->next) {
                                ctsvc_email_s *email = (ctsvc_email_s *)cur->data;
@@ -4178,10 +4159,10 @@ static int __ctsvc_vcard_parse(const void *vcard_stream, contacts_record_h *reco
        if (CONTACTS_ERROR_NONE!= ret) {
                contacts_record_destroy((contacts_record_h)contact, true);
                if (CONTACTS_ERROR_INVALID_PARAMETER == ret) {
-                       CTS_ERR("cts_vcard_get_contact() Failed(%d)", ret);
+                       CTS_ERR("cts_vcard_get_contact() Fail(%d)", ret);
                }
                else
-                       CTS_ERR("cts_vcard_get_contact() Failed(%d)", ret);
+                       CTS_ERR("cts_vcard_get_contact() Fail(%d)", ret);
 
                return ret;
        }
@@ -4253,7 +4234,7 @@ static const char* __contacts_vcard_parse_get_vcard_object(const char *cursor, G
 
        vcard_start_cursor = __contacts_vcard_remove_line_break(vcard_start_cursor);
 
-       if (0 != strncmp(vcard_start_cursor, begin, strlen(begin)))
+       if (STRING_EQUAL != strncmp(vcard_start_cursor, begin, strlen(begin)))
                return vcard_start_cursor;
 
        vcard_cursor = vcard_start_cursor;
@@ -4263,7 +4244,7 @@ static const char* __contacts_vcard_parse_get_vcard_object(const char *cursor, G
 
        while (*vcard_cursor) {
                if (new_line) {
-                       if (0 == strncmp(vcard_cursor, end, strlen(end))) {
+                       if (STRING_EQUAL == strncmp(vcard_cursor, end, strlen(end))) {
                                GList *sub_vcard_cursor = NULL;
                                int vcard_len = 0;
                                const char *pos_start = NULL;
@@ -4281,8 +4262,9 @@ static const char* __contacts_vcard_parse_get_vcard_object(const char *cursor, G
                                vcard_len += (vcard_cursor - pos_start);
                                vcard_object = calloc(vcard_len + 1, sizeof(char));
                                if (NULL == vcard_object) {
-                                       CTS_ERR("calloc() return NULL");
-                                       break;
+                                       CTS_ERR("calloc() Fail");
+                                       __contacts_vcard_free_sub_vcard_info_list(sub_vcard_list);
+                                       return NULL;
                                }
 
                                vcard_len = 0;
@@ -4300,11 +4282,12 @@ static const char* __contacts_vcard_parse_get_vcard_object(const char *cursor, G
 
                                return vcard_cursor;
                        }
-                       else if (0 == strncmp(vcard_cursor, begin, strlen(begin))) { // sub vcard
+                       else if (STRING_EQUAL == strncmp(vcard_cursor, begin, strlen(begin))) { /* sub vcard */
                                sub_vcard_info_s *sub_vcard_info = calloc(1, sizeof(sub_vcard_info_s));
                                if (NULL == sub_vcard_info) {
-                                       CTS_ERR("calloc() return NULL");
-                                       break;
+                                       CTS_ERR("calloc() Fail");
+                                       __contacts_vcard_free_sub_vcard_info_list(sub_vcard_list);
+                                       return NULL;
                                }
                                sub_vcard_info->pos_start = vcard_cursor;
 
@@ -4387,7 +4370,7 @@ API int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_name,
        RETV_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER);
 
        file = fopen(vcard_file_name, "r");
-       RETVM_IF(NULL == file, CONTACTS_ERROR_SYSTEM, "System : fopen() Failed(%d)", errno);
+       RETVM_IF(NULL == file, CONTACTS_ERROR_SYSTEM, "System : fopen() Fail(%d)", errno);
 
        len = 0;
        buf_size = CTSVC_VCARD_MAX_SIZE;
@@ -4400,7 +4383,7 @@ API int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_name,
 
        while (fgets(line, sizeof(line), file)) {
                if (0 == len)
-                       if (strncmp(line, "BEGIN:VCARD", strlen("BEGIN:VCARD")))
+                       if (STRING_EQUAL != strncmp(line, "BEGIN:VCARD", strlen("BEGIN:VCARD")))
                                continue;
 
                if (len + sizeof(line) < buf_size)
@@ -4420,7 +4403,7 @@ API int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_name,
                        len += snprintf(stream + len, buf_size - len, "%s", line);
                }
 
-               if (0 == strncmp(line, "END:VCARD", 9)) {
+               if (STRING_EQUAL == strncmp(line, "END:VCARD", 9)) {
                        vcard_depth--;
 
                        if (0 == vcard_depth) {
@@ -4449,7 +4432,7 @@ API int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_name,
                                                        return ret;
                                                }
 
-                                               if (!cb(record, data)) {
+                                               if (false == cb(record, data)) {
                                                        free(stream);
                                                        fclose(file);
                                                        __contacts_vcard_free_vcard_object_list(list_vcard_object);
@@ -4463,7 +4446,7 @@ API int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_name,
                                }
                        }
                }
-               else if (0 == strncmp(line, "BEGIN:VCARD", 11)) { // sub vcard object
+               else if (STRING_EQUAL == strncmp(line, "BEGIN:VCARD", 11)) { /* sub vcard object */
                        vcard_depth++;
                }
        }
@@ -4484,11 +4467,11 @@ API int contacts_vcard_get_entity_count(const char *vcard_file_name, int *count)
        RETV_IF(NULL == vcard_file_name, CONTACTS_ERROR_INVALID_PARAMETER);
 
        file = fopen(vcard_file_name, "r");
-       RETVM_IF(NULL == file, CONTACTS_ERROR_SYSTEM, "System : fopen() Failed(%d)", errno);
+       RETVM_IF(NULL == file, CONTACTS_ERROR_SYSTEM, "System : fopen() Fail(%d)", errno);
 
        cnt = 0;
        while (fgets(line, sizeof(line), file)) {
-               if (0 == strncmp(line, "END:VCARD", 9))
+               if (STRING_EQUAL == strncmp(line, "END:VCARD", 9))
                        cnt++;
        }
        fclose(file);
index 632b0f9..f2f87e2 100644 (file)
@@ -297,7 +297,6 @@ API const _contacts_messenger_property_ids _contacts_messenger = {
        .im_id          = CTSVC_PROPERTY_MESSENGER_IM_ID,
 };
 
-#ifdef ENABLE_SIM_FEATURE
 API const _contacts_sdn_property_ids _contacts_sdn = {
        ._uri   = CTSVC_VIEW_URI_SDN,
        .id             = CTSVC_PROPERTY_SDN_ID,
@@ -320,7 +319,6 @@ API const _contacts_speeddial_property_ids _contacts_speeddial = {
        .cleaned_number         = CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER,
        .number_filter          = CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER,
 };
-#endif // ENABLE_SIM_FEATURE
 
 API const _contacts_contact_updated_info_property_ids _contacts_contact_updated_info = {
        ._uri                   = CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO,
@@ -397,7 +395,7 @@ API const _contacts_phone_log_property_ids _contacts_phone_log = {
        .address_filter = CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER,
        .sim_slot_no            = CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO,
 };
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 API const _contacts_extension_property_ids _contacts_extension = {
        ._uri           = CTSVC_VIEW_URI_EXTENSION,
@@ -583,7 +581,7 @@ API const _contacts_person_phone_log_property_ids _contacts_person_phone_log = {
        .address_filter = CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS,
        .sim_slot_no            = CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO,
 };
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 API const _contacts_contact_number_property_ids _contacts_contact_number = {
        ._uri                                   = CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER,
@@ -657,7 +655,7 @@ API const _contacts_phone_log_stat_property_ids _contacts_phone_log_stat = {
        .log_count      = CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT,
        .log_type       = CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE,
 };
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 const property_info_s __property_addressbook[] = {
        {CTSVC_PROPERTY_ADDRESSBOOK_ID,                 CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
@@ -666,14 +664,12 @@ const property_info_s __property_addressbook[] = {
        {CTSVC_PROPERTY_ADDRESSBOOK_MODE,               CTSVC_SEARCH_PROPERTY_ALL,      "mode"},
 };
 
-#ifdef ENABLE_SIM_FEATURE
-const property_info_s __property_sdn[] = {             // _contacts_sdn
+const property_info_s __property_sdn[] = {   /* _contacts_sdn */
        {CTSVC_PROPERTY_SDN_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "id"},
        {CTSVC_PROPERTY_SDN_NAME,               CTSVC_SEARCH_PROPERTY_ALL,      "name"},
        {CTSVC_PROPERTY_SDN_NUMBER,     CTSVC_SEARCH_PROPERTY_ALL,      "number"},
        {CTSVC_PROPERTY_SDN_SIM_SLOT_NO,        CTSVC_SEARCH_PROPERTY_ALL,      "sim_slot_no"},
 };
-#endif // ENABLE_SIM_FEATURE
 
 const property_info_s __property_group[] = {
        {CTSVC_PROPERTY_GROUP_ID,                               CTSVC_SEARCH_PROPERTY_ALL,      "group_id"},
@@ -689,8 +685,8 @@ const property_info_s __property_group[] = {
 
 const property_info_s __property_person[] = {
        {CTSVC_PROPERTY_PERSON_ID,                                      CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,            CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,      CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,            CTSVC_SEARCH_PROPERTY_ALL,      NULL},         /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,      CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,CTSVC_SEARCH_PROPERTY_ALL,    "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                        CTSVC_SEARCH_PROPERTY_ALL,      "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_ALL,      "image_thumbnail_path"},
@@ -707,7 +703,7 @@ const property_info_s __property_person[] = {
 
 const property_info_s __property_simple_contact[] = {
        {CTSVC_PROPERTY_CONTACT_ID,                             CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,   CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,   CTSVC_SEARCH_PROPERTY_ALL,      NULL},            /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_ALL,      "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_RINGTONE,               CTSVC_SEARCH_PROPERTY_ALL,      "ringtone_path"},
@@ -735,7 +731,7 @@ const property_info_s __property_name[] = {
        {CTSVC_PROPERTY_NAME_PHONETIC_LAST,             CTSVC_SEARCH_PROPERTY_ALL,      "data9"},
 };
 
-const property_info_s __property_number[] = {          //_contacts_number
+const property_info_s __property_number[] = {   /* _contacts_number */
        {CTSVC_PROPERTY_NUMBER_ID,                              CTSVC_SEARCH_PROPERTY_ALL,      "id"},
        {CTSVC_PROPERTY_NUMBER_CONTACT_ID,      CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
        {CTSVC_PROPERTY_NUMBER_TYPE,                    CTSVC_SEARCH_PROPERTY_ALL,      "data1"},
@@ -899,7 +895,7 @@ const property_info_s __property_extension[] = {
 
 const property_info_s __property_contact[] = {
        {CTSVC_PROPERTY_CONTACT_ID,                                     CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},  //dispaly_name, reverse_display_name
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},        /* dispaly_name, reverse_display_name */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_ALL,      "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_RINGTONE,                       CTSVC_SEARCH_PROPERTY_ALL,      "ringtone_path"},
@@ -932,7 +928,7 @@ const property_info_s __property_contact[] = {
 
 const property_info_s __property_my_profile[] = {
        {CTSVC_PROPERTY_MY_PROFILE_ID,                                  CTSVC_SEARCH_PROPERTY_ALL,      "my_profile_id"},
-       {CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME,                CTSVC_SEARCH_PROPERTY_ALL,      NULL},  //dispaly_name, reverse_display_name
+       {CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME,                CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* dispaly_name, reverse_display_name */
        {CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID,              CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL,     CTSVC_SEARCH_PROPERTY_ALL,      "image_thumbnail_path"},
        {CTSVC_PROPERTY_MY_PROFILE_UID,                                 CTSVC_SEARCH_PROPERTY_ALL,      "uid"},
@@ -953,62 +949,41 @@ const property_info_s __property_my_profile[] = {
        {CTSVC_PROPERTY_MY_PROFILE_EXTENSION,                   CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_extension},
 };
 
-#ifdef ENABLE_SIM_FEATURE
-const property_info_s __property_speeddial[] = {               // _contacts_speeddial
+const property_info_s __property_speeddial[] = {   /* _contacts_speeddial */
        {CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER,          CTSVC_SEARCH_PROPERTY_ALL,      "speed_number"},
        {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID,                    CTSVC_SEARCH_PROPERTY_ALL,      "number_id"},
        {CTSVC_PROPERTY_SPEEDDIAL_NUMBER,                       CTSVC_SEARCH_PROPERTY_ALL,      "number"},
        {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL, CTSVC_SEARCH_PROPERTY_ALL,      "label"},
        {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE,          CTSVC_SEARCH_PROPERTY_ALL,      "type"},
        {CTSVC_PROPERTY_SPEEDDIAL_PERSON_ID,                    CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL,      NULL},          // display_name or reverse_display_name
+       {CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL,      NULL},            /* display_name or reverse_display_name */
        {CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL,      CTSVC_SEARCH_PROPERTY_ALL,      "image_thumbnail_path"},
        {CTSVC_PROPERTY_SPEEDDIAL_NORMALIZED_NUMBER,    CTSVC_SEARCH_PROPERTY_FILTER,   "normalized_number"},
        {CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER,       CTSVC_SEARCH_PROPERTY_FILTER,   "cleaned_number"},
        {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER,        CTSVC_SEARCH_PROPERTY_FILTER,   "minmatch"},
 };
-#endif // ENABLE_SIM_FEATURE
 
 #ifdef ENABLE_LOG_FEATURE
-const property_info_s __property_phonelog[] = {                // _contacts_phone_log
+const property_info_s __property_phonelog[] = {   /* _contacts_phone_log */
        {CTSVC_PROPERTY_PHONELOG_ID,                            CTSVC_SEARCH_PROPERTY_ALL,      "id"},
        {CTSVC_PROPERTY_PHONELOG_PERSON_ID,             CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
        {CTSVC_PROPERTY_PHONELOG_ADDRESS,               CTSVC_SEARCH_PROPERTY_ALL,      "number"},
        {CTSVC_PROPERTY_PHONELOG_LOG_TIME,              CTSVC_SEARCH_PROPERTY_ALL,      "log_time"},
        {CTSVC_PROPERTY_PHONELOG_LOG_TYPE,              CTSVC_SEARCH_PROPERTY_ALL,      "log_type"},
-       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1,   CTSVC_SEARCH_PROPERTY_ALL,      "data1"},               // duration
-       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2,   CTSVC_SEARCH_PROPERTY_ALL,      "data2"},               // short message, email subject
+       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1,   CTSVC_SEARCH_PROPERTY_ALL,      "data1"},         /* duration */
+       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2,   CTSVC_SEARCH_PROPERTY_ALL,      "data2"},         /* short message, email subject */
        {CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS,    CTSVC_SEARCH_PROPERTY_FILTER,   "normal_num"},
        {CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS, CTSVC_SEARCH_PROPERTY_FILTER, "clean_num"},
        {CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER, CTSVC_SEARCH_PROPERTY_FILTER, "minmatch"},
        {CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO,                   CTSVC_SEARCH_PROPERTY_ALL, "sim_id"},
 };
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-#if 0
-const property_info_s __property_updated_info[] = {
-       {CTSVC_PROPERTY_UPDATE_INFO_ID,                                 CTSVC_SEARCH_PROPERTY_ALL,      "id"},
-       {CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL,  "addressbook_id"},
-       {CTSVC_PROPERTY_UPDATE_INFO_TYPE,                       CTSVC_SEARCH_PROPERTY_ALL,      "type"},
-       {CTSVC_PROPERTY_UPDATE_INFO_VERSION,            CTSVC_SEARCH_PROPERTY_ALL,      "version"},
-       {CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED,      CTSVC_SEARCH_PROPERTY_ALL,      "image_changed"},
-       {CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE,  CTSVC_SEARCH_PROPERTY_ALL,      "is_deleted"},
-};
-
-const property_info_s __property_grouprel_updated_info[] = {
-       {CTSVC_PROPERTY_GROUP_ID,                               CTSVC_SEARCH_PROPERTY_ALL,      "group_id"},
-       {CTSVC_PROPERTY_CONTACT_ID,                     CTSVC_SEARCH_PROPERTY_ALL,      "id"},
-       {CTSVC_PROPERTY_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
-       {CTSVC_PROPERTY_UPDATE_INFO_TYPE,       CTSVC_SEARCH_PROPERTY_ALL,      "type"},
-       {CTSVC_PROPERTY_UPDATE_INFO_VERSION,    CTSVC_SEARCH_PROPERTY_ALL,      "version"},
-};
-#endif
-
-// search properties ///////////////////////////////////////////////////////////////////////////////////////////////////
-const property_info_s __property_person_contact[] = {          // _contacts_person_contact
+/* search properties */
+const property_info_s __property_person_contact[] = {   /* _contacts_person_contact */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1020,18 +995,18 @@ const property_info_s __property_person_contact[] = {            // _contacts_person_conta
        {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "addressbook_ids"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // contact
+       /* contact */
        {CTSVC_PROPERTY_CONTACT_ID,                                             CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,                 CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
-       // addressbook
+       /* addressbook */
        {CTSVC_PROPERTY_ADDRESSBOOK_NAME,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_name"},
        {CTSVC_PROPERTY_ADDRESSBOOK_MODE,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_mode"},
 };
 
-const property_info_s __property_person_number[] = {           // _contacts_person_number
+const property_info_s __property_person_number[] = {   /* _contacts_person_number */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1040,7 +1015,7 @@ const property_info_s __property_person_number[] = {              // _contacts_person_number
        {CTSVC_PROPERTY_PERSON_IS_FAVORITE,                     CTSVC_SEARCH_PROPERTY_ALL,      "is_favorite"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // number
+       /* number */
        {CTSVC_PROPERTY_NUMBER_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "number_id"},
        {CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT,                CTSVC_SEARCH_PROPERTY_ALL,      "is_primary_default"},
        {CTSVC_PROPERTY_NUMBER_TYPE,                                    CTSVC_SEARCH_PROPERTY_PROJECTION,       "type"},
@@ -1051,10 +1026,10 @@ const property_info_s __property_person_number[] = {            // _contacts_person_number
        {CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER,  CTSVC_SEARCH_PROPERTY_FILTER,   "cleaned_number"},
 };
 
-const property_info_s __property_person_email[] = {    // _contacts_person_email
+const property_info_s __property_person_email[] = {   /* _contacts_person_email */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1063,7 +1038,7 @@ const property_info_s __property_person_email[] = {       // _contacts_person_email
        {CTSVC_PROPERTY_PERSON_IS_FAVORITE,                     CTSVC_SEARCH_PROPERTY_ALL,      "is_favorite"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // email
+       /* email */
        {CTSVC_PROPERTY_EMAIL_ID,                                               CTSVC_SEARCH_PROPERTY_ALL,      "email_id"},
        {CTSVC_PROPERTY_EMAIL_TYPE,                                     CTSVC_SEARCH_PROPERTY_PROJECTION,       "type"},
        {CTSVC_PROPERTY_EMAIL_LABEL,                                    CTSVC_SEARCH_PROPERTY_PROJECTION,       "label"},
@@ -1071,10 +1046,10 @@ const property_info_s __property_person_email[] = {     // _contacts_person_email
        {CTSVC_PROPERTY_EMAIL_EMAIL,                                    CTSVC_SEARCH_PROPERTY_ALL,      "email"},
 };
 
-const property_info_s __property_person_grouprel[] = { // _contacts_person_grouprel
+const property_info_s __property_person_grouprel[] = {   /* _contacts_person_grouprel */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1086,20 +1061,20 @@ const property_info_s __property_person_grouprel[] = {  // _contacts_person_group
        {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "addressbook_ids"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // contacts
+       /* contacts */
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,                         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
-       // group relation
+       /* group relation */
        {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,                        CTSVC_SEARCH_PROPERTY_ALL,      "group_id"},
        {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID,                      CTSVC_SEARCH_PROPERTY_PROJECTION,       "contact_id"},
-       // addressbook
+       /* addressbook */
        {CTSVC_PROPERTY_ADDRESSBOOK_NAME,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_name"},
        {CTSVC_PROPERTY_ADDRESSBOOK_MODE,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_mode"},
 };
 
-const property_info_s __property_person_group_assigned[] = {   // _contacts_person_group_assigned
+const property_info_s __property_person_group_assigned[] = {   /* _contacts_person_group_assigned */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1111,19 +1086,19 @@ const property_info_s __property_person_group_assigned[] = {    // _contacts_person
        {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "addressbook_ids"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // contacts
+       /* contacts */
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,                         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
-       // group relation
+       /* group relation */
        {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,                        CTSVC_SEARCH_PROPERTY_ALL,      "group_id"},
        {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID,                      CTSVC_SEARCH_PROPERTY_PROJECTION,       "contact_id"},
-       // addressbook
+       /* addressbook */
        {CTSVC_PROPERTY_ADDRESSBOOK_MODE,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_mode"},
 };
 
-const property_info_s __property_person_group_not_assigned[] = {       // _contacts_person_group_not_assigned
+const property_info_s __property_person_group_not_assigned[] = {   /* _contacts_person_group_not_assigned */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1135,37 +1110,37 @@ const property_info_s __property_person_group_not_assigned[] = {        // _contacts_pe
        {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "addressbook_ids"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // contacts
+       /* contacts */
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,                 CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_ID,                                                     CTSVC_SEARCH_PROPERTY_PROJECTION,       "contact_id"},
-       // addressbook
+       /* addressbook */
        {CTSVC_PROPERTY_ADDRESSBOOK_MODE,                               CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_mode"},
 };
 
 #ifdef ENABLE_LOG_FEATURE
-const property_info_s __property_person_phonelog[] = { // _contacts_person_phone_log
+const property_info_s __property_person_phonelog[] = {   /* _contacts_person_phone_log */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
-       // phonelog
+       /* phonelog */
        {CTSVC_PROPERTY_PHONELOG_ID,                            CTSVC_SEARCH_PROPERTY_ALL,      "phonelog_id"},
        {CTSVC_PROPERTY_PHONELOG_ADDRESS,                       CTSVC_SEARCH_PROPERTY_ALL,      "address"},
        {CTSVC_PROPERTY_DATA_DATA1,                                     CTSVC_SEARCH_PROPERTY_PROJECTION,       "address_type"},
        {CTSVC_PROPERTY_PHONELOG_LOG_TIME,                      CTSVC_SEARCH_PROPERTY_ALL,      "log_time"},
        {CTSVC_PROPERTY_PHONELOG_LOG_TYPE,                      CTSVC_SEARCH_PROPERTY_ALL,      "log_type"},
-       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1,           CTSVC_SEARCH_PROPERTY_PROJECTION,       "data1"},               // duration
-       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2,           CTSVC_SEARCH_PROPERTY_PROJECTION,       "data2"},               // message_id
+       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1,           CTSVC_SEARCH_PROPERTY_PROJECTION,       "data1"}, /* duration */
+       {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2,           CTSVC_SEARCH_PROPERTY_PROJECTION,       "data2"}, /* message_id */
        {CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS,    CTSVC_SEARCH_PROPERTY_FILTER,   "normal_num"},
        {CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS,       CTSVC_SEARCH_PROPERTY_FILTER,   "clean_num"},
        {CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER,        CTSVC_SEARCH_PROPERTY_FILTER,   "minmatch"},
        {CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO, CTSVC_SEARCH_PROPERTY_ALL, "sim_id"},
 };
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-const property_info_s __property_person_usage[] = {    // _contacts_person_usage
+const property_info_s __property_person_usage[] = {   /* _contacts_person_usage */
        {CTSVC_PROPERTY_PERSON_ID,                                              CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
-       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,                              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME,                    CTSVC_SEARCH_PROPERTY_ALL,      NULL},    /* "dispaly_name" or "reverse_dispaly_name" */
+       {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX,                              CTSVC_SEARCH_PROPERTY_PROJECTION,       NULL}, /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "name_contact_id"},
        {CTSVC_PROPERTY_PERSON_RINGTONE,                                CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL,         CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
@@ -1174,20 +1149,20 @@ const property_info_s __property_person_usage[] = {     // _contacts_person_usage
        {CTSVC_PROPERTY_PERSON_IS_FAVORITE,                     CTSVC_SEARCH_PROPERTY_ALL,      "is_favorite"},
        {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,                 CTSVC_SEARCH_PROPERTY_ALL,      "has_phonenumber"},
        {CTSVC_PROPERTY_PERSON_HAS_EMAIL,                               CTSVC_SEARCH_PROPERTY_ALL,      "has_email"},
-       // contact_stat
+       /* contact_stat */
        {CTSVC_PROPERTY_PERSON_USAGE_TYPE,                              CTSVC_SEARCH_PROPERTY_ALL,      "usage_type"},
        {CTSVC_PROPERTY_PERSON_TIMES_USED,                              CTSVC_SEARCH_PROPERTY_ALL,      "times_used"},
 };
 
-const property_info_s __property_contact_number[] = {          // _contacts_contact_number
+const property_info_s __property_contact_number[] = {   /* _contacts_contact_number */
        {CTSVC_PROPERTY_CONTACT_ID,                                     CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},        /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID,                 CTSVC_SEARCH_PROPERTY_PROJECTION,       "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_PERSON_ID,                      CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
        {CTSVC_PROPERTY_CONTACT_RINGTONE,                       CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,        CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
-       // number
+       /* number */
        {CTSVC_PROPERTY_NUMBER_ID,                                      CTSVC_SEARCH_PROPERTY_ALL,      "number_id"},
        {CTSVC_PROPERTY_NUMBER_TYPE,                            CTSVC_SEARCH_PROPERTY_PROJECTION,       "type"},
        {CTSVC_PROPERTY_NUMBER_LABEL,                           CTSVC_SEARCH_PROPERTY_PROJECTION,       "label"},
@@ -1198,15 +1173,15 @@ const property_info_s __property_contact_number[] = {           // _contacts_contact_numb
        {CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER,  CTSVC_SEARCH_PROPERTY_FILTER,   "cleaned_number"},
 };
 
-const property_info_s __property_contact_email[] = {           // _contacts_contact_email
+const property_info_s __property_contact_email[] = {   /* _contacts_contact_email */
        {CTSVC_PROPERTY_CONTACT_ID,                                     CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},        /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID,                 CTSVC_SEARCH_PROPERTY_ALL,      "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_PERSON_ID,                      CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
        {CTSVC_PROPERTY_CONTACT_RINGTONE,                       CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,                CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
-       // email
+       /* email */
        {CTSVC_PROPERTY_EMAIL_ID,                                               CTSVC_SEARCH_PROPERTY_ALL,      "email_id"},
        {CTSVC_PROPERTY_EMAIL_TYPE,                                             CTSVC_SEARCH_PROPERTY_PROJECTION,       "type"},
        {CTSVC_PROPERTY_EMAIL_LABEL,                                    CTSVC_SEARCH_PROPERTY_PROJECTION,       "label"},
@@ -1214,22 +1189,22 @@ const property_info_s __property_contact_email[] = {            // _contacts_contact_email
        {CTSVC_PROPERTY_EMAIL_EMAIL,                                    CTSVC_SEARCH_PROPERTY_ALL,      "email"},
 };
 
-const property_info_s __property_contact_grouprel[] = {                // _contacts_contact_grouprel
+const property_info_s __property_contact_grouprel[] = {   /* _contacts_contact_grouprel */
        {CTSVC_PROPERTY_CONTACT_ID,                                     CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},        /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID,                 CTSVC_SEARCH_PROPERTY_PROJECTION,       "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_PERSON_ID,                      CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
        {CTSVC_PROPERTY_CONTACT_RINGTONE,                       CTSVC_SEARCH_PROPERTY_PROJECTION,       "ringtone_path"},
        {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,                CTSVC_SEARCH_PROPERTY_PROJECTION,       "image_thumbnail_path"},
-       // group relation
+       /* group relation */
        {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,                CTSVC_SEARCH_PROPERTY_ALL,      "group_id"},
        {CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME,              CTSVC_SEARCH_PROPERTY_PROJECTION,       "group_name"},
 };
 
-const property_info_s __property_contact_activity[] = {                // _contacts_contact_activity
+const property_info_s __property_contact_activity[] = {   /* _contacts_contact_activity */
        {CTSVC_PROPERTY_CONTACT_ID,                                     CTSVC_SEARCH_PROPERTY_ALL,      "contact_id"},
-       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},  // "dispaly_name" or "reverse_dispaly_name"
+       {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME,           CTSVC_SEARCH_PROPERTY_ALL,      NULL},        /* "dispaly_name" or "reverse_dispaly_name" */
        {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID,                 CTSVC_SEARCH_PROPERTY_PROJECTION,       "display_name_source"},
        {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,         CTSVC_SEARCH_PROPERTY_ALL,      "addressbook_id"},
        {CTSVC_PROPERTY_CONTACT_PERSON_ID,                      CTSVC_SEARCH_PROPERTY_ALL,      "person_id"},
@@ -1245,7 +1220,7 @@ const property_info_s __property_contact_activity[] = {           // _contacts_contact_ac
 };
 
 #ifdef ENABLE_LOG_FEATURE
-const property_info_s __property_phonelog_stat[] = {           //_contacts_phone_log_stat
+const property_info_s __property_phonelog_stat[] = {   /* _contacts_phone_log_stat */
        {CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT,                CTSVC_SEARCH_PROPERTY_PROJECTION,       "log_count"},
        {CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE,                 CTSVC_SEARCH_PROPERTY_ALL,      "log_type"},
 };
@@ -1271,11 +1246,9 @@ static const view_uri_info_s __tables[] = {
        {CTSVC_VIEW_URI_ACTIVITY_PHOTO, CTSVC_RECORD_ACTIVITY_PHOTO,    PTR_COUNT(__property_activity_photo)},
 #ifdef ENABLE_LOG_FEATURE
        {CTSVC_VIEW_URI_PHONELOG,               CTSVC_RECORD_PHONELOG,                  PTR_COUNT(__property_phonelog)},
-#endif // ENABLE_LOG_FEATURE
-#ifdef ENABLE_SIM_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        {CTSVC_VIEW_URI_SPEEDDIAL,              CTSVC_RECORD_SPEEDDIAL,                 PTR_COUNT(__property_speeddial)},
        {CTSVC_VIEW_URI_SDN,                    CTSVC_RECORD_SDN,                               PTR_COUNT(__property_sdn)},
-#endif // ENABLE_SIM_FEATURE
 
        {CTSVC_VIEW_URI_NAME,                   CTSVC_RECORD_NAME,                              PTR_COUNT(__property_name)},
        {CTSVC_VIEW_URI_COMPANY,                CTSVC_RECORD_COMPANY,                   PTR_COUNT(__property_company)},
@@ -1307,7 +1280,7 @@ static const view_uri_info_s __tables[] = {
        {CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED,            CTSVC_RECORD_RESULT, PTR_COUNT(__property_person_group_not_assigned)},
 #ifdef ENABLE_LOG_FEATURE
        {CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG,                              CTSVC_RECORD_RESULT, PTR_COUNT(__property_person_phonelog)},
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        {CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE,                         CTSVC_RECORD_RESULT, PTR_COUNT(__property_person_usage)},
 
        {CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER,                               CTSVC_RECORD_RESULT, PTR_COUNT(__property_contact_number)},
@@ -1316,12 +1289,12 @@ static const view_uri_info_s __tables[] = {
        {CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY,                     CTSVC_RECORD_RESULT, PTR_COUNT(__property_contact_activity)},
 #ifdef ENABLE_LOG_FEATURE
        {CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT,                                CTSVC_RECORD_RESULT, PTR_COUNT(__property_phonelog_stat)},
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 };
 
 static GHashTable *__ctsvc_view_uri_hash = NULL;
 
-#ifndef _CONTACTS_IPC_SERVER           // native or client library
+#ifndef _CONTACTS_IPC_SERVER /* native or client library */
 static int __ctsvc_view_ref_count = 0;
 #endif
 
@@ -1330,8 +1303,8 @@ void ctsvc_view_uri_init()
        int i;
        int count;
 
-#ifndef _CONTACTS_IPC_SERVER           // native or client library
-       // it is called in mutex lock
+#ifndef _CONTACTS_IPC_SERVER /* native or client library */
+       /* it is called in mutex lock */
        __ctsvc_view_ref_count++;
 #endif
 
@@ -1348,8 +1321,8 @@ void ctsvc_view_uri_init()
 
 void ctsvc_view_uri_deinit()
 {
-#ifndef _CONTACTS_IPC_SERVER           // native or client library
-       // it is called in mutex lock
+#ifndef _CONTACTS_IPC_SERVER /* native or client library */
+       /* it is called in mutex lock */
        __ctsvc_view_ref_count--;
        if (__ctsvc_view_ref_count != 0)
                return;
@@ -1381,7 +1354,7 @@ ctsvc_record_type_e ctsvc_view_get_record_type(const char* view_uri)
        return type;
 }
 
-const char* ctsvc_view_get_uri( const char* view_uri )
+const char* ctsvc_view_get_uri(const char* view_uri)
 {
        view_uri_info_s* view_uri_info = NULL;
 
index 0f6b876..5e58638 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_VIEW_H__
-#define __TIZEN_SOCIAL_CTSVC_VIEW_H__
+#ifndef __CTSVC_VIEW_H__
+#define __CTSVC_VIEW_H__
 
 #include "ctsvc_struct.h"
 
-#define CTSVC_VIEW_URI_ADDRESSBOOK             "tizen.contacts_view.addressbook"
-#define CTSVC_VIEW_URI_GROUP                   "tizen.contacts_view.group"
-#define CTSVC_VIEW_URI_PERSON                  "tizen.contacts_view.person"
-#define CTSVC_VIEW_URI_SIMPLE_CONTACT  "tizen.contacts_view.simple_contact"
-#define CTSVC_VIEW_URI_CONTACT                 "tizen.contacts_view.contact"
-#define CTSVC_VIEW_URI_MY_PROFILE                      "tizen.contacts_view.my_profile"
-#define CTSVC_VIEW_URI_ACTIVITY                        "tizen.contacts_view.activity"
-#define CTSVC_VIEW_URI_ACTIVITY_PHOTO  "tizen.contacts_view.activity/photo"
-#define CTSVC_VIEW_URI_PHONELOG                        "tizen.contacts_view.phonelog"
-#define CTSVC_VIEW_URI_SPEEDDIAL               "tizen.contacts_view.speeddial"
-#define CTSVC_VIEW_URI_SDN                             "tizen.contacts_view.sdn"
-#define CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO   "tizen.contacts_view.contacts_updated_info"
-#define CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO "tizen.contacts_view.my_profile_updated_info"
-#define CTSVC_VIEW_URI_GROUPS_UPDATED_INFO             "tizen.contacts_view.groups_updated_info"
+#define CTSVC_VIEW_URI_ADDRESSBOOK "tizen.contacts_view.addressbook"
+#define CTSVC_VIEW_URI_GROUP "tizen.contacts_view.group"
+#define CTSVC_VIEW_URI_PERSON "tizen.contacts_view.person"
+#define CTSVC_VIEW_URI_SIMPLE_CONTACT "tizen.contacts_view.simple_contact"
+#define CTSVC_VIEW_URI_CONTACT "tizen.contacts_view.contact"
+#define CTSVC_VIEW_URI_MY_PROFILE "tizen.contacts_view.my_profile"
+#define CTSVC_VIEW_URI_ACTIVITY "tizen.contacts_view.activity"
+#define CTSVC_VIEW_URI_ACTIVITY_PHOTO "tizen.contacts_view.activity/photo"
+#define CTSVC_VIEW_URI_PHONELOG "tizen.contacts_view.phonelog"
+#define CTSVC_VIEW_URI_SPEEDDIAL "tizen.contacts_view.speeddial"
+#define CTSVC_VIEW_URI_SDN "tizen.contacts_view.sdn"
+#define CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO "tizen.contacts_view.contacts_updated_info"
+#define CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO "tizen.contacts_view.my_profile_updated_info"
+#define CTSVC_VIEW_URI_GROUPS_UPDATED_INFO "tizen.contacts_view.groups_updated_info"
 #define CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO "tizen.contacts_view.groups_member_updated_info"
-#define CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO          "tizen.contacts_view.group_relations_updated_info"
-#define CTSVC_VIEW_URI_NAME                            "tizen.contacts_view.name"
-#define CTSVC_VIEW_URI_COMPANY                 "tizen.contacts_view.company"
-#define CTSVC_VIEW_URI_NUMBER                  "tizen.contacts_view.number"
-#define CTSVC_VIEW_URI_EMAIL                   "tizen.contacts_view.email"
-#define CTSVC_VIEW_URI_URL                             "tizen.contacts_view.url"
-#define CTSVC_VIEW_URI_ADDRESS                 "tizen.contacts_view.address"
-#define CTSVC_VIEW_URI_PROFILE                 "tizen.contacts_view.profile"
-#define CTSVC_VIEW_URI_RELATIONSHIP            "tizen.contacts_view.relationship"
-#define CTSVC_VIEW_URI_IMAGE                   "tizen.contacts_view.image"
-#define CTSVC_VIEW_URI_NOTE                            "tizen.contacts_view.note"
-#define CTSVC_VIEW_URI_NICKNAME                        "tizen.contacts_view.nickname"
-#define CTSVC_VIEW_URI_EVENT                   "tizen.contacts_view.event"
-#define CTSVC_VIEW_URI_MESSENGER               "tizen.contacts_view.messenger"
-#define CTSVC_VIEW_URI_GROUP_RELATION  "tizen.contacts_view.group_relation"
-#define CTSVC_VIEW_URI_EXTENSION                       "tizen.contacts_view.extension"
-
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT                                        "tizen.contacts_view.person/simple_contact"
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER                                 "tizen.contacts_view.person/simple_contact/number"
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL                                  "tizen.contacts_view.person/simple_contact/email"
-
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP                                  "tizen.contacts_view.person/simple_contact/group"
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED         "tizen.contacts_view.person/simple_contact/group_assigned"
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED             "tizen.contacts_view.person/simple_contact/group_not_assigned"
-
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG                               "tizen.contacts_view.person/simple_contact/phonelog"
-#define CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE                                                  "tizen.contacts_view.person/usage"
-
-#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER                                                "tizen.contacts_view.simple_contact/number"
-#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_EMAIL                                         "tizen.contacts_view.simple_contact/email"
-#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_GROUP                                         "tizen.contacts_view.simple_contact/group"
-#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY                                      "tizen.contacts_view.simple_contact/activity"
-
-#define CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT                                         "tizen.contacts_view.phonelog_stat"
+#define CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO "tizen.contacts_view.group_relations_updated_info"
+#define CTSVC_VIEW_URI_NAME "tizen.contacts_view.name"
+#define CTSVC_VIEW_URI_COMPANY "tizen.contacts_view.company"
+#define CTSVC_VIEW_URI_NUMBER "tizen.contacts_view.number"
+#define CTSVC_VIEW_URI_EMAIL "tizen.contacts_view.email"
+#define CTSVC_VIEW_URI_URL "tizen.contacts_view.url"
+#define CTSVC_VIEW_URI_ADDRESS "tizen.contacts_view.address"
+#define CTSVC_VIEW_URI_PROFILE "tizen.contacts_view.profile"
+#define CTSVC_VIEW_URI_RELATIONSHIP "tizen.contacts_view.relationship"
+#define CTSVC_VIEW_URI_IMAGE "tizen.contacts_view.image"
+#define CTSVC_VIEW_URI_NOTE "tizen.contacts_view.note"
+#define CTSVC_VIEW_URI_NICKNAME "tizen.contacts_view.nickname"
+#define CTSVC_VIEW_URI_EVENT "tizen.contacts_view.event"
+#define CTSVC_VIEW_URI_MESSENGER "tizen.contacts_view.messenger"
+#define CTSVC_VIEW_URI_GROUP_RELATION "tizen.contacts_view.group_relation"
+#define CTSVC_VIEW_URI_EXTENSION "tizen.contacts_view.extension"
+
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT "tizen.contacts_view.person/simple_contact"
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER "tizen.contacts_view.person/simple_contact/number"
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL "tizen.contacts_view.person/simple_contact/email"
+
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP "tizen.contacts_view.person/simple_contact/group"
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED "tizen.contacts_view.person/simple_contact/group_assigned"
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED "tizen.contacts_view.person/simple_contact/group_not_assigned"
+
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG "tizen.contacts_view.person/simple_contact/phonelog"
+#define CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE "tizen.contacts_view.person/usage"
+
+#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER "tizen.contacts_view.simple_contact/number"
+#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_EMAIL "tizen.contacts_view.simple_contact/email"
+#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_GROUP "tizen.contacts_view.simple_contact/group"
+#define CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY "tizen.contacts_view.simple_contact/activity"
+
+#define CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT "tizen.contacts_view.phonelog_stat"
 
 
 typedef enum
 {
        CTSVC_PROPERTY_FLAG_PROJECTION = 0x00000001,
-       CTSVC_PROPERTY_FLAG_DIRTY = 0x00000002, // for dirty bit
+       CTSVC_PROPERTY_FLAG_DIRTY = 0x00000002,  /* for dirty bit */
 } contacts_property_flag_e;
 
 
-// for type check                                                                      // data_type mask 0x000FF000
-#define CTSVC_VIEW_DATA_TYPE_MASK             0x000F0000
-#define CTSVC_VIEW_DATA_TYPE_BOOL                0x00010000
-#define CTSVC_VIEW_DATA_TYPE_INT              0x00020000
-#define CTSVC_VIEW_DATA_TYPE_LLI              0x00030000
-#define CTSVC_VIEW_DATA_TYPE_STR              0x00040000
-#define CTSVC_VIEW_DATA_TYPE_DOUBLE           0x00050000
-#define CTSVC_VIEW_DATA_TYPE_REC              0x00060000
+/* for type check */              /* data_type mask 0x000FF000 */
+#define CTSVC_VIEW_DATA_TYPE_MASK 0x000F0000
+#define CTSVC_VIEW_DATA_TYPE_BOOL 0x00010000
+#define CTSVC_VIEW_DATA_TYPE_INT 0x00020000
+#define CTSVC_VIEW_DATA_TYPE_LLI 0x00030000
+#define CTSVC_VIEW_DATA_TYPE_STR 0x00040000
+#define CTSVC_VIEW_DATA_TYPE_DOUBLE 0x00050000
+#define CTSVC_VIEW_DATA_TYPE_REC 0x00060000
 #define CTSVC_VIEW_CHECK_DATA_TYPE(property_id,data_type) \
        ((property_id&CTSVC_VIEW_DATA_TYPE_MASK) == data_type ? true : false)
 
-#define CTSVC_READ_WRITE_TYPE_MASK            0x0000F000
-#define CTSVC_READ_ONLY_PROPERTY                 0x00001000
+#define CTSVC_READ_WRITE_TYPE_MASK 0x0000F000
+#define CTSVC_READ_ONLY_PROPERTY 0x00001000
 
 #define CTSVC_READ_ONLY_CHECK(property_id, data_type) \
        ((property_id & CTSVC_READ_WRITE_TYPE_MASK) == data_type ? true : false)
 
 
-// for property                            //  0x0FF00000
-#define CTSVC_PROPERTY_MASK                      0x0FF00000
-
-#define CTSVC_PROPERTY_ADDRESSBOOK              0x00100000
-#define CTSVC_PROPERTY_GROUP                    0x00200000
-#define CTSVC_PROPERTY_PERSON                   0x00300000
-#define CTSVC_PROPERTY_ACTIVITY                                                0x00500000
-#define CTSVC_PROPERTY_DATA                                                    0x00600000
-#define CTSVC_PROPERTY_SPEEDDIAL                                               0x00700000
-#define CTSVC_PROPERTY_PHONELOG                                                0x00800000
-#define CTSVC_PROPERTY_UPDATE_INFO                                     0x00900000
-#define CTSVC_PROPERTY_SDN                                                             0x00A00000
-#define CTSVC_PROPERTY_PHONELOG_STAT                           0x00B00000
-
-#define CTSVC_PROPERTY_CONTACT                  0x01000000
-#define CTSVC_PROPERTY_NAME                     0x01100000
-#define CTSVC_PROPERTY_NUMBER                                                  0x01200000
-#define CTSVC_PROPERTY_EMAIL                                                   0x01300000
-#define CTSVC_PROPERTY_ADDRESS                                         0x01400000
-#define CTSVC_PROPERTY_URL                      0x01500000
-#define CTSVC_PROPERTY_EVENT                                                   0x01600000
-#define CTSVC_PROPERTY_GROUP_RELATION           0x01700000
-#define CTSVC_PROPERTY_RELATIONSHIP             0x01800000
-#define CTSVC_PROPERTY_COMPANY                                         0x01900000
-#define CTSVC_PROPERTY_NICKNAME                                                0x01A00000
-#define CTSVC_PROPERTY_MESSENGER                                               0x01B00000
-#define CTSVC_PROPERTY_NOTE                                                    0x01C00000
-#define CTSVC_PROPERTY_PROFILE                                         0x01D00000
-#define CTSVC_PROPERTY_IMAGE                                                   0x01E00000
-#define CTSVC_PROPERTY_EXTENSION                                               0x01F00000
-#define CTSVC_PROPERTY_MY_PROFILE                                      0x02000000
-#define CTSVC_PROPERTY_ACTIVITY_PHOTO                          0x02100000
+/* for property */            /*  0x0FF00000 */
+#define CTSVC_PROPERTY_MASK 0x0FF00000
+
+#define CTSVC_PROPERTY_ADDRESSBOOK 0x00100000
+#define CTSVC_PROPERTY_GROUP 0x00200000
+#define CTSVC_PROPERTY_PERSON 0x00300000
+#define CTSVC_PROPERTY_ACTIVITY 0x00500000
+#define CTSVC_PROPERTY_DATA 0x00600000
+#define CTSVC_PROPERTY_SPEEDDIAL 0x00700000
+#define CTSVC_PROPERTY_PHONELOG 0x00800000
+#define CTSVC_PROPERTY_UPDATE_INFO 0x00900000
+#define CTSVC_PROPERTY_SDN 0x00A00000
+#define CTSVC_PROPERTY_PHONELOG_STAT 0x00B00000
+
+#define CTSVC_PROPERTY_CONTACT 0x01000000
+#define CTSVC_PROPERTY_NAME 0x01100000
+#define CTSVC_PROPERTY_NUMBER 0x01200000
+#define CTSVC_PROPERTY_EMAIL 0x01300000
+#define CTSVC_PROPERTY_ADDRESS 0x01400000
+#define CTSVC_PROPERTY_URL 0x01500000
+#define CTSVC_PROPERTY_EVENT 0x01600000
+#define CTSVC_PROPERTY_GROUP_RELATION 0x01700000
+#define CTSVC_PROPERTY_RELATIONSHIP 0x01800000
+#define CTSVC_PROPERTY_COMPANY 0x01900000
+#define CTSVC_PROPERTY_NICKNAME 0x01A00000
+#define CTSVC_PROPERTY_MESSENGER 0x01B00000
+#define CTSVC_PROPERTY_NOTE 0x01C00000
+#define CTSVC_PROPERTY_PROFILE 0x01D00000
+#define CTSVC_PROPERTY_IMAGE 0x01E00000
+#define CTSVC_PROPERTY_EXTENSION 0x01F00000
+#define CTSVC_PROPERTY_MY_PROFILE 0x02000000
+#define CTSVC_PROPERTY_ACTIVITY_PHOTO 0x02100000
 
 #define CTSVC_PROPERTY_CHECK(property_id,data_type) \
        ((property_id & CTSVC_PROPERTY_MASK) == data_type ? true : false)
 
-#define CTSVC_SEARCH_PROPERTY_MASK              0xF0000000
-#define CTSVC_SEARCH_PROPERTY_NONE                           0x10000000
-#define CTSVC_SEARCH_PROPERTY_FILTER            0x20000000
-#define CTSVC_SEARCH_PROPERTY_PROJECTION        0x30000000
-#define CTSVC_SEARCH_PROPERTY_ALL               0x40000000
+#define CTSVC_SEARCH_PROPERTY_MASK 0xF0000000
+#define CTSVC_SEARCH_PROPERTY_NONE 0x10000000
+#define CTSVC_SEARCH_PROPERTY_FILTER 0x20000000
+#define CTSVC_SEARCH_PROPERTY_PROJECTION 0x30000000
+#define CTSVC_SEARCH_PROPERTY_ALL 0x40000000
 #define CTSVC_SEARCH_PROPERTY_CHECK(property_id,data_type) \
        ((property_id & CTSVC_SEARCH_PROPERTY_MASK) == data_type ? true : false)
 
 typedef enum {
-       // addressbook
+       /* addressbook */
        CTSVC_PROPERTY_ADDRESSBOOK_ID = (CTSVC_PROPERTY_ADDRESSBOOK | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID = (CTSVC_PROPERTY_ADDRESSBOOK | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_ADDRESSBOOK_NAME = (CTSVC_PROPERTY_ADDRESSBOOK | CTSVC_VIEW_DATA_TYPE_STR) +2,
        CTSVC_PROPERTY_ADDRESSBOOK_MODE = (CTSVC_PROPERTY_ADDRESSBOOK | CTSVC_VIEW_DATA_TYPE_INT) +3,
 
-       // group
+       /* group */
        CTSVC_PROPERTY_GROUP_ID = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_GROUP_ADDRESSBOOK_ID = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_GROUP_NAME = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +2,
@@ -164,10 +164,10 @@ typedef enum {
        CTSVC_PROPERTY_GROUP_IS_READ_ONLY = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_BOOL) +7,
        CTSVC_PROPERTY_GROUP_MESSAGE_ALERT = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +8,
 
-       // person
+       /* person */
        CTSVC_PROPERTY_PERSON_ID = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_PERSON_DISPLAY_NAME = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
-       CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT ) +2,
+       CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_PERSON_RINGTONE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +3,
        CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +4,
        CTSVC_PROPERTY_PERSON_VIBRATION = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +5,
@@ -181,12 +181,12 @@ typedef enum {
        CTSVC_PROPERTY_PERSON_STATUS = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +13,
        CTSVC_PROPERTY_PERSON_MESSAGE_ALERT = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +14,
 
-       // person-stat
+       /* person-stat */
        CTSVC_PROPERTY_PERSON_USAGE_TYPE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT) +100,
        CTSVC_PROPERTY_PERSON_TIMES_USED = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT) +101,
 
-       // simple contact : read only
-       // contact
+       /* simple contact : read only */
+       /* contact */
        CTSVC_PROPERTY_CONTACT_ID = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_CONTACT_DISPLAY_NAME = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
        CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +2,
@@ -218,7 +218,7 @@ typedef enum {
        CTSVC_PROPERTY_CONTACT_LINK_MODE = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_INT) +28,
        CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_STR) +29,
 
-       // my_profile
+       /* my_profile */
        CTSVC_PROPERTY_MY_PROFILE_ID = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
        CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -240,7 +240,7 @@ typedef enum {
        CTSVC_PROPERTY_MY_PROFILE_RELATIONSHIP = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_REC) +18,
        CTSVC_PROPERTY_MY_PROFILE_EXTENSION = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_REC) +19,
 
-       // contact_name
+       /* contact_name */
        CTSVC_PROPERTY_NAME_ID = (CTSVC_PROPERTY_NAME | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_NAME_CONTACT_ID = (CTSVC_PROPERTY_NAME | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_NAME_FIRST = (CTSVC_PROPERTY_NAME | CTSVC_VIEW_DATA_TYPE_STR) +2,
@@ -252,7 +252,7 @@ typedef enum {
        CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE = (CTSVC_PROPERTY_NAME | CTSVC_VIEW_DATA_TYPE_STR) +8,
        CTSVC_PROPERTY_NAME_PHONETIC_LAST = (CTSVC_PROPERTY_NAME | CTSVC_VIEW_DATA_TYPE_STR) +9,
 
-       // contact_number
+       /* contact_number */
        CTSVC_PROPERTY_NUMBER_ID = (CTSVC_PROPERTY_NUMBER | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_NUMBER_CONTACT_ID = (CTSVC_PROPERTY_NUMBER | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_NUMBER_TYPE = (CTSVC_PROPERTY_NUMBER | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -263,7 +263,7 @@ typedef enum {
        CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER = (CTSVC_PROPERTY_NUMBER | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +7,
        CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER = (CTSVC_PROPERTY_NUMBER | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +8,
 
-       // contact_email
+       /* contact_email */
        CTSVC_PROPERTY_EMAIL_ID = (CTSVC_PROPERTY_EMAIL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_EMAIL_CONTACT_ID = (CTSVC_PROPERTY_EMAIL | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_EMAIL_TYPE = (CTSVC_PROPERTY_EMAIL | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -271,7 +271,7 @@ typedef enum {
        CTSVC_PROPERTY_EMAIL_IS_DEFAULT = (CTSVC_PROPERTY_EMAIL | CTSVC_VIEW_DATA_TYPE_BOOL) +4,
        CTSVC_PROPERTY_EMAIL_EMAIL = (CTSVC_PROPERTY_EMAIL | CTSVC_VIEW_DATA_TYPE_STR) +5,
 
-       // contact_address
+       /* contact_address */
        CTSVC_PROPERTY_ADDRESS_ID = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_ADDRESS_CONTACT_ID = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_ADDRESS_TYPE = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -285,14 +285,14 @@ typedef enum {
        CTSVC_PROPERTY_ADDRESS_EXTENDED = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_STR) +10,
        CTSVC_PROPERTY_ADDRESS_IS_DEFAULT = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_BOOL) +11,
 
-       // contact_url
+       /* contact_url */
        CTSVC_PROPERTY_URL_ID = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_URL_CONTACT_ID = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_URL_TYPE = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_URL_LABEL = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_STR) +3,
        CTSVC_PROPERTY_URL_URL = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_STR) +4,
 
-       // contact_event
+       /* contact_event */
        CTSVC_PROPERTY_EVENT_ID = (CTSVC_PROPERTY_EVENT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_EVENT_CONTACT_ID = (CTSVC_PROPERTY_EVENT | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_EVENT_TYPE = (CTSVC_PROPERTY_EVENT | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -301,20 +301,20 @@ typedef enum {
        CTSVC_PROPERTY_EVENT_CALENDAR_TYPE = (CTSVC_PROPERTY_EVENT | CTSVC_VIEW_DATA_TYPE_INT) +5,
        CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH = (CTSVC_PROPERTY_EVENT | CTSVC_VIEW_DATA_TYPE_BOOL) +6,
 
-       // contact_grouprelation
+       /* contact_grouprelation */
        CTSVC_PROPERTY_GROUP_RELATION_ID = (CTSVC_PROPERTY_GROUP_RELATION | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID = (CTSVC_PROPERTY_GROUP_RELATION | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID = (CTSVC_PROPERTY_GROUP_RELATION | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME = (CTSVC_PROPERTY_GROUP_RELATION | CTSVC_VIEW_DATA_TYPE_STR) +3,
 
-       // contact_relationship
+       /* contact_relationship */
        CTSVC_PROPERTY_RELATIONSHIP_ID = (CTSVC_PROPERTY_RELATIONSHIP | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID = (CTSVC_PROPERTY_RELATIONSHIP | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_RELATIONSHIP_TYPE = (CTSVC_PROPERTY_RELATIONSHIP | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_RELATIONSHIP_LABEL = (CTSVC_PROPERTY_RELATIONSHIP | CTSVC_VIEW_DATA_TYPE_STR) +3,
        CTSVC_PROPERTY_RELATIONSHIP_NAME = (CTSVC_PROPERTY_RELATIONSHIP | CTSVC_VIEW_DATA_TYPE_STR) +4,
 
-       // contact_image
+       /* contact_image */
        CTSVC_PROPERTY_IMAGE_ID = (CTSVC_PROPERTY_IMAGE | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_IMAGE_CONTACT_ID = (CTSVC_PROPERTY_IMAGE | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_IMAGE_TYPE = (CTSVC_PROPERTY_IMAGE | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -322,7 +322,7 @@ typedef enum {
        CTSVC_PROPERTY_IMAGE_PATH = (CTSVC_PROPERTY_IMAGE | CTSVC_VIEW_DATA_TYPE_STR) +4,
        CTSVC_PROPERTY_IMAGE_IS_DEFAULT = (CTSVC_PROPERTY_IMAGE | CTSVC_VIEW_DATA_TYPE_BOOL) + 5,
 
-       // contact_company
+       /* contact_company */
        CTSVC_PROPERTY_COMPANY_ID = (CTSVC_PROPERTY_COMPANY | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_COMPANY_CONTACT_ID = (CTSVC_PROPERTY_COMPANY | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_COMPANY_TYPE = (CTSVC_PROPERTY_COMPANY | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -337,24 +337,24 @@ typedef enum {
        CTSVC_PROPERTY_COMPANY_DESCRIPTION = (CTSVC_PROPERTY_COMPANY | CTSVC_VIEW_DATA_TYPE_STR) +11,
        CTSVC_PROPERTY_COMPANY_PHONETIC_NAME = (CTSVC_PROPERTY_COMPANY | CTSVC_VIEW_DATA_TYPE_STR) +12,
 
-       // contact_nickname
+       /* contact_nickname */
        CTSVC_PROPERTY_NICKNAME_ID = (CTSVC_PROPERTY_NICKNAME | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_NICKNAME_CONTACT_ID = (CTSVC_PROPERTY_NICKNAME | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_NICKNAME_NAME = (CTSVC_PROPERTY_NICKNAME | CTSVC_VIEW_DATA_TYPE_STR) +2,
 
-       // contact_messenger
+       /* contact_messenger */
        CTSVC_PROPERTY_MESSENGER_ID = (CTSVC_PROPERTY_MESSENGER | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_MESSENGER_CONTACT_ID = (CTSVC_PROPERTY_MESSENGER | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_MESSENGER_TYPE = (CTSVC_PROPERTY_MESSENGER | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_MESSENGER_LABEL = (CTSVC_PROPERTY_MESSENGER | CTSVC_VIEW_DATA_TYPE_STR) +3,
        CTSVC_PROPERTY_MESSENGER_IM_ID = (CTSVC_PROPERTY_MESSENGER | CTSVC_VIEW_DATA_TYPE_STR) +4,
 
-       // contact_note
+       /* contact_note */
        CTSVC_PROPERTY_NOTE_ID = (CTSVC_PROPERTY_NOTE | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_NOTE_CONTACT_ID = (CTSVC_PROPERTY_NOTE | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_NOTE_NOTE = (CTSVC_PROPERTY_NOTE | CTSVC_VIEW_DATA_TYPE_STR) +2,
 
-       // contact_extend
+       /* contact_extend */
        CTSVC_PROPERTY_EXTENSION_ID = (CTSVC_PROPERTY_EXTENSION | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_EXTENSION_CONTACT_ID = (CTSVC_PROPERTY_EXTENSION | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_EXTENSION_DATA1 = (CTSVC_PROPERTY_EXTENSION | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -370,7 +370,7 @@ typedef enum {
        CTSVC_PROPERTY_EXTENSION_DATA11 = (CTSVC_PROPERTY_EXTENSION | CTSVC_VIEW_DATA_TYPE_STR) +12,
        CTSVC_PROPERTY_EXTENSION_DATA12 = (CTSVC_PROPERTY_EXTENSION | CTSVC_VIEW_DATA_TYPE_STR) +13,
 
-       // contact_profile
+       /* contact_profile */
        CTSVC_PROPERTY_PROFILE_ID = (CTSVC_PROPERTY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_PROFILE_CONTACT_ID = (CTSVC_PROPERTY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_PROFILE_UID = (CTSVC_PROPERTY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR) +2,
@@ -383,7 +383,7 @@ typedef enum {
        CTSVC_PROPERTY_PROFILE_CATEGORY = (CTSVC_PROPERTY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR) +9,
        CTSVC_PROPERTY_PROFILE_EXTRA_DATA = (CTSVC_PROPERTY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR) +10,
 
-       // activity
+       /* activity */
        CTSVC_PROPERTY_ACTIVITY_ID = (CTSVC_PROPERTY_ACTIVITY | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_ACTIVITY_CONTACT_ID = (CTSVC_PROPERTY_ACTIVITY | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME = (CTSVC_PROPERTY_ACTIVITY | CTSVC_VIEW_DATA_TYPE_STR) +2,
@@ -393,13 +393,13 @@ typedef enum {
        CTSVC_PROPERTY_ACTIVITY_URI = (CTSVC_PROPERTY_ACTIVITY | CTSVC_VIEW_DATA_TYPE_STR) +6,
        CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO = (CTSVC_PROPERTY_ACTIVITY | CTSVC_VIEW_DATA_TYPE_REC) +7,
 
-       // activity photo
+       /* activity photo */
        CTSVC_PROPERTY_ACTIVITY_PHOTO_ID = (CTSVC_PROPERTY_ACTIVITY_PHOTO | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID = (CTSVC_PROPERTY_ACTIVITY_PHOTO | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_ACTIVITY_PHOTO_URL = (CTSVC_PROPERTY_ACTIVITY_PHOTO | CTSVC_VIEW_DATA_TYPE_STR) +2,
        CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX = (CTSVC_PROPERTY_ACTIVITY_PHOTO | CTSVC_VIEW_DATA_TYPE_INT) +3,
 
-       // data
+       /* data */
        CTSVC_PROPERTY_DATA_ID = (CTSVC_PROPERTY_DATA | CTSVC_VIEW_DATA_TYPE_INT),
        CTSVC_PROPERTY_DATA_CONTACT_ID = (CTSVC_PROPERTY_DATA | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_DATA_TYPE = (CTSVC_PROPERTY_DATA | CTSVC_VIEW_DATA_TYPE_INT) +2,
@@ -416,7 +416,7 @@ typedef enum {
        CTSVC_PROPERTY_DATA_DATA9 = (CTSVC_PROPERTY_DATA | CTSVC_VIEW_DATA_TYPE_STR) +13,
        CTSVC_PROPERTY_DATA_DATA10 = (CTSVC_PROPERTY_DATA | CTSVC_VIEW_DATA_TYPE_STR) +14,
 
-       // speeddial
+       /* speeddial */
        CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT),
        CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_SPEEDDIAL_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +2,
@@ -429,44 +429,44 @@ typedef enum {
        CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +9,
        CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +10,
 
-       // phonelog
+       /* phonelog */
        CTSVC_PROPERTY_PHONELOG_ID = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_PHONELOG_PERSON_ID = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_PHONELOG_ADDRESS = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR) +2,
        CTSVC_PROPERTY_PHONELOG_LOG_TIME = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +3,
        CTSVC_PROPERTY_PHONELOG_LOG_TYPE = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +4,
-       CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +5,          // duration, message_id, email_id
-       CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR) +6,          // short message, subject
-       CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +7,          // for search by calllog number
-       CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +8,             // for search by calllog number
-       CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +9,              // for search by calllog number
+       CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +5,   /* duration, message_id, email_id */
+       CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR) +6,   /* short message, subject */
+       CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +7,   /* for search by calllog number */
+       CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +8,   /* for search by calllog number */
+       CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR|CTSVC_READ_ONLY_PROPERTY) +9,   /* for search by calllog number */
        CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +10,
 
-       // updated_info : read only
+       /* updated_info : read only */
        CTSVC_PROPERTY_UPDATE_INFO_ID = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT),
        CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +1,
        CTSVC_PROPERTY_UPDATE_INFO_TYPE = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +2,
        CTSVC_PROPERTY_UPDATE_INFO_VERSION = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +3,
        CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_BOOL) +4,
-       CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT)+5,               // now, it is used for _contacts_my_profile_updated_info
+       CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT)+5,   /* now, it is used for _contacts_my_profile_updated_info */
 
-       // contact_sdn
+       /* contact_sdn */
        CTSVC_PROPERTY_SDN_ID = (CTSVC_PROPERTY_SDN | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_SDN_NAME = (CTSVC_PROPERTY_SDN | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
        CTSVC_PROPERTY_SDN_NUMBER = (CTSVC_PROPERTY_SDN | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +2,
        CTSVC_PROPERTY_SDN_SIM_SLOT_NO = (CTSVC_PROPERTY_SDN | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +3,
 
-       // phonelog_stat
-       CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY ),
-       CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY ) +1,
+       /* phonelog_stat */
+       CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
+       CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +1,
 
 }ctsvc_property_ids_e;
 
 void ctsvc_view_uri_init();
 void ctsvc_view_uri_deinit();
 
-const char* ctsvc_view_get_uri( const char* view_uri );
+const char* ctsvc_view_get_uri(const char* view_uri);
 ctsvc_record_type_e ctsvc_view_get_record_type(const char* view_uri);
 const property_info_s* ctsvc_view_get_all_property_infos(const char *view_uri, unsigned int *count);
 
-#endif /* __TIZEN_SOCIAL_CTSVC_VIEW_H__ */
+#endif /* __CTSVC_VIEW_H__ */
diff --git a/common/ctsvc_zone.c b/common/ctsvc_zone.c
new file mode 100644 (file)
index 0000000..857c11e
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <vasum.h>
+#include "ctsvc_internal.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_zone.h"
+
+int ctsvc_zone_get_root_path(const char *zone_name, char *dest, int dest_size)
+{
+       int len = 0;
+       if (zone_name && *zone_name)
+               len = snprintf(dest, dest_size, CTSVC_ZONE_BASE_PATH, zone_name);
+       else
+               dest[0] = '\0';
+       return len;
+}
+
+int ctsvc_zone_get_canonicalize_path(contacts_h contact, const char *path, char **p_path)
+{
+       char *zone_name = NULL;
+       if (NULL == path)
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+
+       ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (zone_name) {
+               if (*zone_name) {
+                       char temp[CTSVC_PATH_MAX_LEN] = {0};
+                       snprintf(temp, sizeof(temp), CTSVC_ZONE_BASE_PATH"/%s", zone_name, path);
+                       *p_path = strdup(temp);
+               }
+               else {
+                       *p_path = strdup(path);
+               }
+               free(zone_name);
+               return CONTACTS_ERROR_NONE;
+       }
+
+       int ret = vsm_canonicalize_path((char *)path, p_path);
+       WARN_IF(0 != ret, "vsm_canonicalize_path() Fail(%d)", ret);
+       return CONTACTS_ERROR_NONE;
+}
+
diff --git a/common/ctsvc_zone.h b/common/ctsvc_zone.h
new file mode 100644 (file)
index 0000000..613936c
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_ZONE_H__
+#define __CTSVC_ZONE_H__
+
+#include "contacts_types.h"
+
+#define CTSVC_ZONE_BASE_PATH "/var/lib/lxc/%s/rootfs"
+#define CTSVC_ZONE_NAME_PERSONAL "personal"
+#define CTSVC_ZONE_NAME_HOST ""
+
+
+int ctsvc_zone_get_root_path(const char *zone_name, char *dest, int dest_size);
+int ctsvc_zone_get_canonicalize_path(contacts_h contact, const char *path, char **p_path);
+
+#endif /* __CTSVC_ZONE_H__ */
+
index 447ca90..c7c5f74 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_activity(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_activity(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_activity_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_activity_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_activity,
-       .marshal_record = __ctsvc_ipc_marshal_activity,
-       .get_primary_id = __ctsvc_ipc_marshal_activity_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_activity
 };
 
 
@@ -39,8 +37,7 @@ static int __ctsvc_ipc_unmarshal_activity(pims_ipc_data_h ipc_data, const char*
 
        ctsvc_activity_s* activity_p = (ctsvc_activity_s*) record;
 
-       do
-       {
+       do {
                if (ctsvc_ipc_unmarshal_int(ipc_data, &activity_p->id) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_unmarshal_int(ipc_data, &activity_p->contact_id) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_unmarshal_string(ipc_data, &activity_p->source_name) != CONTACTS_ERROR_NONE) break;
@@ -53,7 +50,7 @@ static int __ctsvc_ipc_unmarshal_activity(pims_ipc_data_h ipc_data, const char*
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -74,10 +71,10 @@ static int __ctsvc_ipc_marshal_activity(const contacts_record_h record, pims_ipc
                if (ctsvc_ipc_marshal_string((activity_p->service_operation),ipc_data) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_marshal_string((activity_p->uri),ipc_data) != CONTACTS_ERROR_NONE) break;
 
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)activity_p->photos, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)activity_p->photos, ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
 
@@ -85,8 +82,3 @@ static int __ctsvc_ipc_marshal_activity(const contacts_record_h record, pims_ipc
 
 }
 
-static int __ctsvc_ipc_marshal_activity_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_ACTIVITY_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index d379015..5be53cd 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_activity_photo(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_activity_photo(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_activity_photo_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_activity_photo_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_activity_photo,
-       .marshal_record = __ctsvc_ipc_marshal_activity_photo,
-       .get_primary_id = __ctsvc_ipc_marshal_activity_photo_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_activity_photo
 };
 
 
@@ -39,8 +37,7 @@ static int __ctsvc_ipc_unmarshal_activity_photo(pims_ipc_data_h ipc_data, const
 
        ctsvc_activity_photo_s* photo_p = (ctsvc_activity_photo_s*) record;
 
-       do
-       {
+       do {
                if (ctsvc_ipc_unmarshal_int(ipc_data, &photo_p->id) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_unmarshal_int(ipc_data, &photo_p->activity_id) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_unmarshal_string(ipc_data, &photo_p->photo_url) != CONTACTS_ERROR_NONE) break;
@@ -48,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_activity_photo(pims_ipc_data_h ipc_data, const
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -67,7 +64,7 @@ static int __ctsvc_ipc_marshal_activity_photo(const contacts_record_h record, pi
                if (ctsvc_ipc_marshal_int((photo_p->sort_index),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
 
@@ -75,8 +72,3 @@ static int __ctsvc_ipc_marshal_activity_photo(const contacts_record_h record, pi
 
 }
 
-static int __ctsvc_ipc_marshal_activity_photo_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_ACTIVITY_PHOTO_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 74a5577..93e29ab 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_address(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_address(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_address_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_address_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_address,
-       .marshal_record = __ctsvc_ipc_marshal_address,
-       .get_primary_id = __ctsvc_ipc_marshal_address_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_address
 };
 
 
@@ -54,7 +52,7 @@ static int __ctsvc_ipc_unmarshal_address(pims_ipc_data_h ipc_data, const char* v
                if (ctsvc_ipc_unmarshal_string(ipc_data, &address_p->country) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
 
@@ -82,16 +80,10 @@ static int __ctsvc_ipc_marshal_address(const contacts_record_h record, pims_ipc_
                if (ctsvc_ipc_marshal_string((address_p->country),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
 
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_address_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_ADDRESS_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index 3f4554b..4642a21 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_addressbook(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_addressbook(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_addressbook_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_addressbook_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_addressbook,
-       .marshal_record = __ctsvc_ipc_marshal_addressbook,
-       .get_primary_id = __ctsvc_ipc_marshal_addressbook_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_addressbook
 };
 
 
@@ -46,7 +44,7 @@ static int __ctsvc_ipc_unmarshal_addressbook(pims_ipc_data_h ipc_data, const cha
                if (ctsvc_ipc_unmarshal_int(ipc_data, &addressbook_p->mode) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -65,16 +63,10 @@ static int __ctsvc_ipc_marshal_addressbook(const contacts_record_h record, pims_
                if (ctsvc_ipc_marshal_int((addressbook_p->mode),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
 
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_addressbook_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_ADDRESSBOOK_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index 6902967..d877392 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_company(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_company(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_company_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_company_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_company,
-       .marshal_record = __ctsvc_ipc_marshal_company,
-       .get_primary_id = __ctsvc_ipc_marshal_company_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_company
 };
 
 
@@ -57,7 +55,7 @@ static int __ctsvc_ipc_unmarshal_company(pims_ipc_data_h ipc_data, const char* v
                if (ctsvc_ipc_unmarshal_string(ipc_data, &company_p->phonetic_name) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -86,14 +84,9 @@ static int __ctsvc_ipc_marshal_company(const contacts_record_h record, pims_ipc_
                if (ctsvc_ipc_marshal_string((company_p->phonetic_name),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_company_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_COMPANY_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 54dcf63..af67bfc 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_contact(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_contact(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_contact_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_contact_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_contact,
-       .marshal_record = __ctsvc_ipc_marshal_contact,
-       .get_primary_id = __ctsvc_ipc_marshal_contact_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_contact
 };
 
 static int __ctsvc_ipc_unmarshal_contact(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record)
@@ -79,7 +77,7 @@ static int __ctsvc_ipc_unmarshal_contact(pims_ipc_data_h ipc_data, const char* v
                if (ctsvc_ipc_unmarshal_child_list(ipc_data, (contacts_list_h*)&pcontact->extensions) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -116,31 +114,26 @@ static int __ctsvc_ipc_marshal_contact(const contacts_record_h record, pims_ipc_
                if (ctsvc_ipc_marshal_string((pcontact->message_alert),ipc_data) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_marshal_int((pcontact->changed_ver),ipc_data) != CONTACTS_ERROR_NONE) break;
 
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->name, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->note, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->company, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->numbers, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->emails, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->grouprelations, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->events, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->messengers, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->postal_addrs, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->urls, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->nicknames, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->profiles, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->relationships, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->images, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->extensions, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->name, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->note, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->company, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->numbers, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->emails, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->grouprelations, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->events, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->messengers, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->postal_addrs, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->urls, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->nicknames, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->profiles, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->relationships, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->images, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->extensions, ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_contact_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_CONTACT_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index f39efb9..a68d036 100644 (file)
 #define __CTSVC_IPC_DEFINE_H__
 
 #define CTSVC_IPC_SERVICE              "contacts_svc_ipc"
-#define CTSVC_IPC_SOCKET_PATH          "/tmp/."CTSVC_IPC_SERVICE
+#define CTSVC_IPC_SOCKET_BASE                          "/tmp/"
+#define CTSVC_IPC_SOCKET_PATH          CTSVC_IPC_SOCKET_BASE"."CTSVC_IPC_SERVICE
 
-#define CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION    "/tmp/."CTSVC_IPC_SERVICE"_for_subscribe"
+#define CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION    CTSVC_IPC_SOCKET_BASE"."CTSVC_IPC_SERVICE"_for_subscribe"
 #define CTSVC_IPC_SUBSCRIBE_MODULE               "ctsvc_ipc_subscribe_module"
 
 #define CTSVC_IPC_MODULE               "ctsvc_ipc_module"
index 7a44530..233658a 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_email(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_email(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_email_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_email_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_email,
-       .marshal_record = __ctsvc_ipc_marshal_email,
-       .get_primary_id = __ctsvc_ipc_marshal_email_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_email
 };
 
 
@@ -49,7 +47,7 @@ static int __ctsvc_ipc_unmarshal_email(pims_ipc_data_h ipc_data, const char* vie
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -71,14 +69,9 @@ static int __ctsvc_ipc_marshal_email(const contacts_record_h record, pims_ipc_da
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_email_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_EMAIL_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index e92c9b2..499a49f 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_event(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_event(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_event_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_event_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_event,
-       .marshal_record = __ctsvc_ipc_marshal_event,
-       .get_primary_id = __ctsvc_ipc_marshal_event_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_event
 };
 
 
@@ -49,7 +47,7 @@ static int __ctsvc_ipc_unmarshal_event(pims_ipc_data_h ipc_data, const char* vie
                if (ctsvc_ipc_unmarshal_bool(ipc_data, &event_p->is_leap_month) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -71,14 +69,9 @@ static int __ctsvc_ipc_marshal_event(const contacts_record_h record, pims_ipc_da
                if (ctsvc_ipc_marshal_bool((event_p->is_leap_month),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_event_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_EVENT_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 55c62db..19cea2b 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_extension(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_extension(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_extension_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_extension_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_extension,
-       .marshal_record = __ctsvc_ipc_marshal_extension,
-       .get_primary_id = __ctsvc_ipc_marshal_extension_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_extension
 };
 
 
@@ -57,7 +55,7 @@ static int __ctsvc_ipc_unmarshal_extension(pims_ipc_data_h ipc_data, const char*
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -87,15 +85,9 @@ static int __ctsvc_ipc_marshal_extension(const contacts_record_h record, pims_ip
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_extension_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_EXTENSION_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index 52c20ef..40c2b9b 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_group(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_group(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_group_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_group_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_group,
-       .marshal_record = __ctsvc_ipc_marshal_group,
-       .get_primary_id = __ctsvc_ipc_marshal_group_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_group
 };
 
 
@@ -52,7 +50,7 @@ static int __ctsvc_ipc_unmarshal_group(pims_ipc_data_h ipc_data, const char* vie
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -76,14 +74,9 @@ static int __ctsvc_ipc_marshal_group(const contacts_record_h record, pims_ipc_da
                if (ctsvc_ipc_marshal_string((group_p->image_thumbnail_path),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_group_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_GROUP_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 710733f..ce9fa8e 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_group_relation(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_group_relation(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_group_relation_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_group_relation_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_group_relation,
-       .marshal_record = __ctsvc_ipc_marshal_group_relation,
-       .get_primary_id = __ctsvc_ipc_marshal_group_relation_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_group_relation
 };
 
 
@@ -47,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_group_relation(pims_ipc_data_h ipc_data, const
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -67,14 +65,9 @@ static int __ctsvc_ipc_marshal_group_relation(const contacts_record_h record, pi
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_group_relation_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_GROUP_RELATION_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 0772f72..d7ceeca 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_image(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_image(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_image_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_image_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_image,
-       .marshal_record = __ctsvc_ipc_marshal_image,
-       .get_primary_id = __ctsvc_ipc_marshal_image_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_image
 };
 
 
@@ -48,7 +46,7 @@ static int __ctsvc_ipc_unmarshal_image(pims_ipc_data_h ipc_data, const char* vie
                if (ctsvc_ipc_unmarshal_bool(ipc_data, &image_p->is_default) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -69,14 +67,9 @@ static int __ctsvc_ipc_marshal_image(const contacts_record_h record, pims_ipc_da
                if (ctsvc_ipc_marshal_bool((image_p->is_default),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_image_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_IMAGE_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 881bec0..75354f5 100644 (file)
@@ -17,7 +17,7 @@
  *
  */
 
-#include <stdlib.h> //calloc
+#include <stdlib.h>
 #include <string.h>
 #include "ctsvc_ipc_marshal.h"
 #include "contacts_record.h"
@@ -26,6 +26,7 @@
 #include "contacts_filter.h"
 #include "contacts_list.h"
 #include "ctsvc_list.h"
+#include "ctsvc_handle.h"
 
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_contact_plugin_cb;
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_my_profile_plugin_cb;
@@ -34,12 +35,10 @@ extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_group_plugin_cb;
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_person_plugin_cb;
 #ifdef ENABLE_LOG_FEATURE
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_phonelog_plugin_cb;
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_result_plugin_cb;
-#ifdef ENABLE_SIM_FEATURE
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_sdn_plugin_cb;
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_speeddial_plugin_cb;
-#endif // ENABLE_SIM_FEATURE
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_updated_info_plugin_cb;
 
 extern ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_simple_contact_plugin_cb;
@@ -72,8 +71,7 @@ static int __ctsvc_ipc_marshal_attribute_filter(const ctsvc_attribute_filter_s*
 
 static ctsvc_ipc_marshal_record_plugin_cb_s* __ctsvc_ipc_marshal_get_plugin_cb(ctsvc_record_type_e type)
 {
-       switch (type)
-       {
+       switch (type) {
        case CTSVC_RECORD_ADDRESSBOOK:
                return (&_ctsvc_ipc_record_addressbook_plugin_cb);
        case CTSVC_RECORD_GROUP:
@@ -89,13 +87,11 @@ static ctsvc_ipc_marshal_record_plugin_cb_s* __ctsvc_ipc_marshal_get_plugin_cb(c
 #ifdef ENABLE_LOG_FEATURE
        case CTSVC_RECORD_PHONELOG:
                return (&_ctsvc_ipc_record_phonelog_plugin_cb);
-#endif // ENABLE_LOG_FEATURE
-#ifdef ENABLE_SIM_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        case CTSVC_RECORD_SPEEDDIAL:
                return (&_ctsvc_ipc_record_speeddial_plugin_cb);
        case CTSVC_RECORD_SDN:
                return (&_ctsvc_ipc_record_sdn_plugin_cb);
-#endif // ENABLE_SIM_FEATURE
        case CTSVC_RECORD_RESULT:
                return (&_ctsvc_ipc_record_result_plugin_cb);
        case CTSVC_RECORD_SIMPLE_CONTACT:
@@ -144,7 +140,7 @@ static void __ctsvc_ipc_unmarshal_composite_filter_free(ctsvc_composite_filter_s
 {
        if (filter->filters) {
                GSList *cursor = NULL;
-               for(cursor=filter->filters;cursor;cursor=cursor->next) {
+               for (cursor=filter->filters;cursor;cursor=cursor->next) {
                        ctsvc_filter_s *src = (ctsvc_filter_s*)cursor->data;
                        if (src->filter_type == CTSVC_FILTER_COMPOSITE)
                                __ctsvc_ipc_unmarshal_composite_filter_free((ctsvc_composite_filter_s *)src);
@@ -167,7 +163,6 @@ static void __ctsvc_ipc_unmarshal_composite_filter_free(ctsvc_composite_filter_s
 
 static int __ctsvc_ipc_unmarshal_composite_filter(const pims_ipc_data_h ipc_data, ctsvc_composite_filter_s* filter)
 {
-       int ret = CONTACTS_ERROR_NONE;
        unsigned int size = 0;
        char* str = NULL;
        int count =0, i=0;
@@ -176,240 +171,187 @@ static int __ctsvc_ipc_unmarshal_composite_filter(const pims_ipc_data_h ipc_data
 
        filter->filter_type = CTSVC_FILTER_COMPOSITE;
 
-       // view_uri
+       /* view_uri */
        str = (char*)pims_ipc_data_get(ipc_data,&size);
        filter->view_uri = (char*)SAFE_STRDUP(str);
 
-       // filters
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&count) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
+       /* filters */
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data,&count)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       for(i=0;i<count;i++)
-       {
-               if (ctsvc_ipc_unmarshal_int(ipc_data,(int*)&filter_type) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+       for (i=0;i<count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data, (int*)&filter_type)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                       return CONTACTS_ERROR_IPC;
                }
-               if (filter_type == CTSVC_FILTER_COMPOSITE)
-               {
-                       ctsvc_composite_filter_s* com_filter = NULL;
+               if (filter_type == CTSVC_FILTER_COMPOSITE) {
+                       ctsvc_composite_filter_s *com_filter = NULL;
                        com_filter = (ctsvc_composite_filter_s*)calloc(1,sizeof(ctsvc_composite_filter_s));
-                       if (com_filter == NULL)
-                       {
-                               CTS_ERR("calloc fail");
-                               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                               goto ERROR_RETURN;
+                       if (com_filter == NULL) {
+                               CTS_ERR("calloc() Fail");
+                               __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                               return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
-                       if (__ctsvc_ipc_unmarshal_composite_filter(ipc_data, com_filter) != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                               ret = CONTACTS_ERROR_INVALID_PARAMETER;
+                       if (CONTACTS_ERROR_NONE != __ctsvc_ipc_unmarshal_composite_filter(ipc_data, com_filter)) {
+                               CTS_ERR("__ctsvc_ipc_unmarshal_composite_filter() Fail");
                                CONTACTS_FREE(com_filter);
-                               goto ERROR_RETURN;
+                               __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                               return CONTACTS_ERROR_IPC;
                        }
-                       filter->filters = g_slist_append(filter->filters,com_filter);
+                       filter->filters = g_slist_append(filter->filters, com_filter);
                }
-               else
-               {
-                       ctsvc_attribute_filter_s* attr_filter = NULL;
+               else {
+                       ctsvc_attribute_filter_s *attr_filter = NULL;
                        attr_filter = (ctsvc_attribute_filter_s*)calloc(1,sizeof(ctsvc_attribute_filter_s));
-                       if (attr_filter == NULL)
-                       {
-                               CTS_ERR("calloc fail");
-                               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                               goto ERROR_RETURN;
+                       if (attr_filter == NULL) {
+                               CTS_ERR("calloc() Fail");
+                               __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                               return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
-                       if (__ctsvc_ipc_unmarshal_attribute_filter(ipc_data, filter_type, attr_filter) != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                               ret =  CONTACTS_ERROR_INVALID_PARAMETER;
+                       if (CONTACTS_ERROR_NONE != __ctsvc_ipc_unmarshal_attribute_filter(ipc_data, filter_type, attr_filter)) {
+                               CTS_ERR("__ctsvc_ipc_unmarshal_attribute_filter() Fail");
                                CONTACTS_FREE(attr_filter);
-                               goto ERROR_RETURN;
+                               __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                               return CONTACTS_ERROR_IPC;
                        }
                        filter->filters = g_slist_append(filter->filters,attr_filter);
                }
        }
 
-       // filters
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&count) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret =  CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       /* filters */
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data, &count)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+               __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+               return CONTACTS_ERROR_IPC;
        }
 
-       for(i=0;i<count;i++)
-       {
-               if (ctsvc_ipc_unmarshal_int(ipc_data,(int*)&op) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret =  CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+       for (i=0;i<count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data, (int *)&op)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       __ctsvc_ipc_unmarshal_composite_filter_free(filter);
+                       return CONTACTS_ERROR_IPC;
                }
                filter->filter_ops = g_slist_append(filter->filter_ops, (void*)op);
        }
 
-       // properties //property_count
+       /* properties  property_count */
        filter->properties = (property_info_s *)ctsvc_view_get_all_property_infos(filter->view_uri, &filter->property_count);
 
        return CONTACTS_ERROR_NONE;
-
-ERROR_RETURN:
-       __ctsvc_ipc_unmarshal_composite_filter_free(filter);
-       return ret;
 }
 
 static int __ctsvc_ipc_marshal_composite_filter(const ctsvc_composite_filter_s* filter, pims_ipc_data_h ipc_data)
 {
-       if (ctsvc_ipc_marshal_int((filter->filter_type),ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int((filter->filter_type),ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       // view_uri
+       /* view_uri */
        int length = strlen(filter->view_uri);
-       if (pims_ipc_data_put(ipc_data,(void*)filter->view_uri,length+1) < 0)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (pims_ipc_data_put(ipc_data,(void*)filter->view_uri,length+1) < 0) {
+               CTS_ERR("pims_ipc_data_put() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       // filter->filters
-       if (filter->filters)
-       {
+       /* filter->filters */
+       if (filter->filters) {
                int count = g_slist_length(filter->filters);
                GSList *cursor = filter->filters;
                ctsvc_filter_s* child_filter;
 
-               if (ctsvc_ipc_marshal_int(count,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(count,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               while (cursor)
-               {
+               while (cursor) {
                        child_filter = (ctsvc_filter_s*)cursor->data;
 
-                       if (child_filter->filter_type == CTSVC_FILTER_COMPOSITE)
-                       {
-                               if (__ctsvc_ipc_marshal_composite_filter((ctsvc_composite_filter_s*)child_filter, ipc_data) != CONTACTS_ERROR_NONE)
-                               {
-                                       CTS_ERR("__ctsvc_ipc_marshal_composite_filter fail");
+                       if (child_filter->filter_type == CTSVC_FILTER_COMPOSITE) {
+                               if (CONTACTS_ERROR_NONE != __ctsvc_ipc_marshal_composite_filter((ctsvc_composite_filter_s*)child_filter, ipc_data)) {
+                                       CTS_ERR("__ctsvc_ipc_marshal_composite_filter() Fail");
                                        return CONTACTS_ERROR_INVALID_PARAMETER;
                                }
                        }
-                       else
-                       {
-                               if (__ctsvc_ipc_marshal_attribute_filter((ctsvc_attribute_filter_s*)child_filter, ipc_data) != CONTACTS_ERROR_NONE)
-                               {
-                                       CTS_ERR("__ctsvc_ipc_marshal_attribute_filter fail");
+                       else {
+                               if (CONTACTS_ERROR_NONE != __ctsvc_ipc_marshal_attribute_filter((ctsvc_attribute_filter_s*)child_filter, ipc_data)) {
+                                       CTS_ERR("__ctsvc_ipc_marshal_attribute_filter() Fail");
                                        return CONTACTS_ERROR_INVALID_PARAMETER;
                                }
                        }
                        cursor = g_slist_next(cursor);
                }
        }
-       else
-       {
-               if (ctsvc_ipc_marshal_int(0,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       else {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(0,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       if (filter->filter_ops)
-       {
+       if (filter->filter_ops) {
                int count = g_slist_length(filter->filter_ops);
                GSList *cursor = filter->filter_ops;
 
-               if (ctsvc_ipc_marshal_int(count,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(count,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               while (cursor)
-               {
+               while (cursor) {
                        contacts_filter_operator_e op = (contacts_filter_operator_e)cursor->data;
 
-                       if (ctsvc_ipc_marshal_int(op,ipc_data) != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("_ctsvc_ipc_marshal fail");
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(op,ipc_data)) {
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                return CONTACTS_ERROR_INVALID_PARAMETER;
                        }
 
                        cursor = g_slist_next(cursor);
                }
        }
-       else
-       {
-               if (ctsvc_ipc_marshal_int(0,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       else {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(0,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       // properties //property_count
-
        return CONTACTS_ERROR_NONE;
 }
 
 static int __ctsvc_ipc_unmarshal_attribute_filter(const pims_ipc_data_h ipc_data, const ctsvc_filter_type_e filter_type, ctsvc_attribute_filter_s* filter)
 {
        filter->filter_type = filter_type;
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&filter->property_id) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data,&filter->property_id)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&filter->match) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data,&filter->match)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       switch(filter->filter_type)
-       {
+       switch(filter->filter_type) {
        case CTSVC_FILTER_STR:
-               if (ctsvc_ipc_unmarshal_string(ipc_data,&filter->value.s) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_string(ipc_data,&filter->value.s)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_string() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_INT:
-               if (ctsvc_ipc_unmarshal_int(ipc_data,&filter->value.i) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data,&filter->value.i)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_BOOL:
-               if (ctsvc_ipc_unmarshal_bool(ipc_data,&filter->value.b) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_bool(ipc_data,&filter->value.b)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_bool() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_DOUBLE:
-               if (ctsvc_ipc_unmarshal_double(ipc_data,&filter->value.d) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
-               break;
        case CTSVC_FILTER_LLI:
-               if (ctsvc_ipc_unmarshal_lli(ipc_data,&filter->value.l) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
-               break;
        default:
                break;
        }
@@ -418,58 +360,39 @@ static int __ctsvc_ipc_unmarshal_attribute_filter(const pims_ipc_data_h ipc_data
 
 static int __ctsvc_ipc_marshal_attribute_filter(const ctsvc_attribute_filter_s* filter, pims_ipc_data_h ipc_data)
 {
-       if (ctsvc_ipc_marshal_int((filter->filter_type),ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int((filter->filter_type),ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_marshal_int((filter->property_id),ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int((filter->property_id),ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_marshal_int((filter->match),ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int((filter->match),ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       switch(filter->filter_type)
-       {
+       switch(filter->filter_type) {
        case CTSVC_FILTER_STR:
-               if (ctsvc_ipc_marshal_string((filter->value.s),ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_string((filter->value.s),ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_string() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_INT:
-               if (ctsvc_ipc_marshal_int((filter->value.i),ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int((filter->value.i),ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_BOOL:
-               if (ctsvc_ipc_marshal_bool((filter->value.b),ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_bool((filter->value.b),ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_bool() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                break;
        case CTSVC_FILTER_DOUBLE:
-               if (ctsvc_ipc_marshal_double((filter->value.d),ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
-               break;
        case CTSVC_FILTER_LLI:
-               if (ctsvc_ipc_marshal_lli((filter->value.l),ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
-               break;
        default:
                break;
        }
@@ -477,6 +400,44 @@ static int __ctsvc_ipc_marshal_attribute_filter(const ctsvc_attribute_filter_s*
        return CONTACTS_ERROR_NONE;
 }
 
+int ctsvc_ipc_marshal_handle(const contacts_h contact, pims_ipc_data_h ipc_data)
+{
+       int ret;
+       ctsvc_base_s *base = (ctsvc_base_s *)contact;
+
+       ret = ctsvc_ipc_marshal_string(base->zone_name, ipc_data);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_marshal_string() Fail(%d)", ret);
+
+       ret = ctsvc_ipc_marshal_int(base->version, ipc_data);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_marshal_int() Fail(%d)", ret);
+
+       ret = ctsvc_ipc_marshal_int(base->connection_count, ipc_data);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_marshal_int() Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_ipc_unmarshal_handle(const pims_ipc_data_h ipc_data, contacts_h *pcontact)
+{
+       int ret;
+       ctsvc_base_s *base = NULL;
+
+       ret = ctsvc_handle_create(pcontact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_handle_create() Fail(%d)", ret);
+
+       base = (ctsvc_base_s *)*pcontact;
+
+       ret = ctsvc_ipc_unmarshal_string(ipc_data, &(base->zone_name));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_unmarshal_string() Fail(%d)", ret);
+
+       ret = ctsvc_ipc_unmarshal_int(ipc_data, &(base->version));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+
+       ret = ctsvc_ipc_unmarshal_int(ipc_data, &(base->connection_count));
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
 
 int ctsvc_ipc_unmarshal_record(const pims_ipc_data_h ipc_data, contacts_record_h* precord)
 {
@@ -485,10 +446,10 @@ int ctsvc_ipc_unmarshal_record(const pims_ipc_data_h ipc_data, contacts_record_h
        ctsvc_record_s *precord_common = NULL;
        ctsvc_ipc_marshal_record_plugin_cb_s *plugin_cb;
 
-       RETVM_IF( NULL == precord || NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+       RETVM_IF(NULL == precord || NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
 
-       if (ctsvc_ipc_unmarshal_record_common(ipc_data, &common) != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_ipc_unmarshal_common fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record_common(ipc_data, &common)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_record_common() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
@@ -500,8 +461,8 @@ int ctsvc_ipc_unmarshal_record(const pims_ipc_data_h ipc_data, contacts_record_h
        }
 
        ret = contacts_record_create(common.view_uri, precord);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("create activity record fail");
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("contacts_record_create() Fail");
                free(common.properties_flags);
                return ret;
        }
@@ -512,8 +473,7 @@ int ctsvc_ipc_unmarshal_record(const pims_ipc_data_h ipc_data, contacts_record_h
        precord_common->property_flag = common.property_flag;
 
        ret = plugin_cb->unmarshal_record(ipc_data, common.view_uri, *precord);
-       if( CONTACTS_ERROR_NONE != ret )
-       {
+       if (CONTACTS_ERROR_NONE != ret) {
                contacts_record_destroy(*precord,true);
                *precord = NULL;
                return CONTACTS_ERROR_IPC;
@@ -528,9 +488,8 @@ int ctsvc_ipc_marshal_record(const contacts_record_h record, pims_ipc_data_h ipc
 
        ctsvc_record_s *common = (ctsvc_record_s*)(record);
 
-       if (ctsvc_ipc_marshal_record_common(common, ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("ctsvc_ipc_marshal_common fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_record_common(common, ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_record_common() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
@@ -543,22 +502,6 @@ int ctsvc_ipc_marshal_record(const contacts_record_h record, pims_ipc_data_h ipc
        return ret;
 }
 
-int ctsvc_ipc_marshal_record_get_primary_id(const contacts_record_h record,
-               unsigned int *property_id, int *id)
-{
-       RETVM_IF(NULL == record || NULL == property_id || NULL == id, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       ctsvc_record_s *temp = (ctsvc_record_s*)(record);
-
-       ctsvc_ipc_marshal_record_plugin_cb_s *plugin_cb = __ctsvc_ipc_marshal_get_plugin_cb(temp->r_type);
-
-       RETVM_IF(NULL == plugin_cb || NULL == plugin_cb->get_primary_id, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       int ret = plugin_cb->get_primary_id(record, property_id,id);
-
-       return ret;
-}
-
 int ctsvc_ipc_unmarshal_string(const pims_ipc_data_h ipc_data, char** ppbufchar)
 {
        int ret = CONTACTS_ERROR_NONE;
@@ -573,14 +516,13 @@ int ctsvc_ipc_unmarshal_string(const pims_ipc_data_h ipc_data, char** ppbufchar)
        RETV_IF(ppbufchar==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
 
        tmp = pims_ipc_data_get(ipc_data,&size);
-       if ( tmp == NULL){
-               CTS_ERR("pims_ipc_data_get string fail");
+       if (tmp == NULL) {
+               CTS_ERR("pims_ipc_data_get() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
        length = *(int*)tmp;
 
-       if(length == -1)
-       {
+       if (length == -1) {
                ret = CONTACTS_ERROR_NONE;
                CTS_VERBOSE("string is null");
                *ppbufchar = NULL;
@@ -588,8 +530,7 @@ int ctsvc_ipc_unmarshal_string(const pims_ipc_data_h ipc_data, char** ppbufchar)
        }
 
        str = (char*)pims_ipc_data_get(ipc_data,&size);
-       if (str)
-       {
+       if (str) {
                *ppbufchar = SAFE_STRDUP(str);
        }
 
@@ -603,13 +544,11 @@ int ctsvc_ipc_unmarshal_int(const pims_ipc_data_h data, int *pout)
 
        unsigned int size = 0;
        void *tmp = pims_ipc_data_get(data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get int fail");
+       if (tmp == NULL) {
+               CTS_ERR("pims_ipc_data_get() Fail");
                return CONTACTS_ERROR_NO_DATA;
        }
-       else
-       {
+       else {
                *pout = *(int*)tmp;
        }
        return CONTACTS_ERROR_NONE;
@@ -622,13 +561,11 @@ int ctsvc_ipc_unmarshal_unsigned_int(const pims_ipc_data_h data, unsigned int *p
 
        unsigned int size = 0;
        void *tmp = pims_ipc_data_get(data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get unsigned int fail");
+       if (tmp == NULL) {
+               CTS_ERR("pims_ipc_data_get() Fail");
                return CONTACTS_ERROR_NO_DATA;
        }
-       else
-       {
+       else {
                *pout = *(unsigned int*)tmp;
        }
        return CONTACTS_ERROR_NONE;
@@ -641,75 +578,16 @@ int ctsvc_ipc_unmarshal_bool(const pims_ipc_data_h data, bool *pout)
 
        unsigned int size = 0;
        void *tmp = pims_ipc_data_get(data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get bool fail");
+       if (tmp == NULL) {
+               CTS_ERR("pims_ipc_data_get() Fail");
                return CONTACTS_ERROR_NO_DATA;
        }
-       else
-       {
+       else {
                *pout = *(bool*)tmp;
        }
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_ipc_unmarshal_lli(const pims_ipc_data_h data, long long int *pout)
-{
-       RETV_IF(data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(pout==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       unsigned int size = 0;
-       void *tmp = pims_ipc_data_get(data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get lli fail");
-               return CONTACTS_ERROR_NO_DATA;
-       }
-       else
-       {
-               *pout = *(long long int*)tmp;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_ipc_unmarshal_long(const pims_ipc_data_h data, long *pout)
-{
-       RETV_IF(data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(pout==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       unsigned int size = 0;
-       void *tmp = pims_ipc_data_get(data, &size);
-       if ( tmp == NULL )
-       {
-               CTS_ERR("pims_ipc_data_get long fail");
-               return CONTACTS_ERROR_NO_DATA;
-       }
-       else
-       {
-               *pout = *(long*)tmp;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_ipc_unmarshal_double(const pims_ipc_data_h data, double *pout)
-{
-       RETV_IF(data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(pout==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       unsigned int size = 0;
-       void* tmp = pims_ipc_data_get(data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get double fail");
-               return CONTACTS_ERROR_NO_DATA;
-       }
-       else
-       {
-               *pout = *(double*)tmp;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
 int ctsvc_ipc_unmarshal_record_common(const pims_ipc_data_h ipc_data, ctsvc_record_s* common)
 {
        void *tmp = NULL;
@@ -718,36 +596,48 @@ int ctsvc_ipc_unmarshal_record_common(const pims_ipc_data_h ipc_data, ctsvc_reco
 
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_NO_DATA);
        tmp = pims_ipc_data_get(ipc_data,&size);
-       if ( tmp == NULL)
-       {
-               CTS_ERR("pims_ipc_data_get fail");
+       if (tmp == NULL) {
+               CTS_ERR("pims_ipc_data_get() Fail");
                return CONTACTS_ERROR_NO_DATA;
        }
-       else
-       {
+       else {
                common->r_type = *(ctsvc_record_type_e*)tmp;
        }
 
        str = (char*)pims_ipc_data_get(ipc_data,&size);
+       if (NULL == str) {
+               CTS_ERR("pims_ipc_data_get() Fail");
+               return CONTACTS_ERROR_NO_DATA;
+       }
        common->view_uri = ctsvc_view_get_uri(str);
-       ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &(common->property_max_count));
 
-       if (common->property_max_count > 0) {
+       tmp = pims_ipc_data_get(ipc_data,&size);
+       if (NULL == tmp) {
+               CTS_ERR("pims_ipc_data_get() Fail");
+               return CONTACTS_ERROR_NO_DATA;
+       }
+       common->property_max_count = *(unsigned int*)tmp;
+
+       if (0 < common->property_max_count) {
                unsigned char *tmp_properties_flags;
                tmp_properties_flags = (unsigned char*)pims_ipc_data_get(ipc_data, &size);
                if (NULL == tmp_properties_flags) {
-                       CTS_ERR("pims_ipc_data_get() return NULL");
-                       return CONTACTS_ERROR_IPC;
+                       CTS_ERR("pims_ipc_data_get() Fail");
+                       return CONTACTS_ERROR_NO_DATA;
                }
+
                common->properties_flags  = calloc(common->property_max_count, sizeof(char));
                if (common->properties_flags == NULL) {
-                       CTS_ERR("calloc fail");
+                       CTS_ERR("calloc() Fail");
                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
                memcpy(common->properties_flags, tmp_properties_flags, sizeof(char)*common->property_max_count);
        }
        tmp = pims_ipc_data_get(ipc_data,&size);
-       RETVM_IF(NULL == tmp, CONTACTS_ERROR_NO_DATA, "pims_ipc_data_get() return NULL");
+       if (NULL == tmp) {
+               CTS_ERR("pims_ipc_data_get() Fail");
+               return CONTACTS_ERROR_NO_DATA;
+       }
        common->property_flag = *(unsigned char*)tmp;
 
        return CONTACTS_ERROR_NONE;
@@ -759,26 +649,21 @@ int ctsvc_ipc_marshal_string(const char* bufchar, pims_ipc_data_h ipc_data)
 
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if( bufchar != NULL)
-       {
+       if (bufchar) {
                int length = strlen(bufchar);
-               if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0)
-               {
+               if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0) {
                        ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                }
 
-               if ( pims_ipc_data_put(ipc_data,(void*)bufchar,length+1) != 0)
-               {
+               if (pims_ipc_data_put(ipc_data,(void*)bufchar,length+1) != 0) {
                        ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                        return ret;
                }
        }
-       else
-       {
+       else {
                int length = -1;
 
-               if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0)
-               {
+               if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0) {
                        ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                }
        }
@@ -789,8 +674,7 @@ int ctsvc_ipc_marshal_int(const int in, pims_ipc_data_h ipc_data)
 {
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(int)) != 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(int)) != 0) {
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
        return CONTACTS_ERROR_NONE;
@@ -800,8 +684,7 @@ int ctsvc_ipc_marshal_unsigned_int(const unsigned int in, pims_ipc_data_h ipc_da
 {
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(unsigned int)) != 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(unsigned int)) != 0) {
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
        return CONTACTS_ERROR_NONE;
@@ -811,41 +694,7 @@ int ctsvc_ipc_marshal_bool(const bool in, pims_ipc_data_h ipc_data)
 {
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(bool)) != 0)
-       {
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_ipc_marshal_lli(const long long int in, pims_ipc_data_h ipc_data)
-{
-       RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(long long int)) != 0)
-       {
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_ipc_marshal_long(const long in, pims_ipc_data_h ipc_data)
-{
-       RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(long)) != 0)
-       {
-               return CONTACTS_ERROR_OUT_OF_MEMORY;
-       }
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_ipc_marshal_double(const double in, pims_ipc_data_h ipc_data)
-{
-       RETV_IF(ipc_data==NULL,CONTACTS_ERROR_INVALID_PARAMETER);
-
-       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(double)) != 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&in,sizeof(bool)) != 0) {
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
        return CONTACTS_ERROR_NONE;
@@ -857,161 +706,143 @@ int ctsvc_ipc_marshal_record_common(const ctsvc_record_s* common, pims_ipc_data_
        RETV_IF(NULL == common, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if(pims_ipc_data_put(ipc_data,(void*)&common->r_type,sizeof(int)) < 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&common->r_type,sizeof(int)) < 0) {
                return CONTACTS_ERROR_NO_DATA;
        }
 
        int length = strlen(common->view_uri);
-       if (pims_ipc_data_put(ipc_data,(void*)common->view_uri,length+1) < 0)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (pims_ipc_data_put(ipc_data,(void*)common->view_uri,length+1) < 0) {
+               CTS_ERR("pims_ipc_data_put() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       if (pims_ipc_data_put(ipc_data,(void*)&common->property_max_count,sizeof(unsigned int)) < 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&common->property_max_count,sizeof(unsigned int)) < 0) {
                return CONTACTS_ERROR_NO_DATA;
        }
 
-       if (0 < common->property_max_count)
-       {
-               if (pims_ipc_data_put(ipc_data,(void*)common->properties_flags,sizeof(unsigned char)*common->property_max_count) < 0)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (0 < common->property_max_count) {
+               if (pims_ipc_data_put(ipc_data,(void*)common->properties_flags,sizeof(unsigned char)*common->property_max_count) < 0) {
+                       CTS_ERR("pims_ipc_data_put() Fail");
                        return CONTACTS_ERROR_NO_DATA;
                }
        }
 
-       if (pims_ipc_data_put(ipc_data,(void*)&common->property_flag,sizeof(char)) < 0)
-       {
+       if (pims_ipc_data_put(ipc_data,(void*)&common->property_flag,sizeof(char)) < 0) {
                return CONTACTS_ERROR_NO_DATA;
        }
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_ipc_unmarshal_query(const pims_ipc_data_h ipc_data, contacts_query_h *query)
+int ctsvc_ipc_unmarshal_query(const pims_ipc_data_h ipc_data, contacts_query_h *out_query)
 {
-       ctsvc_query_s *que = NULL;
+       ctsvc_query_s *query = NULL;
        unsigned int size = 0;
        char* str = NULL;
        unsigned int count = 0, i = 0;
        int ret = CONTACTS_ERROR_NONE;
 
-       RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(NULL == out_query, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       // view_uri
-       str = (char*)pims_ipc_data_get(ipc_data,&size);
+       /* view_uri */
+       str = (char*)pims_ipc_data_get(ipc_data, &size);
 
-       ret = contacts_query_create(str, query);
-       if (ret != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("contacts_query_create fail");
+       ret = contacts_query_create(str, out_query);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("contacts_query_create() Fail");
                return ret;
        }
+       query = (ctsvc_query_s *)*out_query;
 
-       que = (ctsvc_query_s *) *query;
-
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&count) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &count)) {
+               CTS_ERR("contacts_query_create() Fail");
+               contacts_query_destroy(*out_query);
+               *out_query = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
-       if (count == 0)
-       {
-               que->filter = NULL;
+       if (0 == count) {
+               query->filter = NULL;
        }
-       else
-       {
+       else {
                ctsvc_composite_filter_s *filter = NULL;
                filter = (ctsvc_composite_filter_s *)calloc(1, sizeof(ctsvc_composite_filter_s));
                if (NULL == filter) {
-                       CTS_ERR("calloc fail");
-                       ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                       goto ERROR_RETURN;
+                       CTS_ERR("calloc() Fail");
+                       contacts_query_destroy(*out_query);
+                       *out_query = NULL;
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
                filter->filter_type = CTSVC_FILTER_COMPOSITE;
-               filter->properties = (property_info_s *)ctsvc_view_get_all_property_infos(que->view_uri, &filter->property_count);
-               que->filter = filter;
-
-               // for filter_type
-               if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &count) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+               filter->properties = (property_info_s *)ctsvc_view_get_all_property_infos(query->view_uri, &filter->property_count);
+               query->filter = filter;
+
+               /* for filter_type */
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &count)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
+                       contacts_query_destroy(*out_query);
+                       *out_query = NULL;
+                       return CONTACTS_ERROR_IPC;
                }
 
-               if (__ctsvc_ipc_unmarshal_composite_filter(ipc_data,que->filter) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+               if (CONTACTS_ERROR_NONE != __ctsvc_ipc_unmarshal_composite_filter(ipc_data, query->filter)) {
+                       CTS_ERR("__ctsvc_ipc_unmarshal_composite_filter() Fail");
+                       contacts_query_destroy(*out_query);
+                       *out_query = NULL;
+                       return CONTACTS_ERROR_IPC;
                }
        }
 
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(que->projection_count)) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &(query->projection_count))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
+               contacts_query_destroy(*out_query);
+               *out_query = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
-       if (que->projection_count > 0)
-       {
-               que->projection = (unsigned int*)malloc(sizeof(unsigned int)*que->projection_count);
-               if (que->projection == NULL)
-               {
-                       CTS_ERR("malloc fail");
-                       ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                       goto ERROR_RETURN;
+       if (0 < query->projection_count) {
+               query->projection = (unsigned int*)malloc(sizeof(unsigned int)*query->projection_count);
+               if (query->projection == NULL) {
+                       CTS_ERR("malloc() Fail");
+                       contacts_query_destroy(*out_query);
+                       *out_query = NULL;
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
-               for(i=0;i<que->projection_count;i++)
-               {
-                       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(que->projection[i])) != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                               goto ERROR_RETURN;
+               for (i=0;i<query->projection_count;i++) {
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(query->projection[i]))) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
+                               contacts_query_destroy(*out_query);
+                               *out_query = NULL;
+                               return CONTACTS_ERROR_IPC;
                        }
                }
        }
-       else
-       {
-               que->projection = NULL;
+       else {
+               query->projection = NULL;
        }
 
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(que->sort_property_id)) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(query->sort_property_id))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
+               contacts_query_destroy(*out_query);
+               *out_query = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
-       if (ctsvc_ipc_unmarshal_bool(ipc_data,&(que->sort_asc)) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_bool(ipc_data,&(query->sort_asc))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_bool() Fail");
+               contacts_query_destroy(*out_query);
+               *out_query = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
-       if (ctsvc_ipc_unmarshal_bool(ipc_data,&(que->distinct)) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_bool(ipc_data,&(query->distinct))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_bool() Fail");
+               contacts_query_destroy(*out_query);
+               *out_query = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
        return CONTACTS_ERROR_NONE;
-
-ERROR_RETURN:
-       contacts_query_destroy(*query);
-       *query = NULL;
-
-       return ret;
 }
 
 int ctsvc_ipc_marshal_query(const contacts_query_h query, pims_ipc_data_h ipc_data)
@@ -1024,71 +855,57 @@ int ctsvc_ipc_marshal_query(const contacts_query_h query, pims_ipc_data_h ipc_da
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
        que = (ctsvc_query_s *)query;
 
-       //view_uri
+       /* view_uri */
        length = strlen(que->view_uri);
-       if (pims_ipc_data_put(ipc_data,(void*)que->view_uri,length+1) < 0)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (pims_ipc_data_put(ipc_data,(void*)que->view_uri,length+1) < 0) {
+               CTS_ERR("pims_ipc_data_put() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       if (que->filter)
-       {
-               if (ctsvc_ipc_marshal_int(1,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (que->filter) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(1,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
-               if (__ctsvc_ipc_marshal_composite_filter(que->filter,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != __ctsvc_ipc_marshal_composite_filter(que->filter,ipc_data)) {
+                       CTS_ERR("__ctsvc_ipc_marshal_composite_filter() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else
-       {
-               if (ctsvc_ipc_marshal_int(0,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       else {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(0,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       if (ctsvc_ipc_marshal_unsigned_int(que->projection_count,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_unsigned_int(que->projection_count,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_unsigned_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       for(i=0;i<que->projection_count;i++)
-       {
-               if (ctsvc_ipc_marshal_unsigned_int(que->projection[i],ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+       for (i=0;i<que->projection_count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_unsigned_int(que->projection[i],ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_unsigned_int() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       if (ctsvc_ipc_marshal_unsigned_int(que->sort_property_id,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_unsigned_int(que->sort_property_id,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_unsigned_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       if (ctsvc_ipc_marshal_bool(que->sort_asc,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_bool(que->sort_asc,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_bool() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       if (ctsvc_ipc_marshal_bool(que->distinct,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_bool(que->distinct,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_bool() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       //properties // property_count
-
        return CONTACTS_ERROR_NONE;
 }
 
@@ -1097,76 +914,64 @@ int ctsvc_ipc_unmarshal_list(const pims_ipc_data_h ipc_data, contacts_list_h* li
        int count = 0;
        unsigned int deleted_count = 0;
        contacts_record_h record;
-       int ret = CONTACTS_ERROR_NONE;
 
        RETV_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (contacts_list_create(list) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("contacts_list_create fail");
+       if (CONTACTS_ERROR_NONE != contacts_list_create(list)) {
+               CTS_ERR("contacts_list_create() Fail");
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&(count)) != CONTACTS_ERROR_NONE)
-       {
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data, &(count))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                contacts_list_destroy(*list, true);
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               return CONTACTS_ERROR_INVALID_PARAMETER;
+               *list = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
        unsigned int i = 0;
-       for(i=0;i<count;i++)
-       {
-               if (ctsvc_ipc_unmarshal_record(ipc_data,&record) != CONTACTS_ERROR_NONE )
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+       for (i=0;i<count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record(ipc_data, &record)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
+                       contacts_list_destroy(*list, true);
+                       *list = NULL;
+                       return CONTACTS_ERROR_IPC;
                }
 
-               if (contacts_list_add(*list,record) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("contacts_list_add fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+               if (CONTACTS_ERROR_NONE != contacts_list_add(*list, record)) {
+                       CTS_ERR("contacts_list_add() Fail");
+                       contacts_list_destroy(*list, true);
+                       *list = NULL;
+                       return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&deleted_count) != CONTACTS_ERROR_NONE) {
-               CTS_ERR("_ctsvc_ipc_unmarshal fail");
-               ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               goto ERROR_RETURN;
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &deleted_count)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
+               contacts_list_destroy(*list, true);
+               *list = NULL;
+               return CONTACTS_ERROR_IPC;
        }
 
        i = 0;
-       for(i=0;i<deleted_count;i++)
-       {
-               if (ctsvc_ipc_unmarshal_record(ipc_data,&record) != CONTACTS_ERROR_NONE )
-               {
-                       CTS_ERR("_ctsvc_ipc_unmarshal fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+       for (i=0;i<deleted_count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record(ipc_data, &record)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
+                       contacts_list_destroy(*list, true);
+                       *list = NULL;
+                       return CONTACTS_ERROR_IPC;
                }
 
-               if (ctsvc_list_append_deleted_record(*list,record) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("contacts_list_add fail");
-                       ret = CONTACTS_ERROR_INVALID_PARAMETER;
-                       goto ERROR_RETURN;
+               if (CONTACTS_ERROR_NONE != ctsvc_list_append_deleted_record(*list, record)) {
+                       CTS_ERR("ctsvc_list_append_deleted_record() Fail");
+                       contacts_list_destroy(*list, true);
+                       *list = NULL;
+                       return CONTACTS_ERROR_IPC;
                }
        }
 
        return CONTACTS_ERROR_NONE;
-
-ERROR_RETURN:
-       if (*list)
-       {
-               contacts_list_destroy(*list, true);
-               *list = NULL;
-       }
-
-       return ret;
 }
 
 int ctsvc_ipc_unmarshal_child_list(const pims_ipc_data_h ipc_data, contacts_list_h* list)
@@ -1179,37 +984,37 @@ int ctsvc_ipc_unmarshal_child_list(const pims_ipc_data_h ipc_data, contacts_list
        RETV_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&(count)) != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(ipc_data,&(count))) {
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       for(i=0;i<count;i++) {
-               if (ctsvc_ipc_unmarshal_record(ipc_data,&record) != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+       for (i=0;i<count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record(ipc_data,&record)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
-               if (contacts_list_add(*list,record) != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("contacts_list_add fail");
+               if (CONTACTS_ERROR_NONE != contacts_list_add(*list,record)) {
+                       CTS_ERR("contacts_list_add() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
 
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&deleted_count) != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&deleted_count)) {
+               CTS_ERR("ctsvc_ipc_unmarshal_unsigned_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        i = 0;
-       for(i=0;i<deleted_count;i++) {
-               if (ctsvc_ipc_unmarshal_record(ipc_data,&record) != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+       for (i=0;i<deleted_count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_record(ipc_data,&record)) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
-               if (ctsvc_list_append_deleted_record(*list,record) != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_list_append_deleted_record fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_list_append_deleted_record(*list,record)) {
+                       CTS_ERR("ctsvc_list_append_deleted_record() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
@@ -1226,62 +1031,51 @@ int ctsvc_ipc_marshal_list(const contacts_list_h list, pims_ipc_data_h ipc_data)
        RETV_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       // count
-       if (contacts_list_get_count(list, &count) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("contacts_list_get_count fail");
+       /* count */
+       if (CONTACTS_ERROR_NONE != contacts_list_get_count(list, &count)) {
+               CTS_ERR("contacts_list_get_count() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_marshal_int(count,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(count,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        contacts_list_first(list);
 
        unsigned int i = 0;
-       for(i=0;i<count;i++)
-       {
-               if (contacts_list_get_current_record_p(list,&record) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("contacts_list_get_count fail");
+       for (i=0;i<count;i++) {
+               if (CONTACTS_ERROR_NONE != contacts_list_get_current_record_p(list,&record)) {
+                       CTS_ERR("contacts_list_get_current_record_p() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               if (ctsvc_ipc_marshal_record(record,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_record(record,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_record() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               if ( contacts_list_next(list) == CONTACTS_ERROR_NO_DATA )
-               {
+               if (CONTACTS_ERROR_NO_DATA == contacts_list_next(list)) {
                        break;
                }
        }
 
-       // count
-       if (ctsvc_list_get_deleted_count(list, &deleted_count) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("contacts_list_get_count fail");
+       /* count */
+       if (ctsvc_list_get_deleted_count(list, &deleted_count)) {
+               CTS_ERR("ctsvc_list_get_deleted_count() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_marshal_int(deleted_count,ipc_data) != CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("_ctsvc_ipc_marshal fail");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(deleted_count,ipc_data)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        i = 0;
-       for(i=0;i<deleted_count;i++)
-       {
-               if (ctsvc_list_get_deleted_nth_record_p(list, i, &record) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("contacts_list_get_count fail");
+       for (i=0;i<deleted_count;i++) {
+               if (CONTACTS_ERROR_NONE != ctsvc_list_get_deleted_nth_record_p(list, i, &record)) {
+                       CTS_ERR("ctsvc_list_get_deleted_nth_record_p() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               if (ctsvc_ipc_marshal_record(record,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("_ctsvc_ipc_marshal fail");
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_record(record,ipc_data)) {
+                       CTS_ERR("ctsvc_ipc_marshal_record() Fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
index bf32e75..a8eb41f 100644 (file)
  */
 typedef int (*ctsvc_ipc_unmarshal_record_cb)(const pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h precord);
 typedef int (*ctsvc_ipc_marshal_record_cb)(const contacts_record_h record, pims_ipc_data_h ipc_data);
-typedef int (*ctsvc_ipc_marshal_record_get_primary_id_cb)(const contacts_record_h record, unsigned int *property_id, int *id);
 
 typedef struct {
     ctsvc_ipc_unmarshal_record_cb unmarshal_record;
     ctsvc_ipc_marshal_record_cb marshal_record;
-    ctsvc_ipc_marshal_record_get_primary_id_cb get_primary_id;
 } ctsvc_ipc_marshal_record_plugin_cb_s;
 
 int ctsvc_ipc_unmarshal_record(const pims_ipc_data_h ipc_data, contacts_record_h* precord);
 int ctsvc_ipc_marshal_record(const contacts_record_h record, pims_ipc_data_h ipc_data);
-int ctsvc_ipc_marshal_record_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
+
+int ctsvc_ipc_marshal_handle(const contacts_h contact, pims_ipc_data_h ipc_data);
+int ctsvc_ipc_unmarshal_handle(const pims_ipc_data_h ipc_data, contacts_h *pcontact);
 
 /*
  * string
@@ -53,9 +53,6 @@ int ctsvc_ipc_unmarshal_string(const pims_ipc_data_h ipc_data, char** ppbufchar)
 int ctsvc_ipc_unmarshal_bool(const pims_ipc_data_h data, bool *pout);
 int ctsvc_ipc_unmarshal_int(const pims_ipc_data_h data, int *pout);
 int ctsvc_ipc_unmarshal_unsigned_int(const pims_ipc_data_h data, unsigned int *pout);
-int ctsvc_ipc_unmarshal_lli(const pims_ipc_data_h data, long long int *pout);
-int ctsvc_ipc_unmarshal_long(const pims_ipc_data_h data, long *pout);
-int ctsvc_ipc_unmarshal_double(const pims_ipc_data_h data, double *pout);
 int ctsvc_ipc_unmarshal_record_common(const pims_ipc_data_h ipc_data, ctsvc_record_s* common);
 
 /*
@@ -65,9 +62,6 @@ int ctsvc_ipc_marshal_string(const char* bufchar, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_marshal_bool(const bool in, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_marshal_int(const int in, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_marshal_unsigned_int(const unsigned int in, pims_ipc_data_h ipc_data);
-int ctsvc_ipc_marshal_lli(const long long int in, pims_ipc_data_h ipc_data);
-int ctsvc_ipc_marshal_long(const long in, pims_ipc_data_h ipc_data);
-int ctsvc_ipc_marshal_double(const double in, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_marshal_record_common(const ctsvc_record_s* common, pims_ipc_data_h ipc_data);
 
 /*
@@ -76,8 +70,6 @@ int ctsvc_ipc_marshal_record_common(const ctsvc_record_s* common, pims_ipc_data_
  * marsharl : view_uri + other
  * unmarshal : view_uri를 먼저 get 하고 난 이후 나머지를 ..
  */
-//int ctsvc_ipc_unmarshal_filter(const pims_ipc_data_h ipc_data, contacts_filter_h *filter);
-//int ctsvc_ipc_marshal_filter(const contacts_filter_h filter, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_unmarshal_query(const pims_ipc_data_h ipc_data, contacts_query_h *query);
 int ctsvc_ipc_marshal_query(const contacts_query_h query, pims_ipc_data_h ipc_data);
 int ctsvc_ipc_unmarshal_list(const pims_ipc_data_h ipc_data, contacts_list_h *list);
index 4fb0cae..2ac114f 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_messenger(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_messenger(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_messenger_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_messenger_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_messenger,
-       .marshal_record = __ctsvc_ipc_marshal_messenger,
-       .get_primary_id = __ctsvc_ipc_marshal_messenger_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_messenger
 };
 
 
@@ -47,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_messenger(pims_ipc_data_h ipc_data, const char*
                if (ctsvc_ipc_unmarshal_string(ipc_data, &messenger_p->im_id) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -68,14 +66,9 @@ static int __ctsvc_ipc_marshal_messenger(const contacts_record_h record, pims_ip
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_messenger_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_MESSENGER_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 9c19013..bd13078 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_my_profile(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_my_profile(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_my_profile_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_my_profile_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_my_profile,
-       .marshal_record = __ctsvc_ipc_marshal_my_profile,
-       .get_primary_id = __ctsvc_ipc_marshal_my_profile_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_my_profile
 };
 
 static int __ctsvc_ipc_unmarshal_my_profile(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record)
@@ -63,7 +61,7 @@ static int __ctsvc_ipc_unmarshal_my_profile(pims_ipc_data_h ipc_data, const char
                if (ctsvc_ipc_unmarshal_child_list(ipc_data, (contacts_list_h*)&pmy_profile->extensions) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -84,31 +82,25 @@ static int __ctsvc_ipc_marshal_my_profile(const contacts_record_h record, pims_i
                if (ctsvc_ipc_marshal_string((pcontact->uid),ipc_data) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_marshal_string((pcontact->image_thumbnail_path),ipc_data) != CONTACTS_ERROR_NONE) break;
 
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->name, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->note, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->company, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->numbers, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->emails, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->events, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->messengers, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->postal_addrs, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->urls, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->nicknames, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->profiles, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->relationships, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->images, ipc_data) != CONTACTS_ERROR_NONE) break;
-               if (ctsvc_ipc_marshal_list( (contacts_list_h)pcontact->extensions, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->name, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->note, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->company, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->numbers, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->emails, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->events, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->messengers, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->postal_addrs, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->urls, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->nicknames, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->profiles, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->relationships, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->images, ipc_data) != CONTACTS_ERROR_NONE) break;
+               if (ctsvc_ipc_marshal_list((contacts_list_h)pcontact->extensions, ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_my_profile_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_CONTACT_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index 845ff4b..608a858 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_name(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_name(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_name_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_name_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_name,
-       .marshal_record = __ctsvc_ipc_marshal_name,
-       .get_primary_id = __ctsvc_ipc_marshal_name_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_name
 };
 
 
@@ -57,7 +55,7 @@ static int __ctsvc_ipc_unmarshal_name(pims_ipc_data_h ipc_data, const char* view
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -87,14 +85,9 @@ static int __ctsvc_ipc_marshal_name(const contacts_record_h record, pims_ipc_dat
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_name_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_NAME_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index eefe7d8..fdaeed1 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_nickname(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_nickname(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_nickname_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_nickname_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_nickname,
-       .marshal_record = __ctsvc_ipc_marshal_nickname,
-       .get_primary_id = __ctsvc_ipc_marshal_nickname_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_nickname
 };
 
 
@@ -47,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_nickname(pims_ipc_data_h ipc_data, const char*
                if (ctsvc_ipc_unmarshal_string(ipc_data, &nickname_p->nickname) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -59,7 +57,7 @@ static int __ctsvc_ipc_marshal_nickname(const contacts_record_h record, pims_ipc
        RETV_IF(ipc_data==NULL,CONTACTS_ERROR_NO_DATA);
        RETV_IF(nickname_p==NULL,CONTACTS_ERROR_NO_DATA);
 
-       do{
+       do {
                if (ctsvc_ipc_marshal_int((nickname_p->id),ipc_data) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_marshal_int((nickname_p->contact_id),ipc_data) != CONTACTS_ERROR_NONE) break;
                if (ctsvc_ipc_marshal_int((nickname_p->type),ipc_data) != CONTACTS_ERROR_NONE) break;
@@ -68,14 +66,9 @@ static int __ctsvc_ipc_marshal_nickname(const contacts_record_h record, pims_ipc
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_nickname_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_NICKNAME_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index e65af48..d4ed96b 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_note(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_note(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_note_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_note_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_note,
-       .marshal_record = __ctsvc_ipc_marshal_note,
-       .get_primary_id = __ctsvc_ipc_marshal_note_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_note
 };
 
 
@@ -46,7 +44,7 @@ static int __ctsvc_ipc_unmarshal_note(pims_ipc_data_h ipc_data, const char* view
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -64,14 +62,9 @@ static int __ctsvc_ipc_marshal_note(const contacts_record_h record, pims_ipc_dat
                if (ctsvc_ipc_marshal_string((note_p->note),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_note_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_NOTE_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 86b6fd2..7a54f9c 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_number(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_number(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_number_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_number_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_number,
-       .marshal_record = __ctsvc_ipc_marshal_number,
-       .get_primary_id = __ctsvc_ipc_marshal_number_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_number
 };
 
 static int __ctsvc_ipc_unmarshal_number(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record)
@@ -48,7 +46,7 @@ static int __ctsvc_ipc_unmarshal_number(pims_ipc_data_h ipc_data, const char* vi
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -69,14 +67,9 @@ static int __ctsvc_ipc_marshal_number(const contacts_record_h record, pims_ipc_d
                if (ctsvc_ipc_marshal_string((number_p->number),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_number_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_NUMBER_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 311feac..d795151 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_person(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_person(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_person_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_person_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_person,
-       .marshal_record = __ctsvc_ipc_marshal_person,
-       .get_primary_id = __ctsvc_ipc_marshal_person_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_person
 };
 
 
@@ -57,7 +55,7 @@ static int __ctsvc_ipc_unmarshal_person(pims_ipc_data_h ipc_data, const char* vi
                if (ctsvc_ipc_unmarshal_string(ipc_data, &person_p->addressbook_ids) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -87,14 +85,9 @@ static int __ctsvc_ipc_marshal_person(const contacts_record_h record, pims_ipc_d
                if (ctsvc_ipc_marshal_string((person_p->addressbook_ids),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_person_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_PERSON_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 1e1718c..903fa85 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_phonelog(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_phonelog(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_phonelog_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_phonelog_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_phonelog,
-       .marshal_record = __ctsvc_ipc_marshal_phonelog,
-       .get_primary_id = __ctsvc_ipc_marshal_phonelog_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_phonelog
 };
 
 
@@ -50,7 +48,7 @@ static int __ctsvc_ipc_unmarshal_phonelog(pims_ipc_data_h ipc_data, const char*
                if (ctsvc_ipc_unmarshal_int(ipc_data, &phonelog_p->sim_slot_no) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -74,14 +72,9 @@ static int __ctsvc_ipc_marshal_phonelog(const contacts_record_h record, pims_ipc
                if (ctsvc_ipc_marshal_int((phonelog_p->sim_slot_no),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_phonelog_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_PHONELOG_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 77b5996..d559bc4 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_profile(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_profile(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_profile_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_profile_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_profile,
-       .marshal_record = __ctsvc_ipc_marshal_profile,
-       .get_primary_id = __ctsvc_ipc_marshal_profile_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_profile
 };
 
 
@@ -53,7 +51,7 @@ static int __ctsvc_ipc_unmarshal_profile(pims_ipc_data_h ipc_data, const char* v
                if (ctsvc_ipc_unmarshal_string(ipc_data, &profile_p->extra_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -79,15 +77,10 @@ static int __ctsvc_ipc_marshal_profile(const contacts_record_h record, pims_ipc_
                if (ctsvc_ipc_marshal_string((profile_p->extra_data),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_profile_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_PROFILE_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index 118fc1c..68c8b7d 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_relationship(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_relationship(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_relationship_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_relationship_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_relationship,
-       .marshal_record = __ctsvc_ipc_marshal_relationship,
-       .get_primary_id = __ctsvc_ipc_marshal_relationship_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_relationship
 };
 
 
@@ -47,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_relationship(pims_ipc_data_h ipc_data, const ch
                if (ctsvc_ipc_unmarshal_string(ipc_data, &relationship_p->name) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -67,14 +65,9 @@ static int __ctsvc_ipc_marshal_relationship(const contacts_record_h record, pims
                if (ctsvc_ipc_marshal_string((relationship_p->name),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_relationship_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_RELATIONSHIP_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index bc5d7a5..860dff6 100644 (file)
@@ -26,67 +26,47 @@ static int __ctsvc_ipc_marshal_result(const contacts_record_h record, pims_ipc_d
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_result_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_result,
-       .marshal_record = __ctsvc_ipc_marshal_result,
-       .get_primary_id = NULL
+       .marshal_record = __ctsvc_ipc_marshal_result
 };
 
 
 static int __ctsvc_ipc_unmarshal_search_value(pims_ipc_data_h ipc_data, ctsvc_result_value_s* pvalue)
 {
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->property_id) != CONTACTS_ERROR_NONE)
-       {
+       if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->property_id) != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_unmarshal fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->type) != CONTACTS_ERROR_NONE)
-       {
+       if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->type) != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_unmarshal fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
 
-       if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_STR) == true)
-       {
-               if (ctsvc_ipc_unmarshal_string(ipc_data,&pvalue->value.s) != CONTACTS_ERROR_NONE)
-               {
+       if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_STR) == true) {
+               if (ctsvc_ipc_unmarshal_string(ipc_data,&pvalue->value.s) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_BOOL) == true)
-       {
-               if (ctsvc_ipc_unmarshal_bool(ipc_data,&pvalue->value.b) != CONTACTS_ERROR_NONE)
-               {
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_BOOL) == true) {
+               if (ctsvc_ipc_unmarshal_bool(ipc_data,&pvalue->value.b) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_INT) == true)
-       {
-               if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->value.i) != CONTACTS_ERROR_NONE)
-               {
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_INT) == true) {
+               if (ctsvc_ipc_unmarshal_int(ipc_data,&pvalue->value.i) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_DOUBLE) == true)
-       {
-               if (ctsvc_ipc_unmarshal_double(ipc_data,&pvalue->value.d) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_DOUBLE) == true) {
+               return CONTACTS_ERROR_NONE;
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_LLI) == true)
-       {
-               if (ctsvc_ipc_unmarshal_lli(ipc_data,&pvalue->value.l) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_LLI) == true) {
+               return CONTACTS_ERROR_NONE;
        }
-       else
-       {
+       else {
                ASSERT_NOT_REACHED("invalid parameter (property:%d)",pvalue->property_id);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
@@ -95,61 +75,42 @@ static int __ctsvc_ipc_unmarshal_search_value(pims_ipc_data_h ipc_data, ctsvc_re
 
 static int __ctsvc_ipc_marshal_search_value(const ctsvc_result_value_s* pvalue, pims_ipc_data_h ipc_data)
 {
-       if (ctsvc_ipc_marshal_int(pvalue->property_id,ipc_data) != CONTACTS_ERROR_NONE)
-       {
+       if (ctsvc_ipc_marshal_int(pvalue->property_id,ipc_data) != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_marshal fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       if (ctsvc_ipc_marshal_int(pvalue->type,ipc_data) != CONTACTS_ERROR_NONE)
-       {
+       if (ctsvc_ipc_marshal_int(pvalue->type,ipc_data) != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_marshal fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
 
 
-       if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_STR) == true)
-       {
-               if (ctsvc_ipc_marshal_string(pvalue->value.s,ipc_data) != CONTACTS_ERROR_NONE)
-               {
+       if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_STR) == true) {
+               if (ctsvc_ipc_marshal_string(pvalue->value.s,ipc_data) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_BOOL) == true)
-       {
-               if (ctsvc_ipc_marshal_bool(pvalue->value.b,ipc_data) != CONTACTS_ERROR_NONE)
-               {
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_BOOL) == true) {
+               if (ctsvc_ipc_marshal_bool(pvalue->value.b,ipc_data) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_INT) == true)
-       {
-               if (ctsvc_ipc_marshal_int(pvalue->value.i,ipc_data) != CONTACTS_ERROR_NONE)
-               {
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_INT) == true) {
+               if (ctsvc_ipc_marshal_int(pvalue->value.i,ipc_data) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_DOUBLE) == true)
-       {
-               if (ctsvc_ipc_marshal_double(pvalue->value.d,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_DOUBLE) == true) {
+               return CONTACTS_ERROR_NONE;
        }
-       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_LLI) == true)
-       {
-               if (ctsvc_ipc_marshal_lli(pvalue->value.l,ipc_data) != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_marshal fail");
-                       return CONTACTS_ERROR_INVALID_PARAMETER;
-               }
+       else if (CTSVC_VIEW_CHECK_DATA_TYPE(pvalue->property_id, CTSVC_VIEW_DATA_TYPE_LLI) == true) {
+               return CONTACTS_ERROR_NONE;
        }
-       else
-       {
+       else {
                ASSERT_NOT_REACHED("invalid parameter (property:%d)",pvalue->property_id);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
@@ -165,24 +126,20 @@ static int __ctsvc_ipc_unmarshal_result(pims_ipc_data_h ipc_data, const char* vi
        ctsvc_result_s* result_p = (ctsvc_result_s*)record;
 
        unsigned int count = 0;
-       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &count) != CONTACTS_ERROR_NONE)
-       {
+       if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data, &count) != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_ipc_unmarshal fail");
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        unsigned int i = 0;
-       for ( i=0; i<count; i++ )
-       {
+       for (i=0; i<count; i++) {
                ctsvc_result_value_s* value_data = NULL;
                value_data = calloc(1, sizeof(ctsvc_result_value_s));
-               if (value_data == NULL)
-               {
+               if (value_data == NULL) {
                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
 
-               if (__ctsvc_ipc_unmarshal_search_value(ipc_data, value_data) != CONTACTS_ERROR_NONE)
-               {
+               if (__ctsvc_ipc_unmarshal_search_value(ipc_data, value_data) != CONTACTS_ERROR_NONE) {
                        CONTACTS_FREE(value_data);
                        CTS_ERR("ctsvc_ipc_unmarshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -200,36 +157,29 @@ static int __ctsvc_ipc_marshal_result(const contacts_record_h record, pims_ipc_d
        ctsvc_result_s* result_p = (ctsvc_result_s*)record;
        RETV_IF(result_p==NULL,CONTACTS_ERROR_NO_DATA);
 
-       if (result_p->values)
-       {
+       if (result_p->values) {
                unsigned int count = g_slist_length(result_p->values);
-               if (ctsvc_ipc_marshal_unsigned_int(count, ipc_data) != CONTACTS_ERROR_NONE)
-               {
+               if (ctsvc_ipc_marshal_unsigned_int(count, ipc_data) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
                GSList *cursor = result_p->values;
-               while (cursor)
-               {
+               while (cursor) {
                        ctsvc_result_value_s* value_data = (ctsvc_result_value_s *)cursor->data;
-                       if (value_data == NULL)
-                       {
+                       if (value_data == NULL) {
                                cursor = g_slist_next(cursor);
                                continue;
                        }
-                       if (__ctsvc_ipc_marshal_search_value((const ctsvc_result_value_s*)value_data, ipc_data) != CONTACTS_ERROR_NONE)
-                       {
+                       if (__ctsvc_ipc_marshal_search_value((const ctsvc_result_value_s*)value_data, ipc_data) != CONTACTS_ERROR_NONE) {
                                CTS_ERR("ctsvc_ipc_marshal fail");
                                return CONTACTS_ERROR_INVALID_PARAMETER;
                        }
                        cursor = g_slist_next(cursor);
                }
        }
-       else
-       {
-               if (ctsvc_ipc_marshal_int(0, ipc_data) != CONTACTS_ERROR_NONE)
-               {
+       else {
+               if (ctsvc_ipc_marshal_int(0, ipc_data) != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_ipc_marshal fail");
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
index 49399f6..6ed7466 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_sdn(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_sdn(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_sdn_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_sdn_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_sdn,
-       .marshal_record = __ctsvc_ipc_marshal_sdn,
-       .get_primary_id = __ctsvc_ipc_marshal_sdn_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_sdn
 };
 
 
@@ -45,7 +43,7 @@ static int __ctsvc_ipc_unmarshal_sdn(pims_ipc_data_h ipc_data, const char* view_
                if (ctsvc_ipc_unmarshal_int(ipc_data, &sdn_p->sim_slot_no) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -63,14 +61,9 @@ static int __ctsvc_ipc_marshal_sdn(const contacts_record_h record, pims_ipc_data
                if (ctsvc_ipc_marshal_int((sdn_p->sim_slot_no),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_sdn_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_SDN_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
index d231e09..102f482 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_simple_contact(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_simple_contact(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_simple_contact_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_simple_contact_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_simple_contact,
-       .marshal_record = __ctsvc_ipc_marshal_simple_contact,
-       .get_primary_id = __ctsvc_ipc_marshal_simple_contact_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_simple_contact
 };
 
 static int __ctsvc_ipc_unmarshal_simple_contact(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record)
@@ -54,7 +52,7 @@ static int __ctsvc_ipc_unmarshal_simple_contact(pims_ipc_data_h ipc_data, const
                if (ctsvc_ipc_unmarshal_int(ipc_data, &pcontact->display_source_type) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -82,15 +80,9 @@ static int __ctsvc_ipc_marshal_simple_contact(const contacts_record_h record, pi
                if (ctsvc_ipc_marshal_int((pcontact->display_source_type),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_simple_contact_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_CONTACT_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index a94f622..841551a 100644 (file)
@@ -26,8 +26,7 @@ static int __ctsvc_ipc_marshal_speeddial(const contacts_record_h record, pims_ip
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_speeddial_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_speeddial,
-       .marshal_record = __ctsvc_ipc_marshal_speeddial,
-       .get_primary_id = NULL
+       .marshal_record = __ctsvc_ipc_marshal_speeddial
 };
 
 
@@ -49,7 +48,7 @@ static int __ctsvc_ipc_unmarshal_speeddial(pims_ipc_data_h ipc_data, const char*
                if (ctsvc_ipc_unmarshal_int(ipc_data, &speeddial_p->dial_number) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -72,7 +71,7 @@ static int __ctsvc_ipc_marshal_speeddial(const contacts_record_h record, pims_ip
                if (ctsvc_ipc_marshal_int((speeddial_p->dial_number),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
index d4505b0..07fae84 100644 (file)
@@ -26,8 +26,7 @@ static int __ctsvc_ipc_marshal_updated_info(const contacts_record_h record, pims
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_updated_info_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_updated_info,
-       .marshal_record = __ctsvc_ipc_marshal_updated_info,
-       .get_primary_id = NULL
+       .marshal_record = __ctsvc_ipc_marshal_updated_info
 };
 
 
@@ -47,7 +46,7 @@ static int __ctsvc_ipc_unmarshal_updated_info(pims_ipc_data_h ipc_data, const ch
                if (ctsvc_ipc_unmarshal_int(ipc_data,&updated_info_p->last_changed_type) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -69,7 +68,7 @@ static int __ctsvc_ipc_marshal_updated_info(const contacts_record_h record, pims
                if (ctsvc_ipc_marshal_int((updated_info_p->last_changed_type),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
index eee7905..88d800f 100644 (file)
 
 static int __ctsvc_ipc_unmarshal_url(pims_ipc_data_h ipc_data, const char* view_uri, contacts_record_h record);
 static int __ctsvc_ipc_marshal_url(const contacts_record_h record, pims_ipc_data_h ipc_data);
-static int __ctsvc_ipc_marshal_url_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id);
 
 ctsvc_ipc_marshal_record_plugin_cb_s _ctsvc_ipc_record_url_plugin_cb = {
        .unmarshal_record = __ctsvc_ipc_unmarshal_url,
-       .marshal_record = __ctsvc_ipc_marshal_url,
-       .get_primary_id = __ctsvc_ipc_marshal_url_get_primary_id
+       .marshal_record = __ctsvc_ipc_marshal_url
 };
 
 
@@ -47,7 +45,7 @@ static int __ctsvc_ipc_unmarshal_url(pims_ipc_data_h ipc_data, const char* view_
                if (ctsvc_ipc_unmarshal_string(ipc_data, &url_p->url) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_unmarshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -67,15 +65,9 @@ static int __ctsvc_ipc_marshal_url(const contacts_record_h record, pims_ipc_data
                if (ctsvc_ipc_marshal_string((url_p->url),ipc_data) != CONTACTS_ERROR_NONE) break;
 
                return CONTACTS_ERROR_NONE;
-       } while(0);
+       } while (0);
 
        CTS_ERR("_ctsvc_ipc_marshal fail");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_ipc_marshal_url_get_primary_id(const contacts_record_h record, unsigned int *property_id, int *id)
-{
-       *property_id = CTSVC_PROPERTY_URL_ID;
-       return contacts_record_get_int(record, *property_id, id );
-}
-
index c33981b..33b6e50 100644 (file)
@@ -5,30 +5,38 @@
                        <label name="contacts-service::db"/>
                        <label name="contacts-service::svc"/>
                        <label name="contacts-service::phonelog"/>
-                       <label name="contacts-service::vconf"/>
-                       <label name="contacts-service::vconf-private"/>
                </provide>
+               <permit>
+                       <smack permit="telephony_framework" type="rw"/>
+               </permit>
                <request>
                        <smack request="contacts-service::db" type="rwxatl"/>
                        <smack request="contacts-service::svc" type="rwxatl"/>
                        <smack request="contacts-service::phonelog" type="rwxatl"/>
-                       <smack request="contacts-service::vconf" type="rwxatl"/>
-                       <smack request="contacts-service::vconf-private" type="rwxatl"/>
                        <smack request="sys-assert::core" type="rwxat"/>
-                       <smack request="libaccounts-svc" type="rw"/>
                        <smack request="libaccounts-svc::db" type="rwl"/>
                        <smack request="libaccounts-svc::check_read" type="r"/>
                        <smack request="telephony_framework::api_sim" type="r"/>
                        <smack request="telephony_framework::api_phonebook" type="rx"/>
                        <smack request="telephony_framework::properties" type="rw"/>
-                       <smack request="system::vconf_system" type="r"/>
-                       <smack request="system::vconf_inhouse" type="r"/>
+                       <smack request="system::media" type="rwaxt"/>
+                       <smack request="system::homedir" type="rwaxt"/>
                        <smack request="security-server::api-privilege-by-pid" type="w"/>
                        <smack request="security-server::api-cookie-check" type="w"/>
+                       <smack request="device::app_logging" type="rw"/>
+                       <smack request="device::sys_logging" type="rw"/>
+                       <smack request="xorg" type="w"/>
+                       <smack request="tizen::vconf::contact" type="rwxatl"/>
+                       <smack request="tizen::vconf::platform::r" type="rwxatl"/>
+                       <smack request="tizen::vconf::account" type="rw"/>
+                       <smack request="tizen::vconf::public::r" type="rl"/>
+                       <smack request="tizen::vconf::setting::admin" type="rl"/>
+                       <smack request="tizen::vconf::telephony::admin" type="rl"/>
+                       <smack request="aul::terminatebgapp" type="x"/>
                </request>
        </define>
        <assign>
-               <filesystem path="/usr/lib/libcontacts-service2.so.0*" label="_" exec_label="none"/>
+               <filesystem path="/usr/lib/libcontacts-service2.so.0*" label="_" exec_label="_"/>
                <filesystem path="/opt/usr/dbspace/.contacts-svc.db" label="contacts-service::db"/>
                <filesystem path="/opt/usr/dbspace/.contacts-svc.db-journal" label="contacts-service::db"/>
                <filesystem path="/opt/usr/data/contacts-svc/.CONTACTS_SVC_IPC_READY" label="contacts-service::svc"/>
index 7a2b7e8..ae38a77 100644 (file)
  *
  * APIs which needs _uri
  * @code
- * API int contacts_record_create( const char* view_uri, ... )
- * API int contacts_filter_create( const char* view_uri, ... )
- * API int contacts_query_create( const char* view_uri, ... )
- * API int contacts_db_get_record( const char* view_uri, ... )
- * API int contacts_db_delete_record( const char* view_uri, ... )
- * API int contacts_db_get_all_records( const char* view_uri, ... )
- * API int contacts_db_delete_records(const char* view_uri, ... )
- * API int contacts_db_add_changed_cb( const char* view_uri, ... )
- * API int contacts_db_remove_changed_cb( const char* view_uri, ... )
- * API int contacts_db_get_changes_by_version( const char* view_uri, ... )
- * API int contacts_db_search_records(const char* view_uri, ... )
- * API int contacts_db_search_records_with_range(const char* view_uri, ... )
- * API int contacts_db_get_count( const char* view_uri, ... )
+ * API int contacts_record_create(const char* view_uri, ...)
+ * API int contacts_filter_create(const char* view_uri, ...)
+ * API int contacts_query_create(const char* view_uri, ...)
+ * API int contacts_db_get_record(const char* view_uri, ...)
+ * API int contacts_db_delete_record(const char* view_uri, ...)
+ * API int contacts_db_get_all_records(const char* view_uri, ...)
+ * API int contacts_db_delete_records(const char* view_uri, ...)
+ * API int contacts_db_add_changed_cb(const char* view_uri, ...)
+ * API int contacts_db_remove_changed_cb(const char* view_uri, ...)
+ * API int contacts_db_get_changes_by_version(const char* view_uri, ...)
+ * API int contacts_db_search_records(const char* view_uri, ...)
+ * API int contacts_db_search_records_with_range(const char* view_uri, ...)
+ * API int contacts_db_get_count(const char* view_uri, ...)
  * @endcode
  *
  *
  * int i = 0;
  * contacts_db_get_record(_contacts_contact._uri, contact_id, &contact);
  * contacts_record_get_child_record_count(contact, _contacts_contact.address, &address_num);
- * for(i=0; i<address_num; i++) {
+ * for (i=0; i<address_num; i++) {
  *     contacts_record_h address = NULL;
  *     contacts_record_get_child_record_at_p(contact, _contacts_contact.address, i, &address);
  *     contacts_record_set_str(address, _contacts_address.country, "Korea");
  *
  * To operate a list, you must obtain its handle. The handle is provided during creation of the list. List handle must destroy after use.
  * @code
- * API int contacts_list_create( contacts_list_h* contacts_list );
- * API int contacts_list_destroy( contacts_list_h contacts_list, bool delete_child );
+ * API int contacts_list_create(contacts_list_h* contacts_list);
+ * API int contacts_list_destroy(contacts_list_h contacts_list, bool delete_child);
  * @endcode
  *
  * If ‘delete_child’ parameter is the true, child resources will destroy automatically.
  * @subsection CAPI_SOCIAL_CONTACTS_SVC_MODULE_LISTS_CURSOR Cursor
  * The list can be traversed by using cursor.
  * @code
- * API int contacts_list_first( contacts_list_h contacts_list );
- * API int contacts_list_last( contacts_list_h contacts_list );
- * API int contacts_list_next( contacts_list_h contacts_list );
- * API int contacts_list_prev( contacts_list_h contacts_list );
+ * API int contacts_list_first(contacts_list_h contacts_list);
+ * API int contacts_list_last(contacts_list_h contacts_list);
+ * API int contacts_list_next(contacts_list_h contacts_list);
+ * API int contacts_list_prev(contacts_list_h contacts_list);
  * @endcode
  *
  * You can get a record of current cursor.
  * @code
- * API int contacts_list_get_current_record_p( contacts_list_h contacts_list, contacts_record_h* record );
+ * API int contacts_list_get_current_record_p(contacts_list_h contacts_list, contacts_record_h* record);
  * @endcode
  *
  * Sample code: Loop list
  * @subsection CAPI_SOCIAL_CONTACTS_SVC_MODULE_LISTS_ADD_REMOVE Add / Remove
  * The contacts-service provides functions for adding/removing child record on list.
  * @code
- * API int contacts_list_add( contacts_list_h contacts_list, contacts_record_h record );
- * API int contacts_list_remove( contacts_list_h contacts_list, contacts_record_h record );
+ * API int contacts_list_add(contacts_list_h contacts_list, contacts_record_h record);
+ * API int contacts_list_remove(contacts_list_h contacts_list, contacts_record_h record);
  * @endcode
  *
  * Sample code: Adds records to the list
  * Bulk APIs provide to insert/update/delete multiple records. There is no limit of record count on bulk API, but it cause a process to hang during the api is operated. Bulk APIs guarantee atomicity. That is, the api operations either all, or nothing.
  *
  * @code
- * API int contacts_db_insert_records( contacts_list_h record_list, int **ids, int *count);
- * API int contacts_db_update_records( contacts_list_h record_list);
+ * API int contacts_db_insert_records(contacts_list_h record_list, int **ids, int *count);
+ * API int contacts_db_update_records(contacts_list_h record_list);
  * API int contacts_db_delete_records(const char* view_uri, int record_id_array[], int count);
- * API int contacts_db_replace_records( contacts_list_h list, int record_id_array[], int count );
+ * API int contacts_db_replace_records(contacts_list_h list, int record_id_array[], int count);
  * @endcode
  *
  * Sample code: Insert two contact records using bulk API.
  * The contacts Filter API provides the set of definitions and interfaces that enable application developers to make filters to set query. <br>
  * When creating a filter, you need to specify what type of filter you want to create using _uri property. Filter handle must destroy after use.
  * @code
- * API int contacts_filter_create( const char* view_uri, contacts_filter_h* filter );
- * API int contacts_filter_destroy( contacts_filter_h filter );
+ * API int contacts_filter_create(const char* view_uri, contacts_filter_h* filter);
+ * API int contacts_filter_destroy(contacts_filter_h filter);
  * @endcode
  *
  * Sample code: Set filter condition to contain a given substring.
  *
  */
 
-#endif //__TIZEN_SOCIAL_CONTACTS_DOC_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_DOC_H__ */
 
old mode 100755 (executable)
new mode 100644 (file)
index 67b7245..3ce47ab
@@ -37,5 +37,5 @@
 #include <contacts_phone_log.h>
 #include <contacts_db_status.h>
 
-#endif //__TIZEN_SOCIAL_CONTACTS_H__
+#endif /*__TIZEN_SOCIAL_CONTACTS_H__ */
 
index 2c2e4e0..24ea462 100644 (file)
@@ -49,7 +49,7 @@ extern "C"
 /**
  * @brief Deletes an activity record from the contacts database by contact ID.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -75,7 +75,7 @@ int contacts_activity_delete_by_contact_id(int contact_id);
 /**
  * @brief Deletes an activity record from the contacts database by account ID.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -108,5 +108,5 @@ int contacts_activity_delete_by_account_id(int account_id);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_ACTIVITY_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_ACTIVITY_H__ */
 
old mode 100755 (executable)
new mode 100644 (file)
index 3be9f37..4e01a58
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Enumeration for contact change state.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -61,7 +61,7 @@ typedef enum
 /**
  * @brief Called when the designated view changes.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   view_uri    The view URI
  * @param[in]   user_data   The user data passed from the callback registration function
@@ -75,7 +75,7 @@ typedef void (*contacts_db_changed_cb)(const char* view_uri, void* user_data);
 /**
  * @brief Inserts a record to the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -113,7 +113,7 @@ typedef void (*contacts_db_changed_cb)(const char* view_uri, void* user_data);
  * @see contacts_db_delete_record()
  * @see contacts_db_get_record()
  */
-int contacts_db_insert_record( contacts_record_h record, int *id );
+int contacts_db_insert_record(contacts_record_h record, int *id);
 
 /**
  * @brief Gets a record from the contacts database.
@@ -121,7 +121,7 @@ int contacts_db_insert_record( contacts_record_h record, int *id );
  * @details This function creates a new contact handle from the contacts database by the given @a record_id. \n
  *          @a record will be created, which is filled with contact information.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -159,12 +159,12 @@ int contacts_db_insert_record( contacts_record_h record, int *id );
  * @see contacts_connect()
  * @see contacts_record_destroy()
  */
-int contacts_db_get_record( const char* view_uri, int record_id, contacts_record_h* record );
+int contacts_db_get_record(const char* view_uri, int record_id, contacts_record_h* record);
 
 /**
  * @brief Updates a record in the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -200,12 +200,12 @@ int contacts_db_get_record( const char* view_uri, int record_id, contacts_record
  * @see contacts_db_delete_record()
  * @see contacts_db_get_record()
  */
-int contacts_db_update_record( contacts_record_h record );
+int contacts_db_update_record(contacts_record_h record);
 
 /**
  * @brief Deletes a record from the contacts database with related child records.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -240,14 +240,14 @@ int contacts_db_update_record( contacts_record_h record );
  * @see contacts_connect()
  * @see contacts_db_insert_record()
  */
-int contacts_db_delete_record( const char* view_uri, int record_id );
+int contacts_db_delete_record(const char* view_uri, int record_id);
 
 /**
  * @brief Replaces an id-identified record with the given record.
  *
  * @details Now, this API supports only _contacts_contact view_uri.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -278,12 +278,12 @@ int contacts_db_delete_record( const char* view_uri, int record_id );
  * @see contacts_db_delete_record()
  * @see contacts_db_get_record()
  */
-int contacts_db_replace_record( contacts_record_h record, int id );
+int contacts_db_replace_record(contacts_record_h record, int id);
 
 /**
  * @brief Retrieves all records and returns the results list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *@privilege  %http://tizen.org/privilege/callhistory.read
@@ -322,12 +322,12 @@ int contacts_db_replace_record( contacts_record_h record, int id );
  * @see contacts_connect()
  * @see contacts_list_destroy()
  */
-int contacts_db_get_all_records( const char* view_uri, int offset, int limit, contacts_list_h* record_list );
+int contacts_db_get_all_records(const char* view_uri, int offset, int limit, contacts_list_h* record_list);
 
 /**
  * @brief Uses a query to find records.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege  %http://tizen.org/privilege/callhistory.read
@@ -366,12 +366,12 @@ int contacts_db_get_all_records( const char* view_uri, int offset, int limit, co
  * @see contacts_connect()
  * @see contacts_list_destroy()
  */
-int contacts_db_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* record_list );
+int contacts_db_get_records_with_query(contacts_query_h query, int offset, int limit, contacts_list_h* record_list);
 
 /**
  * @brief Inserts multiple records to the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -408,12 +408,12 @@ int contacts_db_get_records_with_query( contacts_query_h query, int offset, int
  * @see contacts_db_update_records()
  * @see contacts_db_delete_records()
  */
-int contacts_db_insert_records( contacts_list_h record_list, int **ids, int *count);
+int contacts_db_insert_records(contacts_list_h record_list, int **ids, int *count);
 
 /**
  * @brief Updates multiple records in the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -448,12 +448,12 @@ int contacts_db_insert_records( contacts_list_h record_list, int **ids, int *cou
  * @see contacts_db_insert_records()
  * @see contacts_db_delete_records()
  */
-int contacts_db_update_records( contacts_list_h record_list);
+int contacts_db_update_records(contacts_list_h record_list);
 
 /**
  * @brief Deletes multiple records in the contacts database with related child records.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  * @privilege %http://tizen.org/privilege/callhistory.write
@@ -495,7 +495,7 @@ int contacts_db_delete_records(const char* view_uri, int record_id_array[], int
 /**
  * @brief Replaces database records identified by given ids with a given record list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -527,12 +527,12 @@ int contacts_db_delete_records(const char* view_uri, int record_id_array[], int
  * @see contacts_db_delete_record()
  * @see contacts_db_get_record()
  */
-int contacts_db_replace_records( contacts_list_h list, int record_id_array[], int count );
+int contacts_db_replace_records(contacts_list_h list, int record_id_array[], int count);
 
 /**
  * @brief Gets the current contacts database version.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -555,12 +555,12 @@ int contacts_db_replace_records( contacts_list_h list, int record_id_array[], in
  * @see contacts_connect()
  * @see contacts_db_get_changes_by_version()
  */
-int contacts_db_get_current_version( int* contacts_db_version );
+int contacts_db_get_current_version(int* contacts_db_version);
 
 /**
  * @brief Registers a callback function to be invoked when a record changes.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -571,7 +571,7 @@ int contacts_db_get_current_version( int* contacts_db_version );
  * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_note, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_url, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_event, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_image, \n
  * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_company, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_nickname, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_messenger, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_extension, \n
  * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_profile, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_relationship, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity_photo, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial\n\n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_sdn, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group_relation.\n\n
  * %http://tizen.org/privilege/callhistory.read        is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log.
  * If successive change notification produced on the view_uri are identical,
  * then they are coalesced into a single notification if the older notification has not yet been called
@@ -599,24 +599,12 @@ int contacts_db_get_current_version( int* contacts_db_version );
  * @see contacts_db_changed_cb()
  * @see contacts_db_remove_changed_cb()
  */
-int contacts_db_add_changed_cb( const char* view_uri, contacts_db_changed_cb callback, void* user_data );
+int contacts_db_add_changed_cb(const char* view_uri, contacts_db_changed_cb callback, void* user_data);
 
 /**
  * @brief Unregisters a callback function.
  *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.read
- * @privilege %http://tizen.org/privilege/callhistory.read
- *
- * @remarks %http://tizen.org/privilege/contact.read is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address_book, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_simple_contact, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_name, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_number, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_email, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_note, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_url, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_event, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_image, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_company, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_nickname, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_messenger, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_extension, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_profile, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_relationship, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity_photo, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial. \n\n
- * %http://tizen.org/privilege/callhistory.read is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   view_uri    The view URI of records whose changes are monitored
  * @param[in]   callback    The callback function to register
@@ -638,7 +626,7 @@ int contacts_db_add_changed_cb( const char* view_uri, contacts_db_changed_cb cal
  * @see contacts_db_changed_cb()
  * @see contacts_db_add_changed_cb()
  */
-int contacts_db_remove_changed_cb( const char* view_uri, contacts_db_changed_cb callback, void* user_data );
+int contacts_db_remove_changed_cb(const char* view_uri, contacts_db_changed_cb callback, void* user_data);
 
 /**
  * @brief Retrieves records changes since the given database version.
@@ -647,7 +635,7 @@ int contacts_db_remove_changed_cb( const char* view_uri, contacts_db_changed_cb
  *          Now, support @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact_updated_info, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group_updated_info \n
  *          @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile_updated_info and @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_grouprel_updated_info.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -677,13 +665,13 @@ int contacts_db_remove_changed_cb( const char* view_uri, contacts_db_changed_cb
  * @see contacts_connect()
  * @see contacts_list_destroy()
  */
-int contacts_db_get_changes_by_version( const char* view_uri, int address_book_id, int contacts_db_version,
-                        contacts_list_h* change_record_list, int* current_contacts_db_version );
+int contacts_db_get_changes_by_version(const char* view_uri, int address_book_id, int contacts_db_version,
+                        contacts_list_h* change_record_list, int* current_contacts_db_version);
 
 /**
  * @brief Finds records based on a given keyword.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -719,7 +707,7 @@ int contacts_db_search_records(const char* view_uri, const char *keyword, int of
 /**
  * @brief Finds records based on given query and keyword.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -756,7 +744,7 @@ int contacts_db_search_records_with_query(contacts_query_h query, const char *ke
 /**
  * @brief Finds records based on a keyword and range.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -795,7 +783,7 @@ int contacts_db_search_records_with_range(const char* view_uri, const char *keyw
 /**
  * @brief Gets the number of records in a specific view.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -829,12 +817,12 @@ int contacts_db_search_records_with_range(const char* view_uri, const char *keyw
  *
  * @see contacts_connect()
  */
-int contacts_db_get_count( const char* view_uri, int *count);
+int contacts_db_get_count(const char* view_uri, int *count);
 
 /**
  * @brief Gets the number of records matching a query.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -868,12 +856,12 @@ int contacts_db_get_count( const char* view_uri, int *count);
  *
  * @see contacts_connect()
  */
-int contacts_db_get_count_with_query( contacts_query_h query, int *count);
+int contacts_db_get_count_with_query(contacts_query_h query, int *count);
 
 /**
  * @brief Gets the last successful changed contacts database version on the current connection.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  * @privilege %http://tizen.org/privilege/callhistory.read
@@ -896,287 +884,6 @@ int contacts_db_get_count_with_query( contacts_query_h query, int *count);
 int contacts_db_get_last_change_version(int* last_change_version);
 
 /**
- * @internal
- * @brief Called to get the result of an insert batch operation.
- *
- * @since_tizen 2.3
- *
- * @param[in]   error                  Error code for batch operation
- * @param[in]   ids                    IDs of inserted records
- * @param[in]   count          The number of ids
- * @param[in]   user_data      The user data passed from the batch operation
- *
- * @return  @c True to continue with the next iteration of the loop or @c false to break out of the loop
- *
- * @pre contacts_db_insert_records_async() will invoke this callback.
- *
- * @see contacts_db_insert_records_async()
- */
-typedef void (*contacts_db_insert_result_cb)( int error, int *ids, int count, void *user_data);
-
-/**
- * @internal
- * @brief Called to get the result of a batch operation.
- *
- * @since_tizen 2.3
- *
- * @param[in]   error                  Error code for batch operation
- * @param[in]   user_data              The user data passed from the batch operation
- *
- * @return  @c True to continue with the next iteration of the loop or @c false to break out of the loop
- *
- * @pre contacts_db_update_records_async() will invoke this callback.
- *
- * @see contacts_db_update_records_async()
- * @see contacts_db_delete_records_async()
- * @see contacts_db_replace_records_async()
- */
-typedef void (*contacts_db_result_cb)( int error, void *user_data);
-
-/**
- * @internal
- * @brief Inserts multiple records to the contacts database as a batch operation.
- *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.write
- * @privilege  %http://tizen.org/privilege/callhistory.write
- *
- * @remarks The purpose of async API is for the UI not to create a thread.
- * If you have to display progress during the DB operation, you can use this API.
- * The callback function will be called in main loop.
- * Do not use this API in a thread.
- * During the execution of this API, you can not call the other DB operation APIs.
- * %http://tizen.org/privilege/contact.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address_book, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact, \n @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile,
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_name, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_number, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_email, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_note, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_url, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_event, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_image, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_company, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_nickname, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_messenger, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_extension, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_profile, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_relationship, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity_photo, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial. \n\n
- * %http://tizen.org/privilege/callhistory.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log.
- *
- * @param[in]   record_list                    The record list handle
- * @param[in]   callback                       The callback function to inform about the batch operation result
- * @param[in]   user_data                      The user data to be passed to the callback function
- *
- * @return  @c 0 on sucess,
- *          otherwise a negative error value (#contacts_error_e)
- *
- * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                         Database operation failure
- * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre     contacts_connect() should be called to open a connection to the contacts service.
- *
- * @post               contacts_db_insert_result_cb() callback will be called
- *
- * @see contacts_connect()
- * @see contacts_db_insert_records()
- * @see contacts_db_update_records_async()
- * @see contacts_db_delete_records_async()
- */
-int contacts_db_insert_records_async( contacts_list_h record_list, contacts_db_insert_result_cb callback, void *user_data);
-
-/**
- * @internal
- * @brief Updates multiple records in the contacts database as a batch operation.
- *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.write
- * @privilege %http://tizen.org/privilege/callhistory.write
- *
- * @remarks %http://tizen.org/privilege/contact.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address_book, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact, \n @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile,
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_name, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_number, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_email, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_note, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_url, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_event, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_image, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_company, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_nickname, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_messenger, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_extension, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_profile, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_relationship, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity_photo, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial. \n\n
- * %http://tizen.org/privilege/callhistory.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log.
- *
- * @param[in]   record_list                    The record list handle
- * @param[in]   callback                       The callback function to inform about the batch operation result
- * @param[in]   user_data                      The user data to be passed to the callback function
- *
- * @return  0 on success, otherwise a negative error value
- * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                         Database operation failure
- * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre     contacts_connect() should be called to open a connection to the contacts service.
- * @post               contacts_db_result_cb() callback will be called
- *
- * @see contacts_connect()
- * @see contacts_db_update_records()
- * @see contacts_db_insert_records_async()
- * @see contacts_db_delete_records_async()
- */
-int contacts_db_update_records_async( contacts_list_h record_list, contacts_db_result_cb callback, void *user_data);
-
-/**
- * @internal
- * @brief Deletes multiple records with related child records in the contacts database as a batch operation.
- *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.write
- * @privilege %http://tizen.org/privilege/callhistory.write
- *
- * @remarks %http://tizen.org/privilege/contact.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address_book, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact, \n @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile,
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_name, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_number, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_email, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_address, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_note, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_url, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_event, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_image, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_company, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_nickname, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_messenger, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_extension, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_profile, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_relationship, \n
- * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_activity_photo, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_speeddial. \n\n
- * %http://tizen.org/privilege/callhistory.write is needed for record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log.
- *
- * @param[in]   view_uri                       The view URI of records
- * @param[in]   record_id_array                The record IDs to delete
- * @param[in]   count                          The size of record ID array
- * @param[in]   callback                       The callback function to inform about the batch operation result
- * @param[in]   user_data                      The user data to be passed to the callback function
- *
- * @return  @c 0 on sucess,
- *          otherwise a negative error value (#contacts_error_e)
- *
- * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                         Database operation failure
- * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre     contacts_connect() should be called to open a connection to the contacts service.
- * @post               contacts_db_result_cb() callback will be called
- *
- * @see contacts_connect()
- * @see contacts_db_delete_records()
- * @see contacts_db_insert_records_async()
- * @see contacts_db_update_records_async()
- */
-int contacts_db_delete_records_async(const char* view_uri, int record_id_array[], int count, contacts_db_result_cb callback, void *user_data);
-
-/**
- * @internal
- * @brief Replaces database records identified by given ids with a given record list, asynchronously.
- *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.write
- *
- * @remarks the write-once value of record is not replaced.\n
- * This API works only for @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact
- *
- * @param[in]   list                         The new record list handle to replace
- * @param[in]   record_id_array                The record IDs to replace
- * @param[in]   count                          The size of record ID array
- * @param[in]   callback                       The callback function to inform about the batch operation result
- * @param[in]   user_data                      The user data to be passed to the callback function
- *
- * @return  @c 0 on sucess,
- *          otherwise a negative error value (#contacts_error_e)
- *
- * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                         Database operation failure
- * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre     contacts_connect() should be called to open a connection to the contacts service.
- * @post               contacts_db_result_cb() callback will be called
- *
- * @see contacts_connect()
- * @see contacts_db_replace_record()
- * @see contacts_db_update_record_async()
- * @see contacts_db_delete_records_async()
- */
-int contacts_db_replace_records_async( contacts_list_h list, int record_id_array[], int count, contacts_db_result_cb callback, void *user_data );
-
-#ifndef _CONTACTS_NATIVE
-
-/**
- * @internal
- * @brief Called when the designated view changes.
- *
- * @since_tizen 2.3
- *
- * @param[in]   view_uri       The view URI, only _contacts_person and _contacts_phone_log are now supported
- * @param[in]   changes        It includes changes information ("type:id," string is repeated, you should parse it)
- * @param[in]   user_data      The user data passed from the callback registration function
- *
- * @see contacts_db_add_changed_cb_with_info()
- */
-
-typedef void (*contacts_db_change_cb_with_info)(const char* view_uri, char *changes, void* user_data);
-
-/**
- * @internal
- * @brief Registers a callback function.
- * @details Now, support only _contacts_person and _contacts_phone_log view_uri.
- *
- * @since_tizen 2.3
- * @privlevel public
- * @privilege %http://tizen.org/privilege/contact.read
- * @privilege %http://tizen.org/privilege/callhistory.read
- *
- * @remarks %http://tizen.org/privilege/contact.read is needed to get notification whenever record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person is changed, \n
- * %http://tizen.org/privilege/callhistory.read is needed to get notification whenever record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log is changed.
- *
- * @param[in]   view_uri       The view URI of records whose changes are monitored
- * @param[in]   callback       The callback function to register
- * @param[in]  user_data       The user data to be passed to the callback function
- *
- * @return  @c 0 on sucess,
- *          otherwise a negative error value (#contacts_error_e)
- *
- * @retval     #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY              Out of memory
- * @retval     #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_IPC                        IPC error
- * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre                contacts_connect() should be called to open a connection to the contacts service.
- * @post               contacts_db_change_cb_with_info() callback will be called
- *
- * @see contacts_connect()
- * @see contacts_db_changed_cb_with_info()
- * @see contacts_db_remove_changed_cb_with_info()
- */
-int contacts_db_add_changed_cb_with_info(const char* view_uri, contacts_db_change_cb_with_info callback, void* user_data);
-
-/**
- * @internal
- * @brief Unregisters a callback function.
- * @details Now, support only _contacts_person and _contacts_phone_log view_uri.
- *
- * @since_tizen 2.3
- *
- * @param[in]   view_uri       The view URI of records whose changes are monitored
- * @param[in]   callback       The callback function to register
- * @param[in]  user_data       The user data to be passed to the callback function
- *
- * @return  @c 0 on sucess,
- *          otherwise a negative error value (#contacts_error_e)
- *
- * @retval     #CONTACTS_ERROR_NONE                Successful
- * @retval     #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
- * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
- *
- * @pre                contacts_connect() should be called to open a connection to the contacts service.
- *
- * @see contacts_connect()
- * @see contacts_db_changed_cb_with_info()
- * @see contacts_db_add_changed_cb_with_info()
- */
-int contacts_db_remove_changed_cb_with_info(const char* view_uri, contacts_db_change_cb_with_info callback, void* user_data);
-
-#endif
-
-/**
  * @}
  */
 
@@ -1185,4 +892,4 @@ int contacts_db_remove_changed_cb_with_info(const char* view_uri, contacts_db_ch
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_DB_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_DB_H__ */
\ No newline at end of file
diff --git a/include/contacts_db_extension.h b/include/contacts_db_extension.h
new file mode 100644 (file)
index 0000000..caaa58f
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __TIZEN_SOCIAL_CONTACTS_DB_EXTENSION_H__
+#define __TIZEN_SOCIAL_CONTACTS_DB_EXTENSION_H__
+
+#ifndef API
+#define API __attribute__ ((visibility("default")))
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * @file contacts_db_extension.h
+ */
+
+/**
+ * @brief Called when the designated view changes.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
+ *
+ * @param[in]   view_uri       The view URI, only _contacts_person and _contacts_phone_log are now supported
+ * @param[in]   changes        It includes changes information ("type:id," string is repeated, you should parse it)
+ * @param[in]   user_data      The user data passed from the callback registration function
+ *
+ * @see contacts_db_add_changed_cb_with_info()
+ */
+
+typedef void (*contacts_db_change_cb_with_info)(const char* view_uri, char *changes, void* user_data);
+
+/**
+ * @brief Registers a callback function.
+ * @details Now, support only _contacts_person and _contacts_phone_log view_uri.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/contact.read
+ * @privilege %http://tizen.org/privilege/callhistory.read
+ *
+ * @remarks %http://tizen.org/privilege/contact.read is needed to get notification whenever record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person is changed, \n
+ * %http://tizen.org/privilege/callhistory.read is needed to get notification whenever record which is related to @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_phone_log is changed.
+ *
+ * @param[in]   view_uri       The view URI of records whose changes are monitored
+ * @param[in]   callback       The callback function to register
+ * @param[in]  user_data       The user data to be passed to the callback function
+ *
+ * @return  @c 0 on sucess,
+ *          otherwise a negative error value (#contacts_error_e)
+ *
+ * @retval     #CONTACTS_ERROR_NONE                Successful
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY              Out of memory
+ * @retval     #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
+ * @retval  #CONTACTS_ERROR_IPC                        IPC error
+ * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied
+ * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
+ *
+ * @pre                contacts_connect() should be called to open a connection to the contacts service.
+ * @post               contacts_db_change_cb_with_info() callback will be called
+ *
+ * @see contacts_connect()
+ * @see contacts_db_changed_cb_with_info()
+ * @see contacts_db_remove_changed_cb_with_info()
+ */
+int contacts_db_add_changed_cb_with_info(const char* view_uri, contacts_db_change_cb_with_info callback, void* user_data);
+
+/**
+ * @brief Unregisters a callback function.
+ * @details Now, support only _contacts_person and _contacts_phone_log view_uri.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
+ *
+ * @param[in]   view_uri       The view URI of records whose changes are monitored
+ * @param[in]   callback       The callback function to register
+ * @param[in]  user_data       The user data to be passed to the callback function
+ *
+ * @return  @c 0 on sucess,
+ *          otherwise a negative error value (#contacts_error_e)
+ *
+ * @retval     #CONTACTS_ERROR_NONE                Successful
+ * @retval     #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
+ * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
+ *
+ * @pre                contacts_connect() should be called to open a connection to the contacts service.
+ *
+ * @see contacts_connect()
+ * @see contacts_db_changed_cb_with_info()
+ * @see contacts_db_add_changed_cb_with_info()
+ */
+int contacts_db_remove_changed_cb_with_info(const char* view_uri, contacts_db_change_cb_with_info callback, void* user_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __TIZEN_SOCIAL_CONTACTS_DB_EXTENSION_H__ */
+
old mode 100755 (executable)
new mode 100644 (file)
index 4d85797..fc4a197
@@ -40,7 +40,7 @@ extern "C"
 /**
  * @brief Enumeration for contact DB status.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 
@@ -52,7 +52,7 @@ typedef enum {
 /**
  * @brief  Gets the current status of server.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  status  The current status of server
  *
@@ -72,7 +72,7 @@ int contacts_db_get_status(contacts_db_status_e *status);
 /**
  * @brief  Called when contacts-service server status changes.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  status       The current status of server
  * @param[in]  user_data    The user data passed from the callback registration function
@@ -87,7 +87,7 @@ typedef void (*contacts_db_status_changed_cb)(contacts_db_status_e status, void*
 /**
  * @brief  Registers a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  callback     The callback function to register
  * @param[in]  user_data    The user data to be passed to the callback function
@@ -109,7 +109,7 @@ int contacts_db_add_status_changed_cb(contacts_db_status_changed_cb callback, vo
 /**
  * @brief  Unregisters a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  callback   The callback function to register
  * @param[in]  user_data  The user data to be passed to the callback function
@@ -137,4 +137,4 @@ int contacts_db_remove_status_changed_cb(contacts_db_status_changed_cb callback,
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_DB_STATUS_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_DB_STATUS_H__ */
\ No newline at end of file
index 40ebfa5..ef80f2b 100644 (file)
@@ -39,7 +39,7 @@ extern "C"
 /**
  * @brief Enumeration for contacts errors.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -64,7 +64,7 @@ typedef enum
     CONTACTS_ERROR_IPC                  = TIZEN_ERROR_CONTACTS | 0xBF,           /**< Unknown IPC error */
 
     /* ENVIRONMENT & OTHER MODULE */
-    // Socket, inotify, vconf, icu, tapi, security/smack, account and so on
+    /* Socket, inotify, vconf, icu, tapi, security/smack, account and so on */
     CONTACTS_ERROR_SYSTEM               = TIZEN_ERROR_CONTACTS | 0xEF,           /**< Internal system module error */
 
     /* UNHANDLED EXCEPTION */
diff --git a/include/contacts_extension.h b/include/contacts_extension.h
new file mode 100644 (file)
index 0000000..8a36fec
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#ifndef __TIZEN_SOCIAL_CONTACTS_EXTENSION_H__
+#define __TIZEN_SOCIAL_CONTACTS_EXTENSION_H__
+
+#include <contacts_db_extension.h>
+
+#endif /* __TIZEN_SOCIAL_CONTACTS_EXTENSION_H__ */
+
+
old mode 100755 (executable)
new mode 100644 (file)
index 3f9fcbf..8bd2e08
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Enumeration for Contacts match string flags.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -64,7 +64,7 @@ typedef enum
 /**
  * @brief Enumeration for Contacts match int flags.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -81,7 +81,7 @@ typedef enum
 /**
  * @brief Enumeration for Contacts filter operators.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -93,7 +93,7 @@ typedef enum {
 /**
  * @brief Creates a filter.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a filter using contacts_filter_destroy().
  *
@@ -112,12 +112,12 @@ typedef enum {
  *
  * @see contacts_filter_destroy()
  */
-int contacts_filter_create( const char* view_uri, contacts_filter_h* filter );
+int contacts_filter_create(const char* view_uri, contacts_filter_h* filter);
 
 /**
  * @brief Destroys a filter.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter    The filter handle
  *
@@ -129,12 +129,12 @@ int contacts_filter_create( const char* view_uri, contacts_filter_h* filter );
  *
  * @see contacts_filter_create()
  */
-int contacts_filter_destroy( contacts_filter_h filter );
+int contacts_filter_destroy(contacts_filter_h filter);
 
 /**
  * @brief Adds a condition for a string type property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   property_id     The property ID to add a condition
@@ -150,12 +150,12 @@ int contacts_filter_destroy( contacts_filter_h filter );
  *
  * @see contacts_filter_add_operator()
  */
-int contacts_filter_add_str( contacts_filter_h filter, unsigned int property_id, contacts_match_str_flag_e match, const char* match_value );
+int contacts_filter_add_str(contacts_filter_h filter, unsigned int property_id, contacts_match_str_flag_e match, const char* match_value);
 
 /**
  * @brief Adds a condition for an integer type property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   property_id     The property ID to add a condition
@@ -171,12 +171,12 @@ int contacts_filter_add_str( contacts_filter_h filter, unsigned int property_id,
  *
  * @see contacts_filter_add_operator()
  */
-int contacts_filter_add_int( contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, int match_value );
+int contacts_filter_add_int(contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, int match_value);
 
 /**
  * @brief Adds a condition for a long int type property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   property_id     The property ID to add a condition
@@ -192,12 +192,12 @@ int contacts_filter_add_int( contacts_filter_h filter, unsigned int property_id,
  *
  * @see contacts_filter_add_operator()
  */
-int contacts_filter_add_lli( contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, long long int match_value );
+int contacts_filter_add_lli(contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, long long int match_value);
 
 /**
  * @brief Adds a condition for a double type property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   property_id     The property ID to add a condition
@@ -213,12 +213,12 @@ int contacts_filter_add_lli( contacts_filter_h filter, unsigned int property_id,
  *
  * @see contacts_filter_add_operator()
  */
-int contacts_filter_add_double( contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, double match_value );
+int contacts_filter_add_double(contacts_filter_h filter, unsigned int property_id, contacts_match_int_flag_e match, double match_value);
 
 /**
  * @brief Adds a condition for a boolean type property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   property_id     The property ID to add a condition
@@ -233,12 +233,12 @@ int contacts_filter_add_double( contacts_filter_h filter, unsigned int property_
  *
  * @see contacts_filter_add_operator()
  */
-int contacts_filter_add_bool( contacts_filter_h filter, unsigned int property_id, bool match_value );
+int contacts_filter_add_bool(contacts_filter_h filter, unsigned int property_id, bool match_value);
 
 /**
  * @brief Adds an operator between conditions.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   filter          The filter handle
  * @param[in]   operator_type   The operator type
@@ -253,12 +253,12 @@ int contacts_filter_add_bool( contacts_filter_h filter, unsigned int property_id
  * @see contacts_filter_add_int()
  * @see contacts_filter_add_bool()
  */
-int contacts_filter_add_operator( contacts_filter_h filter, contacts_filter_operator_e operator_type );
+int contacts_filter_add_operator(contacts_filter_h filter, contacts_filter_operator_e operator_type);
 
 /**
  * @brief Adds a filter to a given filter.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   parent_filter       The parent filter handle
  * @param[in]   child_filter        The child filter handle
@@ -282,4 +282,4 @@ int contacts_filter_add_filter(contacts_filter_h parent_filter, contacts_filter_
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_FILTER_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_FILTER_H__ */
\ No newline at end of file
index 961b5b6..fbbb9c5 100644 (file)
@@ -49,7 +49,7 @@ extern "C"
 /**
  * @brief Adds a contact and a group relationship to the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -76,7 +76,7 @@ int contacts_group_add_contact(int group_id, int contact_id);
 /**
  * @brief Removes a contact and a group relationship from the contacts database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -103,7 +103,7 @@ int contacts_group_remove_contact(int group_id, int contact_id);
 /**
  * @brief Sets a group between the previous group and the next group.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -137,4 +137,4 @@ int contacts_group_set_group_order(int group_id, int previous_group_id, int next
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_GROUP_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_GROUP_H__ */
\ No newline at end of file
index 00b5fb0..19cf4cf 100644 (file)
@@ -21,6 +21,6 @@
 
 #include <contacts_phone_log_internal.h>
 
-#endif //__TIZEN_SOCIAL_CONTACTS_INTERNAL_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_INTERNAL_H__ */
 
 
index 078cbc4..c05eab1 100644 (file)
@@ -49,7 +49,7 @@ extern "C"
 /**
  * @brief Creates a contacts list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a contacts_list using contacts_list_destroy().
  *
@@ -64,12 +64,12 @@ extern "C"
  *
  * @see contacts_list_destroy()
  */
-int contacts_list_create( contacts_list_h* contacts_list );
+int contacts_list_create(contacts_list_h* contacts_list);
 
 /**
  * @brief Destroys a contacts list and releases its all resources.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   contacts_list  The contacts list handle
  * @param[in]   delete_child   Set @c true to destroy child records automatically,
@@ -83,12 +83,12 @@ int contacts_list_create( contacts_list_h* contacts_list );
  *
  * @see contacts_list_create()
  */
-int contacts_list_destroy( contacts_list_h contacts_list, bool delete_child );
+int contacts_list_destroy(contacts_list_h contacts_list, bool delete_child);
 
 /**
  * @brief Retrieves the number of contact entities from a contacts list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   contacts_list           The contacts list handle
  * @param[out]  count                   The count of contact entity
@@ -101,12 +101,12 @@ int contacts_list_destroy( contacts_list_h contacts_list, bool delete_child );
  *
  * @see contacts_list_add()
  */
-int contacts_list_get_count( contacts_list_h contacts_list, int *count );
+int contacts_list_get_count(contacts_list_h contacts_list, int *count);
 
 /**
  * @brief Adds a record to a contacts list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks Same kind of record can be added.
  *
@@ -121,7 +121,7 @@ int contacts_list_get_count( contacts_list_h contacts_list, int *count );
  *
  * @see contacts_list_remove()
  */
-int contacts_list_add( contacts_list_h contacts_list, contacts_record_h record );
+int contacts_list_add(contacts_list_h contacts_list, contacts_record_h record);
 
 /**
  * @brief Removes a record from the contacts list.
@@ -129,7 +129,7 @@ int contacts_list_add( contacts_list_h contacts_list, contacts_record_h record )
  * @details If the record is current record, then current record is changed the next record.\n
  *          If the record is the last record, then current record will be @c NULL.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   contacts_list           The contacts list handle
  * @param[in]   record                  The record handle
@@ -143,14 +143,14 @@ int contacts_list_add( contacts_list_h contacts_list, contacts_record_h record )
  *
  * @see contacts_list_add()
  */
-int contacts_list_remove( contacts_list_h contacts_list, contacts_record_h record );
+int contacts_list_remove(contacts_list_h contacts_list, contacts_record_h record);
 
 /**
  * @brief Retrieves a record from the contacts list.
  *
  * @details The default current record is the first record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You MUST NOT destroy the @a record.
  *          It is destroyed automatically when the @a contacts_list is destroyed.
@@ -165,12 +165,12 @@ int contacts_list_remove( contacts_list_h contacts_list, contacts_record_h recor
  * @retval  #CONTACTS_ERROR_INVALID_PARAMETER   Invalid parameter
  * @retval  #CONTACTS_ERROR_NO_DATA             Requested data does not exist
  */
-int contacts_list_get_current_record_p( contacts_list_h contacts_list, contacts_record_h* record );
+int contacts_list_get_current_record_p(contacts_list_h contacts_list, contacts_record_h* record);
 
 /**
  * @brief Moves a contacts list to the previous position.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  contacts_list    The contacts list handle
  *
@@ -183,12 +183,12 @@ int contacts_list_get_current_record_p( contacts_list_h contacts_list, contacts_
  *
  * @see contacts_list_next()
  */
-int contacts_list_prev( contacts_list_h contacts_list );
+int contacts_list_prev(contacts_list_h contacts_list);
 
 /**
  * @brief Moves a contacts list to the next position.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  contacts_list      The contacts list handle
  *
@@ -201,12 +201,12 @@ int contacts_list_prev( contacts_list_h contacts_list );
  *
  * @see contacts_list_prev()
  */
-int contacts_list_next( contacts_list_h contacts_list );
+int contacts_list_next(contacts_list_h contacts_list);
 
 /**
  * @brief Moves a contacts list to the first position.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  contacts_list   The contacts list handle
  *
@@ -219,12 +219,12 @@ int contacts_list_next( contacts_list_h contacts_list );
  *
  * @see contacts_list_last()
  */
-int contacts_list_first( contacts_list_h contacts_list );
+int contacts_list_first(contacts_list_h contacts_list);
 
 /**
  * @brief Moves a contacts list to the last position.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]  contacts_list    The contacts list handle
  *
@@ -237,7 +237,7 @@ int contacts_list_first( contacts_list_h contacts_list );
  *
  * @see contacts_list_first()
  */
-int contacts_list_last( contacts_list_h contacts_list );
+int contacts_list_last(contacts_list_h contacts_list);
 
 /**
  * @}
@@ -248,4 +248,4 @@ int contacts_list_last( contacts_list_h contacts_list );
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_LIST_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_LIST_H__ */
\ No newline at end of file
index 6af6a4c..dba951a 100644 (file)
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Links a person to another person.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -75,7 +75,7 @@ int contacts_person_link_person(int base_person_id, int person_id);
 /**
  * @brief Unlinks a contact from a person.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -106,7 +106,7 @@ int contacts_person_unlink_contact(int person_id, int contact_id, int* unlinked_
  *
  * @details The person is no longer in the most frequently contacted person list.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -134,7 +134,7 @@ int contacts_person_reset_usage(int person_id, contacts_usage_type_e type);
 /**
  * @brief Sets the order of a (favorite) contact.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -163,7 +163,7 @@ int contacts_person_set_favorite_order(int person_id, int previous_person_id, in
 /**
  * @brief Enumeration for Contacts person properties.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -176,7 +176,7 @@ typedef enum {
 /**
  * @brief Sets a record's default property.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -209,7 +209,7 @@ int contacts_person_set_default_property(contacts_person_property_e property, in
 /**
  * @brief Gets a default property for a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -246,4 +246,4 @@ int contacts_person_get_default_property(contacts_person_property_e property, in
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_PERSON_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_PERSON_H__ */
\ No newline at end of file
index a869f11..6d886ac 100644 (file)
@@ -51,7 +51,7 @@ extern "C"
  *
  * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
  *
- * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ * More details on featuring your application can be found from <a href="https://developer.tizen.org/development/tools/native-tools/manifest-text-editor#feature"><b>Feature Element</b>.</a>
  *
  * <BR>
  * @{
@@ -62,7 +62,7 @@ extern "C"
  * @brief   Resets the phone log's count.
  * @details The number of all types in the phone log will be @c 0.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/callhistory.write
  *
@@ -93,4 +93,4 @@ int contacts_phone_log_reset_statistics(void);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_PHONELOG_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_PHONELOG_H__ */
\ No newline at end of file
index fd00c48..8a76051 100644 (file)
@@ -44,7 +44,7 @@ typedef enum {
 /**
  * @brief Deletes a phone log with extra_data1.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/callhistory.write
  *
@@ -75,4 +75,4 @@ int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_PHONELOG_INTERNAL_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_PHONELOG_INTERNAL_H__ */
\ No newline at end of file
index dc2d6cd..b07029b 100644 (file)
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Creates a query.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a query using contacts_query_destroy().
  *
@@ -67,12 +67,12 @@ extern "C"
  *
  * @see contacts_query_destroy()
  */
-int contacts_query_create( const char* view_uri, contacts_query_h* query );
+int contacts_query_create(const char* view_uri, contacts_query_h* query);
 
 /**
  * @brief Destroys a query.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   query    The query handle
  *
@@ -84,12 +84,12 @@ int contacts_query_create( const char* view_uri, contacts_query_h* query );
  *
  * @see contacts_query_create()
  */
-int contacts_query_destroy( contacts_query_h query );
+int contacts_query_destroy(contacts_query_h query);
 
 /**
  * @brief Adds property IDs for projection.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   query              The query handle
  * @param[in]   property_id_array   The property ID array
@@ -107,7 +107,7 @@ int contacts_query_set_projection(contacts_query_h query, unsigned int property_
 /**
  * @brief Sets the "distinct" option for projection.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   query           The query handle
  * @param[in]   set             Set @c true to set the distinct option for projection,
@@ -124,7 +124,7 @@ int contacts_query_set_distinct(contacts_query_h query, bool set);
 /**
  * @brief Sets a filter for query.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   query           The query handle
  * @param[in]   filter          The filter handle
@@ -142,7 +142,7 @@ int contacts_query_set_filter(contacts_query_h query, contacts_filter_h filter);
 /**
  * @brief Sets a sort mode for query.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   query           The query handle
  * @param[in]   property_id     The property ID to sort
@@ -168,4 +168,4 @@ int contacts_query_set_sort(contacts_query_h query, unsigned int property_id, bo
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_QUERY_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_QUERY_H__ */
\ No newline at end of file
index d56f35d..b7311f7 100644 (file)
@@ -49,7 +49,7 @@ extern "C"
 /**
  * @brief Creates a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a record using contacts_record_destroy().
  *
@@ -68,12 +68,12 @@ extern "C"
  *
  * @see contacts_record_destroy()
  */
-int contacts_record_create( const char* view_uri, contacts_record_h* record );
+int contacts_record_create(const char* view_uri, contacts_record_h* record);
 
 /**
  * @brief Destroys a record and releases its all resources.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record         The record handle
  * @param[in]   delete_child   Set @c true to destroy child records automatically,
@@ -87,12 +87,12 @@ int contacts_record_create( const char* view_uri, contacts_record_h* record );
  *
  * @see contacts_record_create()
  */
-int contacts_record_destroy( contacts_record_h record, bool delete_child );
+int contacts_record_destroy(contacts_record_h record, bool delete_child);
 
 /**
  * @brief Makes a clone of a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a cloned_record using contacts_record_destroy().
  *
@@ -108,12 +108,12 @@ int contacts_record_destroy( contacts_record_h record, bool delete_child );
  *
  * @see contacts_record_destroy()
  */
-int contacts_record_clone( contacts_record_h record, contacts_record_h* cloned_record );
+int contacts_record_clone(contacts_record_h record, contacts_record_h* cloned_record);
 
 /**
  * @brief Gets a string from the record handle.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a value using free().
  *
@@ -131,12 +131,12 @@ int contacts_record_clone( contacts_record_h record, contacts_record_h* cloned_r
  * @see contacts_record_get_str_p()
  * @see contacts_record_set_str()
  */
-int contacts_record_get_str( contacts_record_h record, unsigned int property_id, char** value );
+int contacts_record_get_str(contacts_record_h record, unsigned int property_id, char** value);
 
 /**
  * @brief Gets a string pointer from the record handle.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You MUST NOT release @a value.
  *
@@ -154,12 +154,12 @@ int contacts_record_get_str( contacts_record_h record, unsigned int property_id,
  * @see contacts_record_get_str()
  * @see contacts_record_set_str()
  */
-int contacts_record_get_str_p( contacts_record_h record, unsigned int property_id, char** value );
+int contacts_record_get_str_p(contacts_record_h record, unsigned int property_id, char** value);
 
 /**
  * @brief Sets a string to a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -175,12 +175,12 @@ int contacts_record_get_str_p( contacts_record_h record, unsigned int property_i
  * @see contacts_record_get_str()
  * @see contacts_record_get_str_p()
  */
-int contacts_record_set_str( contacts_record_h record, unsigned int property_id, const char* value );
+int contacts_record_set_str(contacts_record_h record, unsigned int property_id, const char* value);
 
 /**
  * @brief Gets a record's integer value.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -195,12 +195,12 @@ int contacts_record_set_str( contacts_record_h record, unsigned int property_id,
  *
  * @see contacts_record_set_int()
  */
-int contacts_record_get_int( contacts_record_h record, unsigned int property_id, int* value );
+int contacts_record_get_int(contacts_record_h record, unsigned int property_id, int* value);
 
 /**
  * @brief Sets an integer value to a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -215,12 +215,12 @@ int contacts_record_get_int( contacts_record_h record, unsigned int property_id,
  *
  * @see contacts_record_get_int()
  */
-int contacts_record_set_int( contacts_record_h record, unsigned int property_id, int value );
+int contacts_record_set_int(contacts_record_h record, unsigned int property_id, int value);
 
 /**
  * @brief Gets a record's long integer value.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -235,12 +235,12 @@ int contacts_record_set_int( contacts_record_h record, unsigned int property_id,
  *
  * @see contacts_record_set_lli()
  */
-int contacts_record_get_lli( contacts_record_h record, unsigned int property_id, long long int *value );
+int contacts_record_get_lli(contacts_record_h record, unsigned int property_id, long long int *value);
 
 /**
  * @brief Sets a long long integer value to a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -255,12 +255,12 @@ int contacts_record_get_lli( contacts_record_h record, unsigned int property_id,
  *
  * @see contacts_record_get_lli()
  */
-int contacts_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value );
+int contacts_record_set_lli(contacts_record_h record, unsigned int property_id, long long int value);
 
 /**
  * @brief Gets a record's boolean value.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -275,12 +275,12 @@ int contacts_record_set_lli( contacts_record_h record, unsigned int property_id,
  *
  * @see contacts_record_set_bool()
  */
-int contacts_record_get_bool( contacts_record_h record, unsigned int property_id, bool *value );
+int contacts_record_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
 
 /**
  * @brief Sets a boolean value to a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -295,12 +295,12 @@ int contacts_record_get_bool( contacts_record_h record, unsigned int property_id
  *
  * @see contacts_record_get_bool()
  */
-int contacts_record_set_bool( contacts_record_h record, unsigned int property_id, bool value );
+int contacts_record_set_bool(contacts_record_h record, unsigned int property_id, bool value);
 
 /**
  * @brief Gets a record's double value.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -315,12 +315,12 @@ int contacts_record_set_bool( contacts_record_h record, unsigned int property_id
  *
  * @see contacts_record_set_double()
  */
-int contacts_record_get_double( contacts_record_h record, unsigned int property_id, double *value );
+int contacts_record_get_double(contacts_record_h record, unsigned int property_id, double *value);
 
 /**
  * @brief Sets a double value to a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The record handle
  * @param[in]   property_id     The property ID
@@ -335,12 +335,12 @@ int contacts_record_get_double( contacts_record_h record, unsigned int property_
  *
  * @see contacts_record_get_double()
  */
-int contacts_record_set_double( contacts_record_h record, unsigned int property_id, double value );
+int contacts_record_set_double(contacts_record_h record, unsigned int property_id, double value);
 
 /**
  * @brief Adds a child record to the parent record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The parent record handle
  * @param[in]   property_id     The property ID
@@ -355,12 +355,12 @@ int contacts_record_set_double( contacts_record_h record, unsigned int property_
  *
  * @see contacts_record_remove_child_record()
  */
-int contacts_record_add_child_record( contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
+int contacts_record_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
 
 /**
  * @brief Removes a child record from the parent record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The parent record handle
  * @param[in]   property_id     The property ID
@@ -375,12 +375,12 @@ int contacts_record_add_child_record( contacts_record_h record, unsigned int pro
  *
  * @see contacts_record_add_child_record()
  */
-int contacts_record_remove_child_record( contacts_record_h record, unsigned int property_id, contacts_record_h child_record );
+int contacts_record_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
 
 /**
  * @brief Gets the number of child records of a parent record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record          The parent record handle
  * @param[in]   property_id     The property ID
@@ -396,12 +396,12 @@ int contacts_record_remove_child_record( contacts_record_h record, unsigned int
  * @see contacts_record_add_child_record()
  * @see contacts_record_remove_child_record()
  */
-int contacts_record_get_child_record_count( contacts_record_h record, unsigned int property_id, int *count );
+int contacts_record_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
 
 /**
  * @brief Gets a child record handle pointer from the parent record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You MUST NOT release @a child_record. It is released when the parent record is destroyed.
  *
@@ -422,12 +422,12 @@ int contacts_record_get_child_record_count( contacts_record_h record, unsigned i
  * @see contacts_record_remove_child_record()
  * @see contacts_record_get_child_record_count()
  */
-int contacts_record_get_child_record_at_p( contacts_record_h record, unsigned int property_id, int index, contacts_record_h* child_record );
+int contacts_record_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h* child_record);
 
 /**
  * @brief Clones a child record list of the given parent record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks You must release @a cloned_list using contacts_list_destroy().
  *
@@ -444,12 +444,12 @@ int contacts_record_get_child_record_at_p( contacts_record_h record, unsigned in
  *
  * @see contacts_list_destroy()
  */
-int contacts_record_clone_child_record_list( contacts_record_h record, unsigned int property_id, contacts_list_h* cloned_list );
+int contacts_record_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h* cloned_list);
 
 /**
  * @brief Gets URI string from a record.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record                 The record handle
  * @param[out]  view_uri                       The URI of record
@@ -461,7 +461,7 @@ int contacts_record_clone_child_record_list( contacts_record_h record, unsigned
  * @retval  #CONTACTS_ERROR_INVALID_PARAMETER    Invalid parameter
  * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
  */
-int contacts_record_get_uri_p( contacts_record_h record, const char** view_uri );
+int contacts_record_get_uri_p(contacts_record_h record, const char** view_uri);
 
 /**
  * @}
@@ -472,4 +472,4 @@ int contacts_record_get_uri_p( contacts_record_h record, const char** view_uri )
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_RECORD_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_RECORD_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 10f1597..0372dc9
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Connects to the contacts service.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks Connection opening is necessary to access the contacts server such as fetching, inserting, or updating records.\n
  *          The execution of contacts_connect() and contacts_disconnect() could slow down your application. So it is not recommended to call them frequently.
@@ -57,10 +57,10 @@ extern "C"
  *          otherwise a negative error value
  *
  * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_DB                  Database operation failure
- * @retval  #CONTACTS_ERROR_IPC_NOT_AVALIABLE   IPC server is not available
  * @retval  #CONTACTS_ERROR_IPC                 IPC error
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY       Out of memory
  * @retval  #CONTACTS_ERROR_SYSTEM              System error
+ * @retval  #CONTACTS_ERROR_INTERNAL            Internal error
  *
  * @see contacts_disconnect()
  */
@@ -69,7 +69,7 @@ int contacts_connect(void);
 /**
  * @brief Disconnects from the contacts service.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks If there is no opened connection, this function returns #CONTACTS_ERROR_DB.
  *
@@ -77,9 +77,10 @@ int contacts_connect(void);
  *          otherwise a negative error value
  *
  * @retval  #CONTACTS_ERROR_NONE                  Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER     Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                    Database operation failure
  * @retval  #CONTACTS_ERROR_IPC                   IPC error
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY         Out of memory
+ * @retval  #CONTACTS_ERROR_SYSTEM                System error
+ * @retval  #CONTACTS_ERROR_DB                    Database operation failure
  *
  * @see contacts_connect()
  */
@@ -88,7 +89,7 @@ int contacts_disconnect(void);
 /**
  * @brief Connects to the contacts service with a connection on another thread.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @remarks Opening connection is necessary to access the contact server and to perform operations such as fetching, inserting, or updating records.\n
  *          On multiple thread environment with contacts_connect(), request can be failed in one thread, while another request is working by the connection in the other thread.
@@ -98,10 +99,8 @@ int contacts_disconnect(void);
  *          otherwise a negative error value
  *
  * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY       Out of memory
- * @retval  #CONTACTS_ERROR_DB                  Database operation failure
- * @retval  #CONTACTS_ERROR_IPC_NOT_AVALIABLE   IPC server is not available
  * @retval  #CONTACTS_ERROR_IPC                 IPC error
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY       Out of memory
  * @retval  #CONTACTS_ERROR_SYSTEM              System error
  * @retval  #CONTACTS_ERROR_INTERNAL            Internal error
  *
@@ -112,15 +111,18 @@ int contacts_connect_on_thread(void);
 /**
  * @brief Disconnects from the contacts service.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
+ *
+ * @remarks If there is no opened connection, this function returns #CONTACTS_ERROR_DB.
  *
  * @return  @c 0 on success,
  *          otherwise a negative error value
  *
  * @retval  #CONTACTS_ERROR_NONE                  Successful
- * @retval  #CONTACTS_ERROR_INVALID_PARAMETER     Invalid parameter
- * @retval  #CONTACTS_ERROR_DB                    Database operation failure
  * @retval  #CONTACTS_ERROR_IPC                   IPC error
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY         Out of memory
+ * @retval  #CONTACTS_ERROR_SYSTEM                System error
+ * @retval  #CONTACTS_ERROR_DB                    Database operation failure
  *
  * @see contacts_connect_on_thread()
  */
@@ -130,7 +132,7 @@ int contacts_disconnect_on_thread(void);
 /**
  * @brief Definition for contacts_connect_with_flags(). If it is called the API with this flag, then retry to call contacts_connect() for several times.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @see contacts_connect_with_flags()
  */
@@ -139,7 +141,7 @@ int contacts_disconnect_on_thread(void);
 /**
  * @brief Definition for default flag of contacts_connect_with_flags().
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @see contacts_connect_with_flags()
  */
@@ -148,7 +150,7 @@ int contacts_disconnect_on_thread(void);
 /**
  * @brief Connects to the contacts service.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   flags  connection flag
  *
@@ -161,10 +163,10 @@ int contacts_disconnect_on_thread(void);
  *          otherwise a negative error value
  *
  * @retval  #CONTACTS_ERROR_NONE                Successful
- * @retval  #CONTACTS_ERROR_DB                  Database operation failure
- * @retval  #CONTACTS_ERROR_IPC_NOT_AVALIABLE   IPC server is not available
  * @retval  #CONTACTS_ERROR_IPC                 IPC error
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY       Out of memory
  * @retval  #CONTACTS_ERROR_SYSTEM              System error
+ * @retval  #CONTACTS_ERROR_INTERNAL            Internal error
  *
  * @see  contacts_disconnect()
  */
@@ -180,4 +182,4 @@ int contacts_connect_with_flags(unsigned int flags);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_SERVICE_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_SERVICE_H__ */
old mode 100755 (executable)
new mode 100644 (file)
index 5a51ab7..31ecaba
@@ -48,7 +48,7 @@ extern "C"
 /**
  * @brief Enumeration for name display order.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -60,7 +60,7 @@ typedef enum
 /**
  * @brief Gets the contacts name display order.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -84,7 +84,7 @@ int contacts_setting_get_name_display_order(contacts_name_display_order_e *name_
 /**
  * @brief Sets the contacts name display order.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -111,7 +111,7 @@ int contacts_setting_set_name_display_order(contacts_name_display_order_e name_d
 /**
  * @brief Enumeration for name sorting order.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum
@@ -124,7 +124,7 @@ typedef enum
 /**
  * @brief Gets the contacts name sorting order in which contacts are returned.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -148,7 +148,7 @@ int contacts_setting_get_name_sorting_order(contacts_name_sorting_order_e *name_
 /**
  * @brief Sets the contacts name sorting order in which contacts are returned.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -174,7 +174,7 @@ int contacts_setting_set_name_sorting_order(contacts_name_sorting_order_e name_s
 /**
  * @brief Called when a designated view changes.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   name_display_order  The name display order setting value
  * @param[in]   user_data           The user data passed from the callback registration function
@@ -191,7 +191,7 @@ typedef void (*contacts_setting_name_display_order_changed_cb)(contacts_name_dis
 /**
  * @brief Registers a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -219,7 +219,7 @@ int contacts_setting_add_name_display_order_changed_cb(contacts_setting_name_dis
 /**
  * @brief Unregisters a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @param[in]   callback   The callback function to register
  * @param[in]   user_data  The user data to be passed to the callback function
  *
@@ -241,7 +241,7 @@ int contacts_setting_remove_name_display_order_changed_cb(contacts_setting_name_
 /**
  * @brief Called when a designated view changes.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @param[in]   name_sorting_order  The name sorting order setting value
  * @param[in]   user_data           The user data passed from the callback registration function
  *
@@ -257,7 +257,7 @@ typedef void (*contacts_setting_name_sorting_order_changed_cb)(contacts_name_sor
 /**
  * @brief Registers a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -285,7 +285,7 @@ int contacts_setting_add_name_sorting_order_changed_cb(contacts_setting_name_sor
 /**
  * @brief Unregisters a callback function.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @param[in]   callback    The callback function to register
  * @param[in]   user_data   The user data to be passed to the callback function
  *
@@ -313,4 +313,4 @@ int contacts_setting_remove_name_sorting_order_changed_cb(contacts_setting_name_
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_SETTING_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_SETTING_H__ */
\ No newline at end of file
index 6e7dbe1..2b337ae 100644 (file)
@@ -51,7 +51,7 @@ extern "C"
  *
  * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
  *
- * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ * More details on featuring your application can be found from <a href="https://developer.tizen.org/development/tools/native-tools/manifest-text-editor#feature"><b>Feature Element</b>.</a>
  * <BR>
  * @{
  */
@@ -59,7 +59,7 @@ extern "C"
 /**
  * @brief Imports all contacts from SIM to Contacts Database.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.write
  *
@@ -85,7 +85,7 @@ int contacts_sim_import_all_contacts(void);
 /**
  * @brief Checks whether SIM initialization is completed.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -117,4 +117,4 @@ int contacts_sim_get_initialization_status(bool *completed);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_SIM_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_SIM_H__ */
\ No newline at end of file
index 35004c0..51a7f5c 100644 (file)
@@ -64,10 +64,11 @@ extern "C"
 
 #define _CONTACTS_HANDLE(A) typedef struct __##A{}* A;
 
-_CONTACTS_HANDLE( contacts_record_h )
-_CONTACTS_HANDLE( contacts_filter_h )
-_CONTACTS_HANDLE( contacts_list_h )
-_CONTACTS_HANDLE( contacts_query_h )
+_CONTACTS_HANDLE(contacts_record_h)
+_CONTACTS_HANDLE(contacts_filter_h)
+_CONTACTS_HANDLE(contacts_list_h)
+_CONTACTS_HANDLE(contacts_query_h)
+_CONTACTS_HANDLE(contacts_h)
 
 /**
  * @file contacts_types.h
@@ -85,7 +86,7 @@ _CONTACTS_HANDLE( contacts_query_h )
  *          \n Example : CTS_NUM_TYPE_HOME|CTS_NUM_TYPE_VOICE
  *          \n Exceptionally, CTS_NUM_TYPE_CUSTOM is exclusive.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -113,7 +114,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact email type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -127,7 +128,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact company type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -139,7 +140,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact address type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -156,7 +157,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact URL type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -169,7 +170,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact messenger type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum{
@@ -190,7 +191,7 @@ typedef enum{
 /**
  * @brief Enumeration for Call history type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -223,7 +224,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact event type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -236,7 +237,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact event calendar type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -247,7 +248,7 @@ typedef enum {
 /**
  * @brief Enumeration of Contact image type
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -258,7 +259,7 @@ typedef enum {
 /**
  * @brief Enumeration for usage type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -270,7 +271,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact display name source type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -285,7 +286,7 @@ typedef enum {
 /**
  * @brief Enumeration for Address book mode.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -296,7 +297,7 @@ typedef enum {
 /**
  * @brief Enumeration for link mode when inserting contact.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum{
@@ -307,7 +308,7 @@ typedef enum{
 /**
  * @brief Enumeration for Contact relationship type.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
@@ -332,7 +333,7 @@ typedef enum {
 /**
  * @brief Enumeration for Contact search range.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  */
 typedef enum {
index 7665282..1f69a7e 100644 (file)
@@ -49,7 +49,7 @@ extern "C"
 /**
  * @brief Called to get a record handle of @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_contact.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   record     The record handle
  * @param[in]   user_data  The user data passed from the foreach function
@@ -66,7 +66,7 @@ typedef bool (*contacts_vcard_parse_cb)(contacts_record_h record, void *user_dat
 /**
  * @brief Retrieves all contacts with a record handle (_contacts_contact) from a vCard file.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   vcard_file_path     The file path of vCard stream file
  * @param[in]   callback            The callback function to invoke
@@ -91,7 +91,7 @@ int contacts_vcard_parse_to_contact_foreach(const char *vcard_file_path, contact
 /**
  * @brief Retrieves all contacts with a contacts list from a vCard stream.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   vcard_stream            The vCard stream
  * @param[out]  contacts_list           The contacts list handle
@@ -111,7 +111,7 @@ int contacts_vcard_parse_to_contacts(const char *vcard_stream, contacts_list_h *
 /**
  * @brief Retrieves the vCard stream from a contact.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   contact                 The contact record handle
  * @param[out]  vcard_stream            The vCard stream
@@ -128,7 +128,7 @@ int contacts_vcard_make_from_contact(contacts_record_h contact, char **vcard_str
 /**
  * @brief Retrieves the vCard stream from a contact.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   my_profile              The my_profile record handle
  * @param[out]  vcard_stream            The vCard stream
@@ -146,7 +146,7 @@ int contacts_vcard_make_from_my_profile(contacts_record_h my_profile, char **vca
 /**
  * @brief Retrieves the vCard stream from a person.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  * @privlevel public
  * @privilege %http://tizen.org/privilege/contact.read
  *
@@ -172,7 +172,7 @@ int contacts_vcard_make_from_person(contacts_record_h person, char **vcard_strea
 /**
  * @brief Retrieves the count of contact entities from a vCard file.
  *
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.4 @endif
  *
  * @param[in]   vcard_file_path             The person record handle
  * @param[out]  count                       The count of contact entity
@@ -195,4 +195,4 @@ int contacts_vcard_get_entity_count(const char *vcard_file_path, int *count);
 #endif
 
 
-#endif //__TIZEN_SOCIAL_CONTACTS_VCARD_H__
+#endif /* __TIZEN_SOCIAL_CONTACTS_VCARD_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index a66babc..83b6179
@@ -123,11 +123,11 @@ extern "C"
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( account_id )            // read, write once
-    _CONTACTS_PROPERTY_STR( name )                  // read, write
-    _CONTACTS_PROPERTY_INT( mode )                  // read, write
-_CONTACTS_END_VIEW( _contacts_address_book )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(account_id)            /* read, write once */
+    _CONTACTS_PROPERTY_STR(name)                  /* read, write */
+    _CONTACTS_PROPERTY_INT(mode)                  /* read, write */
+_CONTACTS_END_VIEW(_contacts_address_book)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -153,16 +153,16 @@ _CONTACTS_END_VIEW( _contacts_address_book )
  *
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( address_book_id )       // read, write once
-    _CONTACTS_PROPERTY_STR( name )                  // read, write
-    _CONTACTS_PROPERTY_STR( ringtone_path )         // read, write
-    _CONTACTS_PROPERTY_STR( image_path )            // read, write
-    _CONTACTS_PROPERTY_STR( vibration )             // read, write
-    _CONTACTS_PROPERTY_STR( extra_data )            // read, write, string
-    _CONTACTS_PROPERTY_BOOL( is_read_only )         // read, write once
-    _CONTACTS_PROPERTY_STR( message_alert )         // read, write
-_CONTACTS_END_VIEW( _contacts_group )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(address_book_id)       /* read, write once */
+    _CONTACTS_PROPERTY_STR(name)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(ringtone_path)         /* read, write */
+    _CONTACTS_PROPERTY_STR(image_path)            /* read, write */
+    _CONTACTS_PROPERTY_STR(vibration)             /* read, write */
+    _CONTACTS_PROPERTY_STR(extra_data)            /* read, write, string */
+    _CONTACTS_PROPERTY_BOOL(is_read_only)         /* read, write once */
+    _CONTACTS_PROPERTY_STR(message_alert)         /* read, write */
+_CONTACTS_END_VIEW(_contacts_group)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -193,22 +193,22 @@ _CONTACTS_END_VIEW( _contacts_group )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_STR( display_name )          // read only
-    _CONTACTS_PROPERTY_STR( display_name_index)     // read only
-    _CONTACTS_PROPERTY_INT( display_contact_id )    // read, write
-    _CONTACTS_PROPERTY_STR( ringtone_path )         // read, write
-    _CONTACTS_PROPERTY_STR( image_thumbnail_path )  // read only
-    _CONTACTS_PROPERTY_STR( vibration )             // read, write
-    _CONTACTS_PROPERTY_STR( status )                // read only
-    _CONTACTS_PROPERTY_BOOL( is_favorite )          // read, write
-    _CONTACTS_PROPERTY_DOUBLE( favorite_priority )  // sort only
-    _CONTACTS_PROPERTY_INT( link_count )            // read only
-    _CONTACTS_PROPERTY_STR( addressbook_ids )       // read only
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )      // read only
-    _CONTACTS_PROPERTY_BOOL( has_email )            // read only
-    _CONTACTS_PROPERTY_STR( message_alert )         // read, write
-_CONTACTS_END_VIEW( _contacts_person )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_STR(display_name)          /* read only */
+    _CONTACTS_PROPERTY_STR(display_name_index)    /* read only */
+    _CONTACTS_PROPERTY_INT(display_contact_id)    /* read, write */
+    _CONTACTS_PROPERTY_STR(ringtone_path)         /* read, write */
+    _CONTACTS_PROPERTY_STR(image_thumbnail_path)  /* read only */
+    _CONTACTS_PROPERTY_STR(vibration)             /* read, write */
+    _CONTACTS_PROPERTY_STR(status)                /* read only */
+    _CONTACTS_PROPERTY_BOOL(is_favorite)          /* read, write */
+    _CONTACTS_PROPERTY_DOUBLE(favorite_priority)  /* sort only */
+    _CONTACTS_PROPERTY_INT(link_count)            /* read only */
+    _CONTACTS_PROPERTY_STR(addressbook_ids)       /* read only */
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)      /* read only */
+    _CONTACTS_PROPERTY_BOOL(has_email)            /* read only */
+    _CONTACTS_PROPERTY_STR(message_alert)         /* read, write */
+_CONTACTS_END_VIEW(_contacts_person)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -239,21 +239,21 @@ _CONTACTS_END_VIEW( _contacts_person )
  *
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_STR( display_name )          // read only
-    _CONTACTS_PROPERTY_INT( display_source_type)    // read only
-    _CONTACTS_PROPERTY_INT( address_book_id )       // read only
-    _CONTACTS_PROPERTY_STR( ringtone_path )         // read only
-    _CONTACTS_PROPERTY_STR( image_thumbnail_path )  // read only
-    _CONTACTS_PROPERTY_BOOL( is_favorite )          // read only
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )      // read only
-    _CONTACTS_PROPERTY_BOOL( has_email )            // read only
-    _CONTACTS_PROPERTY_INT( person_id )             // read only
-    _CONTACTS_PROPERTY_STR( uid )                   // read only
-    _CONTACTS_PROPERTY_STR( vibration )             // read only
-    _CONTACTS_PROPERTY_INT( changed_time )          // read only
-    _CONTACTS_PROPERTY_STR( message_alert )         // read only
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_simple_contact )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_STR(display_name)          /* read only */
+    _CONTACTS_PROPERTY_INT(display_source_type)   /* read only */
+    _CONTACTS_PROPERTY_INT(address_book_id)       /* read only */
+    _CONTACTS_PROPERTY_STR(ringtone_path)         /* read only */
+    _CONTACTS_PROPERTY_STR(image_thumbnail_path)  /* read only */
+    _CONTACTS_PROPERTY_BOOL(is_favorite)          /* read only */
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)      /* read only */
+    _CONTACTS_PROPERTY_BOOL(has_email)            /* read only */
+    _CONTACTS_PROPERTY_INT(person_id)             /* read only */
+    _CONTACTS_PROPERTY_STR(uid)                   /* read only */
+    _CONTACTS_PROPERTY_STR(vibration)             /* read only */
+    _CONTACTS_PROPERTY_INT(changed_time)          /* read only */
+    _CONTACTS_PROPERTY_STR(message_alert)         /* read only */
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_simple_contact)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -298,37 +298,37 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_simple_contact )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                        // read only
-    _CONTACTS_PROPERTY_STR( display_name )              // read only
-    _CONTACTS_PROPERTY_INT( display_source_type )       // read only
-    _CONTACTS_PROPERTY_INT( address_book_id )           // read, write once
-    _CONTACTS_PROPERTY_STR( ringtone_path )             // read, write
-    _CONTACTS_PROPERTY_STR( image_thumbnail_path )      // read only
-    _CONTACTS_PROPERTY_BOOL( is_favorite )              // read, write
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )          // read only
-    _CONTACTS_PROPERTY_BOOL( has_email )                // read only
-    _CONTACTS_PROPERTY_INT( person_id )                 // read, write once
-    _CONTACTS_PROPERTY_STR( uid )                       // read, write
-    _CONTACTS_PROPERTY_STR( vibration )                 // read, write
-    _CONTACTS_PROPERTY_INT( changed_time )              // read only
-    _CONTACTS_PROPERTY_INT( link_mode )                 // read, write
-    _CONTACTS_PROPERTY_CHILD_SINGLE( name )             // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( image )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( company )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( note )           // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( number )         // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( email )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( event )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( messenger )      // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( address )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( url )            // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( nickname )       // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( profile )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( relationship )   // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( group_relation ) // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( extension )      // read, write
-    _CONTACTS_PROPERTY_STR( message_alert )             // read, write
-_CONTACTS_END_VIEW( _contacts_contact )
+    _CONTACTS_PROPERTY_INT(id)                        /* read only */
+    _CONTACTS_PROPERTY_STR(display_name)              /* read only */
+    _CONTACTS_PROPERTY_INT(display_source_type)       /* read only */
+    _CONTACTS_PROPERTY_INT(address_book_id)           /* read, write once */
+    _CONTACTS_PROPERTY_STR(ringtone_path)             /* read, write */
+    _CONTACTS_PROPERTY_STR(image_thumbnail_path)      /* read only */
+    _CONTACTS_PROPERTY_BOOL(is_favorite)              /* read, write */
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)          /* read only */
+    _CONTACTS_PROPERTY_BOOL(has_email)                /* read only */
+    _CONTACTS_PROPERTY_INT(person_id)                 /* read, write once */
+    _CONTACTS_PROPERTY_STR(uid)                       /* read, write */
+    _CONTACTS_PROPERTY_STR(vibration)                 /* read, write */
+    _CONTACTS_PROPERTY_INT(changed_time)              /* read only */
+    _CONTACTS_PROPERTY_INT(link_mode)                 /* read, write */
+    _CONTACTS_PROPERTY_CHILD_SINGLE(name)             /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(image)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(company)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(note)           /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(number)         /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(email)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(event)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(messenger)      /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(address)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(url)            /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(nickname)       /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(profile)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(relationship)   /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(group_relation) /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(extension)      /* read, write */
+    _CONTACTS_PROPERTY_STR(message_alert)             /* read, write */
+_CONTACTS_END_VIEW(_contacts_contact)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -363,27 +363,27 @@ _CONTACTS_END_VIEW( _contacts_contact )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                        // read only
-    _CONTACTS_PROPERTY_STR( display_name )              // read only
-    _CONTACTS_PROPERTY_INT( address_book_id )           // read, write once
-    _CONTACTS_PROPERTY_STR( image_thumbnail_path )      // read only
-    _CONTACTS_PROPERTY_STR( uid )                       // read, write
-    _CONTACTS_PROPERTY_INT( changed_time )              // read only
-    _CONTACTS_PROPERTY_CHILD_SINGLE( name )             // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( image )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( company )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( note )           // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( number )         // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( email )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( event )          // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( messenger )      // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( address )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( url )            // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( nickname )       // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( profile )        // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( relationship )   // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE( extension )      // read, write
-_CONTACTS_END_VIEW( _contacts_my_profile )
+    _CONTACTS_PROPERTY_INT(id)                        /* read only */
+    _CONTACTS_PROPERTY_STR(display_name)              /* read only */
+    _CONTACTS_PROPERTY_INT(address_book_id)           /* read, write once */
+    _CONTACTS_PROPERTY_STR(image_thumbnail_path)      /* read only */
+    _CONTACTS_PROPERTY_STR(uid)                       /* read, write */
+    _CONTACTS_PROPERTY_INT(changed_time)              /* read only */
+    _CONTACTS_PROPERTY_CHILD_SINGLE(name)             /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(image)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(company)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(note)           /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(number)         /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(email)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(event)          /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(messenger)      /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(address)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(url)            /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(nickname)       /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(profile)        /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(relationship)   /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(extension)      /* read, write */
+_CONTACTS_END_VIEW(_contacts_my_profile)
 
 
 /**
@@ -410,17 +410,17 @@ _CONTACTS_END_VIEW( _contacts_my_profile )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_STR( first )             // read, write
-    _CONTACTS_PROPERTY_STR( last )              // read, write
-    _CONTACTS_PROPERTY_STR( addition )          // read, write
-    _CONTACTS_PROPERTY_STR( suffix )            // read, write
-    _CONTACTS_PROPERTY_STR( prefix )            // read, write
-    _CONTACTS_PROPERTY_STR( phonetic_first )    // read, write
-    _CONTACTS_PROPERTY_STR( phonetic_middle )   // read, write
-    _CONTACTS_PROPERTY_STR( phonetic_last )     // read, write
-_CONTACTS_END_VIEW( _contacts_name )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_STR(first)             /* read, write */
+    _CONTACTS_PROPERTY_STR(last)              /* read, write */
+    _CONTACTS_PROPERTY_STR(addition)          /* read, write */
+    _CONTACTS_PROPERTY_STR(suffix)            /* read, write */
+    _CONTACTS_PROPERTY_STR(prefix)            /* read, write */
+    _CONTACTS_PROPERTY_STR(phonetic_first)    /* read, write */
+    _CONTACTS_PROPERTY_STR(phonetic_middle)   /* read, write */
+    _CONTACTS_PROPERTY_STR(phonetic_last)     /* read, write */
+_CONTACTS_END_VIEW(_contacts_name)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -446,16 +446,16 @@ _CONTACTS_END_VIEW( _contacts_name )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_BOOL( is_default )       // read, write
-    _CONTACTS_PROPERTY_STR( number )            // read, write
-    _CONTACTS_PROPERTY_STR( normalized_number ) // filter only
-    _CONTACTS_PROPERTY_STR( cleaned_number )    // filter only
-    _CONTACTS_PROPERTY_STR( number_filter )     // filter only
-_CONTACTS_END_VIEW( _contacts_number )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_BOOL(is_default)       /* read, write */
+    _CONTACTS_PROPERTY_STR(number)            /* read, write */
+    _CONTACTS_PROPERTY_STR(normalized_number) /* filter only */
+    _CONTACTS_PROPERTY_STR(cleaned_number)    /* filter only */
+    _CONTACTS_PROPERTY_STR(number_filter)     /* filter only */
+_CONTACTS_END_VIEW(_contacts_number)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -477,13 +477,13 @@ _CONTACTS_END_VIEW( _contacts_number )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_BOOL( is_default )       // read, write
-    _CONTACTS_PROPERTY_STR( email )             // read, write
-_CONTACTS_END_VIEW( _contacts_email )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_BOOL(is_default)       /* read, write */
+    _CONTACTS_PROPERTY_STR(email)             /* read, write */
+_CONTACTS_END_VIEW(_contacts_email)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -511,19 +511,19 @@ _CONTACTS_END_VIEW( _contacts_email )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_STR( postbox )           // read, write
-    _CONTACTS_PROPERTY_STR( extended )          // read, write
-    _CONTACTS_PROPERTY_STR( street )            // read, write
-    _CONTACTS_PROPERTY_STR( locality )          // read, write
-    _CONTACTS_PROPERTY_STR( region )            // read, write
-    _CONTACTS_PROPERTY_STR( postal_code )       // read, write
-    _CONTACTS_PROPERTY_STR( country )           // read, write
-    _CONTACTS_PROPERTY_BOOL( is_default )       // read, write
-_CONTACTS_END_VIEW( _contacts_address )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_STR(postbox)           /* read, write */
+    _CONTACTS_PROPERTY_STR(extended)          /* read, write */
+    _CONTACTS_PROPERTY_STR(street)            /* read, write */
+    _CONTACTS_PROPERTY_STR(locality)          /* read, write */
+    _CONTACTS_PROPERTY_STR(region)            /* read, write */
+    _CONTACTS_PROPERTY_STR(postal_code)       /* read, write */
+    _CONTACTS_PROPERTY_STR(country)           /* read, write */
+    _CONTACTS_PROPERTY_BOOL(is_default)       /* read, write */
+_CONTACTS_END_VIEW(_contacts_address)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -542,10 +542,10 @@ _CONTACTS_END_VIEW( _contacts_address )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )            // read only
-    _CONTACTS_PROPERTY_INT( contact_id )    // read, write once
-    _CONTACTS_PROPERTY_STR( note )          // read, write
-_CONTACTS_END_VIEW( _contacts_note )
+    _CONTACTS_PROPERTY_INT(id)            /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)    /* read, write once */
+    _CONTACTS_PROPERTY_STR(note)          /* read, write */
+_CONTACTS_END_VIEW(_contacts_note)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -566,12 +566,12 @@ _CONTACTS_END_VIEW( _contacts_note )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_STR( url )               // read, write
-_CONTACTS_END_VIEW( _contacts_url )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_STR(url)               /* read, write */
+_CONTACTS_END_VIEW(_contacts_url)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -588,20 +588,20 @@ _CONTACTS_END_VIEW( _contacts_url )
  * <tr><td>integer</td><td> contact_id </td><td>read, write once</td><td> Contact ID that the event belongs to </td></tr>
  * <tr><td>integer</td><td> type </td><td>read, write</td><td> Event type, refer to the @ref contacts_event_type_e </td></tr>
  * <tr><td>string</td><td> label </td><td>read, write</td><td> Custom event type label, when the event type is #CONTACTS_EVENT_TYPE_CUSTOM </td></tr>
- * <tr><td>integer</td><td> date </td><td>read, write</td><td> Event date(YYYYMMDD). e.g. 2014/1/1 : 20140101 </td></tr>
+ * <tr><td>integer</td><td> date </td><td>read, write</td><td> Event date(YYYYMMDD). e.g. 2014/1/1 : 20140101. If the calendar_type is set as CONTACTS_EVENT_CALENDAR_TYPE_CHINESE, you SHOULD convert this value to lunar date </td></tr>
  * <tr><td>integer</td><td> calendar_type </td><td>read, write</td><td> Calendar type, refer to the @ref contacts_event_calendar_type_e </td></tr>
- * <tr><td>bool</td><td> is_leap_month </td><td>read, write</td><td> The month is leap or not (valid on lunisolar calendar only) </td></tr>
+ * <tr><td>bool</td><td> is_leap_month (Deprecated) </td><td>read, write</td><td> The month is leap or not (valid on lunisolar calendar only) </td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_INT( date )              // read, write
-    _CONTACTS_PROPERTY_INT( calendar_type )     // read, write
-    _CONTACTS_PROPERTY_BOOL( is_leap_month )    // read, write
-_CONTACTS_END_VIEW( _contacts_event )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_INT(date)              /* read, write */
+    _CONTACTS_PROPERTY_INT(calendar_type)     /* read, write */
+    _CONTACTS_PROPERTY_BOOL(is_leap_month)    /* read, write (Deprecated since 2.4) */
+_CONTACTS_END_VIEW(_contacts_event)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -615,18 +615,18 @@ _CONTACTS_END_VIEW( _contacts_event )
  *    <th>Description</th>
  * </tr>
  * <tr><td>string</td><td>_uri</td><td>read only</td><td> Identifier of this relationship view </td></tr>
- * <tr><td>integer</td><td> id </td><td>read only</td><td> DB record ID of the group (can not used as filter) </td></tr>
+ * <tr><td>integer</td><td> id </td><td>read only</td><td> DB record ID of the group (can not be used as filter) </td></tr>
  * <tr><td>integer</td><td> group_id </td><td>read, write once</td><td> DB record ID of the group </td></tr>
  * <tr><td>integer</td><td> contact_id </td><td>read, write once</td><td> DB record ID of the contact </td></tr>
  * <tr><td>string</td><td> name </td><td>read only</td><td> Group name </td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only, can not used as filter
-    _CONTACTS_PROPERTY_INT( group_id )          // read, write once
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_STR( name )              // read only
-_CONTACTS_END_VIEW( _contacts_group_relation )
+    _CONTACTS_PROPERTY_INT(id)                /* read only, can not be used as filter */
+    _CONTACTS_PROPERTY_INT(group_id)          /* read, write once */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_STR(name)              /* read only */
+_CONTACTS_END_VIEW(_contacts_group_relation)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -648,12 +648,12 @@ _CONTACTS_END_VIEW( _contacts_group_relation )
  *
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_STR( name )              // read, write
-_CONTACTS_END_VIEW( _contacts_relationship )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_STR(name)              /* read, write */
+_CONTACTS_END_VIEW(_contacts_relationship)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -674,13 +674,13 @@ _CONTACTS_END_VIEW( _contacts_relationship )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                // read only
-    _CONTACTS_PROPERTY_INT( contact_id )        // read, write once
-    _CONTACTS_PROPERTY_INT( type )              // read, write
-    _CONTACTS_PROPERTY_STR( label )             // read, write
-    _CONTACTS_PROPERTY_STR( path )              // read, write
-    _CONTACTS_PROPERTY_BOOL( is_default )
-_CONTACTS_END_VIEW( _contacts_image )
+    _CONTACTS_PROPERTY_INT(id)                /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)        /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)              /* read, write */
+    _CONTACTS_PROPERTY_STR(label)             /* read, write */
+    _CONTACTS_PROPERTY_STR(path)              /* read, write */
+    _CONTACTS_PROPERTY_BOOL(is_default)
+_CONTACTS_END_VIEW(_contacts_image)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -709,20 +709,20 @@ _CONTACTS_END_VIEW( _contacts_image )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-    _CONTACTS_PROPERTY_INT( type )                  // read, write
-    _CONTACTS_PROPERTY_STR( label )                 // read, write
-    _CONTACTS_PROPERTY_STR( name )                  // read, write
-    _CONTACTS_PROPERTY_STR( department )            // read, write
-    _CONTACTS_PROPERTY_STR( job_title )             // read, write
-    _CONTACTS_PROPERTY_STR( assistant_name )        // read, write
-    _CONTACTS_PROPERTY_STR( role )                  // read, write
-    _CONTACTS_PROPERTY_STR( logo )                  // read, write
-    _CONTACTS_PROPERTY_STR( location )              // read, write
-    _CONTACTS_PROPERTY_STR( description )           // read, write
-    _CONTACTS_PROPERTY_STR( phonetic_name )         // read, write
-_CONTACTS_END_VIEW( _contacts_company )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(label)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(name)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(department)            /* read, write */
+    _CONTACTS_PROPERTY_STR(job_title)             /* read, write */
+    _CONTACTS_PROPERTY_STR(assistant_name)        /* read, write */
+    _CONTACTS_PROPERTY_STR(role)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(logo)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(location)              /* read, write */
+    _CONTACTS_PROPERTY_STR(description)           /* read, write */
+    _CONTACTS_PROPERTY_STR(phonetic_name)         /* read, write */
+_CONTACTS_END_VIEW(_contacts_company)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -737,14 +737,14 @@ _CONTACTS_END_VIEW( _contacts_company )
  * <tr><td>string</td><td>_uri</td><td>read only</td><td> Identifier of this contacts nickname view </td></tr>
  * <tr><td>integer</td><td> id </td><td>read only</td><td> DB record ID of the nickname </td></tr>
  * <tr><td>integer</td><td> contact_id </td><td>read, write once</td><td> Contact ID that the nickname belongs to </td></tr>
- * <tr><td>string</td><td> nickname </td><td>read, write</td><td> Nickname </td></tr>
+ * <tr><td>string</td><td> name </td><td>read, write</td><td> Nickname </td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-    _CONTACTS_PROPERTY_STR( name )                  // read, write
-_CONTACTS_END_VIEW( _contacts_nickname )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+    _CONTACTS_PROPERTY_STR(name)                  /* read, write */
+_CONTACTS_END_VIEW(_contacts_nickname)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -765,12 +765,12 @@ _CONTACTS_END_VIEW( _contacts_nickname )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-    _CONTACTS_PROPERTY_INT( type )                  // read, write
-    _CONTACTS_PROPERTY_STR( label )                 // read, write
-    _CONTACTS_PROPERTY_STR( im_id )                 // read, write
-_CONTACTS_END_VIEW( _contacts_messenger )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+    _CONTACTS_PROPERTY_INT(type)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(label)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(im_id)                 /* read, write */
+_CONTACTS_END_VIEW(_contacts_messenger)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -800,21 +800,21 @@ _CONTACTS_END_VIEW( _contacts_messenger )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-    _CONTACTS_PROPERTY_INT( data1 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data2 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data3 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data4 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data5 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data6 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data7 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data8 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data9 )                 // read, write
-    _CONTACTS_PROPERTY_STR( data10 )                // read, write
-    _CONTACTS_PROPERTY_STR( data11 )                // read, write
-    _CONTACTS_PROPERTY_STR( data12 )                // read, write
-_CONTACTS_END_VIEW( _contacts_extension )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+    _CONTACTS_PROPERTY_INT(data1)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data2)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data3)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data4)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data5)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data6)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data7)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data8)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data9)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(data10)                /* read, write */
+    _CONTACTS_PROPERTY_STR(data11)                /* read, write */
+    _CONTACTS_PROPERTY_STR(data12)                /* read, write */
+_CONTACTS_END_VIEW(_contacts_extension)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -834,11 +834,11 @@ _CONTACTS_END_VIEW( _contacts_extension )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_STR( name )                  // read only
-    _CONTACTS_PROPERTY_STR( number )                // read only
-    _CONTACTS_PROPERTY_INT( sim_slot_no )           // read only
-_CONTACTS_END_VIEW( _contacts_sdn )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_STR(name)                  /* read only */
+    _CONTACTS_PROPERTY_STR(number)                /* read only */
+    _CONTACTS_PROPERTY_INT(sim_slot_no)           /* read only */
+_CONTACTS_END_VIEW(_contacts_sdn)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -865,18 +865,18 @@ _CONTACTS_END_VIEW( _contacts_sdn )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_STR( uid )                   // read, write
-    _CONTACTS_PROPERTY_STR( text )                  // read, write
-    _CONTACTS_PROPERTY_INT( order )                 // read, write
-    _CONTACTS_PROPERTY_STR( service_operation )     // read, write
-    _CONTACTS_PROPERTY_STR( mime )                  // read, write
-    _CONTACTS_PROPERTY_STR( app_id )                // read, write
-    _CONTACTS_PROPERTY_STR( uri )                   // read, write
-    _CONTACTS_PROPERTY_STR( category )              // read, write
-    _CONTACTS_PROPERTY_STR( extra_data )            // read, write
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-_CONTACTS_END_VIEW( _contacts_profile )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_STR(uid)                   /* read, write */
+    _CONTACTS_PROPERTY_STR(text)                  /* read, write */
+    _CONTACTS_PROPERTY_INT(order)                 /* read, write */
+    _CONTACTS_PROPERTY_STR(service_operation)     /* read, write */
+    _CONTACTS_PROPERTY_STR(mime)                  /* read, write */
+    _CONTACTS_PROPERTY_STR(app_id)                /* read, write */
+    _CONTACTS_PROPERTY_STR(uri)                   /* read, write */
+    _CONTACTS_PROPERTY_STR(category)              /* read, write */
+    _CONTACTS_PROPERTY_STR(extra_data)            /* read, write */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+_CONTACTS_END_VIEW(_contacts_profile)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -896,11 +896,11 @@ _CONTACTS_END_VIEW( _contacts_profile )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( activity_id )           // read, write once
-    _CONTACTS_PROPERTY_STR( photo_url )             // read, write
-    _CONTACTS_PROPERTY_INT( sort_index )            // read, write
-_CONTACTS_END_VIEW( _contacts_activity_photo )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(activity_id)           /* read, write once */
+    _CONTACTS_PROPERTY_STR(photo_url)             /* read, write */
+    _CONTACTS_PROPERTY_INT(sort_index)            /* read, write */
+_CONTACTS_END_VIEW(_contacts_activity_photo)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -924,15 +924,15 @@ _CONTACTS_END_VIEW( _contacts_activity_photo )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( contact_id )            // read, write once
-    _CONTACTS_PROPERTY_STR( source_name )           // read, write
-    _CONTACTS_PROPERTY_STR( status )                // read, write
-    _CONTACTS_PROPERTY_INT( timestamp )             // read, write
-    _CONTACTS_PROPERTY_STR( service_operation )     // read, write
-    _CONTACTS_PROPERTY_STR( uri )                   // read, write
-    _CONTACTS_PROPERTY_CHILD_MULTIPLE(photo)        // read, write
-_CONTACTS_END_VIEW( _contacts_activity )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(contact_id)            /* read, write once */
+    _CONTACTS_PROPERTY_STR(source_name)           /* read, write */
+    _CONTACTS_PROPERTY_STR(status)                /* read, write */
+    _CONTACTS_PROPERTY_INT(timestamp)             /* read, write */
+    _CONTACTS_PROPERTY_STR(service_operation)     /* read, write */
+    _CONTACTS_PROPERTY_STR(uri)                   /* read, write */
+    _CONTACTS_PROPERTY_CHILD_MULTIPLE(photo)      /* read, write */
+_CONTACTS_END_VIEW(_contacts_activity)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -959,18 +959,18 @@ _CONTACTS_END_VIEW( _contacts_activity )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( speeddial_number )      // read, write once
-    _CONTACTS_PROPERTY_INT( number_id )             // read, write
-    _CONTACTS_PROPERTY_STR( number )                // read only
-    _CONTACTS_PROPERTY_STR( number_label )          // read only
-    _CONTACTS_PROPERTY_INT( number_type )           // read only
-    _CONTACTS_PROPERTY_INT( person_id )             // read only
-    _CONTACTS_PROPERTY_STR( display_name )          // read only
-    _CONTACTS_PROPERTY_STR( image_thumbnail_path )  // read only
-    _CONTACTS_PROPERTY_STR( normalized_number)      // filter only
-    _CONTACTS_PROPERTY_STR( cleaned_number)         // filter only
-    _CONTACTS_PROPERTY_STR( number_filter)          // filter only
-_CONTACTS_END_VIEW( _contacts_speeddial )
+    _CONTACTS_PROPERTY_INT(speeddial_number)      /* read, write once */
+    _CONTACTS_PROPERTY_INT(number_id)             /* read, write */
+    _CONTACTS_PROPERTY_STR(number)                /* read only */
+    _CONTACTS_PROPERTY_STR(number_label)          /* read only */
+    _CONTACTS_PROPERTY_INT(number_type)           /* read only */
+    _CONTACTS_PROPERTY_INT(person_id)             /* read only */
+    _CONTACTS_PROPERTY_STR(display_name)          /* read only */
+    _CONTACTS_PROPERTY_STR(image_thumbnail_path)  /* read only */
+    _CONTACTS_PROPERTY_STR(normalized_number)     /* filter only */
+    _CONTACTS_PROPERTY_STR(cleaned_number)        /* filter only */
+    _CONTACTS_PROPERTY_STR(number_filter)         /* filter only */
+_CONTACTS_END_VIEW(_contacts_speeddial)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -997,18 +997,18 @@ _CONTACTS_END_VIEW( _contacts_speeddial )
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
-    _CONTACTS_PROPERTY_INT( id )                    // read only
-    _CONTACTS_PROPERTY_INT( person_id )             // read, write once
-    _CONTACTS_PROPERTY_STR( address )               // read, write once, number or email
-    _CONTACTS_PROPERTY_INT( log_time )              // read, write once
-    _CONTACTS_PROPERTY_INT( log_type )              // read, write
-    _CONTACTS_PROPERTY_INT( extra_data1 )           // read, write once : message or email ID, duration(seconds)
-    _CONTACTS_PROPERTY_STR( extra_data2 )           // read, write once : shortmsg, subject
-    _CONTACTS_PROPERTY_STR( normalized_address )    // filter only
-    _CONTACTS_PROPERTY_STR( cleaned_address )       // filter only
-    _CONTACTS_PROPERTY_STR( address_filter )        // filter only
-    _CONTACTS_PROPERTY_INT( sim_slot_no )           // read, write once
-_CONTACTS_END_VIEW( _contacts_phone_log )
+    _CONTACTS_PROPERTY_INT(id)                    /* read only */
+    _CONTACTS_PROPERTY_INT(person_id)             /* read, write once */
+    _CONTACTS_PROPERTY_STR(address)               /* read, write once, number or email */
+    _CONTACTS_PROPERTY_INT(log_time)              /* read, write once */
+    _CONTACTS_PROPERTY_INT(log_type)              /* read, write */
+    _CONTACTS_PROPERTY_INT(extra_data1)           /* read, write once : message or email ID, duration(seconds) */
+    _CONTACTS_PROPERTY_STR(extra_data2)           /* read, write once : shortmsg, subject */
+    _CONTACTS_PROPERTY_STR(normalized_address)    /* filter only */
+    _CONTACTS_PROPERTY_STR(cleaned_address)       /* filter only */
+    _CONTACTS_PROPERTY_STR(address_filter)        /* filter only */
+    _CONTACTS_PROPERTY_INT(sim_slot_no)           /* read, write once */
+_CONTACTS_END_VIEW(_contacts_phone_log)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1028,12 +1028,12 @@ _CONTACTS_END_VIEW( _contacts_phone_log )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( type )               // insert/update/delete
-    _CONTACTS_PROPERTY_INT( version )
-    _CONTACTS_PROPERTY_BOOL( image_changed )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_updated_info )
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(type)               /* insert/update/delete */
+    _CONTACTS_PROPERTY_INT(version)
+    _CONTACTS_PROPERTY_BOOL(image_changed)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_updated_info)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1051,10 +1051,10 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_updated_info )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( last_changed_type )
-    _CONTACTS_PROPERTY_INT( version )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_my_profile_updated_info )
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(last_changed_type)
+    _CONTACTS_PROPERTY_INT(version)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_my_profile_updated_info)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1073,11 +1073,11 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_my_profile_updated_info )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( group_id )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( type )                // insert/update/delete
-    _CONTACTS_PROPERTY_INT( version )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_group_updated_info )
+    _CONTACTS_PROPERTY_INT(group_id)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(type)                /* insert/update/delete */
+    _CONTACTS_PROPERTY_INT(version)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_group_updated_info)
 
 
 /**
@@ -1096,10 +1096,10 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_group_updated_info )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-       _CONTACTS_PROPERTY_INT( group_id )
-       _CONTACTS_PROPERTY_INT( address_book_id )
-       _CONTACTS_PROPERTY_INT( version )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_group_member_updated_info )
+       _CONTACTS_PROPERTY_INT(group_id)
+       _CONTACTS_PROPERTY_INT(address_book_id)
+       _CONTACTS_PROPERTY_INT(version)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_group_member_updated_info)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1119,12 +1119,12 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_group_member_updated_info )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( group_id )
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( type )                // insert/delete
-    _CONTACTS_PROPERTY_INT( version )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_grouprel_updated_info )
+    _CONTACTS_PROPERTY_INT(group_id)
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(type)                /* insert/delete */
+    _CONTACTS_PROPERTY_INT(version)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_grouprel_updated_info)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1157,25 +1157,25 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_grouprel_updated_info )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_PROJECTION_STR( status )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_PROJECTION_INT( link_count )
-    _CONTACTS_PROPERTY_PROJECTION_STR( addressbook_ids )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_STR( address_book_name )
-    _CONTACTS_PROPERTY_INT( address_book_mode )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_contact )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_PROJECTION_STR(status)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_PROJECTION_INT(link_count)
+    _CONTACTS_PROPERTY_PROJECTION_STR(addressbook_ids)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_STR(address_book_name)
+    _CONTACTS_PROPERTY_INT(address_book_mode)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_contact)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1210,26 +1210,26 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_contact )
 
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( number_id )
-    _CONTACTS_PROPERTY_PROJECTION_INT( type )
-    _CONTACTS_PROPERTY_PROJECTION_STR( label )
-    _CONTACTS_PROPERTY_BOOL( is_primary_default )
-    _CONTACTS_PROPERTY_STR( number )
-    _CONTACTS_PROPERTY_FILTER_STR( number_filter )
-    _CONTACTS_PROPERTY_FILTER_STR( normalized_number )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-    _CONTACTS_PROPERTY_FILTER_STR( cleaned_number )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_number )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(number_id)
+    _CONTACTS_PROPERTY_PROJECTION_INT(type)
+    _CONTACTS_PROPERTY_PROJECTION_STR(label)
+    _CONTACTS_PROPERTY_BOOL(is_primary_default)
+    _CONTACTS_PROPERTY_STR(number)
+    _CONTACTS_PROPERTY_FILTER_STR(number_filter)
+    _CONTACTS_PROPERTY_FILTER_STR(normalized_number)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+    _CONTACTS_PROPERTY_FILTER_STR(cleaned_number)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_number)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1260,23 +1260,23 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_number )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( email_id )
-    _CONTACTS_PROPERTY_PROJECTION_INT( type )
-    _CONTACTS_PROPERTY_PROJECTION_STR( label )
-    _CONTACTS_PROPERTY_BOOL( is_primary_default )
-    _CONTACTS_PROPERTY_STR( email )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_email )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(email_id)
+    _CONTACTS_PROPERTY_PROJECTION_INT(type)
+    _CONTACTS_PROPERTY_PROJECTION_STR(label)
+    _CONTACTS_PROPERTY_BOOL(is_primary_default)
+    _CONTACTS_PROPERTY_STR(email)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_email)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1310,26 +1310,26 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_email )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_PROJECTION_STR( status )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_PROJECTION_INT( link_count )
-    _CONTACTS_PROPERTY_PROJECTION_STR( addressbook_ids )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( group_id )
-    _CONTACTS_PROPERTY_STR( address_book_name )
-    _CONTACTS_PROPERTY_INT( address_book_mode )
-    _CONTACTS_PROPERTY_PROJECTION_INT( contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_grouprel )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_PROJECTION_STR(status)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_PROJECTION_INT(link_count)
+    _CONTACTS_PROPERTY_PROJECTION_STR(addressbook_ids)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(group_id)
+    _CONTACTS_PROPERTY_STR(address_book_name)
+    _CONTACTS_PROPERTY_INT(address_book_mode)
+    _CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_grouprel)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1362,25 +1362,25 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_grouprel )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_PROJECTION_STR( status )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_PROJECTION_INT( link_count )
-    _CONTACTS_PROPERTY_PROJECTION_STR( linked_address_book_ids )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( group_id )
-    _CONTACTS_PROPERTY_INT( address_book_mode )
-    _CONTACTS_PROPERTY_PROJECTION_INT( contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_group_assigned )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_PROJECTION_STR(status)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_PROJECTION_INT(link_count)
+    _CONTACTS_PROPERTY_PROJECTION_STR(linked_address_book_ids)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(group_id)
+    _CONTACTS_PROPERTY_INT(address_book_mode)
+    _CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_group_assigned)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1412,24 +1412,24 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_group_assigned )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_PROJECTION_STR( status )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_PROJECTION_INT( link_count )
-    _CONTACTS_PROPERTY_PROJECTION_STR( linked_address_book_ids )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( address_book_mode )
-    _CONTACTS_PROPERTY_PROJECTION_INT( contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_group_not_assigned )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_PROJECTION_STR(status)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_PROJECTION_INT(link_count)
+    _CONTACTS_PROPERTY_PROJECTION_STR(linked_address_book_ids)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(address_book_mode)
+    _CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_group_not_assigned)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1458,21 +1458,21 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_group_not_assigned )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_INT( log_id )
-    _CONTACTS_PROPERTY_STR( address )
-    _CONTACTS_PROPERTY_PROJECTION_INT( address_type )
-    _CONTACTS_PROPERTY_INT( log_time )
-    _CONTACTS_PROPERTY_INT( log_type )
-    _CONTACTS_PROPERTY_PROJECTION_INT( extra_data1 )
-    _CONTACTS_PROPERTY_PROJECTION_STR( extra_data2 )
-    _CONTACTS_PROPERTY_FILTER_STR( normalized_address)
-    _CONTACTS_PROPERTY_FILTER_STR( cleaned_address)
-    _CONTACTS_PROPERTY_FILTER_STR( address_filter)
-    _CONTACTS_PROPERTY_INT( sim_slot_no )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_phone_log )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_INT(log_id)
+    _CONTACTS_PROPERTY_STR(address)
+    _CONTACTS_PROPERTY_PROJECTION_INT(address_type)
+    _CONTACTS_PROPERTY_INT(log_time)
+    _CONTACTS_PROPERTY_INT(log_type)
+    _CONTACTS_PROPERTY_PROJECTION_INT(extra_data1)
+    _CONTACTS_PROPERTY_PROJECTION_STR(extra_data2)
+    _CONTACTS_PROPERTY_FILTER_STR(normalized_address)
+    _CONTACTS_PROPERTY_FILTER_STR(cleaned_address)
+    _CONTACTS_PROPERTY_FILTER_STR(address_filter)
+    _CONTACTS_PROPERTY_INT(sim_slot_no)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_phone_log)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1500,20 +1500,20 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_phone_log )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( display_name_index)
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_contact_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( vibration )
-    _CONTACTS_PROPERTY_BOOL( is_favorite )
-    _CONTACTS_PROPERTY_BOOL( has_phonenumber )
-    _CONTACTS_PROPERTY_BOOL( has_email )
-    _CONTACTS_PROPERTY_INT( usage_type )
-    _CONTACTS_PROPERTY_INT( times_used )
-    _CONTACTS_PROPERTY_PROJECTION_STR( message_alert )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_person_usage )
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(display_name_index)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_contact_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(vibration)
+    _CONTACTS_PROPERTY_BOOL(is_favorite)
+    _CONTACTS_PROPERTY_BOOL(has_phonenumber)
+    _CONTACTS_PROPERTY_BOOL(has_email)
+    _CONTACTS_PROPERTY_INT(usage_type)
+    _CONTACTS_PROPERTY_INT(times_used)
+    _CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_usage)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1543,22 +1543,22 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_person_usage )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_source_type)
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_INT( number_id )
-    _CONTACTS_PROPERTY_PROJECTION_INT( type )
-    _CONTACTS_PROPERTY_PROJECTION_STR( label )
-    _CONTACTS_PROPERTY_BOOL( is_default )
-    _CONTACTS_PROPERTY_STR( number )
-    _CONTACTS_PROPERTY_FILTER_STR( number_filter )
-    _CONTACTS_PROPERTY_FILTER_STR( normalized_number )
-    _CONTACTS_PROPERTY_FILTER_STR( cleaned_number )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_number )
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_source_type)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_INT(number_id)
+    _CONTACTS_PROPERTY_PROJECTION_INT(type)
+    _CONTACTS_PROPERTY_PROJECTION_STR(label)
+    _CONTACTS_PROPERTY_BOOL(is_default)
+    _CONTACTS_PROPERTY_STR(number)
+    _CONTACTS_PROPERTY_FILTER_STR(number_filter)
+    _CONTACTS_PROPERTY_FILTER_STR(normalized_number)
+    _CONTACTS_PROPERTY_FILTER_STR(cleaned_number)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_number)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1585,19 +1585,19 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_number )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_source_type)
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_INT( email_id )
-    _CONTACTS_PROPERTY_PROJECTION_INT( type )
-    _CONTACTS_PROPERTY_PROJECTION_STR( label )
-    _CONTACTS_PROPERTY_BOOL( is_default )
-    _CONTACTS_PROPERTY_STR( email )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_email )
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_source_type)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_INT(email_id)
+    _CONTACTS_PROPERTY_PROJECTION_INT(type)
+    _CONTACTS_PROPERTY_PROJECTION_STR(label)
+    _CONTACTS_PROPERTY_BOOL(is_default)
+    _CONTACTS_PROPERTY_STR(email)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_email)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1621,16 +1621,16 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_email )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_source_type)
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_INT( group_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( group_name )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_grouprel )
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_source_type)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_INT(group_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(group_name)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_grouprel)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1658,21 +1658,21 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_grouprel )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_INT( contact_id )
-    _CONTACTS_PROPERTY_STR( display_name )
-    _CONTACTS_PROPERTY_PROJECTION_INT( display_source_type)
-    _CONTACTS_PROPERTY_INT( address_book_id )
-    _CONTACTS_PROPERTY_INT( account_id )
-    _CONTACTS_PROPERTY_INT( person_id )
-    _CONTACTS_PROPERTY_PROJECTION_STR( ringtone_path )
-    _CONTACTS_PROPERTY_PROJECTION_STR( image_thumbnail_path )
-    _CONTACTS_PROPERTY_INT( activity_id )
-    _CONTACTS_PROPERTY_STR( source_name )
-    _CONTACTS_PROPERTY_PROJECTION_STR( status )
-    _CONTACTS_PROPERTY_INT( timestamp )
-    _CONTACTS_PROPERTY_STR( service_operation )
-    _CONTACTS_PROPERTY_STR( uri )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_activity )
+    _CONTACTS_PROPERTY_INT(contact_id)
+    _CONTACTS_PROPERTY_STR(display_name)
+    _CONTACTS_PROPERTY_PROJECTION_INT(display_source_type)
+    _CONTACTS_PROPERTY_INT(address_book_id)
+    _CONTACTS_PROPERTY_INT(account_id)
+    _CONTACTS_PROPERTY_INT(person_id)
+    _CONTACTS_PROPERTY_PROJECTION_STR(ringtone_path)
+    _CONTACTS_PROPERTY_PROJECTION_STR(image_thumbnail_path)
+    _CONTACTS_PROPERTY_INT(activity_id)
+    _CONTACTS_PROPERTY_STR(source_name)
+    _CONTACTS_PROPERTY_PROJECTION_STR(status)
+    _CONTACTS_PROPERTY_INT(timestamp)
+    _CONTACTS_PROPERTY_STR(service_operation)
+    _CONTACTS_PROPERTY_STR(uri)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_activity)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
@@ -1689,9 +1689,9 @@ _CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_activity )
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
-    _CONTACTS_PROPERTY_PROJECTION_INT( log_count )
-    _CONTACTS_PROPERTY_INT( log_type )
-_CONTACTS_END_READ_ONLY_VIEW( _contacts_phone_log_stat )
+    _CONTACTS_PROPERTY_PROJECTION_INT(log_count)
+    _CONTACTS_PROPERTY_INT(log_type)
+_CONTACTS_END_READ_ONLY_VIEW(_contacts_phone_log_stat)
 
 #ifdef __cplusplus
 }
diff --git a/native/ctsvc_db_access_control.h b/native/ctsvc_db_access_control.h
deleted file mode 100644 (file)
index d4cfda5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __TIZEN_SOCIAL_CTSVC_DB_ACCESS_CONTROL_H__
-#define __TIZEN_SOCIAL_CTSVC_DB_ACCESS_CONTROL_H__
-
-int ctsvc_have_file_read_permission(const char *path);
-
-void ctsvc_set_client_access_info(const char *smack_label, const char *cookie);
-void ctsvc_unset_client_access_info(void);
-void ctsvc_reset_all_client_access_info(void);
-
-bool ctsvc_have_permission(int permission);
-char* ctsvc_get_client_smack_label(void);
-
-int ctsvc_get_write_permitted_addressbook_ids(int **addressbook_ids, int *count);
-bool ctsvc_have_ab_write_permission(int addressbook_id);
-int ctsvc_is_owner(int addressbook_id);
-
-
-#endif // __TIZEN_SOCIAL_CTSVC_DB_ACCESS_CONTROL_H__
diff --git a/native/ctsvc_db_plugin_addressbook_helper.c b/native/ctsvc_db_plugin_addressbook_helper.c
deleted file mode 100644 (file)
index a62d5f0..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_utils.h"
-#include "ctsvc_person.h"
-#include "ctsvc_notification.h"
-#include "ctsvc_db_access_control.h"
-#include "ctsvc_db_plugin_addressbook_helper.h"
-
-int ctsvc_addressbook_reset_internal_addressbook(void)
-{
-       CTS_FN_CALL;
-       char query[CTS_SQL_MIN_LEN] = {0};
-       int ret;
-
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
-
-       ret = ctsvc_is_owner(0);
-       if (CONTACTS_ERROR_NONE != ret) {
-               if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
-                       CTS_ERR("Does not have permission of address_book (0)");
-               else
-                       CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       snprintf(query, sizeof(query), "UPDATE %s SET deleted=1, person_id=0, "
-                       "changed_ver = ((SELECT ver FROM cts_version) + 1) WHERE addressbook_id = %d",
-                       CTS_TABLE_CONTACTS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
-
-       /* DOING JOB */
-       do {
-               ret = ctsvc_query_exec(query);
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       break;
-               }
-
-               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
-                               CTS_TABLE_MY_PROFILES, 0);
-
-               ret = ctsvc_query_exec(query);
-               if (CONTACTS_ERROR_NONE != ret)
-               {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       break;
-               }
-
-               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
-                               CTS_TABLE_GROUPS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
-               ret = ctsvc_query_exec(query);
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       break;
-               }
-
-               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
-                               CTS_TABLE_GROUP_DELETEDS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
-               ret = ctsvc_query_exec(query);
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       break;
-               }
-
-               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
-                               CTS_TABLE_DELETEDS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
-               ret = ctsvc_query_exec(query);
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       break;
-               }
-
-               ret = ctsvc_person_do_garbage_collection();
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_person_garbagecollection() Failed(%d)", ret);
-                       break;
-               }
-
-               ctsvc_set_contact_noti();
-               ctsvc_set_my_profile_noti();
-               // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();
-               ctsvc_set_group_noti();
-               ret = ctsvc_end_trans(true);
-               if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
-                       return ret;
-               }
-
-               return CONTACTS_ERROR_NONE;
-       } while(0);
-
-       /* ROLLBACK TRANSACTION */
-       ctsvc_end_trans(false);
-
-       return ret;
-}
-
-int ctsvc_addressbook_delete(int account_id)
-{
-       CTS_FN_CALL;
-       int ret;
-       int addressbook_id = -1;
-       char query[CTS_SQL_MAX_LEN] = {0};
-       RETVM_IF(account_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Account_id(%d) is invalid", account_id);
-
-       // delete addressbook whish has account_id
-       ret = ctsvc_begin_trans();
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
-
-       snprintf(query, sizeof(query), "SELECT addressbook_id FROM %s WHERE account_id = %d",
-                       CTS_TABLE_ADDRESSBOOKS, account_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       if (addressbook_id == 0) {
-               ret = ctsvc_addressbook_reset_internal_addressbook();
-               if (ret == CONTACTS_ERROR_NONE)
-                       ret = ctsvc_end_trans(true);
-               else
-                       ctsvc_end_trans(false);
-               return ret;
-       }
-
-       snprintf(query, sizeof(query), "DELETE FROM %s WHERE account_id = %d",
-                       CTS_TABLE_ADDRESSBOOKS, account_id);
-       ret = ctsvc_query_exec(query);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       ret = ctsvc_db_change();
-       if (0 < ret) {
-               ctsvc_set_my_profile_noti();
-               ctsvc_set_contact_noti();
-               // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();
-               ctsvc_set_group_noti();
-               ctsvc_set_addressbook_noti();
-       }
-       else {
-               CTS_ERR("There is no addressbook which has account_id (%d)", account_id);
-               ctsvc_end_trans(false);
-               return CONTACTS_ERROR_NO_DATA;
-       }
-
-       ret = ctsvc_person_do_garbage_collection();
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_person_garbagecollection() Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       return ctsvc_end_trans(true);
-}
-
diff --git a/native/ctsvc_db_plugin_contact_helper.h b/native/ctsvc_db_plugin_contact_helper.h
deleted file mode 100644 (file)
index a96049b..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__
-#define __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__
-
-#include "ctsvc_struct.h"
-#include "ctsvc_sqlite.h"
-
-int ctsvc_contact_add_image_file(int parent_id, int img_id,
-               char *src_img, char *dest_name, int dest_size);
-int ctsvc_contact_update_image_file(int parent_id, int img_id,
-               char *src_img, char *dest_name, int dest_size);
-int ctsvc_contact_delete_image_file_with_path(const unsigned char* image_path);
-
-void ctsvc_contact_make_display_name(ctsvc_contact_s *contact);
-int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name);
-int ctsvc_contact_get_name_language(const ctsvc_name_s *name);
-
-int ctsvc_db_contact_update_changed_time(int contact_id);
-int ctsvc_contact_update_display_name(int contact_id, contacts_display_name_source_type_e changed_record_type);
-
-int ctsvc_db_contact_delete(int contact_id);
-int ctsvc_db_contact_get( int id, contacts_record_h* out_record );
-
-int ctsvc_get_data_info_name(cts_stmt stmt, contacts_list_h name_list);
-int ctsvc_get_data_info_event(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_number(cts_stmt stmt, contacts_list_h number_list);
-int ctsvc_get_data_info_email(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_address(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_messenger(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_note(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_company(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_profile(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_relationship(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_image(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_url(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_nickname(cts_stmt stmt, contacts_list_h list);
-int ctsvc_get_data_info_extension(cts_stmt stmt, contacts_list_h list);
-
-bool ctsvc_contact_check_default_number(contacts_list_h number_list);
-bool ctsvc_contact_check_default_email(contacts_list_h email_list);
-bool ctsvc_contact_check_default_address(contacts_list_h address_list);
-bool ctsvc_contact_check_default_image(contacts_list_h image_list);
-bool ctsvc_contact_check_image_location(const char *path);
-
-int ctsvc_contact_update_data_name(contacts_list_h name_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_company(contacts_list_h company_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_note(contacts_list_h note_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_event(contacts_list_h event_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_messenger(contacts_list_h messenger_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_address(contacts_list_h address_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_url(contacts_list_h url_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_profile(contacts_list_h profile_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_relationship(contacts_list_h relationship_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_image(contacts_list_h image_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_nickname(contacts_list_h nickname_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_extension(contacts_list_h extension_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_update_data_number(contacts_list_h number_list, int contact_id, bool is_my_profile, bool *had_phonenumber);
-int ctsvc_contact_update_data_email(contacts_list_h email_list, int contact_id, bool is_my_profile, bool *had_email);
-
-int ctsvc_contact_insert_data_name(contacts_list_h name_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_number(contacts_list_h number_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_email(contacts_list_h email_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_profile(contacts_list_h profile_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_company(contacts_list_h company_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_note(contacts_list_h note_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_event(contacts_list_h event_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_messenger(contacts_list_h messenger_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_address(contacts_list_h address_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_url(contacts_list_h url_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_nickname(contacts_list_h nickname_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_relationship(contacts_list_h relationship_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_image(contacts_list_h image_list, int contact_id, bool is_my_profile);
-int ctsvc_contact_insert_data_extension(contacts_list_h extension_list, int contact_id, bool is_my_profile);
-
-#endif // __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__
diff --git a/native/ctsvc_db_plugin_sdn.c b/native/ctsvc_db_plugin_sdn.c
deleted file mode 100644 (file)
index 19868eb..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
-#include "ctsvc_list.h"
-#include "ctsvc_db_plugin_sdn.h"
-#include "ctsvc_db_init.h"
-#include "ctsvc_db_query.h"
-#include "ctsvc_record.h"
-#include "ctsvc_notification.h"
-#include "ctsvc_server_utils.h"
-
-//static int __ctsvc_db_sdn_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_sdn_get_record( int id, contacts_record_h* record );
-//static int __ctsvc_db_sdn_update_record( contacts_record_h record );
-//static int __ctsvc_db_sdn_delete_record( int id );
-static int __ctsvc_db_sdn_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_sdn_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_sdn_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_sdn_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_sdn_delete_records(int ids[], int count);
-
-ctsvc_db_plugin_info_s ctsvc_db_plugin_sdn = {
-       .is_query_only = false,
-       .insert_record = NULL,//__ctsvc_db_sdn_insert_record,
-       .get_record = __ctsvc_db_sdn_get_record,
-       .update_record = NULL,//__ctsvc_db_sdn_update_record,
-       .delete_record = NULL,//__ctsvc_db_sdn_delete_record,
-       .get_all_records = __ctsvc_db_sdn_get_all_records,
-       .get_records_with_query = __ctsvc_db_sdn_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_sdn_insert_records,
-       .update_records = NULL,//__ctsvc_db_sdn_update_records,
-       .delete_records = NULL,//__ctsvc_db_sdn_delete_records
-       .get_count = NULL,
-       .get_count_with_query = NULL,
-       .replace_record = NULL,
-       .replace_records = NULL,
-};
-
-static int __ctsvc_db_sdn_value_set(cts_stmt stmt, contacts_record_h *record)
-{
-       int i;
-       int ret;
-       char *temp;
-       ctsvc_sdn_s *sdn;
-
-       ret = contacts_record_create(_contacts_sdn._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
-       sdn = (ctsvc_sdn_s*)*record;
-
-       i = 0;
-       sdn->id = ctsvc_stmt_get_int(stmt, i++);
-       temp = ctsvc_stmt_get_text(stmt, i++);
-       sdn->name = SAFE_STRDUP(temp);
-       temp = ctsvc_stmt_get_text(stmt, i++);
-       sdn->number = SAFE_STRDUP(temp);
-       sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i++);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_get_record( int id, contacts_record_h* out_record )
-{
-       RETVM_IF(!ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
-
-       int ret;
-       cts_stmt stmt = NULL;
-       char query[CTS_SQL_MAX_LEN] = {0};
-       contacts_record_h record;
-
-       RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
-       *out_record = NULL;
-
-       snprintf(query, sizeof(query),
-                               "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN" WHERE id = %d", id);
-
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
-
-       ret = ctsvc_stmt_step(stmt);
-       if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
-               ctsvc_stmt_finalize(stmt);
-               if (CONTACTS_ERROR_NONE == ret)
-                       return CONTACTS_ERROR_NO_DATA;
-               else
-                       return ret;
-       }
-
-       ret = __ctsvc_db_sdn_value_set(stmt, &record);
-
-       ctsvc_stmt_finalize(stmt);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_sdn_value_set(ALL) Failed(%d)", ret);
-               return ret;
-       }
-
-       *out_record = record;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-#if 0
-static int __ctsvc_db_sdn_insert_record( contacts_record_h record, int *id )
-{
-       int ret;
-       ctsvc_sdn_s *sdn = (ctsvc_sdn_s*)record;
-
-       RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == sdn->name, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETVM_IF(CTSVC_RECORD_SDN != sdn->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : record is invalid type(%d)", sdn->base.r_type);
-
-       cts_stmt stmt = NULL;
-       char query[CTS_SQL_MAX_LEN] = {0};
-
-       snprintf(query, sizeof(query),
-                       "INSERT INTO "CTS_TABLE_SDN"(name, number, sim_slot_no) VALUES(?, ?, ?)");
-
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
-
-       ctsvc_stmt_bind_text(stmt, 1, sdn->name);
-       ctsvc_stmt_bind_text(stmt, 2, sdn->number);
-       ctsvc_stmt_bind_int(stmt, 3, sdn->sim_slot_no);
-
-       ret = ctsvc_begin_trans();
-       if( ret < CONTACTS_ERROR_NONE ) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_stmt_finalize(stmt);
-               return ret;
-       }
-
-       ret = ctsvc_stmt_step(stmt);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
-               ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       //sdn->id = ctsvc_db_get_last_insert_id();
-       if (id)
-               *id = ctsvc_db_get_last_insert_id();
-       ctsvc_stmt_finalize(stmt);
-
-       ctsvc_set_sdn_noti();
-       ret = ctsvc_end_trans(true);
-       if(ret < CONTACTS_ERROR_NONE ) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
-               return ret;
-       }
-
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_update_record( contacts_record_h record )
-{
-       int sdn_id;
-       int ret = CONTACTS_ERROR_NONE;
-       char* set = NULL;
-       GSList *bind_text = NULL;
-       GSList *cursor = NULL;
-       ctsvc_sdn_s *sdn = (ctsvc_sdn_s*)record;
-       char query[CTS_SQL_MIN_LEN] = {0};
-
-       RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETVM_IF(CTSVC_RECORD_SDN != sdn->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "Invalid parameter : record is invalid type(%d)", sdn->base.r_type);
-       RETVM_IF(!sdn->id, CONTACTS_ERROR_INVALID_PARAMETER, "sdn of contact has no ID.");
-       RETV_IF(NULL == sdn->name, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (sdn->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
-
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
-
-       snprintf(query, sizeof(query),
-                       "SELECT id FROM "CTS_TABLE_SDN" WHERE id = %d", sdn->id);
-       ret = ctsvc_query_get_first_int_result(query, &sdn_id);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       do {
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_SDN, sdn->id))) break;
-               ctsvc_set_sdn_noti();
-       } while (0);
-
-       CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
-       CONTACTS_FREE(set);
-       if (bind_text) {
-               for (cursor=bind_text;cursor;cursor=cursor->next)
-                       CONTACTS_FREE(cursor->data);
-               g_slist_free(bind_text);
-       }
-
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_delete_record( int sdn_id )
-{
-       int ret;
-       int id;
-       char query[CTS_SQL_MAX_LEN] = {0};
-
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
-
-       snprintf(query, sizeof(query),
-                       "SELECT id FROM "CTS_TABLE_SDN" WHERE id = %d", sdn_id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_SDN" WHERE id = %d", sdn_id);
-       ret = ctsvc_query_exec(query);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       ret = ctsvc_db_change();
-       if (ret <= 0) {
-               ret = CONTACTS_ERROR_NO_DATA;
-               ctsvc_end_trans(false);
-               return ret;
-       }
-
-       ctsvc_set_sdn_noti();
-       ret = ctsvc_end_trans(true);
-       if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
-               return ret;
-       }
-
-       return CONTACTS_ERROR_NONE;
-}
-#endif
-
-static int __ctsvc_db_sdn_get_all_records( int offset, int limit,
-       contacts_list_h* out_list )
-{
-       RETVM_IF(!ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
-
-       int ret;
-       int len;
-       cts_stmt stmt;
-       char query[CTS_SQL_MAX_LEN] = {0};
-       contacts_list_h list;
-
-       len = snprintf(query, sizeof(query),
-                               "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN);
-
-       if (0 != limit) {
-               len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
-               if (0 < offset)
-                       len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
-       }
-
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
-
-       contacts_list_create(&list);
-       while ((ret = ctsvc_stmt_step(stmt))) {
-               contacts_record_h record;
-               if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
-                       ctsvc_stmt_finalize(stmt);
-                       contacts_list_destroy(list, true);
-                       return ret;
-               }
-               __ctsvc_db_sdn_value_set(stmt, &record);
-
-               ctsvc_list_prepend(list, record);
-       }
-       ctsvc_stmt_finalize(stmt);
-       ctsvc_list_reverse(list);
-
-       *out_list = (contacts_list_h)list;
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
-{
-       RETVM_IF(!ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
-
-       int ret;
-       int i;
-       int field_count;
-       ctsvc_query_s *s_query;
-       cts_stmt stmt;
-       contacts_list_h list;
-       ctsvc_sdn_s *sdn;
-
-       RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
-       s_query = (ctsvc_query_s *)query;
-
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
-
-       contacts_list_create(&list);
-       while ((ret = ctsvc_stmt_step(stmt))) {
-               contacts_record_h record;
-               if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
-                       ctsvc_stmt_finalize(stmt);
-                       contacts_list_destroy(list, true);
-                       return ret;
-               }
-
-               contacts_record_create(_contacts_sdn._uri, &record);
-               sdn = (ctsvc_sdn_s*)record;
-               if (0 == s_query->projection_count)
-                       field_count = s_query->property_count;
-               else
-               {
-                       field_count = s_query->projection_count;
-
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
-                               ASSERT_NOT_REACHED("To set projection is failed.\n");
-                       }
-               }
-
-               for(i=0;i<field_count;i++) {
-                       char *temp;
-                       int property_id;
-                       if (0 == s_query->projection_count)
-                               property_id = s_query->properties[i].property_id;
-                       else
-                               property_id = s_query->projection[i];
-
-                       switch(property_id) {
-                       case CTSVC_PROPERTY_SDN_ID:
-                               sdn->id = ctsvc_stmt_get_int(stmt, i);
-                               break;
-                       case CTSVC_PROPERTY_SDN_NAME:
-                               temp = ctsvc_stmt_get_text(stmt, i);
-                               sdn->name = SAFE_STRDUP(temp);
-                               break;
-                       case CTSVC_PROPERTY_SDN_NUMBER:
-                               temp = ctsvc_stmt_get_text(stmt, i);
-                               sdn->number = SAFE_STRDUP(temp);
-                               break;
-                       case CTSVC_PROPERTY_SDN_SIM_SLOT_NO:
-                               sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i);
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               ctsvc_list_prepend(list, record);
-       }
-       ctsvc_stmt_finalize(stmt);
-       ctsvc_list_reverse(list);
-
-       *out_list = (contacts_list_h)list;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-#if 0
-static int __ctsvc_db_sdn_insert_records(const contacts_list_h in_list, int **ids)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_update_records(const contacts_list_h in_list)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_sdn_delete_records(int ids[], int count)
-{
-       return CONTACTS_ERROR_NONE;
-}
-#endif
diff --git a/native/ctsvc_db_query.h b/native/ctsvc_db_query.h
deleted file mode 100644 (file)
index 797174d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Dohyung Jin <dh.jin@samsung.com>
- *                 Jongwon Lee <gogosing.lee@samsung.com>
- *                 Donghee Ye <donghee.ye@samsung.com>
- *
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __TIZEN_SOCIAL_CTSVC_DB_QUERY_H__
-#define __TIZEN_SOCIAL_CTSVC_DB_QUERY_H__
-
-#include "contacts.h"
-#include "contacts_db_status.h"
-#include "ctsvc_struct.h"
-#include "ctsvc_sqlite.h"
-
-int ctsvc_db_insert_records(contacts_list_h list, int **ids, unsigned int *count);
-int ctsvc_db_update_records(contacts_list_h list);
-int ctsvc_db_delete_records(const char* view_uri, int *ids, int count);
-int ctsvc_db_replace_records(contacts_list_h list, int ids[], unsigned int count);
-
-int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int limit, cts_stmt *stmt);
-int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bind_text);
-int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, const char *table, int id);
-
-void ctsvc_db_set_status(contacts_db_status_e status);
-
-#endif /*  __TIZEN_SOCIAL_CTSVC_DB_QUERY_H__ */
-
diff --git a/native/ctsvc_localize.c b/native/ctsvc_localize.c
deleted file mode 100755 (executable)
index a58fe31..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <unicode/ustring.h>
-#include <unicode/unorm.h>
-#include <unicode/ucol.h>
-#include <unicode/uset.h>
-#include <vconf.h>
-#include <vconf-keys.h>
-
-#include "ctsvc_internal.h"
-#include "ctsvc_normalize.h"
-#include "ctsvc_localize.h"
-#include "ctsvc_localize_utils.h"
-
-#include "ctsvc_localize_kor.h"
-#include "ctsvc_localize_jp.h"
-
-int ctsvc_get_sort_type_from_language(int language)
-{
-       switch(language) {
-       case CTSVC_LANG_CHINESE:
-               return CTSVC_SORT_CJK;
-       case CTSVC_LANG_JAPANESE:
-               return CTSVC_SORT_JAPANESE;
-       case CTSVC_LANG_KOREAN:
-               return CTSVC_SORT_KOREAN;
-       case CTSVC_LANG_ENGLISH:
-               return CTSVC_SORT_WESTERN;
-       case CTSVC_LANG_NUMBER:
-               return CTSVC_SORT_NUMBER;
-       case CTSVC_LANG_RUSSIAN:
-       case CTSVC_LANG_BULGARIAN:
-       case CTSVC_LANG_MACEDONIA:
-       case CTSVC_LANG_KAZAKHSTAN:
-       case CTSVC_LANG_SERBIAN:
-       case CTSVC_LANG_UKRAINE:
-               return CTSVC_SORT_CYRILLIC;
-       case CTSVC_LANG_ARMENIAN:
-               return CTSVC_SORT_ARMENIAN;
-       case CTSVC_LANG_GREEK:
-               return CTSVC_SORT_GREEK;
-       case CTSVC_LANG_ARABIC:
-       case CTSVC_LANG_PERSIAN:
-       case CTSVC_LANG_URDU:
-               return CTSVC_SORT_ARABIC;
-       case CTSVC_LANG_HINDI:
-               return CTSVC_SORT_DEVANAGARI;
-       case CTSVC_LANG_GEORGIAN:
-               return CTSVC_SORT_GEORGIAN;
-       case CTSVC_LANG_TURKISH:
-               return CTSVC_SORT_TURKISH;
-       case CTSVC_LANG_THAI:
-               return CTSVC_SORT_THAI;
-       case CTSVC_LANG_BENGALI:
-               return CTSVC_SORT_BENGALI;
-       case CTSVC_LANG_PUNJABI:
-               return CTSVC_SORT_PUNJABI;
-       case CTSVC_LANG_MALAYALAM:
-               return CTSVC_SORT_MALAYALAM;
-       case CTSVC_LANG_TELUGU:
-               return CTSVC_SORT_TELUGU;
-       case CTSVC_LANG_TAMIL:
-               return CTSVC_SORT_TAMIL;
-       case CTSVC_LANG_ORIYA:
-               return CTSVC_SORT_ORIYA;
-       case CTSVC_LANG_SINHALA:
-               return CTSVC_SORT_SINHALA;
-       case CTSVC_LANG_GUJARATI:
-               return CTSVC_SORT_GUJARATI;
-       case CTSVC_LANG_KANNADA:
-               return CTSVC_SORT_KANNADA;
-       case CTSVC_LANG_LAO:
-               return CTSVC_SORT_LAO;
-       case CTSVC_LANG_HEBREW:
-               return CTSVC_SORT_HEBREW;
-       case CTSVC_LANG_BURMESE:
-               return CTSVC_SORT_BURMESE;
-       case CTSVC_LANG_KHMER:
-               return CTSVC_SORT_KHMER;
-       case CTSVC_LANG_OTHERS:
-               return CTSVC_SORT_OTHERS;
-       default:
-               return CTSVC_SORT_WESTERN;
-       }
-}
-
-int ctsvc_get_name_sort_type(const char *src)
-{
-       UErrorCode status = 0;
-       UChar tmp_result[10];
-       int ret = CTSVC_SORT_OTHERS;
-       int char_len = 0;
-       int language_type;
-       char char_src[10];
-
-       char_len = ctsvc_check_utf8(src[0]);
-       RETVM_IF(char_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "check_utf8 failed");
-
-       memcpy(char_src, &src[0], char_len);
-       char_src[char_len] = '\0';
-
-       u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
-       RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                       "u_strFromUTF8() Failed(%s)", u_errorName(status));
-
-       language_type = ctsvc_check_language(tmp_result);
-       ret = ctsvc_get_sort_type_from_language(language_type);
-
-       return ret;
-}
-
-void ctsvc_extra_normalize(UChar *word, int32_t word_size)
-{
-       int i;
-       for (i=0;i<word_size;i++) {
-               // FF00 ~ FF60, FFE0~FFE6 : fullwidth -> halfwidth
-               if (CTSVC_COMPARE_BETWEEN((UChar)0xFF00, word[i], (UChar)0xFF60)) {
-                       int unicode_value1 = 0;
-                       int unicode_value2 = 0;
-                       unicode_value1 = 0x0;
-                       unicode_value2 = (0xFF & word[i]) + 0x20;
-                       word[i] = unicode_value1 << 8 | unicode_value2;
-               }
-               else if (ctsvc_is_hangul(word[i])) {
-                       ctsvc_hangul_compatibility2jamo(&word[i]);
-               }
-       }
-}
-
-const char *ctsvc_get_language_locale(int lang)
-{
-       char *langset = ctsvc_get_langset();
-
-       switch(lang)
-       {
-       case CTSVC_LANG_AZERBAIJAN: // az, Azerbaijan
-               return "az";
-       case CTSVC_LANG_ARABIC: // ar, Bahrain - Arabic
-               return "ar";
-       case CTSVC_LANG_BULGARIAN: // bg, Bulgaria - Bulgarian
-               return "bg";
-       case CTSVC_LANG_CATALAN: // ca, Spain - Catalan
-               return "ca";
-       case CTSVC_LANG_CZECH: // cs, Czech Republic - Czech
-               return "cs";
-       case CTSVC_LANG_DANISH: // da, Denmark - Danish
-               return "da";
-       case CTSVC_LANG_GERMAN: // de, Germany - German
-               return "de";
-       case CTSVC_LANG_GREEK: // el, Greece - Greek
-               return "el";
-       case CTSVC_LANG_ENGLISH: // en, en_PH, en_US
-               return "en";
-       case CTSVC_LANG_SPANISH: // es_ES, es_US, El Salvador - Spanish
-               return "es";
-       case CTSVC_LANG_ESTONIAN: // et, Estonia - Estonian
-               return "et";
-       case CTSVC_LANG_BASQUE: // eu, Spain - Basque
-               return "eu";
-       case CTSVC_LANG_FINNISH: // fi, Finland - Finnish
-               return "fi";
-       case CTSVC_LANG_FRENCH: // fr_CA, fr_FR
-               return "fr";
-       case CTSVC_LANG_IRISH: // ga, Ireland - Irish
-               return "ga";
-       case CTSVC_LANG_GALICIAN: // gl, Spain - Galician
-               return "gl";
-       case CTSVC_LANG_HINDI: // hi, India - Hindi, Marathi, Nepali
-               if (!strncmp(langset, "hi", strlen("hi"))){
-                       return "hi";
-               }
-               else if (!strncmp(langset, "mr", strlen("mr"))) {
-                       return "mr";
-               }
-               else if (!strncmp(langset, "ne", strlen("ne"))) {
-                       return "ne";
-               }
-               return "hi";
-       case CTSVC_LANG_CROATIAN: // hr, Bosnia and Herzegovina - Croatian
-               return "hr";
-       case CTSVC_LANG_HUNGARIAN: // hu, Hungary - Hungarian
-               return "hu";
-       case CTSVC_LANG_ARMENIAN: // hy, Armenia - Armenian
-               return "hy";
-       case CTSVC_LANG_ICELANDIC: // is, Iceland - Icelandic
-               return "is";
-       case CTSVC_LANG_ITALIAN: // it_IT, Italy - Italian
-               return "it";
-       case CTSVC_LANG_JAPANESE: // ja_JP, japan
-               return "ja";
-       case CTSVC_LANG_GEORGIAN: // ka, Georgia - Georgian
-               return "ka";
-       case CTSVC_LANG_KAZAKHSTAN: // kk, Kazakhstan
-               return "kk";
-       case CTSVC_LANG_KOREAN: // ko, ko_KR
-               return "ko";
-       case CTSVC_LANG_LITHUANIAN: // lt, Lithuania - Lithuanian
-               return "lt";
-       case CTSVC_LANG_LATVIAN: // lv, Latvia - Latvian
-               return "lv";
-       case CTSVC_LANG_MACEDONIA: // mk, Macedonia
-               return "mk";
-       case CTSVC_LANG_NORWAY: // nb, Norway
-               return "nb";
-       case CTSVC_LANG_DUTCH: // nl_Nl, Netherlands Dutch
-               return "nl";
-       case CTSVC_LANG_POLISH: // pl, Polish
-               return "pl";
-       case CTSVC_LANG_PORTUGUESE: // pt_BR, pt_PT, Portugal
-               return "pt";
-       case CTSVC_LANG_ROMANIA: // ro, Romania
-               return "ro";
-       case CTSVC_LANG_RUSSIAN: // ru_RU, Russia
-               return "ru";
-       case CTSVC_LANG_SLOVAK: // sk, Slovakia - Slovak
-               return "sk";
-       case CTSVC_LANG_SLOVENIAN: // sl, Slovenia - Slovenian
-               return "sl";
-       case CTSVC_LANG_SERBIAN: // sr, Serbia - Serbian
-               return "sr";
-       case CTSVC_LANG_SWEDISH: // sv, Finland - Swedish
-               return "sv";
-       case CTSVC_LANG_TURKISH: // tr_TR, Turkey - Turkish
-               return "tr";
-       case CTSVC_LANG_UKRAINE: // uk, Ukraine
-               return "uk";
-       case CTSVC_LANG_CHINESE: // zh_CN, zh_HK, zh_SG, zh_TW
-               return "zh";
-       case CTSVC_LANG_THAI: // th_TH, Thai
-               return "th";
-       case CTSVC_LANG_BENGALI: // as, bn
-               if (!strncmp(langset, "as", strlen("as"))){
-                       return "as";
-               }
-               return "bn";
-       case CTSVC_LANG_PUNJABI: // pa
-                       return "pa";
-       case CTSVC_LANG_MALAYALAM:
-                       return "ml";
-       case CTSVC_LANG_TELUGU:
-                       return "te";
-       case CTSVC_LANG_TAMIL:
-                       return "ta";
-       case CTSVC_LANG_ORIYA:
-                       return "or";
-       case CTSVC_LANG_SINHALA:
-                       return "si";
-       case CTSVC_LANG_GUJARATI:
-                       return "gu";
-       case CTSVC_LANG_KANNADA:
-                       return "kn";
-       case CTSVC_LANG_LAO:
-                       return "lo";
-       case CTSVC_LANG_HEBREW:
-                       return "he";
-       case CTSVC_LANG_VIETNAMESE://latin
-                       return "vi";
-       case CTSVC_LANG_PERSIAN:
-                       return "fa";
-       case CTSVC_LANG_UZBEK:
-                       return "uz";
-       case CTSVC_LANG_URDU: //arabic
-                       return "ur";
-       case CTSVC_LANG_ALBANIAN:
-                       return "sq";
-       case CTSVC_LANG_BURMESE:
-                       return "my";
-       case CTSVC_LANG_MALAY:
-                       return "ms";
-       case CTSVC_LANG_KHMER:
-                       return "km";
-       case CTSVC_LANG_INDONESIAN:
-                       return "id";
-       case CTSVC_LANG_TAGALOG:
-                       return "tl";
-       }
-
-       return "";
-}
-
-int ctsvc_get_language_type(const char *system_lang)
-{
-       // refer to the VCONFKEY_LANGSET
-       int type;
-
-       RETV_IF(NULL == system_lang, CTSVC_LANG_OTHERS);
-
-       // az, Azerbaijan
-       if (!strncmp(system_lang, "az", strlen("az")))
-               type = CTSVC_LANG_AZERBAIJAN;
-       // ar, Bahrain - Arabic
-       else if (!strncmp(system_lang, "ar", strlen("ar")))
-               type = CTSVC_LANG_ARABIC;
-       // bg, Bulgaria - Bulgarian
-       else if (!strncmp(system_lang, "bg", strlen("bg")))
-               type = CTSVC_LANG_BULGARIAN;
-       // ca, Spain - Catalan
-       else if (!strncmp(system_lang, "ca", strlen("ca")))
-               type = CTSVC_LANG_CATALAN;
-       // cs, Czech Republic - Czech
-       else if (!strncmp(system_lang, "cs", strlen("cs")))
-               type = CTSVC_LANG_CZECH;
-       // da, Denmark - Danish
-       else if (!strncmp(system_lang, "da", strlen("da")))
-               type = CTSVC_LANG_DANISH;
-       // de, Germany - German
-       else if (!strncmp(system_lang, "de", strlen("de")))
-               type = CTSVC_LANG_GERMAN;
-       // el, Greece - Greek
-       else if (!strncmp(system_lang, "el", strlen("el")))
-               type = CTSVC_LANG_GREEK;
-       // en, en_PH, en_US
-       else if (!strncmp(system_lang, "en", strlen("en")))
-               type = CTSVC_LANG_ENGLISH;
-       // es_ES, es_US, El Salvador - Spanish
-       else if (!strncmp(system_lang, "es", strlen("es")))
-               type = CTSVC_LANG_SPANISH;
-       // et, Estonia - Estonian
-       else if (!strncmp(system_lang, "et", strlen("et")))
-               type = CTSVC_LANG_ESTONIAN;
-       // eu, Spain - Basque
-       else if (!strncmp(system_lang, "eu", strlen("eu")))
-               type = CTSVC_LANG_BASQUE;
-       // fi, Finland - Finnish
-       else if (!strncmp(system_lang, "fi", strlen("fi")))
-               type = CTSVC_LANG_FINNISH;
-       // fr_CA, fr_FR
-       else if (!strncmp(system_lang, "fr", strlen("fr")))
-               type = CTSVC_LANG_FRENCH;
-       // ga, Ireland - Irish
-       else if (!strncmp(system_lang, "ga", strlen("ga")))
-               type = CTSVC_LANG_IRISH;
-       // gl, Spain - Galician
-       else if (!strncmp(system_lang, "gl", strlen("gl")))
-               type = CTSVC_LANG_GALICIAN;
-       // hi, India - Hindi
-       else if (!strncmp(system_lang, "hi", strlen("hi")))
-               type = CTSVC_LANG_HINDI;
-       // mr, India - marathi
-       else if (!strncmp(system_lang, "mr", strlen("mr")))
-               type = CTSVC_LANG_HINDI;
-       // ne, India - nepal
-       else if (!strncmp(system_lang, "ne", strlen("ne")))
-               type = CTSVC_LANG_HINDI;
-       // hr, Bosnia and Herzegovina - Croatian
-       else if (!strncmp(system_lang, "hr", strlen("hr")))
-               type = CTSVC_LANG_CROATIAN;
-       // hu, Hungary - Hungarian
-       else if (!strncmp(system_lang, "hu", strlen("hu")))
-               type = CTSVC_LANG_HUNGARIAN;
-       // hy, Armenia - Armenian
-       else if (!strncmp(system_lang, "hy", strlen("hy")))
-               type = CTSVC_LANG_ARMENIAN;
-       // is, Iceland - Icelandic
-       else if (!strncmp(system_lang, "is", strlen("is")))
-               type = CTSVC_LANG_ICELANDIC;
-       // it_IT, Italy - Italian
-       else if (!strncmp(system_lang, "it", strlen("it")))
-               type = CTSVC_LANG_ITALIAN;
-       // ja_JP, japan
-       else if (!strncmp(system_lang, "ja", strlen("ja")))
-               type = CTSVC_LANG_JAPANESE;
-       // ka, Georgia - Georgian
-       else if (!strncmp(system_lang, "ka", strlen("ka")))
-               type = CTSVC_LANG_GEORGIAN;
-       // kk, Kazakhstan
-       else if (!strncmp(system_lang, "kk", strlen("kk")))
-               type = CTSVC_LANG_KAZAKHSTAN;
-       // ko, ko_KR
-       else if (!strncmp(system_lang, "ko", strlen("ko")))
-               type = CTSVC_LANG_KOREAN;
-       // lt, Lithuania - Lithuanian
-       else if (!strncmp(system_lang, "lt", strlen("lt")))
-               type = CTSVC_LANG_LITHUANIAN;
-       // lv, Latvia - Latvian
-       else if (!strncmp(system_lang, "lv", strlen("lv")))
-               type = CTSVC_LANG_LATVIAN;
-       // mk, Macedonia
-       else if (!strncmp(system_lang, "mk", strlen("mk")))
-               type = CTSVC_LANG_MACEDONIA;
-       // nb, Norway
-       else if (!strncmp(system_lang, "nb", strlen("nb")))
-               type = CTSVC_LANG_NORWAY;
-       // nl_Nl, Netherlands Dutch
-       else if (!strncmp(system_lang, "nl", strlen("nl")))
-               type = CTSVC_LANG_DUTCH;
-       // pl, Polish
-       else if (!strncmp(system_lang, "pl", strlen("pl")))
-               type = CTSVC_LANG_POLISH;
-       // pt_BR, pt_PT, Portugal
-       else if (!strncmp(system_lang, "pt", strlen("pt")))
-               type = CTSVC_LANG_PORTUGUESE;
-       // ro, Romania
-       else if (!strncmp(system_lang, "ro", strlen("ro")))
-               type = CTSVC_LANG_ROMANIA;
-       // ru_RU, Russia
-       else if (!strncmp(system_lang, "ru", strlen("ru")))
-               type = CTSVC_LANG_RUSSIAN;
-       // sk, Slovakia - Slovak
-       else if (!strncmp(system_lang, "sk", strlen("sk")))
-               type = CTSVC_LANG_SLOVAK;
-       // sl, Slovenia - Slovenian
-       else if (!strncmp(system_lang, "sl", strlen("sl")))
-               type = CTSVC_LANG_SLOVENIAN;
-       // sr, Serbia - Serbian
-       else if (!strncmp(system_lang, "sr", strlen("sr")))
-               type = CTSVC_LANG_SERBIAN;
-       // sv, Finland - Swedish
-       else if (!strncmp(system_lang, "sv", strlen("sv")))
-               type = CTSVC_LANG_SWEDISH;
-       // tr_TR, Turkey - Turkish
-       else if (!strncmp(system_lang, "tr", strlen("tr")))
-               type = CTSVC_LANG_TURKISH;
-       // uk, Ukraine
-       else if (!strncmp(system_lang, "uk", strlen("uk")))
-               type = CTSVC_LANG_UKRAINE;
-       // zh_CN, zh_HK, zh_SG, zh_TW
-       else if (!strncmp(system_lang, "zh", strlen("zh")))
-               type = CTSVC_LANG_CHINESE;
-       // th_TH
-       else if (!strncmp(system_lang, "th", strlen("th")))
-               type = CTSVC_LANG_THAI;
-       else if (!strncmp(system_lang, "as", strlen("as")))
-               type = CTSVC_LANG_BENGALI;
-       else if (!strncmp(system_lang, "bn", strlen("bn")))
-               type = CTSVC_LANG_BENGALI;
-       else if (!strncmp(system_lang, "pa", strlen("pa")))
-               type = CTSVC_LANG_PUNJABI;
-       else if (!strncmp(system_lang, "ml", strlen("ml")))
-               type = CTSVC_LANG_MALAYALAM;
-       else if (!strncmp(system_lang, "te", strlen("te")))
-               type = CTSVC_LANG_TELUGU;
-       else if (!strncmp(system_lang, "ta", strlen("ta")))
-               type = CTSVC_LANG_TAMIL;
-       else if (!strncmp(system_lang, "or", strlen("or")))
-               type = CTSVC_LANG_ORIYA;
-       else if (!strncmp(system_lang, "si", strlen("si")))
-               type = CTSVC_LANG_SINHALA;
-       else if (!strncmp(system_lang, "gu", strlen("gu")))
-               type = CTSVC_LANG_GUJARATI;
-       else if (!strncmp(system_lang, "kn", strlen("kn")))
-               type = CTSVC_LANG_KANNADA;
-       else if (!strncmp(system_lang, "lo", strlen("lo")))
-               type = CTSVC_LANG_LAO;
-       else if (!strncmp(system_lang, "he", strlen("he")))
-               type = CTSVC_LANG_HEBREW;
-       else if (!strncmp(system_lang, "vi", strlen("vi")))
-               type = CTSVC_LANG_VIETNAMESE;
-       else if (!strncmp(system_lang, "fa", strlen("fa")))
-               type = CTSVC_LANG_PERSIAN;
-       else if (!strncmp(system_lang, "uz", strlen("uz")))
-               type = CTSVC_LANG_UZBEK;
-       else if (!strncmp(system_lang, "ur", strlen("ur")))
-               type = CTSVC_LANG_URDU;
-       else if (!strncmp(system_lang, "sq", strlen("sq")))
-               type = CTSVC_LANG_ALBANIAN;
-       else if (!strncmp(system_lang, "my", strlen("my")))
-               type = CTSVC_LANG_BURMESE;
-       else if (!strncmp(system_lang, "ms", strlen("ms")))
-               type = CTSVC_LANG_MALAY;
-       else if (!strncmp(system_lang, "km", strlen("km")))
-               type = CTSVC_LANG_KHMER;
-       else if (!strncmp(system_lang, "id", strlen("id")))
-               type = CTSVC_LANG_INDONESIAN;
-       else if (!strncmp(system_lang, "tl", strlen("tl")))
-               type = CTSVC_LANG_TAGALOG;
-       else
-               type = CTSVC_LANG_OTHERS;
-
-       return type;
-}
-
-static char *langset = NULL;
-
-char* ctsvc_get_langset()
-{
-       return langset;
-}
-
-void ctsvc_set_langset(char *new_langset)
-{
-       free(langset);
-       langset = new_langset;
-}
-
diff --git a/native/ctsvc_notification.c b/native/ctsvc_notification.c
deleted file mode 100644 (file)
index 65654bf..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include "contacts.h"
-#include "contacts_db_status.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_notify.h"
-#include "ctsvc_notification.h"
-
-static TLS bool contact_change = false;
-static TLS bool my_profile_change = false;
-static TLS bool phonelog_change = false;
-static TLS bool speed_change = false;
-static TLS bool addressbook_change = false;
-static TLS bool group_change = false;
-static TLS bool group_rel_change = false;
-static TLS bool person_change = false;
-static TLS bool activity_change = false;
-static TLS bool activity_photo_change = false;
-static TLS bool address_change = false;
-static TLS bool data_change = false;
-static TLS bool event_change = false;
-static TLS bool number_change = false;
-static TLS bool email_change = false;
-static TLS bool messenger_change = false;
-static TLS bool name_change = false;
-static TLS bool note_change = false;
-static TLS bool url_change = false;
-static TLS bool nickname_change = false;
-static TLS bool sdn_change = false;
-static TLS bool relationship_change = false;
-static TLS bool image_change = false;
-static TLS bool profile_change = false;
-static TLS bool company_change = false;
-
-void ctsvc_noti_publish_socket_initialize(void)
-{
-       int fd = open(CTSVC_NOTI_IPC_READY, O_TRUNC | O_RDWR);
-       if (0 <= fd)
-               close(fd);
-}
-
-static inline void __ctsvc_noti_publish_contact_change(void)
-{
-       int fd = open(CTSVC_NOTI_CONTACT_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               contact_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_my_profile_change(void)
-{
-       int fd = open(CTSVC_NOTI_MY_PROFILE_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               my_profile_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_phonelog_change(void)
-{
-       int fd = open(CTSVC_NOTI_PHONELOG_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               phonelog_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_speed_change(void)
-{
-       int fd = open(CTSVC_NOTI_SPEEDDIAL_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               speed_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_addressbook_change(void)
-{
-       int fd = open(CTSVC_NOTI_ADDRESSBOOK_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               addressbook_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_group_change(void)
-{
-       int fd = open(CTSVC_NOTI_GROUP_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               group_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_group_rel_change(void)
-{
-       int fd = open(CTSVC_NOTI_GROUP_RELATION_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               group_rel_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_person_change(void)
-{
-       int fd = open(CTSVC_NOTI_PERSON_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               person_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_name_change(void)
-{
-       int fd = open(CTSVC_NOTI_NAME_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               name_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_number_change(void)
-{
-       int fd = open(CTSVC_NOTI_NUMBER_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               number_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_email_change(void)
-{
-       int fd = open(CTSVC_NOTI_EMAIL_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               email_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_event_change(void)
-{
-       int fd = open(CTSVC_NOTI_EVENT_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               event_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_url_change(void)
-{
-       int fd = open(CTSVC_NOTI_URL_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               url_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_address_change(void)
-{
-       int fd = open(CTSVC_NOTI_ADDRESS_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               address_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_note_change(void)
-{
-       int fd = open(CTSVC_NOTI_NOTE_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               note_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_company_change(void)
-{
-       int fd = open(CTSVC_NOTI_COMPANY_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               company_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_relationship_change(void)
-{
-       int fd = open(CTSVC_NOTI_RELATIONSHIP_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               relationship_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_image_change(void)
-{
-       int fd = open(CTSVC_NOTI_IMAGE_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               image_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_nickname_change(void)
-{
-       int fd = open(CTSVC_NOTI_NICKNAME_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               nickname_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_messenger_change(void)
-{
-       int fd = open(CTSVC_NOTI_MESSENGER_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               messenger_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_data_change(void)
-{
-       int fd = open(CTSVC_NOTI_DATA_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               data_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_sdn_change(void)
-{
-       int fd = open(CTSVC_NOTI_SDN_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               sdn_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_profile_change(void)
-{
-       int fd = open(CTSVC_NOTI_PROFILE_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               profile_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_activity_change(void)
-{
-       int fd = open(CTSVC_NOTI_ACTIVITY_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               activity_change = false;
-       }
-}
-
-static inline void __ctsvc_noti_publish_activity_photo_change(void)
-{
-       int fd = open(CTSVC_NOTI_ACTIVITY_PHOTO_CHANGED, O_TRUNC | O_RDWR);
-       if (0 <= fd) {
-               close(fd);
-               activity_photo_change = false;
-       }
-}
-
-void ctsvc_nofitication_cancel(void)
-{
-       contact_change = false;
-       my_profile_change = false;
-       phonelog_change = false;
-       speed_change = false;
-       addressbook_change = false;
-       group_change = false;
-       group_rel_change = false;
-       person_change = false;
-       activity_change = false;
-       activity_photo_change = false;
-       address_change = false;
-       data_change = false;
-       event_change = false;
-       number_change = false;
-       email_change = false;
-       messenger_change = false;
-       name_change = false;
-       note_change = false;
-       url_change = false;
-       nickname_change = false;
-       sdn_change = false;
-       relationship_change = false;
-       image_change = false;
-       profile_change = false;
-       company_change = false;
-}
-
-void ctsvc_set_contact_noti(void)
-{
-       contact_change = true;
-}
-
-void ctsvc_set_my_profile_noti(void)
-{
-       my_profile_change = true;
-}
-
-void ctsvc_set_phonelog_noti(void)
-{
-       phonelog_change = true;
-}
-
-void ctsvc_set_speed_noti(void)
-{
-       speed_change = true;
-}
-
-void ctsvc_set_addressbook_noti(void)
-{
-       addressbook_change = true;
-}
-
-void ctsvc_set_group_noti(void)
-{
-       group_change = true;
-}
-
-void ctsvc_set_group_rel_noti(void)
-{
-       group_rel_change = true;
-}
-
-void ctsvc_set_person_noti(void)
-{
-       person_change = true;
-}
-
-void ctsvc_set_activity_noti(void)
-{
-       activity_change = true;
-}
-
-void ctsvc_set_activity_photo_noti(void)
-{
-       activity_photo_change = true;
-}
-
-void ctsvc_set_address_noti(void)
-{
-       address_change = true;
-}
-
-void ctsvc_set_data_noti(void)
-{
-       data_change = true;
-}
-
-void ctsvc_set_event_noti(void)
-{
-       event_change = true;
-}
-
-void ctsvc_set_number_noti(void)
-{
-       number_change = true;
-}
-
-void ctsvc_set_email_noti(void)
-{
-       email_change = true;
-}
-
-void ctsvc_set_messenger_noti(void)
-{
-       messenger_change = true;
-}
-
-void ctsvc_set_nickname_noti(void)
-{
-       nickname_change = true;
-}
-
-void ctsvc_set_name_noti(void)
-{
-       name_change = true;
-}
-
-void ctsvc_set_note_noti(void)
-{
-       note_change = true;
-}
-
-void ctsvc_set_url_noti(void)
-{
-       url_change = true;
-}
-
-void ctsvc_set_sdn_noti(void)
-{
-       sdn_change = true;
-}
-
-void ctsvc_set_relationship_noti(void)
-{
-       relationship_change = true;
-}
-
-void ctsvc_set_image_noti(void)
-{
-       image_change = true;
-}
-
-void ctsvc_set_profile_noti(void)
-{
-       profile_change = true;
-}
-
-void ctsvc_set_company_noti(void)
-{
-       company_change = true;
-}
-
-void ctsvc_notification_send()
-{
-       if (contact_change) __ctsvc_noti_publish_contact_change();
-       if (my_profile_change) __ctsvc_noti_publish_my_profile_change();
-       if (phonelog_change) __ctsvc_noti_publish_phonelog_change();
-       if (speed_change) __ctsvc_noti_publish_speed_change();
-       if (addressbook_change) __ctsvc_noti_publish_addressbook_change();
-       if (group_change) __ctsvc_noti_publish_group_change();
-       if (group_rel_change) __ctsvc_noti_publish_group_rel_change();
-       if (person_change) __ctsvc_noti_publish_person_change();
-       if (activity_change) __ctsvc_noti_publish_activity_change();
-       if (activity_photo_change) __ctsvc_noti_publish_activity_photo_change();
-       if (address_change) __ctsvc_noti_publish_address_change();
-       if (data_change) __ctsvc_noti_publish_data_change();
-       if (company_change) __ctsvc_noti_publish_company_change();
-       if (event_change) __ctsvc_noti_publish_event_change();
-       if (number_change) __ctsvc_noti_publish_number_change();
-       if (email_change) __ctsvc_noti_publish_email_change();
-       if (messenger_change) __ctsvc_noti_publish_messenger_change();
-       if (name_change) __ctsvc_noti_publish_name_change();
-       if (note_change) __ctsvc_noti_publish_note_change();
-       if (url_change) __ctsvc_noti_publish_url_change();
-       if (nickname_change) __ctsvc_noti_publish_nickname_change();
-       if (sdn_change) __ctsvc_noti_publish_sdn_change();
-       if (relationship_change) __ctsvc_noti_publish_relationship_change();
-       if (image_change) __ctsvc_noti_publish_image_change();
-       if (profile_change) __ctsvc_noti_publish_profile_change();
-}
-
-// Whenever deleting data table record, this function will be called
-// in order to set notification
-void ctsvc_db_data_delete_callback(sqlite3_context * context,
-               int argc, sqlite3_value ** argv)
-{
-       CTS_FN_CALL;
-       int datatype;
-
-       if (argc > 2) {
-               sqlite3_result_null(context);
-               return;
-       }
-
-       datatype = sqlite3_value_int(argv[1]);
-
-       switch(datatype) {
-       case CTSVC_DATA_NAME:
-               ctsvc_set_name_noti();
-               break;
-       case CTSVC_DATA_POSTAL:
-               ctsvc_set_address_noti();
-               break;
-       case CTSVC_DATA_MESSENGER:
-               ctsvc_set_messenger_noti();
-               break;
-       case CTSVC_DATA_URL:
-               ctsvc_set_url_noti();
-               break;
-       case CTSVC_DATA_EVENT:
-               ctsvc_set_event_noti();
-               break;
-       case CTSVC_DATA_COMPANY:
-               ctsvc_set_company_noti();
-               break;
-       case CTSVC_DATA_NICKNAME:
-               ctsvc_set_nickname_noti();
-               break;
-       case CTSVC_DATA_NUMBER:
-               ctsvc_set_number_noti();
-               break;
-       case CTSVC_DATA_EMAIL:
-               ctsvc_set_email_noti();
-               break;
-       case CTSVC_DATA_PROFILE:
-               ctsvc_set_profile_noti();
-               break;
-       case CTSVC_DATA_RELATIONSHIP:
-               ctsvc_set_relationship_noti();
-               break;
-       case CTSVC_DATA_NOTE:
-               ctsvc_set_note_noti();
-               break;
-       case CTSVC_DATA_IMAGE:
-               ctsvc_set_image_noti();
-               break;
-       case CTSVC_DATA_EXTENSION:
-               ctsvc_set_data_noti();
-               break;
-       default:
-               break;
-       }
-       sqlite3_result_null(context);
-       CTS_FN_END;
-}
-
-API int contacts_db_add_status_changed_cb(
-               contacts_db_status_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-}
-
-API int contacts_db_remove_status_changed_cb(
-               contacts_db_status_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-}
diff --git a/native/ctsvc_notification.h b/native/ctsvc_notification.h
deleted file mode 100644 (file)
index a3a76d5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __TIZEN_SOCIAL_CTSVC_NOTIFICATION_H__
-#define __TIZEN_SOCIAL_CTSVC_NOTIFICATION_H__
-
-#include "ctsvc_sqlite.h"
-
-void ctsvc_set_contact_noti(void);
-void ctsvc_set_my_profile_noti(void);
-void ctsvc_set_phonelog_noti(void);
-void ctsvc_set_speed_noti(void);
-void ctsvc_set_addressbook_noti(void);
-void ctsvc_set_group_noti(void);
-void ctsvc_set_group_rel_noti(void);
-void ctsvc_set_person_noti(void);
-void ctsvc_set_data_noti(void);
-void ctsvc_set_activity_noti(void);
-void ctsvc_set_activity_photo_noti(void);
-void ctsvc_set_address_noti(void);
-void ctsvc_set_event_noti(void);
-void ctsvc_set_messenger_noti(void);
-void ctsvc_set_number_noti(void);
-void ctsvc_set_email_noti(void);
-void ctsvc_set_name_noti(void);
-void ctsvc_set_note_noti(void);
-void ctsvc_set_url_noti(void);
-void ctsvc_set_nickname_noti(void);
-void ctsvc_set_relationship_noti(void);
-void ctsvc_set_image_noti(void);
-void ctsvc_set_profile_noti(void);
-void ctsvc_set_sdn_noti(void);
-void ctsvc_set_company_noti(void);
-
-void ctsvc_notification_send();
-void ctsvc_nofitication_cancel(void);
-void ctsvc_noti_publish_socket_initialize(void);
-
-void ctsvc_db_data_delete_callback(sqlite3_context * context,
-               int argc, sqlite3_value ** argv);
-
-#endif /* __TIZEN_SOCIAL_CTSVC_NOTIFICATION_H__ */
diff --git a/native/ctsvc_service.c b/native/ctsvc_service.c
deleted file mode 100644 (file)
index d256f22..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Dohyung Jin <dh.jin@samsung.com>
- *                 Jongwon Lee <gogosing.lee@samsung.com>
- *                 Donghee Ye <donghee.ye@samsung.com>
- *
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#ifdef _CONTACTS_NATIVE
-#include <security-server.h>
-#endif
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_socket.h"
-#include "ctsvc_mutex.h"
-#include "ctsvc_inotify.h"
-#include "ctsvc_db_init.h"
-#include "ctsvc_setting.h"
-#include "ctsvc_db_access_control.h"
-#include "ctsvc_number_utils.h"
-
-static int _ctsvc_connection = 0;
-static __thread int thread_connection = 0;
-
-#ifdef _CONTACTS_NATIVE
-void __ctsvc_addressbook_deleted_cb(const char* view_uri, void* user_data)
-{
-       // access control update
-       ctsvc_reset_all_client_access_info();
-}
-#endif
-
-API int contacts_connect()
-{
-       CTS_FN_CALL;
-       int ret;
-
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-       if (0 == _ctsvc_connection) {
-#ifdef _CONTACTS_NATIVE
-               ret = ctsvc_socket_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_socket_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-#endif
-               ret = ctsvc_inotify_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_inotify_init() Failed(%d)", ret);
-#ifdef _CONTACTS_NATIVE
-                       ctsvc_socket_final();
-#endif
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-               ctsvc_db_plugin_init();
-               ctsvc_view_uri_init();
-               ctsvc_register_vconf();
-#ifdef _CONTACTS_NATIVE
-               contacts_db_add_changed_cb(_contacts_address_book._uri, __ctsvc_addressbook_deleted_cb, NULL);
-#endif
-       }
-       else
-               CTS_DBG("System : Contacts service has been already connected");
-
-       _ctsvc_connection++;
-
-       if (0 == thread_connection) {
-               ret = ctsvc_db_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_db_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-#ifdef _CONTACTS_NATIVE
-               // Access control : get cookie from security-server
-               char *smack_label = NULL;
-               size_t cookie_size = security_server_get_cookie_size();
-
-               if (cookie_size <= 0) {
-                       CTS_ERR("security_server_get_cookie_size : cookie_size is %d", cookie_size);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               char cookie[cookie_size];
-               cookie[0] = '\0';
-               ret = security_server_request_cookie(cookie, cookie_size);
-               if(ret < 0) {
-                       CTS_ERR("security_server_request_cookie fail (%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               smack_label = security_server_get_smacklabel_cookie(cookie);
-               if (NULL == smack_label) {
-                       CTS_ERR("security_server_get_smacklabel_cookie fail");
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               // In case of server, set SMACK label in ctsvc_ipc_server_connect()
-               ctsvc_set_client_access_info(smack_label, cookie);
-               free(smack_label);
-#endif
-       }
-       thread_connection++;
-
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_disconnect()
-{
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-
-       if (1 == thread_connection) {
-               ctsvc_db_deinit();
-#ifdef _CONTACTS_NATIVE
-               ctsvc_unset_client_access_info();
-#endif
-       }
-       else if (thread_connection <= 0) {
-               CTS_DBG("System : please call contacts_connect_on_thread(), thread_connection count is (%d)", thread_connection);
-               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-       thread_connection--;
-
-       if (1 == _ctsvc_connection) {
-#ifdef _CONTACTS_NATIVE
-               ctsvc_socket_final();
-#endif
-               ctsvc_inotify_close();
-               ctsvc_deregister_vconf();
-               ctsvc_view_uri_deinit();
-               ctsvc_db_plugin_deinit();
-               ctsvc_deinit_tapi_handle_for_cc();
-#ifdef _CONTACTS_NATIVE
-               contacts_db_remove_changed_cb(_contacts_address_book._uri, __ctsvc_addressbook_deleted_cb, NULL);
-#endif
-       }
-       else if (1 < _ctsvc_connection)
-               CTS_DBG("System : connection count is %d", _ctsvc_connection);
-       else {
-               CTS_DBG("System : please call contacts_connect(), connection count is (%d)", _ctsvc_connection);
-               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-       _ctsvc_connection--;
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_contacts_internal_disconnect()
-{
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-
-       if (1 == thread_connection) {
-               ctsvc_db_deinit();
-               thread_connection--;
-
-               if (1 <= _ctsvc_connection) {
-                       _ctsvc_connection--;
-               }
-       }
-
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-       return CONTACTS_ERROR_NONE;
-}
-
-#ifdef _CONTACTS_NATIVE
-API int contacts_connect_with_flags(unsigned int flags)
-{
-       CTS_FN_CALL;
-       int ret = CONTACTS_ERROR_NONE;
-
-       ret = contacts_connect();
-       if (ret == CONTACTS_ERROR_NONE)
-               return ret;
-
-       if (flags & CONTACTS_CONNECT_FLAG_RETRY) {
-               int i;
-               int waiting_time = 500;
-               for (i=0;i<9;i++) {
-                       usleep(waiting_time * 1000);
-                       CTS_DBG("retry cnt=%d, ret=%x, %d",(i+1), ret, waiting_time);
-                       ret = contacts_connect();
-                       if (ret == CONTACTS_ERROR_NONE)
-                               break;
-                       if (6 < i)
-                               waiting_time += 30000;
-                       else
-                               waiting_time *= 2;
-               }
-       }
-       return ret;
-}
-
-API int contacts_connect_on_thread()
-{
-       int ret;
-
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-
-       if (0 == thread_connection) {
-#ifdef _CONTACTS_NATIVE
-               ret = ctsvc_socket_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_socket_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-#endif
-               ret = ctsvc_inotify_init();
-               if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_inotify_init() Failed(%d)", ret);
-#ifdef _CONTACTS_NATIVE
-                       ctsvc_socket_final();
-#endif
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-               ctsvc_db_plugin_init();
-               ctsvc_view_uri_init();
-               ctsvc_register_vconf();
-               contacts_db_add_changed_cb(_contacts_address_book._uri, __ctsvc_addressbook_deleted_cb, NULL);
-               ret = ctsvc_db_init();
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_db_init() Failed(%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return ret;
-               }
-
-               // Access control : get cookie from security-server
-               char *smack_label = NULL;
-               size_t cookie_size = security_server_get_cookie_size();
-
-               if (cookie_size <= 0) {
-                       CTS_ERR("security_server_get_cookie_size : cookie_size is %d", cookie_size);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               char cookie[cookie_size];
-               cookie[0] = '\0';
-               ret = security_server_request_cookie(cookie, cookie_size);
-               if(ret < 0) {
-                       CTS_ERR("security_server_request_cookie fail (%d)", ret);
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               smack_label = security_server_get_smacklabel_cookie(cookie);
-               if (NULL == smack_label) {
-                       CTS_ERR("security_server_get_smacklabel_cookie fail");
-                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-                       return CONTACTS_ERROR_SYSTEM;
-               }
-
-               // In case of server, set SMACK label in ctsvc_ipc_server_connect()
-               ctsvc_set_client_access_info(smack_label, cookie);
-               free(smack_label);
-       }
-       else
-       {
-               CTS_DBG("System : db connection on thread already exist");
-       }
-       thread_connection++;
-
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_disconnect_on_thread()
-{
-       int ret;
-       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
-
-       if (1 == thread_connection) {
-               ctsvc_db_deinit();
-               ctsvc_unset_client_access_info();
-#ifdef _CONTACTS_NATIVE
-               ctsvc_socket_final();
-#endif
-               ctsvc_inotify_close();
-               ctsvc_deregister_vconf();
-               ctsvc_view_uri_deinit();
-               ctsvc_db_plugin_deinit();
-               ctsvc_deinit_tapi_handle_for_cc();
-               contacts_db_remove_changed_cb(_contacts_address_book._uri, __ctsvc_addressbook_deleted_cb, NULL);
-       }
-       else if (thread_connection <= 0) {
-               CTS_DBG("System : please call contacts_connect_on_thread(), connection count is (%d)", thread_connection);
-               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-       }
-       else
-       {
-               CTS_DBG("System : db connection on thread count is (%d)", thread_connection);
-       }
-
-       thread_connection--;
-
-       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-
-       return CONTACTS_ERROR_NONE;
-}
-#endif
-
diff --git a/native/ctsvc_setting.c b/native/ctsvc_setting.c
deleted file mode 100644 (file)
index 897737d..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Dohyung Jin <dh.jin@samsung.com>
- *                 Jongwon Lee <gogosing.lee@samsung.com>
- *                 Donghee Ye <donghee.ye@samsung.com>
- *
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <glib.h>
-#include <vconf.h>
-#include <vconf-keys.h>
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_notify.h"
-#include "ctsvc_setting.h"
-#include "ctsvc_normalize.h"
-#include "ctsvc_localize.h"
-#include "ctsvc_db_access_control.h"
-
-#ifdef _CONTACTS_IPC_SERVER
-#include "ctsvc_server_change_subject.h"
-#endif
-
-#ifdef _CONTACTS_NATIVE
-static int __ctsvc_vconf_ref_count = 0;
-#endif
-
-static int primary_sort = -1;
-static int secondary_sort = -1;
-
-static int name_display_order = -1;
-static int name_sorting_order = -1;
-static int phonenumber_min_match_digit = -1;
-
-static const char *CTSVC_VCONF_DISPLAY_ORDER = VCONFKEY_CONTACTS_SVC_NAME_DISPLAY_ORDER;
-static const char *CTSVC_VCONF_SORTING_ORDER = VCONFKEY_CONTACTS_SVC_NAME_SORTING_ORDER;
-static const char *CTSVC_VCONF_PHONENUMBER_MIN_MATCH_DIGIT = VCONFKEY_CONTACTS_SVC_PHONENUMBER_MIN_MATCH_DIGIT;
-
-API int contacts_setting_get_name_display_order(contacts_name_display_order_e *order)
-{
-       int ret;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
-                               "Permission denied : contact read");
-
-       if (name_display_order < 0) {
-               ret = vconf_get_int(CTSVC_VCONF_DISPLAY_ORDER, &name_display_order);
-               RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "System : vconf_get_int() Failed(%d)", ret);
-       }
-
-       *order = name_display_order;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_setting_set_name_display_order(contacts_name_display_order_e order)
-{
-       int ret;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
-                               "Permission denied : contact write");
-       RETVM_IF(CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST != order && CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST != order,
-                       CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : The parameter(order:%d) is Invalid", name_display_order);
-
-       if (order == name_display_order)
-               return CONTACTS_ERROR_NONE;
-
-       ret = vconf_set_int(CTSVC_VCONF_DISPLAY_ORDER, order);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "System : vconf_set_int(display order) Failed(%d)", ret);
-
-       name_display_order = order;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_setting_get_name_sorting_order(contacts_name_sorting_order_e *order)
-{
-       int ret;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
-                               "Permission denied : contact read");
-       if (name_sorting_order < 0)
-       {
-               ret = vconf_get_int(CTSVC_VCONF_SORTING_ORDER, &name_sorting_order);
-               RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "System : vconf_get_int(sort order) Failed(%d)", ret);
-       }
-
-       *order = name_sorting_order;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-API int contacts_setting_set_name_sorting_order(contacts_name_sorting_order_e order)
-{
-       int ret;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
-                               "Permission denied : contact write");
-       RETVM_IF(CONTACTS_NAME_SORTING_ORDER_FIRSTLAST != order && CONTACTS_NAME_SORTING_ORDER_LASTFIRST != order,
-                       CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : The parameter(order:%d) is Invalid", name_sorting_order);
-
-       if (order == name_sorting_order)
-               return CONTACTS_ERROR_NONE;
-
-       ret = vconf_set_int(CTSVC_VCONF_SORTING_ORDER, order);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "System : vconf_set_int(sort order) Failed(%d)", ret);
-
-       name_sorting_order = order;
-
-       return CONTACTS_ERROR_NONE;
-}
-
-static void ctsvc_vconf_display_order_cb(keynode_t *key, void *data)
-{
-       name_display_order = vconf_keynode_get_int(key);
-
-#ifdef _CONTACTS_IPC_SERVER
-       // publish display order changed
-       ctsvc_change_subject_publish_setting(CTSVC_SETTING_DISPLAY_ORDER_CHANGED, name_display_order);
-#endif
-}
-
-static void ctsvc_vconf_sorting_order_cb(keynode_t *key, void *data)
-{
-       name_sorting_order = vconf_keynode_get_int(key);
-
-#ifdef _CONTACTS_IPC_SERVER
-       // publish sort order changed
-       ctsvc_change_subject_publish_setting(CTSVC_SETTING_SORTING_ORDER_CHANGED, name_sorting_order);
-#endif
-}
-
-void ctsvc_set_sort_memory(int sort_type)
-{
-       primary_sort = sort_type;
-       secondary_sort = CTSVC_SORT_WESTERN;
-}
-
-static void ctsvc_vconf_sort_change_cb(keynode_t *key, void *data)
-{
-       int sort = vconf_keynode_get_int(key);
-       ctsvc_set_sort_memory(sort);
-}
-
-int ctsvc_register_vconf(void)
-{
-       int ret;
-
-#ifdef _CONTACTS_NATIVE
-       __ctsvc_vconf_ref_count++;
-       if (__ctsvc_vconf_ref_count != 1)
-               return;
-#endif
-
-       // display order
-       ret = vconf_get_int(CTSVC_VCONF_DISPLAY_ORDER, &name_display_order);
-       if (ret < 0) {
-               CTS_ERR("vconf_get_int() Failed(%d)", ret);
-               name_display_order = CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST;
-       }
-       ret = vconf_notify_key_changed(CTSVC_VCONF_DISPLAY_ORDER,
-                       ctsvc_vconf_display_order_cb, NULL);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(display order) Failed(%d)", ret);
-
-       // sorting order
-       ret = vconf_get_int(CTSVC_VCONF_SORTING_ORDER, &name_sorting_order);
-       if (ret < 0) {
-               CTS_ERR("vconf_get_int() Failed(%d)", ret);
-               name_sorting_order = CONTACTS_NAME_SORTING_ORDER_FIRSTLAST;
-       }
-       ret = vconf_notify_key_changed(CTSVC_VCONF_SORTING_ORDER,
-                       ctsvc_vconf_sorting_order_cb, NULL);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(sort order) Failed(%d)", ret);
-
-       // phonenumber min match digit
-       ret = vconf_get_int(CTSVC_VCONF_PHONENUMBER_MIN_MATCH_DIGIT, &phonenumber_min_match_digit);
-       if (ret < 0) {
-               CTS_ERR("vconf_get_int() Failed(%d)", ret);
-               phonenumber_min_match_digit = 8;
-       }
-
-       ret = vconf_get_int(ctsvc_get_default_sort_vconfkey(), &primary_sort);
-       WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
-       ctsvc_set_sort_memory(primary_sort);
-
-       ret = vconf_notify_key_changed(ctsvc_get_default_sort_vconfkey(),
-                       ctsvc_vconf_sort_change_cb, NULL);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(deafult lang) Failed(%d)", ret);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-void ctsvc_deregister_vconf(void)
-{
-       int ret;
-
-#ifdef _CONTACTS_NATIVE
-       __ctsvc_vconf_ref_count--;
-       if (__ctsvc_vconf_ref_count != 0)
-               return;
-#endif
-
-       ret = vconf_ignore_key_changed(CTSVC_VCONF_DISPLAY_ORDER, ctsvc_vconf_display_order_cb);
-       RETM_IF(ret<0,"vconf_ignore_key_changed(display order) Failed(%d)", ret);
-       ret = vconf_ignore_key_changed(CTSVC_VCONF_SORTING_ORDER, ctsvc_vconf_sorting_order_cb);
-       RETM_IF(ret<0,"vconf_ignore_key_changed(sort order) Failed(%d)", ret);
-
-       ret = vconf_ignore_key_changed(ctsvc_get_default_sort_vconfkey(), ctsvc_vconf_sort_change_cb);
-       RETM_IF(ret<0,"vconf_ignore_key_changed(default_lang) Failed(%d)", ret);
-}
-
-int ctsvc_get_phonenumber_min_match_digit(void)
-{
-       return phonenumber_min_match_digit;
-}
-
-const char* ctsvc_get_default_sort_vconfkey(void)
-{
-       return "file/private/contacts-service/default_lang";
-}
-
-int ctsvc_get_primary_sort(void)
-{
-       if (primary_sort < 0) {
-               int ret;
-               ret = vconf_get_int(ctsvc_get_default_sort_vconfkey(), &primary_sort);
-               WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
-               ctsvc_set_sort_memory(primary_sort);
-       }
-       return primary_sort;
-}
-
-int ctsvc_get_secondary_sort(void)
-{
-       return secondary_sort;
-}
-
-#ifdef _CONTACTS_NATIVE
-API int contacts_setting_add_name_display_order_changed_cb(
-       contacts_setting_name_display_order_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-}
-
-API int contacts_setting_remove_name_display_order_changed_cb(
-       contacts_setting_name_display_order_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-
-}
-
-API int contacts_setting_add_name_sorting_order_changed_cb(
-       contacts_setting_name_sorting_order_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-}
-
-
-API int contacts_setting_remove_name_sorting_order_changed_cb(
-       contacts_setting_name_sorting_order_changed_cb cb, void* user_data)
-{
-       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
-       return CONTACTS_ERROR_INTERNAL;
-}
-
-#endif
diff --git a/native/ctsvc_utils.c b/native/ctsvc_utils.c
deleted file mode 100644 (file)
index 210dbcb..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- * Contacts Service
- *
- * Copyright (c) 2010 - 2012 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <ctype.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <sys/vfs.h>
-#include <image_util.h>
-#include <image_util_internal.h>
-#include <vconf.h>
-#include <vconf-keys.h>
-#include <unicode/ulocdata.h>
-#include <unicode/uset.h>
-#include <unicode/ustring.h>
-#include <libexif/exif-data.h>
-
-#include "contacts.h"
-#include "ctsvc_internal.h"
-#include "ctsvc_utils.h"
-#include "ctsvc_mutex.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_notification.h"
-#include "ctsvc_struct.h"
-#include "ctsvc_normalize.h"
-#include "ctsvc_localize.h"
-#include "ctsvc_localize_utils.h"
-#include "ctsvc_setting.h"
-
-#ifdef _CONTACTS_IPC_SERVER
-#include "ctsvc_server_change_subject.h"
-#endif
-
-static __thread int transaction_count = 0;
-static __thread int transaction_ver = 0;
-static __thread bool version_up = false;
-
-#define CTS_SECURITY_IMAGE_PERMISSION 0440
-#define CTS_IMAGE_ENCODE_QUALITY       50
-
-#define CTS_COMMIT_TRY_MAX 500000 // For 3second
-
-int ctsvc_begin_trans(void)
-{
-       int ret = -1, progress;
-
-#ifndef _CONTACTS_IPC_SERVER
-       ctsvc_mutex_lock(CTS_MUTEX_TRANSACTION);
-#endif
-       if (transaction_count <= 0) {
-               ret = ctsvc_query_exec("BEGIN IMMEDIATE TRANSACTION");
-               progress = 100000;
-               while (CONTACTS_ERROR_DB == ret && progress < CTS_COMMIT_TRY_MAX) {
-                       usleep(progress);
-                       ret = ctsvc_query_exec("BEGIN IMMEDIATE TRANSACTION");
-                       progress *= 2;
-               }
-               if(CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-#ifndef _CONTACTS_IPC_SERVER
-                       ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-                       return ret;
-               }
-
-               transaction_count = 0;
-
-               const char *query = "SELECT ver FROM "CTS_TABLE_VERSION;
-               ret = ctsvc_query_get_first_int_result(query, &transaction_ver);
-               version_up = false;
-       }
-       transaction_count++;
-       INFO("transaction_count : %d.", transaction_count);
-#ifndef _CONTACTS_IPC_SERVER
-       ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_end_trans(bool is_success)
-{
-       int ret = -1, progress;
-       char query[CTS_SQL_MIN_LEN] = {0};
-
-#ifndef _CONTACTS_IPC_SERVER
-       ctsvc_mutex_lock(CTS_MUTEX_TRANSACTION);
-#endif
-
-       transaction_count--;
-       INFO("%s, transaction_count : %d", is_success?"True": "False",  transaction_count);
-
-       if (0 != transaction_count) {
-               CTS_DBG("contact transaction_count : %d.", transaction_count);
-#ifndef _CONTACTS_IPC_SERVER
-               ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-               return CONTACTS_ERROR_NONE;
-       }
-
-       if (false == is_success) {
-               ctsvc_nofitication_cancel();
-#ifdef _CONTACTS_IPC_SERVER
-               ctsvc_change_subject_clear_changed_info();
-#endif
-               ret = ctsvc_query_exec("ROLLBACK TRANSACTION");
-
-#ifndef _CONTACTS_IPC_SERVER
-               ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-               return CONTACTS_ERROR_NONE;
-       }
-
-       if (version_up) {
-               transaction_ver++;
-               snprintf(query, sizeof(query), "UPDATE %s SET ver = %d",
-                               CTS_TABLE_VERSION, transaction_ver);
-               ret = ctsvc_query_exec(query);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec(version up) Failed(%d)", ret);
-       }
-
-       INFO("start commit");
-       progress = 100000;
-       ret = ctsvc_query_exec("COMMIT TRANSACTION");
-       while (CONTACTS_ERROR_DB == ret && progress<CTS_COMMIT_TRY_MAX) {
-               usleep(progress);
-               ret = ctsvc_query_exec("COMMIT TRANSACTION");
-               progress *= 2;
-       }
-       INFO("%s", (CONTACTS_ERROR_NONE == ret)?"commit": "rollback");
-
-       if (CONTACTS_ERROR_NONE != ret) {
-               int tmp_ret;
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_nofitication_cancel();
-#ifdef _CONTACTS_IPC_SERVER
-               ctsvc_change_subject_clear_changed_info();
-#endif
-               tmp_ret = ctsvc_query_exec("ROLLBACK TRANSACTION");
-               WARN_IF(CONTACTS_ERROR_NONE != tmp_ret, "ctsvc_query_exec(ROLLBACK) Failed(%d)", tmp_ret);
-#ifndef _CONTACTS_IPC_SERVER
-               ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-               return ret;
-       }
-
-       ctsvc_notification_send();
-#ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_publish_changed_info();
-#endif
-
-#ifndef _CONTACTS_IPC_SERVER
-       ctsvc_mutex_unlock(CTS_MUTEX_TRANSACTION);
-#endif
-
-       CTS_DBG("Transaction shut down! : (%d)\n", transaction_ver);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-const char* ctsvc_get_display_column(void)
-{
-       contacts_name_display_order_e order;
-
-       contacts_setting_get_name_display_order(&order);
-       if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == order)
-               return "display_name";
-       else
-               return "reverse_display_name";
-}
-
-const char* ctsvc_get_sort_name_column(void)
-{
-       contacts_name_sorting_order_e order;
-
-       contacts_setting_get_name_sorting_order(&order);
-       if (CONTACTS_NAME_SORTING_ORDER_FIRSTLAST == order)
-               return "sort_name, display_name_language";
-       else
-               return "reverse_sort_name, reverse_display_name_language";
-}
-
-const char* ctsvc_get_sort_column(void)
-{
-       contacts_name_sorting_order_e order;
-
-       contacts_setting_get_name_sorting_order(&order);
-       if (CONTACTS_NAME_SORTING_ORDER_FIRSTLAST == order)
-               return "display_name_language, sortkey";
-       else
-               return "reverse_display_name_language, reverse_sortkey";
-}
-
-void ctsvc_utils_make_image_file_name(int parent_id, int id, char *src_img, char *dest, int dest_size)
-{
-       char *ext;
-       char *temp;
-       char *lower_ext;
-
-       ext = strrchr(src_img, '.');
-       if (NULL == ext || strchr(ext, '/'))
-               ext = "";
-
-       lower_ext = strdup(ext);
-       RETM_IF(NULL == lower_ext, "strdup() return NULL");
-
-       temp = lower_ext;
-       while (*temp) {
-               *temp = tolower(*temp);
-               temp++;
-       }
-
-       if (parent_id > 0)
-               snprintf(dest, dest_size, "%d_%d%s", parent_id, id, lower_ext);
-       else
-               snprintf(dest, dest_size, "%d%s", id, ext);
-       free(lower_ext);
-}
-
-static inline bool ctsvc_check_available_image_space(void){
-       int ret;
-       struct statfs buf;
-       long long size;
-       ret = statfs(CTSVC_IMG_FULL_LOCATION, &buf);
-
-       RETVM_IF(ret!=0, false, "statfs Failed(%d)", ret);
-
-       size = (long long)buf.f_bavail * (buf.f_bsize);
-
-       if (size > 1024*1024) // if available space to copy a image is larger than 1M
-               return true;
-       return false;
-}
-
-static image_util_rotation_e __ctsvc_get_rotation_info(const char *path)
-{
-       ExifData *ed = NULL;
-       ExifEntry *entry;
-       image_util_rotation_e rotation = IMAGE_UTIL_ROTATION_NONE;
-       int orientation = 0;
-
-       ed = exif_data_new_from_file(path);
-       if (ed == NULL) {
-               CTS_ERR("exif_data_new_from_file : ExifData is NULL");
-               return IMAGE_UTIL_ROTATION_NONE;
-       }
-
-       entry = exif_data_get_entry(ed, EXIF_TAG_ORIENTATION);
-       if (entry) {
-               ExifByteOrder mByteOrder = exif_data_get_byte_order(ed);
-               orientation = (int)exif_get_short(entry->data, mByteOrder);
-               if (orientation < 0 || orientation > 8)
-                       orientation = 0;
-       }
-
-       if (ed)
-               exif_data_unref(ed);
-
-       switch(orientation) {
-       case 1: // Top-left
-               rotation = IMAGE_UTIL_ROTATION_NONE;
-               break;
-       case 2: // Top-right
-               rotation = IMAGE_UTIL_ROTATION_FLIP_HORZ;
-               break;
-       case 3: // Bottom-right
-               rotation = IMAGE_UTIL_ROTATION_180;
-               break;
-       case 4: // Bottom-left
-               rotation = IMAGE_UTIL_ROTATION_FLIP_VERT;
-               break;
-       case 6:         // Right-top
-               rotation = IMAGE_UTIL_ROTATION_90;
-               break;
-       case 8: // Left-bottom
-               rotation = IMAGE_UTIL_ROTATION_270;
-               break;
-       case 5: // Left-top
-       case 7: // Right-bottom
-       case 0:
-       default:
-               break;
-       };
-
-       return rotation;
-}
-
-static int image_size = 480;
-
-typedef struct {
-       const char *src;
-       const char *dest;
-       int ret;
-}image_info;
-
-static bool __ctsvc_image_util_supported_jpeg_colorspace_cb(image_util_colorspace_e colorspace, void *user_data)
-{
-       image_info *info = (image_info*)user_data;
-       image_util_error_e ret;
-       int width = 0, height = 0;
-       unsigned int size_decode = 0;
-       int resized_width, resized_height;
-       unsigned char * img_target = 0;
-       unsigned char * img_source = 0;
-       int dest_fd;
-       image_util_rotation_e rotation;
-
-       // temporary code
-       if (colorspace == IMAGE_UTIL_COLORSPACE_YV12 || colorspace == IMAGE_UTIL_COLORSPACE_I420) {
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               return true;
-       }
-
-       rotation = __ctsvc_get_rotation_info(info->src);
-
-       // load jpeg sample file
-       CTS_DBG("colorspace %d src : %s, dest : %s", colorspace, info->src, info->dest);
-       ret = image_util_decode_jpeg( info->src, colorspace, &img_source, &width, &height, &size_decode );
-       if (ret!=IMAGE_UTIL_ERROR_NONE) {
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               return true;
-       }
-
-#if 0
-       if (0>image_size) {
-               int w,h;
-               ecore_x_window_size_get(
-                               ecore_x_window_root_get(ecore_x_window_focus_get())
-                               , &w, &h);
-
-               if (w>h)
-                       image_size = h;
-               else
-                       image_size = w;
-
-       }
-#endif
-
-       if (width > image_size || height > image_size) {
-               // image resize
-               if (image_size<=0 || width <=0 || height <= 0) {
-                       free(img_source);
-                       CTS_ERR("image size error(%d)", image_size);
-                       info->ret = CONTACTS_ERROR_SYSTEM;
-                       return false;
-               }
-
-               if (width>height) {
-                       resized_width = image_size;
-                       resized_height = height*image_size/width;
-               }
-               else {
-                       resized_height = image_size;
-                       resized_width = width*image_size/height;
-               }
-
-               if (resized_height%8)
-                       resized_height += 8 - (resized_height%8);
-               if (resized_width%8)
-                       resized_width += 8 - (resized_width%8);
-
-               CTS_DBG("size(%d, %d) -> resize(%d,%d)", width, height, resized_width, resized_height);
-
-               image_util_calculate_buffer_size(resized_width, resized_height, colorspace , &size_decode);
-
-               img_target = malloc( size_decode );
-
-               // do resize
-               ret = image_util_resize( img_target, &resized_width, &resized_height,
-                               img_source, width, height, colorspace );
-               if (ret!=IMAGE_UTIL_ERROR_NONE) {
-                       CTS_ERR("image_util_resize failed(%d)", ret);
-                       free( img_target );
-                       free( img_source );
-                       info->ret = CONTACTS_ERROR_SYSTEM;
-                       return false;
-               }
-               free( img_source );
-       }
-       else {
-               resized_width = width;
-               resized_height = height;
-               img_target = img_source;
-       }
-
-       // image rotation
-       if (IMAGE_UTIL_ROTATION_NONE != rotation) {
-               int rotated_width, rotated_height;
-               unsigned char *img_rotate = 0;
-               img_rotate = malloc( size_decode );
-               ret= image_util_rotate(img_rotate, &rotated_width, &rotated_height,
-                                       rotation, img_target, resized_width, resized_height, colorspace);
-               free(img_target);
-               if (IMAGE_UTIL_ERROR_NONE != ret) {
-                       CTS_ERR("image_util_rotate failed(%d)", ret);
-                       info->ret = CONTACTS_ERROR_SYSTEM;
-                       free(img_rotate);
-                       return false;
-               }
-               resized_width = rotated_width;
-               resized_height = rotated_height;
-               img_target = img_rotate;
-       }
-
-       // image encode
-       ret = image_util_encode_jpeg(img_target, resized_width, resized_height, colorspace, CTS_IMAGE_ENCODE_QUALITY, info->dest );
-       free( img_target );
-       if(ret != IMAGE_UTIL_ERROR_NONE) {
-               CTS_ERR("image_util_encode_jpeg failed(%d)", ret);
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               return false;
-       }
-
-       dest_fd = open(info->dest, O_RDONLY);
-       if (dest_fd < 0) {
-               CTS_ERR("System : Open Failed(%d)", errno);
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               return false;
-       }
-
-       ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
-       if (0 != ret) {
-               CTS_ERR("fchown Failed(%d)", errno);
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               close(dest_fd);
-               return false;
-       }
-
-       ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
-       if (0 != ret) {
-               CTS_ERR("fchmod Failed(%d)", errno);
-               info->ret = CONTACTS_ERROR_SYSTEM;
-               close(dest_fd);
-               return false;
-       }
-       close(dest_fd);
-
-       info->ret = CONTACTS_ERROR_NONE;
-       return false;
-}
-
-static int __ctsvc_resize_and_copy_image(const char *src, const char *dest)
-{
-       int ret;
-       image_info info = {.src = src, .dest = dest, ret = CONTACTS_ERROR_SYSTEM};
-
-       ret = image_util_foreach_supported_jpeg_colorspace(__ctsvc_image_util_supported_jpeg_colorspace_cb, &info);
-
-       if (ret != IMAGE_UTIL_ERROR_NONE)
-               return CONTACTS_ERROR_SYSTEM;
-
-       return info.ret;
-}
-
-#define CTSVC_COPY_SIZE_MAX 4096
-int ctsvc_utils_copy_image(const char *dir, const char *src, const char *file)
-{
-       int ret;
-       int size;
-       int src_fd, dest_fd;
-       char buf[CTSVC_COPY_SIZE_MAX] = {0};
-
-       if (NULL == file || *file == '\0')
-               return CONTACTS_ERROR_INVALID_PARAMETER;
-
-       char dest[strlen(dir) + strlen(file) + 2];
-       snprintf(dest, sizeof(dest), "%s/%s", dir, file);
-
-       if (!ctsvc_check_available_image_space())
-               return CONTACTS_ERROR_FILE_NO_SPACE;
-
-       ret = __ctsvc_resize_and_copy_image(src, dest);
-       if (CONTACTS_ERROR_NONE == ret) {
-               return ret;
-       }
-       else
-               CTS_ERR("__ctsvc_resize_and_copy_image Failed(%d)", ret);
-
-       src_fd = open(src, O_RDONLY);
-       RETVM_IF(src_fd < 0, CONTACTS_ERROR_SYSTEM, "System : Open(src:%s) Failed(%d)", src, errno);
-       dest_fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0660);
-       if (dest_fd < 0) {
-               CTS_ERR("Open Failed(%d)", errno);
-               close(src_fd);
-               return CONTACTS_ERROR_SYSTEM;
-       }
-
-       while ((size = read(src_fd, buf, CTSVC_COPY_SIZE_MAX)) > 0) {
-               ret = write(dest_fd, buf, size);
-               if (ret <= 0) {
-                       if (EINTR == errno)
-                               continue;
-                       else {
-                               CTS_ERR("write() Failed(%d)", errno);
-                               if (ENOSPC == errno)
-                                       ret = CONTACTS_ERROR_FILE_NO_SPACE;     // No space
-                               else
-                                       ret = CONTACTS_ERROR_SYSTEM;                    // IO error
-                               close(src_fd);
-                               close(dest_fd);
-                               unlink(dest);
-                               return ret;
-                       }
-               }
-       }
-
-       ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
-       if (0 != ret) {
-               CTS_ERR("fchown() Failed(%d)", ret);
-       }
-       ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
-       if (0 != ret) {
-               CTS_ERR("fchmod() Failed(%d)", ret);
-       }
-       close(src_fd);
-       close(dest_fd);
-
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_get_next_ver(void)
-{
-       const char *query;
-       int version;
-       int ret;
-
-       if (0 < transaction_count) {
-               version_up = true;
-               return transaction_ver + 1;
-       }
-
-       query = "SELECT ver FROM "CTS_TABLE_VERSION;
-       ret = ctsvc_query_get_first_int_result(query, &version);
-
-       // In this case, contacts-service already works abnormally.
-       if (CONTACTS_ERROR_NONE != ret)
-               CTS_ERR("ctsvc_query_get_first_int_result : get version error(%d)", ret);
-
-       return (1 + version);
-}
-
-int ctsvc_get_current_version( int* out_current_version ){
-       if (transaction_count <= 0) {
-               int ret;
-               int version = 0;
-               const char *query = "SELECT ver FROM "CTS_TABLE_VERSION;
-               ret = ctsvc_query_get_first_int_result(query, &version);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               *out_current_version = version;
-       }
-       else
-               *out_current_version = transaction_ver;
-       return CONTACTS_ERROR_NONE;
-}
-
-int ctsvc_get_transaction_ver(void)
-{
-       return transaction_ver;
-}
-
-int SAFE_SNPRINTF(char **buf, int *buf_size, int len, const char *src)
-{
-       int remain;
-       int temp_len;
-
-       if (len < 0)
-               return -1;
-
-       remain = *buf_size - len;
-       if (remain > strlen(src) + 1) {
-               temp_len = snprintf((*buf)+len, remain, "%s", src);
-               return temp_len;
-       }
-       else {
-               char *temp;
-               while(1) {
-                       temp = realloc(*buf, *buf_size*2);
-                       if (NULL == temp)
-                               return -1;
-                       *buf = temp;
-                       *buf_size = *buf_size * 2;
-                       remain = *buf_size - len;
-                       if (remain > strlen(src) + 1)
-                               break;
-               }
-               temp_len = snprintf((*buf)+len, remain, "%s", src);
-               return temp_len;
-       }
-}
-
index c36487e..29d535e 100644 (file)
@@ -1,13 +1,15 @@
 [Unit]
 Description=Start the Contacts service helper service
-After=tizen-runtime.target
-Requires=tizen-runtime.target
+After=tizen-runtime.target vsm-zone-svc.service
+Requires=tizen-runtime.target vsm-zone-svc.service
 
 [Service]
+User=system
+Group=system
+SmackProcessLabel=contacts-service
 Type=simple
-ExecStart=/usr/bin/contacts-service-ipcd
-Restart=always
-RestartSec=1
+Environment="CMD=timeout" "TIME=90"
+ExecStart=/usr/bin/contacts-service-ipcd $CMD $TIME
 
 [Install]
 WantedBy=multi-user.target
index 8f70c0f..68bf8ea 100644 (file)
@@ -2,6 +2,8 @@
 Description=Contacts Service socket
 
 [Socket]
+SocketUser=system
+SocketGroup=system
 ListenStream=/tmp/.contacts_svc_ipc
 SmackLabelIPIn=contacts-service
 SmackLabelIPOut=contacts-service
index 1cb201c..0c5356f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       contacts-service
 Summary:    Contacts Service
-Version:    0.13.11
+Version:    0.13.48
 Release:    1
 Group:      TO_BE/FILLED_IN
 License:    Apache-2.0
@@ -15,24 +15,25 @@ BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(sqlite3)
 BuildRequires:  pkgconfig(tapi)
 BuildRequires:  pkgconfig(glib-2.0)
-BuildRequires:  pkgconfig(icu-i18n)
 BuildRequires:  pkgconfig(capi-base-common)
 BuildRequires:  pkgconfig(capi-media-image-util)
 BuildRequires:  pkgconfig(pims-ipc)
-BuildRequires:  pkgconfig(capi-system-info)
-%if "%{?tizen_profile_name}" == "mobile"
 BuildRequires:  pkgconfig(accounts-svc)
-%endif
 BuildRequires:  pkgconfig(libexif)
 BuildRequires:  pkgconfig(libsmack)
 BuildRequires:  pkgconfig(security-server)
+BuildRequires:  pkgconfig(vasum)
+BuildRequires:  pkgconfig(capi-system-info)
+BuildRequires:  pkgconfig(icu-uc)
 Requires(post): /usr/bin/sqlite3, /bin/chmod, /bin/chown
-Requires(post): /usr/bin/vconftool
 Requires(post): /sbin/ldconfig
-Requires(post): telephony-daemon
 Requires(postun): /sbin/ldconfig
 Requires: sys-assert
 
+%if "%{?tizen_profile_name}" == "tv" && 0%{?tizen_version_major} < 3
+ExcludeArch: %{arm} %ix86 x86_64
+%endif
+
 %description
 Contacts Service Library
 
@@ -41,7 +42,6 @@ Summary:      New Contacts service library
 Group: Development/Libraries
 Requires: sys-assert
 Requires: security-server
-Requires(post): telephony-daemon
 Requires(post): libprivilege-control-conf
 
 %description -n contacts-service2
@@ -67,10 +67,6 @@ export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
 
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
 cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-%if "%{?tizen_profile_name}" == "mobile"
-       -DCTS_MOBILE:BOOL=ON \
-%endif
-       -DENABLE_SIM_FEATURE:BOOL=ON \
        -DENABLE_LOG_FEATURE:BOOL=ON \
        -DMAJORVER=${MAJORVER} \
        -DFULLVER=%{version}
@@ -84,7 +80,6 @@ rm -rf %{buildroot}
 
 mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
 install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/system/contacts-service.service
-ln -s ../contacts-service.service %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/contacts-service.service
 
 mkdir -p %{buildroot}%{_libdir}/systemd/system/sockets.target.wants
 install -m 0644 %SOURCE2 %{buildroot}%{_libdir}/systemd/system/contacts-service.socket
@@ -97,42 +92,38 @@ cp LICENSE.APLv2 %{buildroot}/usr/share/license/contacts-service2-devel
 %post -n contacts-service2
 /sbin/ldconfig
 
-chown :5000 /opt/usr/data/contacts-svc
-chown :5000 /opt/usr/dbspace/.contacts-svc.db
-chown :5000 /opt/usr/dbspace/.contacts-svc.db-journal
-chown :5000 -R /opt/usr/data/contacts-svc/img
-chown :5000 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*
+chown 200:5000 /opt/usr/data/contacts-svc
+chown 200:5000 /opt/usr/dbspace/.contacts-svc.db
+chown 200:5000 /opt/usr/dbspace/.contacts-svc.db-journal
+chown 200:5000 -R /opt/usr/data/contacts-svc/img
+chown 200:5000 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*
+chown 200:200 %{_libdir}/systemd/system/contacts-service.socket
+
 
 chmod 660 /opt/usr/dbspace/.contacts-svc.db
 chmod 660 /opt/usr/dbspace/.contacts-svc.db-journal
 chmod 775 /opt/usr/data/contacts-svc
-chmod 770 -R /opt/usr/data/contacts-svc/img/
+chmod 750 -R /opt/usr/data/contacts-svc/img/
+chmod 770 /opt/usr/data/contacts-svc/img/vcard/
 chmod 660 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*
 
-vconftool set -t int file/private/contacts-service/default_lang 0 -g 5000 -s contacts-service::vconf-private
-vconftool set -t int db/contacts-svc/name_sorting_order 0 -g 5000 -s contacts-service::vconf
-vconftool set -t int db/contacts-svc/name_display_order 0 -g 5000 -s contacts-service::vconf
-vconftool set -t int db/contacts-svc/phonenumber_min_match_digit 8 -g 5000 -s contacts-service::vconf
-
-
 %postun -p /sbin/ldconfig
 
 %files -n contacts-service2
 %manifest contacts-service2.manifest
-%defattr(-,root,root,-)
+%defattr(-,system,system,-)
 %{_libdir}/libcontacts-service2.so.*
 %{_bindir}/contacts-service-ipcd*
 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*
 /opt/usr/data/contacts-svc/img/*
 %{_libdir}/systemd/system/contacts-service.service
-%{_libdir}/systemd/system/multi-user.target.wants/contacts-service.service
 %{_libdir}/systemd/system/sockets.target.wants/contacts-service.socket
 %{_libdir}/systemd/system/contacts-service.socket
 %config(noreplace) /opt/usr/dbspace/.contacts-svc.db*
 /usr/share/license/%{name}2
 
 %files -n contacts-service2-devel
-%defattr(-,root,root,-)
+%defattr(-,system,system,-)
 %{_libdir}/libcontacts-service2.so
 %{_libdir}/pkgconfig/contacts-service2.pc
 %{_includedir}/contacts-svc/contacts.h
index 3f2aeda..6870c63 100755 (executable)
@@ -1,6 +1,7 @@
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/server)
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/native)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/server/db)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/server/utils)
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common)
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common/ipc)
 LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
@@ -37,9 +38,10 @@ SET(SRCS
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_extension.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_profile.c
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_image.c
+       ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_sdn.c
+       ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_speeddial.c
 
        ${CMAKE_SOURCE_DIR}/common/ctsvc_filter.c
-       ${CMAKE_SOURCE_DIR}/common/ctsvc_db_notification.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_inotify.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_list.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_localize_utils.c
@@ -56,93 +58,74 @@ SET(SRCS
        ${CMAKE_SOURCE_DIR}/common/ctsvc_socket.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_vcard.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_view.c
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_handle.c
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_zone.c
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_record_speeddial.c
+       ${CMAKE_SOURCE_DIR}/common/ctsvc_record_sdn.c
 
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_activity.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_access_control.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_init.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_activity.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_activity_photo.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_activity_photo_helper.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_address_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_address.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_addressbook.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_addressbook_helper.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_company_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_company.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_contact_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_contact.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_my_profile.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_email_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_email.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_event_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_event.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_extension_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_extension.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_group.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_group_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_grouprelation.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_image_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_image.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_messenger_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_messenger.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_name_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_name.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_nickname_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_nickname.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_note_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_note.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_number_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_number.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_person_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_person.c
-
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_profile_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_profile.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_relationship_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_relationship.c
-
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_simple_contact.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_url_helper.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_url.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_query.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_group.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_person.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_service.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_sqlite.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_utils.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_number_utils.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_notification.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_setting.c
-
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_localize_jp.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_localize_kor.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_localize_ch.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_localize.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_normalize.c
+       db/ctsvc_db_access_control.c
+       db/ctsvc_db_init.c
+       db/ctsvc_db_plugin_activity.c
+       db/ctsvc_db_plugin_activity_photo_helper.c
+       db/ctsvc_db_plugin_activity_photo.c
+       db/ctsvc_db_plugin_address_helper.c
+       db/ctsvc_db_plugin_address.c
+       db/ctsvc_db_plugin_addressbook_helper.c
+       db/ctsvc_db_plugin_addressbook.c
+       db/ctsvc_db_plugin_company_helper.c
+       db/ctsvc_db_plugin_company.c
+       db/ctsvc_db_plugin_contact_helper.c
+       db/ctsvc_db_plugin_contact.c
+       db/ctsvc_db_plugin_my_profile.c
+       db/ctsvc_db_plugin_email_helper.c
+       db/ctsvc_db_plugin_email.c
+       db/ctsvc_db_plugin_event_helper.c
+       db/ctsvc_db_plugin_event.c
+       db/ctsvc_db_plugin_extension_helper.c
+       db/ctsvc_db_plugin_extension.c
+       db/ctsvc_db_plugin_group_helper.c
+       db/ctsvc_db_plugin_group.c
+       db/ctsvc_db_plugin_grouprelation.c
+       db/ctsvc_db_plugin_image_helper.c
+       db/ctsvc_db_plugin_image.c
+       db/ctsvc_db_plugin_messenger_helper.c
+       db/ctsvc_db_plugin_messenger.c
+       db/ctsvc_db_plugin_name_helper.c
+       db/ctsvc_db_plugin_name.c
+       db/ctsvc_db_plugin_nickname_helper.c
+       db/ctsvc_db_plugin_nickname.c
+       db/ctsvc_db_plugin_note_helper.c
+       db/ctsvc_db_plugin_note.c
+       db/ctsvc_db_plugin_number_helper.c
+       db/ctsvc_db_plugin_number.c
+       db/ctsvc_db_plugin_person_helper.c
+       db/ctsvc_db_plugin_person.c
+       db/ctsvc_db_plugin_profile_helper.c
+       db/ctsvc_db_plugin_profile.c
+       db/ctsvc_db_plugin_relationship_helper.c
+       db/ctsvc_db_plugin_relationship.c
+       db/ctsvc_db_plugin_simple_contact.c
+       db/ctsvc_db_plugin_url_helper.c
+       db/ctsvc_db_plugin_url.c
+       db/ctsvc_db_plugin_sdn.c
+       db/ctsvc_db_plugin_speeddial.c
+       db/ctsvc_db_query.c
+       db/ctsvc_db_sqlite.c
+       db/ctsvc_db_utils.c
+
+       ctsvc_localize_jp.c
+       ctsvc_localize_kor.c
+       ctsvc_localize_ch.c
+       ctsvc_localize.c
+       ctsvc_normalize.c
+       ctsvc_number_utils.c
+
+       ctsvc_notification.c
+       ctsvc_server_activity.c
+       ctsvc_server_group.c
+       ctsvc_server_person.c
+       ctsvc_server_service.c
+       ctsvc_server_setting.c
 
        ctsvc_ipc_server.c
        ctsvc_ipc_server2.c
@@ -153,38 +136,31 @@ SET(SRCS
        ctsvc_schema_recovery.c
        ctsvc_server_update.c
        ctsvc_server_bg.c
+       ctsvc_server_zone.c
        ctsvc_server.c
-)
-
-IF( ENABLE_SIM_FEATURE )
-SET(SRCS ${SRCS}
-       ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_sdn.c
-       ${CMAKE_SOURCE_DIR}/common/ctsvc_record_sdn.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_sdn.c
-       ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_speeddial.c
-       ${CMAKE_SOURCE_DIR}/common/ctsvc_record_speeddial.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_speeddial.c
        ctsvc_server_sim.c
 )
-ENDIF( ENABLE_SIM_FEATURE )
 
-IF( ENABLE_LOG_FEATURE )
+IF(ENABLE_LOG_FEATURE)
 SET(SRCS ${SRCS}
        ${CMAKE_SOURCE_DIR}/common/ipc/ctsvc_ipc_phonelog.c
        ${CMAKE_SOURCE_DIR}/common/ctsvc_record_phonelog.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_phonelog.c
-       ${CMAKE_SOURCE_DIR}/native/ctsvc_phonelog.c
+
+       db/ctsvc_db_plugin_phonelog.c
+       ctsvc_server_phonelog.c
 )
-ENDIF( ENABLE_LOG_FEATURE )
+ENDIF(ENABLE_LOG_FEATURE)
 
 
 INCLUDE(FindPkgConfig)
-IF (CTS_MOBILE)
-       ADD_DEFINITIONS("-DCTS_MOBILE")
-       pkg_check_modules(ctsvc_server_pkgs REQUIRED    glib-2.0 pims-ipc gobject-2.0 tapi dlog capi-media-image-util libexif libsmack icu-i18n capi-system-info accounts-svc)
-ELSE (CTS_MOBILE)
-       pkg_check_modules(ctsvc_server_pkgs REQUIRED    glib-2.0 pims-ipc gobject-2.0 tapi dlog capi-media-image-util libexif libsmack icu-i18n capi-system-info)
-ENDIF (CTS_MOBILE)
+pkg_check_modules(ctsvc_server_pkgs REQUIRED
+       tapi
+       capi-media-image-util
+       accounts-svc
+       libexif
+       libsmack
+       capi-system-info
+)
 
 FOREACH(flag ${ctsvc_server_pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index a91237a..b27bb71 100644 (file)
@@ -22,7 +22,8 @@
 
 #include "contacts.h"
 
-#include "ctsvc_service.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_server_service.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_ipc_marshal.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_ipc_server.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_server_utils.h"
+#include "ctsvc_server_zone.h"
+#include "ctsvc_server_service.h"
 
 void ctsvc_ipc_server_connect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
 {
@@ -42,12 +45,20 @@ void ctsvc_ipc_server_connect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_d
        char *cookie = NULL;
        char *buf = NULL;
        gsize buf_len;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
        if (indata) {
-               // Access control : get cookie from indata
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail");
+                       goto ERROR_RETURN;
+               }
+
+               /* Access control : get cookie from indata */
                ret = ctsvc_ipc_unmarshal_unsigned_int(indata, &cookie_size);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_marshal_int fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto ERROR_RETURN;
                }
 
@@ -59,41 +70,54 @@ void ctsvc_ipc_server_connect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_d
 
                ret = ctsvc_ipc_unmarshal_string(indata, &buf);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_string fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_string Fail");
                        goto ERROR_RETURN;
                }
                cookie = (char*)g_base64_decode((const gchar*)buf, &buf_len);
 
                smack_label = security_server_get_smacklabel_cookie(cookie);
                if (NULL == smack_label) {
-                       CTS_ERR("security_server_get_smacklabel_cookie fail");
+                       CTS_ERR("security_server_get_smacklabel_cookie Fail");
                        ret = CONTACTS_ERROR_SYSTEM;
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("There is no indata fail");
+               CTS_ERR("There is no indata Fail");
                ret = CONTACTS_ERROR_SYSTEM;
                goto ERROR_RETURN;
        }
 
-       ret = contacts_connect();
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+       ret = ctsvc_connect(zone_name);
 
        if (CONTACTS_ERROR_NONE == ret)
-               ctsvc_set_client_access_info(smack_label, cookie);
+               ctsvc_set_client_access_info(zone_name, smack_label, cookie);
 
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
 
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto DATA_FREE;
                }
        }
@@ -101,6 +125,8 @@ ERROR_RETURN:
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
        free(smack_label);
        free(cookie);
        free(buf);
@@ -109,34 +135,55 @@ DATA_FREE:
 void ctsvc_ipc_server_disconnect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
 {
        int ret = CONTACTS_ERROR_NONE;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       ret = contacts_disconnect();
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       // related data will be freed in __ctsvc_client_disconnected_cb
-//     if (ret == CONTACTS_ERROR_NONE)
-//             ctsvc_unset_client_access_info();
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
 
-       if (outdata)
-       {
+       ret = ctsvc_disconnect(zone_name);
+ERROR_RETURN:
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-       return;
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_trim_memory();
+       ctsvc_server_start_timeout();
 }
 
 void ctsvc_ipc_server_check_permission(pims_ipc_h ipc, pims_ipc_data_h indata,
@@ -144,44 +191,56 @@ void ctsvc_ipc_server_check_permission(pims_ipc_h ipc, pims_ipc_data_h indata,
 {
        int ret = CONTACTS_ERROR_NONE;
        int permission;
-       bool result;
+       bool result = false;
+       char *zone_name = NULL;
 
        if (NULL == indata) {
                ret = CONTACTS_ERROR_INVALID_PARAMETER;
-               CTS_ERR("check permission fail.");
+               CTS_ERR("check permission Fail");
                goto ERROR_RETURN;
        }
 
        ret = ctsvc_ipc_unmarshal_int(indata, &permission);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                goto ERROR_RETURN;
        }
 
-       result = ctsvc_have_permission(permission);
+       /* TODO: Fixme - contact handle */
+       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       result = ctsvc_have_permission(zone_name, permission);
 
 ERROR_RETURN:
        *outdata = pims_ipc_data_create(0);
-       if (!*outdata) {
-               CTS_ERR("pims_ipc_data_create fail");
+       if (NULL == *outdata) {
+               CTS_ERR("pims_ipc_data_create() Fail");
+               ctsvc_server_start_timeout();
                return;
        }
 
-       if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                pims_ipc_data_destroy(*outdata);
                *outdata = NULL;
-               CTS_ERR("pims_ipc_data_put fail (return value)");
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+               ctsvc_server_start_timeout();
                return;
        }
 
        if (ret == CONTACTS_ERROR_NONE) {
-               if (pims_ipc_data_put(*outdata, (void*)&result, sizeof(bool)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_bool(result, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (id)");
+                       CTS_ERR("ctsvc_ipc_marshal_bool() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
        }
+       ctsvc_server_start_timeout();
 }
 
 void ctsvc_ipc_server_db_insert_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
@@ -189,91 +248,102 @@ void ctsvc_ipc_server_db_insert_record(pims_ipc_h ipc, pims_ipc_data_h indata, p
        int ret = CONTACTS_ERROR_NONE;
        contacts_record_h record = NULL;
        int id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_record(indata,&record);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        record = NULL;
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_insert_record(record, &id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+       ret = ctsvc_db_insert_record(zone_name, record, &id);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
-                       if (ctsvc_ipc_marshal_int(id,*outdata) != CONTACTS_ERROR_NONE)
-                       {
+                       if (ctsvc_ipc_marshal_int(id,*outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
-                               CTS_ERR("ctsvc_ipc_marshal fail");
+                               CTS_ERR("ctsvc_ipc_marshal Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 
 DATA_FREE:
-       if (record)
-       {
-               contacts_record_destroy(record,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_record_destroy(record,true);
+       ctsvc_server_trim_memory();
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -283,72 +353,83 @@ void ctsvc_ipc_server_db_get_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims
        char* view_uri = NULL;
        int id = 0;
        contacts_record_h record = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_string fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_string Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_record(view_uri,id,&record);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_get_record(zone_name, view_uri,id,&record);
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
-                       if( ctsvc_ipc_marshal_record(record, *outdata) != CONTACTS_ERROR_NONE )
-                       {
+               else if (CONTACTS_ERROR_NONE == ret) {
+                       if (ctsvc_ipc_marshal_record(record, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_record fail");
+                               CTS_ERR("ctsvc_ipc_marshal_record Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (record)
-       {
-               contacts_record_destroy(record,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_record_destroy(record,true);
        CONTACTS_FREE(view_uri);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -356,46 +437,63 @@ void ctsvc_ipc_server_db_update_record(pims_ipc_h ipc, pims_ipc_data_h indata, p
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_record_h record = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_record(indata,&record);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_update_record(record);
 
-       if (outdata)
-       {
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_update_record(zone_name, record);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
@@ -405,31 +503,28 @@ void ctsvc_ipc_server_db_update_record(pims_ipc_h ipc, pims_ipc_data_h indata, p
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (record)
-       {
-               contacts_record_destroy(record,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_record_destroy(record,true);
+       ctsvc_server_trim_memory();
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -438,52 +533,67 @@ void ctsvc_ipc_server_db_delete_record(pims_ipc_h ipc, pims_ipc_data_h indata, p
        int ret = CONTACTS_ERROR_NONE;
        char* view_uri = NULL;
        int id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_delete_record(view_uri,id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_delete_record(zone_name, view_uri,id);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
@@ -493,30 +603,28 @@ void ctsvc_ipc_server_db_delete_record(pims_ipc_h ipc, pims_ipc_data_h indata, p
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 
 DATA_FREE:
-
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
        CONTACTS_FREE(view_uri);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -526,46 +634,70 @@ void ctsvc_ipc_server_db_replace_record(pims_ipc_h ipc, pims_ipc_data_h indata,
        int ret = CONTACTS_ERROR_NONE;
        contacts_record_h record = NULL;
        int id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
        if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
+
                ret = ctsvc_ipc_unmarshal_record(indata, &record);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        record = NULL;
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &id);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_server_db_replace_record fail");
+               CTS_ERR("ctsvc_ipc_server_db_replace_record Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_replace_record(record, id);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_replace_record(zone_name, record, id);
 
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
@@ -579,14 +711,14 @@ void ctsvc_ipc_server_db_replace_record(pims_ipc_h ipc, pims_ipc_data_h indata,
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
@@ -595,9 +727,10 @@ ERROR_RETURN:
        }
 
 DATA_FREE:
-       if (record)
-               contacts_record_destroy(record, true);
-
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_record_destroy(record, true);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -608,103 +741,109 @@ void ctsvc_ipc_server_db_get_all_records(pims_ipc_h ipc, pims_ipc_data_h indata,
        int offset = 0;
        int limit = 0;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       ret = CONTACTS_ERROR_IPC;
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&offset);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&limit);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_all_records(view_uri,offset,limit,&list);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_get_all_records(zone_name, view_uri,offset,limit,&list);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_list(list,*outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
 
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
        CONTACTS_FREE(view_uri);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -715,104 +854,105 @@ void ctsvc_ipc_server_db_get_records_with_query(pims_ipc_h ipc, pims_ipc_data_h
        int offset = 0;
        int limit = 0;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_query(indata,&query);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&offset);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&limit);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
+               goto ERROR_RETURN;
+       }
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_records_with_query(query,offset,limit,&list);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_db_get_records_with_query(zone_name, query, offset, limit, &list);
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_list(list,*outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
-       if (query)
-       {
-               contacts_query_destroy(query);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
+       contacts_query_destroy(query);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -822,84 +962,96 @@ void ctsvc_ipc_server_db_get_count(pims_ipc_h ipc, pims_ipc_data_h indata, pims_
        int ret = CONTACTS_ERROR_NONE;
        char* view_uri = NULL;
        int count = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_count(view_uri,&count);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_get_count(zone_name, view_uri,&count);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_int(count,*outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
        CONTACTS_FREE(view_uri);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -908,87 +1060,97 @@ void ctsvc_ipc_server_db_get_count_with_query(pims_ipc_h ipc, pims_ipc_data_h in
        int ret = CONTACTS_ERROR_NONE;
        contacts_query_h query = NULL;
        int count = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_query(indata,&query);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_count_with_query(query,&count);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+
+       ret = ctsvc_db_get_count_with_query(zone_name, query,&count);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_int(count,*outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (query)
-       {
-               contacts_query_destroy(query);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_query_destroy(query);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -997,110 +1159,119 @@ void ctsvc_ipc_server_db_insert_records(pims_ipc_h ipc, pims_ipc_data_h indata,
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_list_h list = NULL;
-       unsigned int id_count = 0;
+       int id_count = 0;
        int *ids = NULL;
        int i=0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_list(indata,&list);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_list fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_list Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = ctsvc_db_insert_records(list, &ids, &id_count);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_insert_records(zone_name, list, &ids, &id_count);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if(ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+               if (ret == CONTACTS_ERROR_NONE) {
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
-                       // marshal : id_count+property_id+[ids]*id_count
-                       // id_count
-                       if (pims_ipc_data_put(*outdata,(void*)&id_count,sizeof(int)) != 0)
-                       {
+                       /* marshal : id_count+property_id+[ids]*id_count */
+                       /* id_count */
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(id_count, *outdata)) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("pims_ipc_data_put fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
 
-                       for(i=0;i<id_count;i++)
-                       {
-                               // marshal ids
-                               if (pims_ipc_data_put(*outdata,(void*)&ids[i],sizeof(int)) != 0)
-                               {
+                       for (i=0;i<id_count;i++) {
+                               /* marshal ids */
+                               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ids[i], *outdata)) {
                                        pims_ipc_data_destroy(*outdata);
                                        *outdata = NULL;
-                                       CTS_ERR("pims_ipc_data_put fail");
+                                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                        ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                        goto ERROR_RETURN;
                                }
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
        CONTACTS_FREE(ids);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1109,83 +1280,96 @@ void ctsvc_ipc_server_db_update_records(pims_ipc_h ipc, pims_ipc_data_h indata,
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_list(indata,&list);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_list fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_list Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_update_records(list);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+
+       ret = ctsvc_db_update_records(zone_name, list);
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1197,103 +1381,113 @@ void ctsvc_ipc_server_db_delete_records(pims_ipc_h ipc, pims_ipc_data_h indata,
        int *ids = NULL;
        char *uri = NULL;
        int i = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_string(indata,&uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_string fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_string Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&count);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
-               if (count <=0)
-               {
+               if (count <=0) {
                        ret = CONTACTS_ERROR_INVALID_PARAMETER;
                        goto ERROR_RETURN;
                }
                ids = (int*)malloc(sizeof(int)*count);
-               for(i=0;i<count;i++)
-               {
+               for (i=0;i<count;i++) {
                        ret = ctsvc_ipc_unmarshal_int(indata,&ids[i]);
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto ERROR_RETURN;
                        }
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_delete_records(uri, ids, count);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
 
-       if (outdata)
-       {
+       ret = ctsvc_db_delete_records(zone_name, uri, ids, count);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       goto DATA_FREE;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
        CONTACTS_FREE(uri);
        CONTACTS_FREE(ids);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1305,17 +1499,25 @@ void ctsvc_ipc_server_db_replace_records(pims_ipc_h ipc, pims_ipc_data_h indata,
        int count = 0;
        int *ids = NULL;
        int i=0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
        if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+
                ret = ctsvc_ipc_unmarshal_list(indata, &list);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_list fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_list Fail");
                        goto ERROR_RETURN;
                }
 
                ret = ctsvc_ipc_unmarshal_int(indata, &count);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
 
@@ -1325,39 +1527,54 @@ void ctsvc_ipc_server_db_replace_records(pims_ipc_h ipc, pims_ipc_data_h indata,
                }
 
                ids = (int*)malloc(sizeof(int)*count);
-               for(i=0;i<count;i++) {
+               for (i=0;i<count;i++) {
                        ret = ctsvc_ipc_unmarshal_int(indata, &ids[i]);
                        if (ret != CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto ERROR_RETURN;
                        }
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_server_db_repalce_records fail");
+               CTS_ERR("ctsvc_ipc_server_db_repalce_records Fail");
                goto ERROR_RETURN;
        }
 
-       ret = ctsvc_db_replace_records(list, ids, count);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_replace_records(zone_name, list, ids, count);
 
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
@@ -1371,14 +1588,14 @@ void ctsvc_ipc_server_db_replace_records(pims_ipc_h ipc, pims_ipc_data_h indata,
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
@@ -1386,10 +1603,11 @@ ERROR_RETURN:
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (list) {
-               contacts_list_destroy(list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
        CONTACTS_FREE(ids);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1401,71 +1619,82 @@ void ctsvc_ipc_server_db_get_changes_by_version(pims_ipc_h ipc, pims_ipc_data_h
        int contacts_db_version = 0;
        contacts_list_h record_list = NULL;
        int current_contacts_db_version = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
 
-       if (indata)
-       {
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_string fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_string Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &address_book_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&contacts_db_version);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_get_changes_by_version(view_uri, address_book_id,contacts_db_version,&record_list,&current_contacts_db_version);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
 
-       if (outdata)
-       {
+       ret = ctsvc_db_get_changes_by_version(zone_name, view_uri, address_book_id,contacts_db_version,&record_list,&current_contacts_db_version);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_list(record_list,*outdata);
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_marshal_list fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_marshal_list Fail");
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
                                goto ERROR_RETURN;
                        }
                        ret = ctsvc_ipc_marshal_int(current_contacts_db_version,*outdata);
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
                                ret = CONTACTS_ERROR_OUT_OF_MEMORY;
@@ -1473,39 +1702,34 @@ void ctsvc_ipc_server_db_get_changes_by_version(pims_ipc_h ipc, pims_ipc_data_h
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-       if (record_list)
-       {
-               contacts_list_destroy(record_list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(record_list,true);
        CONTACTS_FREE(view_uri);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1513,43 +1737,68 @@ void ctsvc_ipc_server_db_get_current_version(pims_ipc_h ipc, pims_ipc_data_h ind
 {
        int ret = CONTACTS_ERROR_NONE;
        int contacts_db_version = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       ret = contacts_db_get_current_version(&contacts_db_version);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
 
-       if (outdata)
-       {
+
+
+       ret = ctsvc_db_get_current_version(zone_name, &contacts_db_version);
+
+ERROR_RETURN:
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_int(contacts_db_version,*outdata);
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
+
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1561,108 +1810,112 @@ void ctsvc_ipc_server_db_search_records(pims_ipc_h ipc, pims_ipc_data_h indata,
        int offset = 0;
        int limit = 0;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail(%d)", ret);
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_string(indata,&keyword);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail(%d)", ret);
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&offset);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&limit);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_search_records(view_uri, keyword, offset,limit,&list);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_search_records(zone_name, view_uri, keyword, offset,limit,&list);
+
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_list(list,*outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
        CONTACTS_FREE(view_uri);
        CONTACTS_FREE(keyword);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1675,62 +1928,84 @@ void ctsvc_ipc_server_db_search_records_with_range(pims_ipc_h ipc, pims_ipc_data
        int limit = 0;
        int range = 0;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
        if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_string(indata,&view_uri);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_string(indata,&keyword);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&offset);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&limit);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&range);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+               CTS_ERR("ctsvc_ipc_server_db_insert_record() Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_search_records_with_range(view_uri, keyword, offset,limit,range, &list);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_search_records_with_range(zone_name, view_uri, keyword, offset,limit,range, &list);
 
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if(CONTACTS_ERROR_NONE == ret) {
+               else if (CONTACTS_ERROR_NONE == ret) {
                        ret = ctsvc_ipc_marshal_list(list,*outdata);
 
                        if (ret != CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
@@ -1743,14 +2018,14 @@ void ctsvc_ipc_server_db_search_records_with_range(pims_ipc_h ipc, pims_ipc_data
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
@@ -1759,11 +2034,12 @@ ERROR_RETURN:
        }
 
 DATA_FREE:
-
-       if (list)
-               contacts_list_destroy(list,true);
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
        free(view_uri);
        free(keyword);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1775,112 +2051,111 @@ void ctsvc_ipc_server_db_search_records_with_query(pims_ipc_h ipc, pims_ipc_data
        int offset = 0;
        int limit = 0;
        contacts_list_h list = NULL;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_query(indata,&query);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_string(indata,&keyword);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_record fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_record() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&offset);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata,&limit);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_db_search_records_with_query(query, keyword, offset,limit,&list);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       if (outdata)
-       {
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+
+       ret = ctsvc_db_search_records_with_query(zone_name, query, keyword, offset,limit,&list);
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
 
-               if ( CONTACTS_ERROR_NO_DATA == ret )
-               {
+               if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("no data");
                }
-               else if( CONTACTS_ERROR_NONE == ret )
-               {
-                       ret = ctsvc_ipc_marshal_list(list,*outdata);
+               else if (CONTACTS_ERROR_NONE == ret) {
+                       ret = ctsvc_ipc_marshal_list(list, *outdata);
 
-                       if (ret != CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       if (ret != CONTACTS_ERROR_NONE) {
+                               CTS_ERR("ctsvc_ipc_marshal_list Fail");
                                goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
        goto DATA_FREE;
 
 ERROR_RETURN:
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
 DATA_FREE:
-
-       if (list)
-       {
-               contacts_list_destroy(list,true);
-       }
-       if (query)
-       {
-               contacts_query_destroy(query);
-       }
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       contacts_list_destroy(list,true);
+       contacts_query_destroy(query);
        CONTACTS_FREE(keyword);
-
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -1889,30 +2164,63 @@ void ctsvc_ipc_server_db_get_status(pims_ipc_h ipc, pims_ipc_data_h indata,
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_db_status_e status;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       RETM_IF(outdata == NULL, "outdata is NULL");
-
-       *outdata = pims_ipc_data_create(0);
-       if (!*outdata) {
-               CTS_ERR("pims_ipc_data_create fail");
-               return;
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
        }
 
-       ret = contacts_db_get_status(&status);
-       if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
-               pims_ipc_data_destroy(*outdata);
-               *outdata = NULL;
-               CTS_ERR("pims_ipc_data_put fail (return value)");
-               return;
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
        }
 
-       if (pims_ipc_data_put(*outdata, (void*)&status, sizeof(int)) != 0) {
-               pims_ipc_data_destroy(*outdata);
-               *outdata = NULL;
-               CTS_ERR("pims_ipc_data_put fail (id)");
-               return;
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
        }
 
+
+       ret = ctsvc_db_get_status(zone_name, &status);
+
+ERROR_RETURN:
+       if (outdata) {
+               *outdata = pims_ipc_data_create(0);
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
+               }
+
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+                       pims_ipc_data_destroy(*outdata);
+                       *outdata = NULL;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
+               }
+
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(status, *outdata)) {
+                       pims_ipc_data_destroy(*outdata);
+                       *outdata = NULL;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
+               }
+       }
+       else {
+               CTS_ERR("outdata is NULL");
+       }
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
index bde442a..9216e91 100644 (file)
 #include "contacts.h"
 #ifdef ENABLE_LOG_FEATURE
 #include "contacts_phone_log_internal.h"
-#endif //ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-#include "ctsvc_service.h"
+#include "ctsvc_server_service.h"
 #include "ctsvc_db_init.h"
 
+#include "ctsvc_server_activity.h"
+#include "ctsvc_server_person.h"
+#include "ctsvc_server_group.h"
+#include "ctsvc_server_phonelog.h"
 #include "ctsvc_ipc_marshal.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_ipc_server.h"
-#include "ctsvc_utils.h"
-
+#include "ctsvc_db_utils.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_server_utils.h"
+#include "ctsvc_server_zone.h"
+#include "ctsvc_server_setting.h"
 
 void ctsvc_ipc_activity_delete_by_contact_id(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
 {
        int ret = CONTACTS_ERROR_NONE;
        int contact_id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &contact_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_server_db_insert_record fail");
+       else {
+               CTS_ERR("ctsvc_ipc_server_db_insert_record() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_activity_delete_by_contact_id(contact_id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_activity_delete_by_contact_id(zone_name, contact_id);
 
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -96,57 +121,74 @@ void ctsvc_ipc_activity_delete_by_account_id(pims_ipc_h ipc, pims_ipc_data_h ind
 {
        int ret = CONTACTS_ERROR_NONE;
        int account_id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &account_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_activity_delete_by_account_id fail");
+       else {
+               CTS_ERR("ctsvc_ipc_activity_delete_by_account_id() Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_activity_delete_by_account_id(account_id);
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_activity_delete_by_account_id(zone_name, account_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -155,63 +197,79 @@ void ctsvc_ipc_group_add_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ip
        int ret = CONTACTS_ERROR_NONE;
        int group_id = 0;
        int contact_id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &group_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &contact_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_group_add_contact fail");
+       else {
+               CTS_ERR("ctsvc_ipc_group_add_contact() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_group_add_contact(group_id, contact_id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_group_add_contact(zone_name, group_id, contact_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
 
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -220,63 +278,79 @@ void ctsvc_ipc_group_remove_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims
        int ret = CONTACTS_ERROR_NONE;
        int group_id = 0;
        int contact_id = 0;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &group_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &contact_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_group_remove_contact fail");
+       else {
+               CTS_ERR("ctsvc_ipc_group_remove_contact() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_group_remove_contact(group_id, contact_id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_group_remove_contact(zone_name, group_id, contact_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
 
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -286,68 +360,82 @@ void ctsvc_ipc_group_set_group_order(pims_ipc_h ipc, pims_ipc_data_h indata, pim
        int group_id = 0;
        int previous_group_id;
        int next_group_id;
-
-       if (indata)
-       {
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &group_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &previous_group_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &next_group_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_group_link_group fail");
+       else {
+               CTS_ERR("ctsvc_ipc_group_link_group() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_group_set_group_order(group_id, previous_group_id, next_group_id );
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_group_set_group_order(zone_name, group_id, previous_group_id, next_group_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -356,62 +444,77 @@ void ctsvc_ipc_person_link_person(pims_ipc_h ipc, pims_ipc_data_h indata, pims_i
        int ret = CONTACTS_ERROR_NONE;
        int base_person_id = 0;
        int person_id = 0;
-
-       if (indata)
-       {
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &base_person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_person_link_person fail");
+       else {
+               CTS_ERR("ctsvc_ipc_person_link_person() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_person_link_person(base_person_id, person_id);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_person_link_person(zone_name, base_person_id, person_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 void ctsvc_ipc_person_unlink_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
@@ -419,70 +522,84 @@ void ctsvc_ipc_person_unlink_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pim
        int ret = CONTACTS_ERROR_NONE;
        int person_id = 0;
        int contact_id = 0;
-
-       if (indata)
-       {
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &contact_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_person_link_person fail");
+       else {
+               CTS_ERR("ctsvc_ipc_person_link_person() Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
        int unlinked_person_id;
-       ret = contacts_person_unlink_contact(person_id, contact_id, &unlinked_person_id);
+       ret = ctsvc_person_unlink_contact(zone_name, person_id, contact_id, &unlinked_person_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
-               if (pims_ipc_data_put(*outdata, (void*)&unlinked_person_id, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(unlinked_person_id, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
 
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 void ctsvc_ipc_person_reset_usage(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
@@ -490,64 +607,79 @@ void ctsvc_ipc_person_reset_usage(pims_ipc_h ipc, pims_ipc_data_h indata, pims_i
        int ret = CONTACTS_ERROR_NONE;
        int person_id = 0;
        contacts_usage_type_e type;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                int temp = 0;
                ret = ctsvc_ipc_unmarshal_int(indata, &temp);
                type = (int)temp;
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_person_link_person fail");
+       else {
+               CTS_ERR("ctsvc_ipc_person_link_person() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_person_reset_usage(person_id, type);
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+       ret = ctsvc_person_reset_usage(zone_name, person_id, type);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 void ctsvc_ipc_person_set_favorite_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
@@ -556,68 +688,83 @@ void ctsvc_ipc_person_set_favorite_order(pims_ipc_h ipc, pims_ipc_data_h indata,
        int person_id = 0;
        int previous_person_id;
        int next_person_id;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &previous_person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &next_person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_person_link_person fail");
+       else {
+               CTS_ERR("ctsvc_ipc_person_link_person() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_person_set_favorite_order(person_id, previous_person_id, next_person_id );
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_person_set_favorite_order(zone_name, person_id, previous_person_id, next_person_id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -627,68 +774,83 @@ void ctsvc_ipc_person_set_default_property(pims_ipc_h ipc, pims_ipc_data_h indat
        int person_id = 0;
        int id;
        contacts_person_property_e property;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
-       if (indata)
-       {
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_unsigned_int(indata, &property);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_int(indata, &id);
-               if (ret != CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
-       else
-       {
-               CTS_ERR("ctsvc_ipc_person_set_default_property fail");
+       else {
+               CTS_ERR("ctsvc_ipc_person_set_default_property() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_person_set_default_property(property, person_id, id );
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_person_set_default_property(zone_name, property, person_id, id);
 
 ERROR_RETURN:
 
-       if (outdata)
-       {
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -699,89 +861,138 @@ void ctsvc_ipc_person_get_default_property(pims_ipc_h ipc, pims_ipc_data_h indat
        int person_id = 0;
        int id;
        contacts_person_property_e op;
-
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
        if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, &person_id);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
                ret = ctsvc_ipc_unmarshal_unsigned_int(indata, &op);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_person_get_default_property fail");
+               CTS_ERR("ctsvc_ipc_person_get_default_property() Fail");
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_person_get_default_property(op, person_id, &id );
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_person_get_default_property(zone_name, op, person_id, &id);
 
 ERROR_RETURN:
 
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (return value)");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (return value)");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&id, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(id, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (id)");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (id)");
+                       goto DATA_FREE;
                }
        }
        else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
 #ifdef ENABLE_LOG_FEATURE
 void ctsvc_ipc_phone_log_reset_statistics(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
 {
-       int ret = contacts_phone_log_reset_statistics();
+       char *zone_name = NULL;
+       int ret;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       if (NULL == zone_name) {
+               ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       ret = ctsvc_phone_log_reset_statistics(zone_name);
 
-       if (outdata)
-       {
+ERROR_RETURN:
+       if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata)
-               {
-                       CTS_ERR("pims_ipc_data_create fail");
-                       return;
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
-               {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
-                       return;
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
-                               return;
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
                        }
                }
        }
-       else
-       {
+       else {
                CTS_ERR("outdata is NULL");
        }
-
+DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -792,31 +1003,52 @@ void ctsvc_ipc_phone_log_delete(pims_ipc_h ipc, pims_ipc_data_h indata,
        int extra_data1;
        char *number = NULL;
        contacts_phone_log_delete_e op;
+       char *zone_name = NULL;
+       contacts_h contact = NULL;
 
        if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
                ret = ctsvc_ipc_unmarshal_int(indata, (int*)&op);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       goto ERROR_RETURN;
+               }
+
+               ret = ctsvc_handle_get_zone_name(contact, &zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_handle_get_zone_name() Fail(%d)", ret);
                        goto ERROR_RETURN;
                }
 
-               switch(op){
+               if (NULL == zone_name) {
+                       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+                       if (CONTACTS_ERROR_NONE != ret) {
+                               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+                               goto ERROR_RETURN;
+                       }
+               }
+
+               switch(op) {
                case CONTACTS_PHONE_LOG_DELETE_BY_ADDRESS:
                        ret = ctsvc_ipc_unmarshal_string(indata, &number);
                        if (ret != CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_ipc_unmarshal_string fail");
+                               CTS_ERR("ctsvc_ipc_unmarshal_string() Fail");
                                goto ERROR_RETURN;
                        }
-                       ret = contacts_phone_log_delete(op, number);
+                       ret = ctsvc_phone_log_delete(zone_name, op, number);
                        break;
                case CONTACTS_PHONE_LOG_DELETE_BY_MESSAGE_EXTRA_DATA1:
                case CONTACTS_PHONE_LOG_DELETE_BY_EMAIL_EXTRA_DATA1:
                        ret = ctsvc_ipc_unmarshal_int(indata, &extra_data1);
                        if (ret != CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                               CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                                goto ERROR_RETURN;
                        }
-                       ret = contacts_phone_log_delete(op, extra_data1);
+                       ret = ctsvc_phone_log_delete(zone_name, op, extra_data1);
                        break;
                default:
                        CTS_ERR("Invalid parameter : the operation is not proper (op : %d)", op);
@@ -828,57 +1060,73 @@ void ctsvc_ipc_phone_log_delete(pims_ipc_h ipc, pims_ipc_data_h indata,
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
                        goto DATA_FREE;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                        goto DATA_FREE;
                }
                if (ret == CONTACTS_ERROR_NONE) {
-                       int transaction_ver = ctsvc_get_transaction_ver();
+                       int transaction_ver = ctsvc_get_transaction_ver(zone_name);
                        if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
                                pims_ipc_data_destroy(*outdata);
                                *outdata = NULL;
-                               CTS_ERR("ctsvc_ipc_marshal_int fail");
+                               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                                goto DATA_FREE;
                        }
                }
        }
 DATA_FREE:
+       free(zone_name);
+       ctsvc_handle_destroy(contact);
        free(number);
 
+       ctsvc_server_start_timeout();
        return;
 }
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 void ctsvc_ipc_setting_get_name_display_order(pims_ipc_h ipc, pims_ipc_data_h indata,
                pims_ipc_data_h *outdata, void *userdata)
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_name_display_order_e order;
+       char *zone_name = NULL;
 
-       ret = contacts_setting_get_name_display_order(&order);
+       /* TODO: Fixme - contact handle */
+       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_setting_get_name_display_order(zone_name, &order);
+       free(zone_name);
 
+ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (return value)");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (return value)");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&order, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(order, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (id)");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (id)");
+                       ctsvc_server_start_timeout();
                        return;
                }
        }
@@ -886,6 +1134,7 @@ void ctsvc_ipc_setting_get_name_display_order(pims_ipc_h ipc, pims_ipc_data_h in
                CTS_ERR("outdata is NULL");
        }
 
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -894,25 +1143,37 @@ void ctsvc_ipc_setting_get_name_sorting_order(pims_ipc_h ipc, pims_ipc_data_h in
 {
        int ret = CONTACTS_ERROR_NONE;
        contacts_name_sorting_order_e order;
+       char *zone_name = NULL;
+
+       /* TODO: Fixme - contact handle */
+       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
 
-       ret = contacts_setting_get_name_sorting_order(&order);
+       ret = ctsvc_setting_get_name_sorting_order(zone_name, &order);
+       free(zone_name);
 
+ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (return value)");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (return value)");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&order, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(order, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail (id)");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail (id)");
                        return;
                }
        }
@@ -920,6 +1181,7 @@ void ctsvc_ipc_setting_get_name_sorting_order(pims_ipc_h ipc, pims_ipc_data_h in
                CTS_ERR("outdata is NULL");
        }
 
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -928,32 +1190,43 @@ void ctsvc_ipc_setting_set_name_display_order(pims_ipc_h ipc,
 {
        int ret = CONTACTS_ERROR_NONE;
        int order;
+       char *zone_name = NULL;
 
        if (indata) {
                ret = ctsvc_ipc_unmarshal_int(indata, &order);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_person_set_default_property fail");
+               CTS_ERR("ctsvc_ipc_person_set_default_property() Fail");
                goto ERROR_RETURN;
        }
 
-       ret = contacts_setting_set_name_display_order((contacts_name_display_order_e)order);
+       /* TODO: Fixme - contact handle */
+       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_setting_set_name_display_order(zone_name, (contacts_name_display_order_e)order);
+       free(zone_name);
 
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
        }
@@ -961,6 +1234,7 @@ ERROR_RETURN:
                CTS_ERR("outdata is NULL");
        }
 
+       ctsvc_server_start_timeout();
        return;
 }
 
@@ -969,32 +1243,43 @@ void ctsvc_ipc_setting_set_name_sorting_order(pims_ipc_h ipc,
 {
        int ret = CONTACTS_ERROR_NONE;
        int order;
+       char *zone_name = NULL;
 
        if (indata) {
                ret = ctsvc_ipc_unmarshal_int(indata, &order);
                if (ret != CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_ipc_unmarshal_int fail");
+                       CTS_ERR("ctsvc_ipc_unmarshal_int() Fail");
                        goto ERROR_RETURN;
                }
        }
        else {
-               CTS_ERR("ctsvc_ipc_person_set_default_property fail");
+               CTS_ERR("ctsvc_ipc_person_set_default_property() Fail");
+               goto ERROR_RETURN;
+       }
+
+       /* TODO: Fixme - contact handle */
+       ret = ctsvc_server_zone_get_zone_name_by_pid((int)ipc, &zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_zone_get_zone_name_by_pid() Fail(%d)", ret);
                goto ERROR_RETURN;
        }
 
-       ret = contacts_setting_set_name_sorting_order((contacts_name_sorting_order_e)order);
+       ret = ctsvc_setting_set_name_sorting_order(zone_name, (contacts_name_sorting_order_e)order);
+       free(zone_name);
 
 ERROR_RETURN:
        if (outdata) {
                *outdata = pims_ipc_data_create(0);
-               if (!*outdata) {
-                       CTS_ERR("pims_ipc_data_create fail");
+               if (NULL == *outdata) {
+                       CTS_ERR("pims_ipc_data_create() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
-               if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
                        pims_ipc_data_destroy(*outdata);
                        *outdata = NULL;
-                       CTS_ERR("pims_ipc_data_put fail");
+                       CTS_ERR("ctsvc_ipc_marshal_int() Fail");
+                       ctsvc_server_start_timeout();
                        return;
                }
        }
@@ -1002,6 +1287,7 @@ ERROR_RETURN:
                CTS_ERR("outdata is NULL");
        }
 
+       ctsvc_server_start_timeout();
        return;
 }
 
index 9d45a5a..91716c5 100644 (file)
@@ -39,7 +39,7 @@ void ctsvc_ipc_person_get_default_property(pims_ipc_h ipc, pims_ipc_data_h indat
 #ifdef ENABLE_LOG_FEATURE
 void ctsvc_ipc_phone_log_reset_statistics(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
 void ctsvc_ipc_phone_log_delete(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 void ctsvc_ipc_setting_get_name_display_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
 void ctsvc_ipc_setting_set_name_display_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
diff --git a/server/ctsvc_localize.c b/server/ctsvc_localize.c
new file mode 100644 (file)
index 0000000..39b0136
--- /dev/null
@@ -0,0 +1,498 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <unicode/ustring.h>
+#include <unicode/unorm.h>
+#include <unicode/ucol.h>
+#include <unicode/uset.h>
+
+#include "ctsvc_internal.h"
+#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
+#include "ctsvc_localize_utils.h"
+
+#include "ctsvc_localize_kor.h"
+#include "ctsvc_localize_jp.h"
+
+int ctsvc_get_sort_type_from_language(int language)
+{
+       switch(language) {
+       case CTSVC_LANG_CHINESE:
+               return CTSVC_SORT_CJK;
+       case CTSVC_LANG_JAPANESE:
+               return CTSVC_SORT_JAPANESE;
+       case CTSVC_LANG_KOREAN:
+               return CTSVC_SORT_KOREAN;
+       case CTSVC_LANG_ENGLISH:
+               return CTSVC_SORT_WESTERN;
+       case CTSVC_LANG_NUMBER:
+               return CTSVC_SORT_NUMBER;
+       case CTSVC_LANG_RUSSIAN:
+       case CTSVC_LANG_BULGARIAN:
+       case CTSVC_LANG_MACEDONIA:
+       case CTSVC_LANG_KAZAKHSTAN:
+       case CTSVC_LANG_SERBIAN:
+       case CTSVC_LANG_UKRAINE:
+               return CTSVC_SORT_CYRILLIC;
+       case CTSVC_LANG_ARMENIAN:
+               return CTSVC_SORT_ARMENIAN;
+       case CTSVC_LANG_GREEK:
+               return CTSVC_SORT_GREEK;
+       case CTSVC_LANG_ARABIC:
+       case CTSVC_LANG_PERSIAN:
+       case CTSVC_LANG_URDU:
+               return CTSVC_SORT_ARABIC;
+       case CTSVC_LANG_HINDI:
+               return CTSVC_SORT_DEVANAGARI;
+       case CTSVC_LANG_GEORGIAN:
+               return CTSVC_SORT_GEORGIAN;
+       case CTSVC_LANG_TURKISH:
+               return CTSVC_SORT_TURKISH;
+       case CTSVC_LANG_THAI:
+               return CTSVC_SORT_THAI;
+       case CTSVC_LANG_BENGALI:
+               return CTSVC_SORT_BENGALI;
+       case CTSVC_LANG_PUNJABI:
+               return CTSVC_SORT_PUNJABI;
+       case CTSVC_LANG_MALAYALAM:
+               return CTSVC_SORT_MALAYALAM;
+       case CTSVC_LANG_TELUGU:
+               return CTSVC_SORT_TELUGU;
+       case CTSVC_LANG_TAMIL:
+               return CTSVC_SORT_TAMIL;
+       case CTSVC_LANG_ORIYA:
+               return CTSVC_SORT_ORIYA;
+       case CTSVC_LANG_SINHALA:
+               return CTSVC_SORT_SINHALA;
+       case CTSVC_LANG_GUJARATI:
+               return CTSVC_SORT_GUJARATI;
+       case CTSVC_LANG_KANNADA:
+               return CTSVC_SORT_KANNADA;
+       case CTSVC_LANG_LAO:
+               return CTSVC_SORT_LAO;
+       case CTSVC_LANG_HEBREW:
+               return CTSVC_SORT_HEBREW;
+       case CTSVC_LANG_BURMESE:
+               return CTSVC_SORT_BURMESE;
+       case CTSVC_LANG_KHMER:
+               return CTSVC_SORT_KHMER;
+       case CTSVC_LANG_OTHERS:
+               return CTSVC_SORT_OTHERS;
+       default:
+               return CTSVC_SORT_WESTERN;
+       }
+}
+
+int ctsvc_get_name_sort_type(const char *src)
+{
+       UErrorCode status = 0;
+       UChar tmp_result[10];
+       int ret = CTSVC_SORT_OTHERS;
+       int char_len = 0;
+       int language_type;
+       char char_src[10];
+
+       char_len = ctsvc_check_utf8(src[0]);
+       RETVM_IF(char_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "check_utf8 failed");
+
+       memcpy(char_src, &src[0], char_len);
+       char_src[char_len] = '\0';
+
+       u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
+       RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+                       "u_strFromUTF8() Fail(%s)", u_errorName(status));
+
+       language_type = ctsvc_check_language(tmp_result);
+       ret = ctsvc_get_sort_type_from_language(language_type);
+
+       return ret;
+}
+
+void ctsvc_extra_normalize(UChar *word, int32_t word_size)
+{
+       int i;
+       for (i=0;i<word_size;i++) {
+               /* FF00 ~ FF60, FFE0~FFE6 : fullwidth -> halfwidth */
+               if (CTSVC_COMPARE_BETWEEN((UChar)0xFF00, word[i], (UChar)0xFF60)) {
+                       int unicode_value1 = 0;
+                       int unicode_value2 = 0;
+                       unicode_value1 = 0x0;
+                       unicode_value2 = (0xFF & word[i]) + 0x20;
+                       word[i] = unicode_value1 << 8 | unicode_value2;
+               }
+               else if (ctsvc_is_hangul(word[i])) {
+                       ctsvc_hangul_compatibility2jamo(&word[i]);
+               }
+       }
+}
+
+const char *ctsvc_get_language_locale(int lang)
+{
+       char *langset = ctsvc_get_langset();
+
+       switch(lang) {
+       case CTSVC_LANG_AZERBAIJAN: /* az, Azerbaijan */
+               return "az";
+       case CTSVC_LANG_ARABIC: /* ar, Bahrain - Arabic */
+               return "ar";
+       case CTSVC_LANG_BULGARIAN: /* bg, Bulgaria - Bulgarian */
+               return "bg";
+       case CTSVC_LANG_CATALAN: /* ca, Spain - Catalan */
+               return "ca";
+       case CTSVC_LANG_CZECH: /* cs, Czech Republic - Czech */
+               return "cs";
+       case CTSVC_LANG_DANISH: /* da, Denmark - Danish */
+               return "da";
+       case CTSVC_LANG_GERMAN: /* de, Germany - German */
+               return "de";
+       case CTSVC_LANG_GREEK: /* el, Greece - Greek */
+               return "el";
+       case CTSVC_LANG_ENGLISH: /* en, en_PH, en_US */
+               return "en";
+       case CTSVC_LANG_SPANISH: /* es_ES, es_US, El Salvador - Spanish */
+               return "es";
+       case CTSVC_LANG_ESTONIAN: /* et, Estonia - Estonian */
+               return "et";
+       case CTSVC_LANG_BASQUE: /* eu, Spain - Basque */
+               return "eu";
+       case CTSVC_LANG_FINNISH: /* fi, Finland - Finnish */
+               return "fi";
+       case CTSVC_LANG_FRENCH: /* fr_CA, fr_FR */
+               return "fr";
+       case CTSVC_LANG_IRISH: /* ga, Ireland - Irish */
+               return "ga";
+       case CTSVC_LANG_GALICIAN: /* gl, Spain - Galician */
+               return "gl";
+       case CTSVC_LANG_HINDI: /* hi, India - Hindi, Marathi, Nepali */
+               if (STRING_EQUAL == strncmp(langset, "hi", strlen("hi"))) {
+                       return "hi";
+               }
+               else if (STRING_EQUAL == strncmp(langset, "mr", strlen("mr"))) {
+                       return "mr";
+               }
+               else if (STRING_EQUAL == strncmp(langset, "ne", strlen("ne"))) {
+                       return "ne";
+               }
+               return "hi";
+       case CTSVC_LANG_CROATIAN: /* hr, Bosnia and Herzegovina - Croatian */
+               return "hr";
+       case CTSVC_LANG_HUNGARIAN: /* hu, Hungary - Hungarian */
+               return "hu";
+       case CTSVC_LANG_ARMENIAN: /* hy, Armenia - Armenian */
+               return "hy";
+       case CTSVC_LANG_ICELANDIC: /* is, Iceland - Icelandic */
+               return "is";
+       case CTSVC_LANG_ITALIAN: /* it_IT, Italy - Italian */
+               return "it";
+       case CTSVC_LANG_JAPANESE: /* ja_JP, japan */
+               return "ja";
+       case CTSVC_LANG_GEORGIAN: /* ka, Georgia - Georgian */
+               return "ka";
+       case CTSVC_LANG_KAZAKHSTAN: /* kk, Kazakhstan */
+               return "kk";
+       case CTSVC_LANG_KOREAN: /* ko, ko_KR */
+               return "ko";
+       case CTSVC_LANG_LITHUANIAN: /* lt, Lithuania - Lithuanian */
+               return "lt";
+       case CTSVC_LANG_LATVIAN: /* lv, Latvia - Latvian */
+               return "lv";
+       case CTSVC_LANG_MACEDONIA: /* mk, Macedonia */
+               return "mk";
+       case CTSVC_LANG_NORWAY: /* nb, Norway */
+               return "nb";
+       case CTSVC_LANG_DUTCH: /* nl_Nl, Netherlands Dutch */
+               return "nl";
+       case CTSVC_LANG_POLISH: /* pl, Polish */
+               return "pl";
+       case CTSVC_LANG_PORTUGUESE: /* pt_BR, pt_PT, Portugal */
+               return "pt";
+       case CTSVC_LANG_ROMANIA: /* ro, Romania */
+               return "ro";
+       case CTSVC_LANG_RUSSIAN: /* ru_RU, Russia */
+               return "ru";
+       case CTSVC_LANG_SLOVAK: /* sk, Slovakia - Slovak */
+               return "sk";
+       case CTSVC_LANG_SLOVENIAN: /* sl, Slovenia - Slovenian */
+               return "sl";
+       case CTSVC_LANG_SERBIAN: /* sr, Serbia - Serbian */
+               return "sr";
+       case CTSVC_LANG_SWEDISH: /* sv, Finland - Swedish */
+               return "sv";
+       case CTSVC_LANG_TURKISH: /* tr_TR, Turkey - Turkish */
+               return "tr";
+       case CTSVC_LANG_UKRAINE: /* uk, Ukraine */
+               return "uk";
+       case CTSVC_LANG_CHINESE: /* zh_CN, zh_HK, zh_SG, zh_TW */
+               return "zh";
+       case CTSVC_LANG_THAI: /* th_TH, Thai */
+               return "th";
+       case CTSVC_LANG_BENGALI: /* as, bn */
+               if (STRING_EQUAL == strncmp(langset, "as", strlen("as"))) {
+                       return "as";
+               }
+               return "bn";
+       case CTSVC_LANG_PUNJABI: /* pa, India */
+                       return "pa";
+       case CTSVC_LANG_MALAYALAM:
+                       return "ml";
+       case CTSVC_LANG_TELUGU:
+                       return "te";
+       case CTSVC_LANG_TAMIL:
+                       return "ta";
+       case CTSVC_LANG_ORIYA:
+                       return "or";
+       case CTSVC_LANG_SINHALA:
+                       return "si";
+       case CTSVC_LANG_GUJARATI:
+                       return "gu";
+       case CTSVC_LANG_KANNADA:
+                       return "kn";
+       case CTSVC_LANG_LAO:
+                       return "lo";
+       case CTSVC_LANG_HEBREW:
+                       return "he";
+       case CTSVC_LANG_VIETNAMESE:
+                       return "vi";
+       case CTSVC_LANG_PERSIAN:
+                       return "fa";
+       case CTSVC_LANG_UZBEK:
+                       return "uz";
+       case CTSVC_LANG_URDU:
+                       return "ur";
+       case CTSVC_LANG_ALBANIAN:
+                       return "sq";
+       case CTSVC_LANG_BURMESE:
+                       return "my";
+       case CTSVC_LANG_MALAY:
+                       return "ms";
+       case CTSVC_LANG_KHMER:
+                       return "km";
+       case CTSVC_LANG_INDONESIAN:
+                       return "id";
+       case CTSVC_LANG_TAGALOG:
+                       return "tl";
+       }
+
+       return "";
+}
+
+int ctsvc_get_language_type(const char *system_lang)
+{
+       /* refer to the VCONFKEY_LANGSET */
+       int type;
+
+       RETV_IF(NULL == system_lang, CTSVC_LANG_OTHERS);
+
+       /* az, Azerbaijan */
+       if (STRING_EQUAL == strncmp(system_lang, "az", strlen("az")))
+               type = CTSVC_LANG_AZERBAIJAN;
+       /* ar, Bahrain - Arabic */
+       else if (STRING_EQUAL == strncmp(system_lang, "ar", strlen("ar")))
+               type = CTSVC_LANG_ARABIC;
+       /* bg, Bulgaria - Bulgarian */
+       else if (STRING_EQUAL == strncmp(system_lang, "bg", strlen("bg")))
+               type = CTSVC_LANG_BULGARIAN;
+       /* ca, Spain - Catalan */
+       else if (STRING_EQUAL == strncmp(system_lang, "ca", strlen("ca")))
+               type = CTSVC_LANG_CATALAN;
+       /* cs, Czech Republic - Czech */
+       else if (STRING_EQUAL == strncmp(system_lang, "cs", strlen("cs")))
+               type = CTSVC_LANG_CZECH;
+       /* da, Denmark - Danish */
+       else if (STRING_EQUAL == strncmp(system_lang, "da", strlen("da")))
+               type = CTSVC_LANG_DANISH;
+       /* de, Germany - German */
+       else if (STRING_EQUAL == strncmp(system_lang, "de", strlen("de")))
+               type = CTSVC_LANG_GERMAN;
+       /* el, Greece - Greek */
+       else if (STRING_EQUAL == strncmp(system_lang, "el", strlen("el")))
+               type = CTSVC_LANG_GREEK;
+       /* en, en_PH, en_US */
+       else if (STRING_EQUAL == strncmp(system_lang, "en", strlen("en")))
+               type = CTSVC_LANG_ENGLISH;
+       /* es_ES, es_US, El Salvador - Spanish */
+       else if (STRING_EQUAL == strncmp(system_lang, "es", strlen("es")))
+               type = CTSVC_LANG_SPANISH;
+       /* et, Estonia - Estonian */
+       else if (STRING_EQUAL == strncmp(system_lang, "et", strlen("et")))
+               type = CTSVC_LANG_ESTONIAN;
+       /* eu, Spain - Basque */
+       else if (STRING_EQUAL == strncmp(system_lang, "eu", strlen("eu")))
+               type = CTSVC_LANG_BASQUE;
+       /* fi, Finland - Finnish */
+       else if (STRING_EQUAL == strncmp(system_lang, "fi", strlen("fi")))
+               type = CTSVC_LANG_FINNISH;
+       /* fr_CA, fr_FR */
+       else if (STRING_EQUAL == strncmp(system_lang, "fr", strlen("fr")))
+               type = CTSVC_LANG_FRENCH;
+       /* ga, Ireland - Irish */
+       else if (STRING_EQUAL == strncmp(system_lang, "ga", strlen("ga")))
+               type = CTSVC_LANG_IRISH;
+       /* gl, Spain - Galician */
+       else if (STRING_EQUAL == strncmp(system_lang, "gl", strlen("gl")))
+               type = CTSVC_LANG_GALICIAN;
+       /* hi, India - Hindi */
+       else if (STRING_EQUAL == strncmp(system_lang, "hi", strlen("hi")))
+               type = CTSVC_LANG_HINDI;
+       /* mr, India - marathi */
+       else if (STRING_EQUAL == strncmp(system_lang, "mr", strlen("mr")))
+               type = CTSVC_LANG_HINDI;
+       /* ne, India - nepal */
+       else if (STRING_EQUAL == strncmp(system_lang, "ne", strlen("ne")))
+               type = CTSVC_LANG_HINDI;
+       /* hr, Bosnia and Herzegovina - Croatian */
+       else if (STRING_EQUAL == strncmp(system_lang, "hr", strlen("hr")))
+               type = CTSVC_LANG_CROATIAN;
+       /* hu, Hungary - Hungarian */
+       else if (STRING_EQUAL == strncmp(system_lang, "hu", strlen("hu")))
+               type = CTSVC_LANG_HUNGARIAN;
+       /* hy, Armenia - Armenian */
+       else if (STRING_EQUAL == strncmp(system_lang, "hy", strlen("hy")))
+               type = CTSVC_LANG_ARMENIAN;
+       /* is, Iceland - Icelandic */
+       else if (STRING_EQUAL == strncmp(system_lang, "is", strlen("is")))
+               type = CTSVC_LANG_ICELANDIC;
+       /* it_IT, Italy - Italian */
+       else if (STRING_EQUAL == strncmp(system_lang, "it", strlen("it")))
+               type = CTSVC_LANG_ITALIAN;
+       /* ja_JP, japan */
+       else if (STRING_EQUAL == strncmp(system_lang, "ja", strlen("ja")))
+               type = CTSVC_LANG_JAPANESE;
+       /* ka, Georgia - Georgian */
+       else if (STRING_EQUAL == strncmp(system_lang, "ka", strlen("ka")))
+               type = CTSVC_LANG_GEORGIAN;
+       /* kk, Kazakhstan */
+       else if (STRING_EQUAL == strncmp(system_lang, "kk", strlen("kk")))
+               type = CTSVC_LANG_KAZAKHSTAN;
+       /* ko, ko_KR */
+       else if (STRING_EQUAL == strncmp(system_lang, "ko", strlen("ko")))
+               type = CTSVC_LANG_KOREAN;
+       /* lt, Lithuania - Lithuanian */
+       else if (STRING_EQUAL == strncmp(system_lang, "lt", strlen("lt")))
+               type = CTSVC_LANG_LITHUANIAN;
+       /* lv, Latvia - Latvian */
+       else if (STRING_EQUAL == strncmp(system_lang, "lv", strlen("lv")))
+               type = CTSVC_LANG_LATVIAN;
+       /* mk, Macedonia */
+       else if (STRING_EQUAL == strncmp(system_lang, "mk", strlen("mk")))
+               type = CTSVC_LANG_MACEDONIA;
+       /* nb, Norway */
+       else if (STRING_EQUAL == strncmp(system_lang, "nb", strlen("nb")))
+               type = CTSVC_LANG_NORWAY;
+       /* nl_Nl, Netherlands Dutch */
+       else if (STRING_EQUAL == strncmp(system_lang, "nl", strlen("nl")))
+               type = CTSVC_LANG_DUTCH;
+       /* pl, Polish */
+       else if (STRING_EQUAL == strncmp(system_lang, "pl", strlen("pl")))
+               type = CTSVC_LANG_POLISH;
+       /* pt_BR, pt_PT, Portugal */
+       else if (STRING_EQUAL == strncmp(system_lang, "pt", strlen("pt")))
+               type = CTSVC_LANG_PORTUGUESE;
+       /* ro, Romania */
+       else if (STRING_EQUAL == strncmp(system_lang, "ro", strlen("ro")))
+               type = CTSVC_LANG_ROMANIA;
+       /* ru_RU, Russia */
+       else if (STRING_EQUAL == strncmp(system_lang, "ru", strlen("ru")))
+               type = CTSVC_LANG_RUSSIAN;
+       /* sk, Slovakia - Slovak */
+       else if (STRING_EQUAL == strncmp(system_lang, "sk", strlen("sk")))
+               type = CTSVC_LANG_SLOVAK;
+       /* sl, Slovenia - Slovenian */
+       else if (STRING_EQUAL == strncmp(system_lang, "sl", strlen("sl")))
+               type = CTSVC_LANG_SLOVENIAN;
+       /* sr, Serbia - Serbian */
+       else if (STRING_EQUAL == strncmp(system_lang, "sr", strlen("sr")))
+               type = CTSVC_LANG_SERBIAN;
+       /* sv, Finland - Swedish */
+       else if (STRING_EQUAL == strncmp(system_lang, "sv", strlen("sv")))
+               type = CTSVC_LANG_SWEDISH;
+       /* tr_TR, Turkey - Turkish */
+       else if (STRING_EQUAL == strncmp(system_lang, "tr", strlen("tr")))
+               type = CTSVC_LANG_TURKISH;
+       /* uk, Ukraine */
+       else if (STRING_EQUAL == strncmp(system_lang, "uk", strlen("uk")))
+               type = CTSVC_LANG_UKRAINE;
+       /* zh_CN, zh_HK, zh_SG, zh_TW */
+       else if (STRING_EQUAL == strncmp(system_lang, "zh", strlen("zh")))
+               type = CTSVC_LANG_CHINESE;
+       /* th_TH */
+       else if (STRING_EQUAL == strncmp(system_lang, "th", strlen("th")))
+               type = CTSVC_LANG_THAI;
+       else if (STRING_EQUAL == strncmp(system_lang, "as", strlen("as")))
+               type = CTSVC_LANG_BENGALI;
+       else if (STRING_EQUAL == strncmp(system_lang, "bn", strlen("bn")))
+               type = CTSVC_LANG_BENGALI;
+       else if (STRING_EQUAL == strncmp(system_lang, "pa", strlen("pa")))
+               type = CTSVC_LANG_PUNJABI;
+       else if (STRING_EQUAL == strncmp(system_lang, "ml", strlen("ml")))
+               type = CTSVC_LANG_MALAYALAM;
+       else if (STRING_EQUAL == strncmp(system_lang, "te", strlen("te")))
+               type = CTSVC_LANG_TELUGU;
+       else if (STRING_EQUAL == strncmp(system_lang, "ta", strlen("ta")))
+               type = CTSVC_LANG_TAMIL;
+       else if (STRING_EQUAL == strncmp(system_lang, "or", strlen("or")))
+               type = CTSVC_LANG_ORIYA;
+       else if (STRING_EQUAL == strncmp(system_lang, "si", strlen("si")))
+               type = CTSVC_LANG_SINHALA;
+       else if (STRING_EQUAL == strncmp(system_lang, "gu", strlen("gu")))
+               type = CTSVC_LANG_GUJARATI;
+       else if (STRING_EQUAL == strncmp(system_lang, "kn", strlen("kn")))
+               type = CTSVC_LANG_KANNADA;
+       else if (STRING_EQUAL == strncmp(system_lang, "lo", strlen("lo")))
+               type = CTSVC_LANG_LAO;
+       else if (STRING_EQUAL == strncmp(system_lang, "he", strlen("he")))
+               type = CTSVC_LANG_HEBREW;
+       else if (STRING_EQUAL == strncmp(system_lang, "vi", strlen("vi")))
+               type = CTSVC_LANG_VIETNAMESE;
+       else if (STRING_EQUAL == strncmp(system_lang, "fa", strlen("fa")))
+               type = CTSVC_LANG_PERSIAN;
+       else if (STRING_EQUAL == strncmp(system_lang, "uz", strlen("uz")))
+               type = CTSVC_LANG_UZBEK;
+       else if (STRING_EQUAL == strncmp(system_lang, "ur", strlen("ur")))
+               type = CTSVC_LANG_URDU;
+       else if (STRING_EQUAL == strncmp(system_lang, "sq", strlen("sq")))
+               type = CTSVC_LANG_ALBANIAN;
+       else if (STRING_EQUAL == strncmp(system_lang, "my", strlen("my")))
+               type = CTSVC_LANG_BURMESE;
+       else if (STRING_EQUAL == strncmp(system_lang, "ms", strlen("ms")))
+               type = CTSVC_LANG_MALAY;
+       else if (STRING_EQUAL == strncmp(system_lang, "km", strlen("km")))
+               type = CTSVC_LANG_KHMER;
+       else if (STRING_EQUAL == strncmp(system_lang, "id", strlen("id")))
+               type = CTSVC_LANG_INDONESIAN;
+       else if (STRING_EQUAL == strncmp(system_lang, "tl", strlen("tl")))
+               type = CTSVC_LANG_TAGALOG;
+       else
+               type = CTSVC_LANG_OTHERS;
+
+       return type;
+}
+
+static char *langset = NULL;
+
+char* ctsvc_get_langset()
+{
+       return SAFE_STR(langset);
+}
+
+void ctsvc_set_langset(char *new_langset)
+{
+       free(langset);
+       langset = new_langset;
+}
+
old mode 100755 (executable)
new mode 100644 (file)
similarity index 53%
rename from native/ctsvc_localize.h
rename to server/ctsvc_localize.h
index 22959c9..d5e2186
@@ -16,8 +16,8 @@
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_LOCALIZE_H__
-#define __TIZEN_SOCIAL_CTSVC_LOCALIZE_H__
+#ifndef __CTSVC_LOCALIZE_H__
+#define __CTSVC_LOCALIZE_H__
 
 #include <unicode/utypes.h>
 
 #include "ctsvc_localize_kor.h"
 
 enum SORTTYPE{
-       CTSVC_SORT_OTHERS,              // 0??
-       CTSVC_SORT_NUMBER,              // 1
-       CTSVC_SORT_PRIMARY,             // 2
-       CTSVC_SORT_SECONDARY,   // 3
-       CTSVC_SORT_WESTERN,             // 4
-       CTSVC_SORT_KOREAN,              // 5
-       CTSVC_SORT_JAPANESE,            // 6
-       CTSVC_SORT_CJK,                 // 7
-       CTSVC_SORT_CYRILLIC,            // 8
-       CTSVC_SORT_GREEK,                       // 9
-       CTSVC_SORT_ARMENIAN,        // 10
-       CTSVC_SORT_ARABIC,          // 11
-       CTSVC_SORT_DEVANAGARI,  // hindi
-       CTSVC_SORT_GEORGIAN,    // 13
-       CTSVC_SORT_TURKISH,     // 14
-       CTSVC_SORT_THAI,        // 15
-       CTSVC_SORT_BENGALI,     // 16
-       CTSVC_SORT_PUNJABI,     // 17
-       CTSVC_SORT_MALAYALAM,   // 18
-       CTSVC_SORT_TELUGU,      // 19
-       CTSVC_SORT_TAMIL,       // 20
-       CTSVC_SORT_ORIYA,       // 21
-       CTSVC_SORT_SINHALA,     // 22
-       CTSVC_SORT_GUJARATI,    // 23
-       CTSVC_SORT_KANNADA,     // 24
-       CTSVC_SORT_LAO,         // 25
-       CTSVC_SORT_HEBREW,          // 26
-       CTSVC_SORT_BURMESE,             // 27
-       CTSVC_SORT_KHMER,               // 28
+       CTSVC_SORT_OTHERS = 0,
+       CTSVC_SORT_NUMBER,
+       CTSVC_SORT_PRIMARY,
+       CTSVC_SORT_SECONDARY,
+       CTSVC_SORT_WESTERN,
+       CTSVC_SORT_KOREAN,   /* 5 */
+       CTSVC_SORT_JAPANESE,
+       CTSVC_SORT_CJK,
+       CTSVC_SORT_CYRILLIC,
+       CTSVC_SORT_GREEK,
+       CTSVC_SORT_ARMENIAN, /* 10 */
+       CTSVC_SORT_ARABIC,
+       CTSVC_SORT_DEVANAGARI, /* hindi */
+       CTSVC_SORT_GEORGIAN,
+       CTSVC_SORT_TURKISH,
+       CTSVC_SORT_THAI,     /* 15 */
+       CTSVC_SORT_BENGALI,
+       CTSVC_SORT_PUNJABI,
+       CTSVC_SORT_MALAYALAM,
+       CTSVC_SORT_TELUGU,
+       CTSVC_SORT_TAMIL,    /* 20 */
+       CTSVC_SORT_ORIYA,
+       CTSVC_SORT_SINHALA,
+       CTSVC_SORT_GUJARATI,
+       CTSVC_SORT_KANNADA,
+       CTSVC_SORT_LAO,      /* 25 */
+       CTSVC_SORT_HEBREW,
+       CTSVC_SORT_BURMESE,
+       CTSVC_SORT_KHMER,
 };
 
 char* ctsvc_get_langset();
@@ -66,4 +66,4 @@ int ctsvc_get_language_type(const char *system_lang);
 const char *ctsvc_get_language_locale(int lang);
 void ctsvc_extra_normalize(UChar *word, int32_t word_size);
 
-#endif // __TIZEN_SOCIAL_CTSVC_LOCALIZE_H__
+#endif /* __CTSVC_LOCALIZE_H__ */
\ No newline at end of file
similarity index 99%
rename from native/ctsvc_localize_ch.c
rename to server/ctsvc_localize_ch.c
index 2b0356e..3497bd9 100755 (executable)
@@ -2133,11 +2133,11 @@ static inline int __ctsvc_get_pinyinspell(UChar src, char spell[CHINESE_DUOYINZI
        int count=0;
 
        offset = src - CHINESE_UNICODE_START;
-       RETVM_IF(offset < 0 || offset >= CHINESE_COUNT , CONTACTS_ERROR_INVALID_PARAMETER, "src is invalid");
+       RETVM_IF(offset < 0 || CHINESE_COUNT <= offset, CONTACTS_ERROR_INVALID_PARAMETER, "src is invalid");
 
        len = strlen(pinyin_spell_table[offset]);
 
-       for(i=0, j=0; i<=len; i++) {
+       for (i=0, j=0; i<=len; i++) {
                if (pinyin_spell_table[offset][i]== DUOYINZI_SEPERATOR
                                || pinyin_spell_table[offset][i] == '\0') {
                        strncpy(spell[count], pinyin_spell_table[offset]+j, i-j);
@@ -2157,15 +2157,13 @@ static inline bool __ctsvc_is_chinese(const UChar *src)
        return  false;
 }
 
-static inline bool
-__ctsvc_has_chinese(const UChar *src)
+static inline bool __ctsvc_has_chinese(const UChar *src)
 {
-       int     i, len;
+       int i, len;
 
        len = u_strlen(src);
 
-       for (i = 0; i < len; i++)
-       {
+       for (i = 0; i < len; i++) {
                if (__ctsvc_is_chinese(&src[i]))
                        return true;
        }
@@ -2178,12 +2176,12 @@ bool ctsvc_has_chinese(const char *src)
        UChar   temp[strlen(src)+1];
        UErrorCode status = 0;
 
-       RETVM_IF(src==NULL, false, "src is NULL");
-       RETVM_IF(!*src, false, "*src is NULL");
+       RETVM_IF(NULL == src, false, "src is NULL");
+       RETVM_IF('\0' == *src, false, "*src is NULL");
 
        u_strFromUTF8(temp, array_sizeof(temp), NULL, src, -1, &status);
-       if (U_FAILURE(status)){
-               CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
+       if (U_FAILURE(status)) {
+               CTS_ERR("u_strFromUTF8 Fail(%s)", u_errorName(status));
                return false;
        }
 
@@ -2202,7 +2200,7 @@ bool ctsvc_has_chinese(const char *src)
 int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *size)
 {
        UChar   temp_result[strlen(src)+1];
-       int     count = 0, len=0, total_count=0;
+       int count = 0, len=0, total_count=0;
        int ret, i, j;
        int multi_pinyin_count = 0;
        UErrorCode status = 0;
@@ -2210,12 +2208,12 @@ int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *
 
        *size = 0;
 
-       RETVM_IF(src==NULL, CONTACTS_ERROR_SYSTEM, "src is NULL");
-       RETVM_IF(!*src, CONTACTS_ERROR_SYSTEM, "*src is NULL");
+       RETVM_IF(NULL == src, CONTACTS_ERROR_SYSTEM, "src is NULL");
+       RETVM_IF('\0' == *src, CONTACTS_ERROR_SYSTEM, "*src is NULL");
 
        u_strFromUTF8(temp_result, array_sizeof(temp_result), NULL, src, -1, &status);
-       if (U_FAILURE(status)){
-               CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
+       if (U_FAILURE(status)) {
+               CTS_ERR("u_strFromUTF8 Fail(%s)", u_errorName(status));
                return CONTACTS_ERROR_SYSTEM;
        }
 
@@ -2228,17 +2226,17 @@ int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *
        for (count = 0; count < len; count++) {
                if (__ctsvc_is_chinese(&temp_result[count])) {
                        ret = __ctsvc_get_pinyinspell(temp_result[count], spell[count]);
-                       RETVM_IF(ret < CONTACTS_ERROR_NONE, CONTACTS_ERROR_SYSTEM, "__ctsvc_get_pinyinspell() Failed(%d)", ret);
-                       if (multi_pinyin_count >= CTSVC_CHINESE_MULTIPLE_PINYIN_MAX_LEN)
+                       RETVM_IF(ret < CONTACTS_ERROR_NONE, CONTACTS_ERROR_SYSTEM, "__ctsvc_get_pinyinspell() Fail(%d)", ret);
+                       if (CTSVC_CHINESE_MULTIPLE_PINYIN_MAX_LEN <= multi_pinyin_count)
                                ret = 1;
 
                        pinyin_spell_count[count] = ret;
 
-                       if(total_count==0)
+                       if (total_count==0)
                                total_count = ret;
                        else
                                total_count *= ret;
-                       if (ret > 1)
+                       if (1 < ret)
                                multi_pinyin_count ++;
                }
                else {
@@ -2248,7 +2246,7 @@ int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *
                        temp[0] = temp_result[count];
                        temp[1] = 0x00;
                        u_strToUTF8(spell[count][0], 10, &temp_size, temp, -1, &status);
-                       RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM, "u_strToUTF8() Failed(%s)", u_errorName(status));
+                       RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM, "u_strToUTF8() Fail(%s)", u_errorName(status));
                        spell[count][0][temp_size]='\0';
                        pinyin_spell_count[count] = 1;
                }
@@ -2263,8 +2261,8 @@ int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *
        int initial_len[total_count];
        int pinyin_name_len = sizeof(char) * ((len + 2) * CHINESE_PINYIN_SPELL_MAX_LEN);
        int pinyin_initial_len = sizeof(char) * (len * 5 + 1);
-       for(i=0; i < count ; i++) {
-               for(j=0;j<total_count;j++) {
+       for (i=0; i < count ; i++) {
+               for (j=0;j<total_count;j++) {
                        int index = (j/repeat) %pinyin_spell_count[i];
 
                        if (i==0) {
@@ -2276,7 +2274,7 @@ int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *
                        }
 
                        if (spell[i][index][0]) {
-                               if(temp_name[j].pinyin_name[0])
+                               if (temp_name[j].pinyin_name[0])
                                        name_len[j] += snprintf(temp_name[j].pinyin_name + name_len[j], pinyin_name_len - name_len[j], " ");
 
                                name_len[j] += snprintf(temp_name[j].pinyin_name + name_len[j], pinyin_name_len - name_len[j],
old mode 100755 (executable)
new mode 100644 (file)
similarity index 87%
rename from native/ctsvc_localize_ch.h
rename to server/ctsvc_localize_ch.h
index a204578..8cf5f80
@@ -16,8 +16,8 @@
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_LOCALIZE_CH_H__
-#define __TIZEN_SOCIAL_CTSVC_LOCALIZE_CH_H__
+#ifndef __CTSVC_LOCALIZE_CH_H__
+#define __CTSVC_LOCALIZE_CH_H__
 
 #define CHINESE_PINYIN_SPELL_MAX_LEN   15
 
@@ -31,4 +31,4 @@ void ctsvc_pinyin_free(pinyin_name_s *pinyinname, int size);
 
 bool ctsvc_has_chinese(const char *src);
 
-#endif // __TIZEN_SOCIAL_CTSVC_LOCALIZE_CH_H__
+#endif /* __CTSVC_LOCALIZE_CH_H__ */
\ No newline at end of file
similarity index 84%
rename from native/ctsvc_localize_jp.c
rename to server/ctsvc_localize_jp.c
index 2953824..3d7fd24 100644 (file)
@@ -21,8 +21,6 @@
 #include <unicode/unorm.h>
 #include <unicode/ucol.h>
 #include <unicode/uset.h>
-#include <vconf.h>
-#include <vconf-keys.h>
 
 #include "ctsvc_internal.h"
 #include "ctsvc_normalize.h"
@@ -52,7 +50,7 @@
 #define CTSVC_JAPANESE_HIRAGANA_END 0x309F
 
 
-static const unsigned char japanese_halfwidth_katakana_to_hiragana[] = { // 0xff66 - 0xff9d
+static const unsigned char japanese_halfwidth_katakana_to_hiragana[] = { /* 0xff66 - 0xff9d */
        0x92, 0x41, 0x43, 0x45, 0x47, 0x49, 0x83, 0x85, 0x87, 0x63,
        0x00, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4B, 0x4D, 0x4F, 0x51,
        0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x64, 0x66,
@@ -60,20 +58,20 @@ static const unsigned char japanese_halfwidth_katakana_to_hiragana[] = { // 0xff
        0x7B, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x84, 0x86, 0x88, 0x89,
        0x8A, 0x8B, 0x8C, 0x8D, 0x8F, 0x93};
 
-static const unsigned char japanese_halfwidth_katakana_sonant_to_hiragana[] = { // 0xff76 - 0xff89
+static const unsigned char japanese_halfwidth_katakana_sonant_to_hiragana[] = { /* 0xff76 - 0xff89 */
        0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5A, 0x5C, 0x5E,
        0x60, 0x62, 0x65, 0x67, 0x69, 0x70, 0x73, 0x76, 0x79, 0x7C};
 
-static const unsigned char japanese_halfwidth_katakana_half_dullness_to_hiragana[] = { // 0xff8a - 0xff8e
+static const unsigned char japanese_halfwidth_katakana_half_dullness_to_hiragana[] = { /* 0xff8a - 0xff8e */
        0x71, 0x74, 0x77, 0x7A, 0x7D};
 
 
 static inline bool is_japanese(UChar src)
 {
-       if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_START, src, CTSVC_JAPANESE_KATAKANA_END )
-                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_START, src, CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_END )
-                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_START, src, CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END )
-                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HIRAGANA_START, src, CTSVC_JAPANESE_HIRAGANA_END ))
+       if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_START, src, CTSVC_JAPANESE_KATAKANA_END)
+                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_START, src, CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_END)
+                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_START, src, CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END)
+                       || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HIRAGANA_START, src, CTSVC_JAPANESE_HIRAGANA_END))
                return true;
        else
                return false;
@@ -86,7 +84,7 @@ int ctsvc_convert_japanese_to_hiragana_unicode(UChar *src, UChar *dest, int dest
 
        len = u_strlen(src);
 
-       for(i = 0; i < len; i++) {
+       for (i = 0; i < len; i++) {
                int unicode_value1 = 0;
                int unicode_value2 = 0;
 
@@ -94,8 +92,8 @@ int ctsvc_convert_japanese_to_hiragana_unicode(UChar *src, UChar *dest, int dest
 
                if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_START, src[i], CTSVC_JAPANESE_KATAKANA_END)) {
                        unicode_value1 = 0x30;
-                       if ((unicode_value2 >= 0xa1 && unicode_value2 <= 0xef )
-                                       || (unicode_value2 == 0xF2 || unicode_value2 == 0xF3) ) {
+                       if ((0xa1 <= unicode_value2 && unicode_value2 <= 0xef)
+                                       || (unicode_value2 == 0xF2 || unicode_value2 == 0xF3)) {
                                unicode_value2 -= 0x60;
                                dest[j] = unicode_value1 << 8 | unicode_value2;
                        }
@@ -107,18 +105,18 @@ int ctsvc_convert_japanese_to_hiragana_unicode(UChar *src, UChar *dest, int dest
                                                        src[i], CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END)) {
                        unicode_value1 = 0x30;
                        if (i+1 < len && (0xFF & (src[i+1])) == 0x9E
-                                       && unicode_value2 >= 0x76 && unicode_value2 <= 0x89) {
+                                       && 0x76 <= unicode_value2 && unicode_value2 <= 0x89) {
                                unicode_value2 = japanese_halfwidth_katakana_sonant_to_hiragana[unicode_value2 - 0x76];
                                dest[j] = unicode_value1 << 8 | unicode_value2;
                                i++;
                        }
                        else if (i+1 < len && (0xFF & (src[i])) == 0x9F
-                                       && unicode_value2 >= 0x8a && unicode_value2 <= 0x8e) {
+                                       && 0x8a <= unicode_value2 && unicode_value2 <= 0x8e) {
                                unicode_value2 = japanese_halfwidth_katakana_half_dullness_to_hiragana[unicode_value2 - 0x8a];
                                dest[j] = unicode_value1 << 8 | unicode_value2;
                                i++;
                        }
-                       else if (unicode_value2 >= 0x66 && unicode_value2 <= 0x9d) {
+                       else if (0x66 <= unicode_value2 && unicode_value2 <= 0x9d) {
                                unicode_value2 = japanese_halfwidth_katakana_to_hiragana[unicode_value2 - 0x66];
                                dest[j] = unicode_value1 << 8 | unicode_value2;
                        }
@@ -144,7 +142,6 @@ int ctsvc_convert_japanese_to_hiragana_unicode(UChar *src, UChar *dest, int dest
 
 int ctsvc_convert_japanese_to_hiragana(const char *src, char **dest)
 {
-       int ret = CONTACTS_ERROR_NONE;
        UChar *tmp_result = NULL;
        UChar *result = NULL;
        UErrorCode status = 0;
@@ -152,59 +149,60 @@ int ctsvc_convert_japanese_to_hiragana(const char *src, char **dest)
 
        u_strFromUTF8(NULL, 0, &size, src, strlen(src), &status);
        if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) {
-               CTS_ERR("u_strFromUTF8 to get the dest length Failed(%s)", u_errorName(status));
+               CTS_ERR("u_strFromUTF8 to get the dest length Fail(%s)", u_errorName(status));
                return CONTACTS_ERROR_SYSTEM;
        }
        status = U_ZERO_ERROR;
        tmp_result = calloc(1, sizeof(UChar) * (size + 1));
        if (NULL == tmp_result) {
-               CTS_ERR("calloc() return NULL");
+               CTS_ERR("calloc Fail");
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
        u_strFromUTF8(tmp_result, size + 1, NULL, src, -1, &status);
-       if (U_FAILURE(status)){
-               CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
+       if (U_FAILURE(status)) {
+               CTS_ERR("u_strFromUTF8() Fail(%s)", u_errorName(status));
                free(tmp_result);
                return CONTACTS_ERROR_SYSTEM;
        }
 
        result = calloc(1, sizeof(UChar) * (size + 1));
        if (NULL == result) {
-               CTS_ERR("calloc() return NULL");
+               CTS_ERR("calloc() Fail");
                free(tmp_result);
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
-       ctsvc_convert_japanese_to_hiragana_unicode(tmp_result, result, size + 1 );
-
+       ctsvc_convert_japanese_to_hiragana_unicode(tmp_result, result, size + 1);
        u_strToUTF8(NULL, 0, &size, result, -1, &status);
        if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) {
-               CTS_ERR("u_strToUTF8 to get the dest length Failed(%s)", u_errorName(status));
-               free(result);
+               CTS_ERR("u_strToUTF8() to get the dest length Fail(%s)", u_errorName(status));
                free(tmp_result);
+               free(result);
                return CONTACTS_ERROR_SYSTEM;
        }
 
        status = U_ZERO_ERROR;
        *dest = calloc(1, sizeof(char)*(size+1));
        if (NULL == *dest) {
-               CTS_ERR("calloc() return NULL");
-               free(result);
+               CTS_ERR("calloc() Fail");
                free(tmp_result);
+               free(result);
                return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
        u_strToUTF8(*dest, size + 1, &size, result, -1, &status);
-       if (U_FAILURE(status) ) {
-               CTS_ERR("u_strToUTF8 Failed(%s)", u_errorName(status));
-               free(result);
+       if (U_FAILURE(status)) {
+               CTS_ERR("u_strToUTF8() Fail(%s)", u_errorName(status));
                free(tmp_result);
+               free(result);
                free(*dest);
                *dest = NULL;
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       return ret;
+       free(tmp_result);
+       free(result);
+       return CONTACTS_ERROR_NONE;
 }
 
similarity index 85%
rename from native/ctsvc_localize_jp.h
rename to server/ctsvc_localize_jp.h
index ec76d77..f8a7ba5 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_LOCALIZE_JAPAN_H__
-#define __TIZEN_SOCIAL_CTSVC_LOCALIZE_JAPAN_H__
+#ifndef __CTSVC_LOCALIZE_JAPAN_H__
+#define __CTSVC_LOCALIZE_JAPAN_H__
 
 int ctsvc_convert_japanese_to_hiragana(const char *src, char **dest);
 int ctsvc_convert_japanese_to_hiragana_unicode(UChar *src, UChar *dest, int dest_size);
 
-#endif         //__TIZEN_SOCIAL_CTSVC_LOCALIZE_JAPAN_H__
\ No newline at end of file
+#endif /* __CTSVC_LOCALIZE_JAPAN_H__ */
\ No newline at end of file
similarity index 83%
rename from native/ctsvc_localize_kor.c
rename to server/ctsvc_localize_kor.c
index 3b1a36b..c25f42d 100644 (file)
@@ -21,8 +21,6 @@
 #include <unicode/unorm.h>
 #include <unicode/ucol.h>
 #include <unicode/uset.h>
-#include <vconf.h>
-#include <vconf-keys.h>
 
 #include "ctsvc_internal.h"
 #include "ctsvc_normalize.h"
@@ -63,7 +61,7 @@ static const char hangul_compatibility_choseong[] = {
        0x81, 0x84, 0x85, 0x86, 0x00};
 
 static const unsigned char hangul_jamo_choseong[] = {
-       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x1A, 0x06, 0x07,           // to choseong 0x1100~0x115F
+       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x1A, 0x06, 0x07,   /* to choseong 0x1100~0x115F */
        0x08, 0x21, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
        0x10, 0x11, 0x12, 0x14, 0x15, 0x1C, 0x1D, 0x1E, 0x20,
        0x22, 0x23, 0x27, 0x29, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
@@ -76,7 +74,7 @@ static const char hangul_compatibility_jungseong[] = {
        0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x00};
 
 static const unsigned char hangul_jamo_jungseong[] = {
-       0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,   // to jungseong 0x1160~0x11A7
+       0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,   /* to jungseong 0x1160~0x11A7 */
        0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
        0x73, 0x74, 0x75, 0x60, 0x84, 0x85, 0x88, 0x91, 0x92,
        0x94, 0x9E, 0xA1, 0x00};
@@ -87,7 +85,7 @@ static const char hangul_compatibility_jongseong[] = {
        0x6F, 0x70, 0x82, 0x83, 0x00};
 
 static const unsigned char hangul_jamo_jongseong[] = {
-       0xAA, 0xAC, 0xAD, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,   // to jongseong 0x11A8~0x11FF
+       0xAA, 0xAC, 0xAD, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,   /* to jongseong 0x11A8~0x11FF */
        0xC7, 0xC8, 0xCC, 0xCE, 0xD3, 0xD7, 0xD9, 0xDF, 0xF1, 0xF2, 0x00};
 
 static inline bool is_chosung(UChar src)
@@ -99,15 +97,15 @@ static inline bool is_chosung(UChar src)
        unicode_value2 = (0xFF & (src));
 
        if (unicode_value1 == 0x31
-                       && (unicode_value2 >= 0x30 && unicode_value2 <= 0x4e)) //compatiblility jame
+                       && (0x30 <= unicode_value2 && unicode_value2 <= 0x4e))   /* compatiblility jame */
                return true;
 
        if (unicode_value1 == 0xA9
-                       && (unicode_value2 >= 0x60 && unicode_value2 <= 0x7C))//jamo Extended-A
+                       && (0x60 <= unicode_value2 && unicode_value2 <= 0x7C))   /* jamo Extended-A */
                return true;
 
        if (unicode_value1 == 0x11
-                       && (unicode_value2 >= 0x00 && unicode_value2 <= 0x5E))//jamo
+                       && (0x00 <= unicode_value2 && unicode_value2 <= 0x5E))   /* jamo */
                return true;
 
        return false;
@@ -155,17 +153,17 @@ void ctsvc_hangul_compatibility2jamo(UChar *src)
 
        if (CTSVC_COMPARE_BETWEEN(CTSVC_HAN_C_START, *src, CTSVC_HAN_C_END)) {
                char *pos;
-               if (NULL != (pos = strchr(hangul_compatibility_choseong, unicode_value2))) {
+               if ((pos = strchr(hangul_compatibility_choseong, unicode_value2))) {
                        unicode_value1 = 0x11;
                        unicode_value2 = hangul_jamo_choseong[pos - hangul_compatibility_choseong];
                        (*src) = unicode_value1 << 8 | unicode_value2;
                }
-               else if (NULL != (pos = strchr(hangul_compatibility_jungseong, unicode_value2))) {
+               else if ((pos = strchr(hangul_compatibility_jungseong, unicode_value2))) {
                        unicode_value1 = 0x11;
                        unicode_value2 = hangul_jamo_jungseong[pos - hangul_compatibility_jungseong];
                        (*src) = unicode_value1 << 8 | unicode_value2;
                }
-               else if (NULL != (pos = strchr(hangul_compatibility_jongseong, unicode_value2))) {
+               else if ((pos = strchr(hangul_compatibility_jongseong, unicode_value2))) {
                        unicode_value1 = 0x11;
                        unicode_value2 = hangul_jamo_jongseong[pos - hangul_compatibility_jongseong];
                        (*src) = unicode_value1 << 8 | unicode_value2;
@@ -194,20 +192,20 @@ int ctsvc_get_chosung(const char *src, char *dest, int dest_size)
 
                u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "u_strFromUTF8() Failed(%s)", u_errorName(status));
+                               "u_strFromUTF8() Fail(%s)", u_errorName(status));
 
                u_strToUpper(tmp_result, array_sizeof(tmp_result), tmp_result, -1, NULL, &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "u_strToLower() Failed(%s)", u_errorName(status));
+                               "u_strToLower() Fail(%s)", u_errorName(status));
 
                size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
                                (UChar *)result, array_sizeof(result), &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
+                               "unorm_normalize(%s) Fail(%s)", src, u_errorName(status));
                ctsvc_extra_normalize(result, size);
                u_strToUTF8(temp, dest_size, &size, result, -1, &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "u_strToUTF8() Failed(%s)", u_errorName(status));
+                               "u_strToUTF8() Fail(%s)", u_errorName(status));
                chosung_len = ctsvc_check_utf8(temp[0]);
                RETVM_IF(chosung_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "check_utf8 failed");
                memcpy(&dest[j], temp, chosung_len);
@@ -242,15 +240,14 @@ int ctsvc_get_korean_search_pattern(const char *src, char *dest, int dest_size)
 
                u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
                RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                               "u_strFromUTF8() Failed(%s)", u_errorName(status));
+                               "u_strFromUTF8() Fail(%s)", u_errorName(status));
 
-               if (is_chosung(tmp_result[0]))
-               {
+               if (is_chosung(tmp_result[0])) {
                        ctsvc_hangul_compatibility2jamo(tmp_result);
 
                        u_strToUTF8(&dest[j], dest_size - j, &size, tmp_result, -1, &status);
                        RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                                       "u_strToUTF8() Failed(%s)", u_errorName(status));
+                                       "u_strToUTF8() Fail(%s)", u_errorName(status));
                        j += size;
                        dest[j] = '*';
                        j++;
@@ -258,15 +255,15 @@ int ctsvc_get_korean_search_pattern(const char *src, char *dest, int dest_size)
                else {
                        u_strToUpper(tmp_result, array_sizeof(tmp_result), tmp_result, -1, NULL, &status);
                        RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                                       "u_strToUpper() Failed(%s)", u_errorName(status));
+                                       "u_strToUpper() Fail(%s)", u_errorName(status));
                        size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
                                        (UChar *)result, array_sizeof(result), &status);
                        RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                                       "unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
+                                       "unorm_normalize(%s) Fail(%s)", src, u_errorName(status));
                        ctsvc_extra_normalize(result, size);
                        u_strToUTF8(&dest[j], dest_size - j, &size, result, -1, &status);
                        RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
-                                       "u_strToUTF8() Failed(%s)", u_errorName(status));
+                                       "u_strToUTF8() Fail(%s)", u_errorName(status));
                        j += size;
                }
                count++;
@@ -281,7 +278,7 @@ bool ctsvc_is_chosung(const char *src)
        int char_len = 0;
 
        char_len = ctsvc_check_utf8(src[0]);
-       if (char_len < 0) return false;         // invalid value
+       if (char_len < 0) return false;   /* invalid value */
 
        if (char_len == 3) {
                unsigned short tmp;
@@ -314,12 +311,14 @@ static bool __ctsvc_is_hangul(const char *src)
        int char_len = 0;
 
        char_len = ctsvc_check_utf8(src[0]);
-       if (char_len <= 0) return false;                // invalid value
+       if (char_len <= 0) return false;   /* invalid value */
 
        if (char_len == 3) {
                switch(src[0]) {
-               // Hangul Jamo : 0x1100 ~ 0x11FF
-                       // e1 84 80 ~ e1 87 bf
+               /*
+                * Hangul Jamo : 0x1100 ~ 0x11FF
+                *  e1 84 80 ~ e1 87 bf
+                */
                case 0xE1:
                        switch(src[1]) {
                        case 0x84 ... 0x87:
@@ -331,10 +330,12 @@ static bool __ctsvc_is_hangul(const char *src)
                        }
                        break;
 
-               // Hangul Compatibility Jamo : 0x3130 ~ 0x318F
-                       // e3 84 b0 ~ e3 84 bf
-                       // e3 85 80 ~ e3 85 bf
-                       // e3 86 80 ~ e3 86 8f
+               /*
+                * Hangul Compatibility Jamo : 0x3130 ~ 0x318F
+                *  e3 84 b0 ~ e3 84 bf
+                *  e3 85 80 ~ e3 85 bf
+                *  e3 86 80 ~ e3 86 8f
+                */
                case 0xE3:
                        switch(src[1]) {
                        case 0x84:
@@ -354,10 +355,14 @@ static bool __ctsvc_is_hangul(const char *src)
                        }
                        break;
 
-               // Hangul Jamo Extended A : 0xA960 ~ 0xA97F
-                       // ea a5 a0  ~ ea a5 bf
-               // Hangul syllables : 0xAC00 ~ 0xD7AF
-                       // ea b0 80 ~ ea bf bf
+               /*
+                * Hangul Jamo Extended A : 0xA960 ~ 0xA97F
+                *  ea a5 a0  ~ ea a5 bf
+                */
+               /*
+                * Hangul syllables : 0xAC00 ~ 0xD7AF
+                *  ea b0 80 ~ ea bf bf
+                */
                case 0xEA:
                        switch(src[1]) {
                        case 0xA5:
@@ -373,9 +378,11 @@ static bool __ctsvc_is_hangul(const char *src)
                        }
                        break;
 
-               // Hangul syllables : 0xAC00 ~ 0xD7AF
-                       // eb 80 80 ~ eb bf bf
-                       // ec 80 80 ~ ec bf bf
+               /*
+                * Hangul syllables : 0xAC00 ~ 0xD7AF
+                *  eb 80 80 ~ eb bf bf
+                *  ec 80 80 ~ ec bf bf
+                */
                case 0xEB ... 0xEC:
                        switch(src[1]) {
                        case 0x80 ... 0xBF:
@@ -388,10 +395,14 @@ static bool __ctsvc_is_hangul(const char *src)
                        }
                        break;
 
-               // Hangul syllables : 0xAC00 ~ 0xD7AF
-                       // ed 80 80 ~ ed 9e af
-               // Hangul Jamo Extended B : 0xD7B0 ~ 0xD7FF
-                       // ed 9e b0 ~ ed 9f bf
+               /*
+                * Hangul syllables : 0xAC00 ~ 0xD7AF
+                *  ed 80 80 ~ ed 9e af
+                */
+               /*
+                * Hangul Jamo Extended B : 0xD7B0 ~ 0xD7FF
+                *  ed 9e b0 ~ ed 9f bf
+                */
                case 0xED:
                        switch(src[1]) {
                        case 0x80 ... 0x9F:
@@ -403,8 +414,10 @@ static bool __ctsvc_is_hangul(const char *src)
                        }
                        break;
 
-               // Hangul halfwidth : 0xFFA0 ~ 0xFFDC
-                       // ef be a0 ~ ef bf 9c
+               /*
+                * Hangul halfwidth : 0xFFA0 ~ 0xFFDC
+                *  ef be a0 ~ ef bf 9c
+                */
                case 0xEF:
                        switch(src[1]) {
                        case 0xBE:
similarity index 87%
rename from native/ctsvc_localize_kor.h
rename to server/ctsvc_localize_kor.h
index bbe0775..5c8c922 100644 (file)
@@ -17,8 +17,8 @@
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_LOCALIZE_KOR_H__
-#define __TIZEN_SOCIAL_CTSVC_LOCALIZE_KOR_H__
+#ifndef __CTSVC_LOCALIZE_KOR_H__
+#define __CTSVC_LOCALIZE_KOR_H__
 
 int ctsvc_get_chosung(const char *src, char *dest, int dest_size);
 int ctsvc_get_korean_search_pattern(const char *src, char *dest, int dest_size);
@@ -28,4 +28,4 @@ bool ctsvc_is_chosung(const char *src);
 bool ctsvc_is_hangul(UChar src);
 void ctsvc_hangul_compatibility2jamo(UChar *src);
 
-#endif         //__TIZEN_SOCIAL_CTSVC_LOCALIZE_KOR_H__
+#endif /* __CTSVC_LOCALIZE_KOR_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_normalize.c
rename to server/ctsvc_normalize.c
index be663cb..1b69691 100644 (file)
@@ -23,8 +23,6 @@
 #include <unicode/unorm.h>
 #include <unicode/ucol.h>
 #include <unicode/uset.h>
-#include <vconf.h>
-#include <vconf-keys.h>
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
@@ -42,19 +40,19 @@ typedef struct {
 }hiragana_group_letter;
 
 static hiragana_group_letter hiragana_group[13] = {
-       {0x3042, 0x41, 0x4a}, // ぁ    あ     ぃ     い     ぅ     う     ぇ     え     ぉ     お
-       {0x3042, 0x94, 0x94}, // ゔ
-       {0x304b, 0x4b, 0x54}, // か    が     き     ぎ     く     ぐ     け     げ     こ     ご
-       {0x304b, 0x95, 0x96}, // ゕ    ゖ
-       {0x3055, 0x55, 0x5e}, // さ    ざ     し     じ     す     ず     せ     ぜ     そ     ぞ
-       {0x305f, 0x5f, 0x69}, // た    だ     ち     ぢ     っ     つ     づ     て     で     と     ど
-       {0x306a, 0x6a, 0x6e}, // な    に     ぬ     ね     の
-       {0x306f, 0x6f, 0x7d}, // は    ば     ぱ     ひ     び     ぴ     ふ     ぶ     ぷ     へ     べ     ぺ     ほ     ぼ     ぽ
-       {0x307e, 0x7e, 0x82}, // ま    み     む     め     も
-       {0x3084, 0x83, 0x88}, // ゃ    や     ゅ     ゆ     ょ     よ
-       {0x3089, 0x89, 0x8d}, // ら    り     る     れ     ろ
-       {0x308f, 0x8e, 0x92}, // ゎ    わ
-       {0x3093, 0x93, 0x93}, // ゐ    ゑ     を
+       {0x3042, 0x41, 0x4a}, /* ぁ あ ぃ い ぅ う ぇ え ぉ お */
+       {0x3042, 0x94, 0x94}, /* ゔ */
+       {0x304b, 0x4b, 0x54}, /* か が き ぎ く ぐ け げ こ ご */
+       {0x304b, 0x95, 0x96}, /* ゕ ゖ */
+       {0x3055, 0x55, 0x5e}, /* さ ざ し じ す ず せ ぜ そ ぞ */
+       {0x305f, 0x5f, 0x69}, /* た だ ち ぢ っ つ づ て で と ど */
+       {0x306a, 0x6a, 0x6e}, /* な に ぬ ね の */
+       {0x306f, 0x6f, 0x7d}, /* は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ */
+       {0x307e, 0x7e, 0x82}, /* ま み む め も */
+       {0x3084, 0x83, 0x88}, /* ゃ や ゅ ゆ ょ よ*/
+       {0x3089, 0x89, 0x8d}, /* ら り る れ ろ */
+       {0x308f, 0x8e, 0x92}, /* ゎ わ */
+       {0x3093, 0x93, 0x93}, /* ゐ ゑ を */
 };
 
 static int __ctsvc_remove_special_char(const char *src, char *dest, int dest_size)
@@ -95,22 +93,25 @@ static inline int __ctsvc_collation_str(const char *src, char **dest)
        UCollator *collator;
 
        char *region = strdup(ctsvc_get_langset());
-       RETVM_IF(NULL == region, CONTACTS_ERROR_OUT_OF_MEMORY, "strdup() return NULL");
+       if (NULL == region) {
+               CTS_ERR("strdup() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        char *dot = strchr(region, '.');
        if (dot)
                *dot = '\0';
 
        collator = ucol_open(region, &status);
-       if (U_FAILURE(status)){
-               CTS_ERR("ucol_open Failed(%s)", u_errorName(status));
+       if (U_FAILURE(status)) {
+               CTS_ERR("ucol_open Fail(%s)", u_errorName(status));
                free(region);
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       // TODO: ucol_setAttribute is not called
-       if (U_FAILURE(status)){
-               CTS_ERR("ucol_setAttribute Failed(%s)", u_errorName(status));
+       /* TODO: ucol_setAttribute is not called */
+       if (U_FAILURE(status)) {
+               CTS_ERR("ucol_setAttribute Fail(%s)", u_errorName(status));
                free(region);
                ucol_close(collator);
                return CONTACTS_ERROR_SYSTEM;
@@ -118,7 +119,7 @@ static inline int __ctsvc_collation_str(const char *src, char **dest)
 
        u_strFromUTF8(NULL, 0, &size, src, strlen(src), &status);
        if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) {
-               CTS_ERR("u_strFromUTF8 to get the dest length Failed(%s)", u_errorName(status));
+               CTS_ERR("u_strFromUTF8 to get the dest length Fail(%s)", u_errorName(status));
                free(region);
                ucol_close(collator);
                return CONTACTS_ERROR_SYSTEM;
@@ -126,8 +127,8 @@ static inline int __ctsvc_collation_str(const char *src, char **dest)
        status = U_ZERO_ERROR;
        tmp_result = calloc(1, sizeof(UChar) * (size + 1));
        u_strFromUTF8(tmp_result, size + 1, NULL, src, -1, &status);
-       if (U_FAILURE(status)){
-               CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
+       if (U_FAILURE(status)) {
+               CTS_ERR("u_strFromUTF8 Fail(%s)", u_errorName(status));
                free(region);
                free(tmp_result);
                ucol_close(collator);
@@ -150,14 +151,13 @@ int ctsvc_collation_str(char *src, char **dest)
        char temp[SAFE_STRLEN(src) + 1];
 
        ret = __ctsvc_remove_special_char(src, temp, sizeof(temp));
-       WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_remove_special_char() Failed(%d)", ret);
+       WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_remove_special_char() Fail(%d)", ret);
 
        return __ctsvc_collation_str(temp, dest);
 }
 
 static int __ctsvc_normalize_str(const char *src, char **dest)
 {
-       int ret = CONTACTS_ERROR_NONE;
        int32_t tmp_size = 100;
        int32_t upper_size;
        int32_t size = 100;
@@ -168,39 +168,38 @@ static int __ctsvc_normalize_str(const char *src, char **dest)
 
        tmp_result = calloc(1, sizeof(UChar)*(tmp_size+1));
        if (NULL == tmp_result) {
-               CTS_ERR("calloc() return NULL");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               goto DATA_FREE;
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
-       u_strFromUTF8(tmp_result, tmp_size + 1, &tmp_size, src, -1, &status);
 
+       u_strFromUTF8(tmp_result, tmp_size + 1, &tmp_size, src, -1, &status);
        if (status == U_BUFFER_OVERFLOW_ERROR) {
                status = U_ZERO_ERROR;
                free(tmp_result);
                tmp_result = calloc(1, sizeof(UChar) * (tmp_size + 1));
                if (NULL == tmp_result) {
-                       CTS_ERR("calloc() return NULL");
-                       ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                       goto DATA_FREE;
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
+
                u_strFromUTF8(tmp_result, tmp_size + 1, NULL, src, -1, &status);
                if (U_FAILURE(status)) {
-                       CTS_ERR("u_strFromUTF8()Failed(%s)", u_errorName(status));
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto DATA_FREE;
+                       CTS_ERR("u_strFromUTF8()Fail(%s)", u_errorName(status));
+                       free(tmp_result);
+                       return CONTACTS_ERROR_SYSTEM;
                }
        }
        else if (U_FAILURE(status)) {
-               CTS_ERR("u_strFromUTF8() Failed(%s)", u_errorName(status));
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto DATA_FREE;
+               CTS_ERR("u_strFromUTF8() Fail(%s)", u_errorName(status));
+               free(tmp_result);
+               return CONTACTS_ERROR_SYSTEM;
        }
 
        tmp_upper = calloc(1, sizeof(UChar)*(tmp_size+1));
        if (NULL == tmp_upper) {
-               CTS_ERR("calloc() return NULL");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               goto DATA_FREE;
+               CTS_ERR("calloc() Fail");
+               free(tmp_result);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
        upper_size = u_strToUpper(tmp_upper, tmp_size+1, tmp_result, -1, NULL, &status);
@@ -209,70 +208,80 @@ static int __ctsvc_normalize_str(const char *src, char **dest)
                free(tmp_upper);
                tmp_upper = calloc(1, sizeof(UChar) * (upper_size + 1));
                if (NULL == tmp_upper) {
-                       CTS_ERR("calloc() return NULL");
-                       ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                       goto DATA_FREE;
+                       CTS_ERR("calloc() Fail");
+                       free(tmp_result);
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
 
                u_strFromUTF8(tmp_upper, upper_size + 1, NULL, src, -1, &status);
                if (U_FAILURE(status)) {
-                       CTS_ERR("u_strFromUTF8()Failed(%s)", u_errorName(status));
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto DATA_FREE;
+                       CTS_ERR("u_strFromUTF8()Fail(%s)", u_errorName(status));
+                       free(tmp_result);
+                       free(tmp_upper);
+                       return CONTACTS_ERROR_SYSTEM;
                }
        }
        else if (U_FAILURE(status)) {
-               CTS_ERR("u_strToUpper() Failed(%s)", u_errorName(status));
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto DATA_FREE;
+               CTS_ERR("u_strToUpper() Fail(%s)", u_errorName(status));
+               free(tmp_result);
+               free(tmp_upper);
+               return CONTACTS_ERROR_SYSTEM;
        }
 
        result = calloc(1, sizeof(UChar)*(size+1));
        if (NULL == result) {
-               CTS_ERR("calloc() return NULL");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               goto DATA_FREE;
+               CTS_ERR("calloc() Fail");
+               free(tmp_result);
+               free(tmp_upper);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
-       size = unorm_normalize(tmp_upper, -1, UNORM_NFD, 0,
-                       result, size+1, &status);
+       size = unorm_normalize(tmp_upper, -1, UNORM_NFD, 0, result, size+1, &status);
        if (status == U_BUFFER_OVERFLOW_ERROR) {
                status = U_ZERO_ERROR;
                free(result);
                result = calloc(1, sizeof(UChar)*(size + 1));
                if (NULL == result) {
-                       CTS_ERR("calloc() return NULL");
-                       ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-                       goto DATA_FREE;
+                       CTS_ERR("calloc() Fail");
+                       free(tmp_result);
+                       free(tmp_upper);
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
 
                unorm_normalize(tmp_upper, -1, UNORM_NFD, 0, result, size+1, &status);
                if (U_FAILURE(status)) {
-                       CTS_ERR("unorm_normalize() Failed(%s)", u_errorName(status));
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto DATA_FREE;
+                       CTS_ERR("unorm_normalize() Fail(%s)", u_errorName(status));
+                       free(tmp_result);
+                       free(tmp_upper);
+                       free(result);
+                       return CONTACTS_ERROR_SYSTEM;
                }
        }
        else if (U_FAILURE(status)) {
-               CTS_ERR("unorm_normalize() Failed(%s)", u_errorName(status));
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto DATA_FREE;
+               CTS_ERR("unorm_normalize() Fail(%s)", u_errorName(status));
+               free(tmp_result);
+               free(tmp_upper);
+               free(result);
+               return CONTACTS_ERROR_SYSTEM;
        }
 
-       ret = ctsvc_check_language(result);
+       ctsvc_check_language(result);
        ctsvc_extra_normalize(result, size);
 
-       // remove diacritical : U+3000 ~ U+034F
+       /* remove diacritical : U+3000 ~ U+034F */
        int i, j;
        UChar *temp_result = NULL;
        temp_result = calloc(1, sizeof(UChar)*(size+1));
        if (NULL == temp_result) {
-               CTS_ERR("calloc() return NULL");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               goto DATA_FREE;
+               CTS_ERR("calloc() Fail");
+               free(tmp_result);
+               free(tmp_upper);
+               free(result);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
+
        bool replaced = false;
-       for(i=0,j=0; i<size;i++) {
+       for (i=0,j=0; i<size;i++) {
                if (CTSVC_COMPARE_BETWEEN((UChar)CTSVC_COMBINING_DIACRITICAL_MARKS_START,
                        result[i], (UChar)CTSVC_COMBINING_DIACRITICAL_MARKS_END)) {
                        replaced = true;
@@ -293,25 +302,27 @@ static int __ctsvc_normalize_str(const char *src, char **dest)
        status = U_ZERO_ERROR;
        *dest = calloc(1, sizeof(char) * (size+1));
        if (NULL == *dest) {
-               CTS_ERR("calloc() return NULL");
-               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
-               goto DATA_FREE;
+               CTS_ERR("calloc() Fail");
+               free(tmp_result);
+               free(tmp_upper);
+               free(result);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
        }
 
        u_strToUTF8(*dest, size+1, NULL, result, -1, &status);
        if (U_FAILURE(status)) {
-               CTS_ERR("u_strToUTF8() Failed(%s)", u_errorName(status));
-               ret = CONTACTS_ERROR_SYSTEM;
+               CTS_ERR("u_strToUTF8() Fail(%s)", u_errorName(status));
                free(*dest);
                *dest = NULL;
-               goto DATA_FREE;
+               free(tmp_result);
+               free(tmp_upper);
+               free(result);
+               return CONTACTS_ERROR_SYSTEM;
        }
-
-DATA_FREE:
        free(tmp_result);
        free(tmp_upper);
        free(result);
-       return ret;
+       return CONTACTS_ERROR_NONE;
 }
 
 static int __ctsvc_convert_halfwidth_ascii_and_symbol(const char *src, UChar *dest, int dest_size, int* str_size)
@@ -322,15 +333,15 @@ static int __ctsvc_convert_halfwidth_ascii_and_symbol(const char *src, UChar *de
 
        u_strFromUTF8(dest, dest_size, &size, src, strlen(src), &status);
        if (U_FAILURE(status)) {
-               CTS_ERR("u_strFromUTF8() Failed(%s)", u_errorName(status));
+               CTS_ERR("u_strFromUTF8() Fail(%s)", u_errorName(status));
                return CONTACTS_ERROR_SYSTEM;
        }
 
        *str_size = size;
 
-       // full width -> half width
-       for ( i=0; i < size; i++ ) {
-               // FF00 ~ FF60: Fullwidth ASCII variants
+       /* full width -> half width */
+       for (i=0;i<size;i++) {
+               /* FF00 ~ FF60: Fullwidth ASCII variants */
                if (CTSVC_COMPARE_BETWEEN((UChar)0xFF00, dest[i], (UChar)0xFF60)) {
                        int unicode_value1 = 0;
                        int unicode_value2 = 0;
@@ -338,38 +349,30 @@ static int __ctsvc_convert_halfwidth_ascii_and_symbol(const char *src, UChar *de
                        unicode_value2 = (0xFF & dest[i]) + 0x20;
                        dest[i] = unicode_value1 << 8 | unicode_value2;
                }
-               // FFE0~FFE6: Fullwidth symbol variants
+               /* FFE0~FFE6: Fullwidth symbol variants */
                else if (CTSVC_COMPARE_BETWEEN((UChar)0xFFE0, dest[i], (UChar)0xFFE6)) {
-                       if( dest[i] == (UChar)0xFFE0 )
-                       {
+                       if (dest[i] == (UChar)0xFFE0) {
                                dest[i] = (UChar)0x00A2;
                        }
-                       else if( dest[i] == (UChar)0xFFE1 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE1) {
                                dest[i] = (UChar)0x00A3;
                        }
-                       else if( dest[i] == (UChar)0xFFE2 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE2) {
                                dest[i] = (UChar)0x00AC;
                        }
-                       else if( dest[i] == (UChar)0xFFE3 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE3) {
                                dest[i] = (UChar)0x00AF;
                        }
-                       else if( dest[i] == (UChar)0xFFE4 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE4) {
                                dest[i] = (UChar)0x00A6;
                        }
-                       else if( dest[i] == (UChar)0xFFE5 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE5) {
                                dest[i] = (UChar)0x00A5;
                        }
-                       else if( dest[i] == (UChar)0xFFE6 )
-                       {
+                       else if (dest[i] == (UChar)0xFFE6) {
                                dest[i] = (UChar)0x20A9;
                        }
-                       else
-                       {
+                       else {
 
                        }
                }
@@ -390,16 +393,14 @@ int ctsvc_get_halfwidth_string(const char *src, char** dest, int* dest_size)
        UChar unicodes[LARGE_BUFFER_SIZE+1];
        int ustr_size = 0;
 
-       if( __ctsvc_convert_halfwidth_ascii_and_symbol(src, unicodes, LARGE_BUFFER_SIZE, &ustr_size) != CONTACTS_ERROR_NONE )
-       {
-               CTS_ERR("convert to halfwidth failed! %s ", src);
-
+       if (CONTACTS_ERROR_NONE != __ctsvc_convert_halfwidth_ascii_and_symbol(src, unicodes, LARGE_BUFFER_SIZE, &ustr_size)) {
+               CTS_ERR("__ctsvc_convert_halfwidth_ascii_and_symbol() Fail");
                return CONTACTS_ERROR_SYSTEM;
        }
 
        UErrorCode status = 0;
 
-       // pre-flighting
+       /* pre-flighting */
        int size = 0;
        u_strToUTF8(NULL, 0, &size, unicodes, -1, &status);
        status = U_ZERO_ERROR;
@@ -407,7 +408,7 @@ int ctsvc_get_halfwidth_string(const char *src, char** dest, int* dest_size)
 
        u_strToUTF8(*dest, size+1, dest_size, unicodes, ustr_size, &status);
        if (U_FAILURE(status)) {
-               CTS_ERR("u_strToUTF8() Failed(%s)", u_errorName(status));
+               CTS_ERR("u_strToUTF8() Fail(%s)", u_errorName(status));
 
                free(*dest);
                *dest = NULL;
@@ -425,7 +426,7 @@ int ctsvc_normalize_str(const char *src, char **dest)
        char temp[strlen(src) + 1];
 
        ret = __ctsvc_remove_special_char(src, temp, strlen(src) + 1);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "__ctsvc_remove_special_char() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "__ctsvc_remove_special_char() Fail(%d)", ret);
 
        ret = __ctsvc_normalize_str(temp, dest);
        return ret;
@@ -441,24 +442,24 @@ static void __ctsvc_convert_japanese_group_letter(char *dest)
 
        dest_len = strlen(dest) + 1;
        u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, dest, -1, &status);
-       RETM_IF(U_FAILURE(status), "u_strFromUTF8() Failed(%s)", u_errorName(status));
+       RETM_IF(U_FAILURE(status), "u_strFromUTF8() Fail(%s)", u_errorName(status));
 
        unicode_value = (0xFF & (tmp_result[0]));
 
-       for(i=0; i < 13; i++) {
+       for (i=0; i < 13; i++) {
                if (hiragana_group[i].start <= unicode_value
                                && unicode_value <= hiragana_group[i].end)
                        result[0] = hiragana_group[i].letter;
        }
 
        u_strToUTF8(dest, dest_len, &size, result, -1, &status);
-       RETM_IF(U_FAILURE(status), "u_strToUTF8() Failed(%s)", u_errorName(status));
+       RETM_IF(U_FAILURE(status), "u_strToUTF8() Fail(%s)", u_errorName(status));
 
 }
 
 static bool __ctsvc_check_range_out_index(const char src[])
 {
-       if(src[0] == 0xe2 && src[1] == 0x80 && src[2] == 0xa6){
+       if (src[0] == 0xe2 && src[1] == 0x80 && src[2] == 0xa6) {
                return true;
        }
        return false;
@@ -470,18 +471,18 @@ int ctsvc_normalize_index(const char *src, char **dest)
        char first_str[10] = {0};
        int length = 0;
 
-       if(first_str[0] == '\0' || __ctsvc_check_range_out_index(first_str)){
+       if (first_str[0] == '\0' || __ctsvc_check_range_out_index(first_str)) {
                length = ctsvc_check_utf8(src[0]);
-               RETVM_IF(length <= 0, CONTACTS_ERROR_INTERNAL, "check_utf8 is failed");
+               RETVM_IF(length <= 0, CONTACTS_ERROR_INTERNAL, "check_utf8() Fail");
                memset(first_str,0x00, sizeof(first_str));
                strncpy(first_str, src, length);
-               if (length != strlen(first_str)){
+               if (length != strlen(first_str)) {
                        CTS_ERR("length : %d, first_str : %s, strlne : %d", length, first_str, strlen(first_str));
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
        }
        ret = __ctsvc_normalize_str(first_str, dest);
-       RETVM_IF(dest == NULL, ret, "__ctsvc_normalize_str is failed");
+       RETVM_IF(dest == NULL, ret, "__ctsvc_normalize_str() Fail");
 
        if ((*dest)[0] != '\0') {
                length = ctsvc_check_utf8((*dest)[0]);
similarity index 87%
rename from native/ctsvc_normalize.h
rename to server/ctsvc_normalize.h
index c6c9b23..bc4453c 100644 (file)
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__
-#define __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__
+#ifndef __CTSVC_NORMALIZE_H__
+#define __CTSVC_NORMALIZE_H__
 
 int ctsvc_normalize_str(const char *src, char **dest);
 int ctsvc_collation_str(char *src, char **dest);
 int ctsvc_normalize_index(const char *src, char **dest);
 int ctsvc_get_halfwidth_string(const char *src, char** dest, int* dest_size);
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__ */
+#endif /* __CTSVC_NORMALIZE_H__ */
diff --git a/server/ctsvc_notification.c b/server/ctsvc_notification.c
new file mode 100644 (file)
index 0000000..de21549
--- /dev/null
@@ -0,0 +1,940 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include "contacts.h"
+#include "contacts_db_status.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_notify.h"
+#include "ctsvc_notification.h"
+
+struct ctsvc_change_s {
+       bool contact_change;
+       bool my_profile_change;
+       bool phonelog_change;
+       bool speed_change;
+       bool addressbook_change;
+       bool group_change;
+       bool group_rel_change;
+       bool person_change;
+       bool activity_change;
+       bool activity_photo_change;
+       bool address_change;
+       bool data_change;
+       bool event_change;
+       bool number_change;
+       bool email_change;
+       bool messenger_change;
+       bool name_change;
+       bool note_change;
+       bool url_change;
+       bool nickname_change;
+       bool sdn_change;
+       bool relationship_change;
+       bool image_change;
+       bool profile_change;
+       bool company_change;
+};
+static TLS GHashTable *ctsvc_change_table = NULL;
+
+static struct ctsvc_change_s* _ctsvc_get_change_info(const char *zone_name)
+{
+       struct ctsvc_change_s *change = NULL;
+       if (NULL == ctsvc_change_table)
+               ctsvc_change_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               change = g_hash_table_lookup(ctsvc_change_table, zone_name);
+
+       if (NULL == change) {
+               change = calloc(1, sizeof(struct ctsvc_change_s));
+               if (NULL == change) {
+                       CTS_ERR("calloc() Fail");
+                       return NULL;
+               }
+               g_hash_table_insert(ctsvc_change_table, strdup(zone_name), change);
+       }
+
+       return change;
+}
+
+void ctsvc_noti_publish_socket_initialize(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_IPC_READY);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd)
+               close(fd);
+}
+
+static inline void __ctsvc_noti_publish_contact_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_CONTACT_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->contact_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_my_profile_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_MY_PROFILE_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->my_profile_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_phonelog_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_PHONELOG_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->phonelog_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_speed_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_SPEEDDIAL_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->speed_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_addressbook_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_ADDRESSBOOK_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->addressbook_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_group_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_GROUP_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->group_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_group_rel_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_GROUP_RELATION_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->group_rel_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_person_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_PERSON_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->person_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_name_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_NAME_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->name_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_number_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_NUMBER_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->number_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_email_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_EMAIL_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->email_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_event_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_EVENT_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->event_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_url_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_URL_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->url_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_address_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_ADDRESS_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->address_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_note_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_NOTE_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->note_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_company_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_COMPANY_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->company_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_relationship_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_RELATIONSHIP_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->relationship_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_image_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_IMAGE_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->image_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_nickname_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_NICKNAME_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->nickname_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_messenger_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_MESSENGER_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->messenger_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_data_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_DATA_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->data_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_sdn_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_SDN_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->sdn_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_profile_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_PROFILE_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->profile_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_activity_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_ACTIVITY_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->activity_change = false;
+       }
+}
+
+static inline void __ctsvc_noti_publish_activity_photo_change(const char *zone_name)
+{
+       char noti_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, noti_path, sizeof(noti_path));
+       snprintf(noti_path+len, sizeof(noti_path)-len, "%s", CTSVC_NOTI_ACTIVITY_PHOTO_CHANGED);
+
+       int fd = open(noti_path, O_TRUNC | O_RDWR);
+       if (0 <= fd) {
+               struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+               close(fd);
+               if (NULL == change) {
+                       CTS_ERR("_ctsvc_get_change_info() Fail");
+                       return;
+               }
+               change->activity_photo_change = false;
+       }
+}
+
+void ctsvc_nofitication_cancel(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->contact_change = false;
+       change->my_profile_change = false;
+       change->phonelog_change = false;
+       change->speed_change = false;
+       change->addressbook_change = false;
+       change->group_change = false;
+       change->group_rel_change = false;
+       change->person_change = false;
+       change->activity_change = false;
+       change->activity_photo_change = false;
+       change->address_change = false;
+       change->data_change = false;
+       change->event_change = false;
+       change->number_change = false;
+       change->email_change = false;
+       change->messenger_change = false;
+       change->name_change = false;
+       change->note_change = false;
+       change->url_change = false;
+       change->nickname_change = false;
+       change->sdn_change = false;
+       change->relationship_change = false;
+       change->image_change = false;
+       change->profile_change = false;
+       change->company_change = false;
+}
+
+
+void ctsvc_set_contact_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->contact_change = true;
+}
+
+void ctsvc_set_my_profile_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->my_profile_change = true;
+}
+
+void ctsvc_set_phonelog_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->phonelog_change = true;
+}
+
+void ctsvc_set_speed_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->speed_change = true;
+}
+
+void ctsvc_set_addressbook_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->addressbook_change = true;
+}
+
+void ctsvc_set_group_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->group_change = true;
+}
+
+void ctsvc_set_group_rel_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->group_rel_change = true;
+}
+
+void ctsvc_set_person_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->person_change = true;
+}
+
+void ctsvc_set_activity_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->activity_change = true;
+}
+
+void ctsvc_set_activity_photo_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->activity_photo_change = true;
+}
+
+void ctsvc_set_address_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->address_change = true;
+}
+
+void ctsvc_set_data_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->data_change = true;
+}
+
+void ctsvc_set_event_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->event_change = true;
+}
+
+void ctsvc_set_number_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->number_change = true;
+}
+
+void ctsvc_set_email_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->email_change = true;
+}
+
+void ctsvc_set_messenger_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->messenger_change = true;
+}
+
+void ctsvc_set_nickname_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->nickname_change = true;
+}
+
+void ctsvc_set_name_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->name_change = true;
+}
+
+void ctsvc_set_note_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->note_change = true;
+}
+
+void ctsvc_set_url_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->url_change = true;
+}
+
+void ctsvc_set_sdn_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->sdn_change = true;
+}
+
+void ctsvc_set_relationship_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->relationship_change = true;
+}
+
+void ctsvc_set_image_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->image_change = true;
+}
+
+void ctsvc_set_profile_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->profile_change = true;
+}
+
+void ctsvc_set_company_noti(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       change->company_change = true;
+}
+
+void ctsvc_notification_send(const char *zone_name)
+{
+       struct ctsvc_change_s *change = _ctsvc_get_change_info(zone_name);
+       if (NULL == change) {
+               CTS_ERR("_ctsvc_get_change_info() Fail");
+               return;
+       }
+       if (change->contact_change) __ctsvc_noti_publish_contact_change(zone_name);
+       if (change->my_profile_change) __ctsvc_noti_publish_my_profile_change(zone_name);
+       if (change->phonelog_change) __ctsvc_noti_publish_phonelog_change(zone_name);
+       if (change->speed_change) __ctsvc_noti_publish_speed_change(zone_name);
+       if (change->addressbook_change) __ctsvc_noti_publish_addressbook_change(zone_name);
+       if (change->group_change) __ctsvc_noti_publish_group_change(zone_name);
+       if (change->group_rel_change) __ctsvc_noti_publish_group_rel_change(zone_name);
+       if (change->person_change) __ctsvc_noti_publish_person_change(zone_name);
+       if (change->activity_change) __ctsvc_noti_publish_activity_change(zone_name);
+       if (change->activity_photo_change) __ctsvc_noti_publish_activity_photo_change(zone_name);
+       if (change->address_change) __ctsvc_noti_publish_address_change(zone_name);
+       if (change->data_change) __ctsvc_noti_publish_data_change(zone_name);
+       if (change->company_change) __ctsvc_noti_publish_company_change(zone_name);
+       if (change->event_change) __ctsvc_noti_publish_event_change(zone_name);
+       if (change->number_change) __ctsvc_noti_publish_number_change(zone_name);
+       if (change->email_change) __ctsvc_noti_publish_email_change(zone_name);
+       if (change->messenger_change) __ctsvc_noti_publish_messenger_change(zone_name);
+       if (change->name_change) __ctsvc_noti_publish_name_change(zone_name);
+       if (change->note_change) __ctsvc_noti_publish_note_change(zone_name);
+       if (change->url_change) __ctsvc_noti_publish_url_change(zone_name);
+       if (change->nickname_change) __ctsvc_noti_publish_nickname_change(zone_name);
+       if (change->sdn_change) __ctsvc_noti_publish_sdn_change(zone_name);
+       if (change->relationship_change) __ctsvc_noti_publish_relationship_change(zone_name);
+       if (change->image_change) __ctsvc_noti_publish_image_change(zone_name);
+       if (change->profile_change) __ctsvc_noti_publish_profile_change(zone_name);
+}
+
+/*
+ * Whenever deleting data table record, this function will be called
+ * in order to set notification
+ */
+void ctsvc_db_data_delete_callback(sqlite3_context * context,
+               int argc, sqlite3_value ** argv)
+{
+       CTS_FN_CALL;
+       int datatype;
+
+       if (2 < argc) {
+               sqlite3_result_null(context);
+               return;
+       }
+
+       char *zone_name = sqlite3_user_data(context);
+
+       datatype = sqlite3_value_int(argv[1]);
+
+       switch(datatype) {
+       case CTSVC_DATA_NAME:
+               ctsvc_set_name_noti(zone_name);
+               break;
+       case CTSVC_DATA_POSTAL:
+               ctsvc_set_address_noti(zone_name);
+               break;
+       case CTSVC_DATA_MESSENGER:
+               ctsvc_set_messenger_noti(zone_name);
+               break;
+       case CTSVC_DATA_URL:
+               ctsvc_set_url_noti(zone_name);
+               break;
+       case CTSVC_DATA_EVENT:
+               ctsvc_set_event_noti(zone_name);
+               break;
+       case CTSVC_DATA_COMPANY:
+               ctsvc_set_company_noti(zone_name);
+               break;
+       case CTSVC_DATA_NICKNAME:
+               ctsvc_set_nickname_noti(zone_name);
+               break;
+       case CTSVC_DATA_NUMBER:
+               ctsvc_set_number_noti(zone_name);
+               break;
+       case CTSVC_DATA_EMAIL:
+               ctsvc_set_email_noti(zone_name);
+               break;
+       case CTSVC_DATA_PROFILE:
+               ctsvc_set_profile_noti(zone_name);
+               break;
+       case CTSVC_DATA_RELATIONSHIP:
+               ctsvc_set_relationship_noti(zone_name);
+               break;
+       case CTSVC_DATA_NOTE:
+               ctsvc_set_note_noti(zone_name);
+               break;
+       case CTSVC_DATA_IMAGE:
+               ctsvc_set_image_noti(zone_name);
+               break;
+       case CTSVC_DATA_EXTENSION:
+               ctsvc_set_data_noti(zone_name);
+               break;
+       default:
+               break;
+       }
+       sqlite3_result_null(context);
+       CTS_FN_END;
+}
+
+API int contacts_db_add_status_changed_cb(
+               contacts_db_status_changed_cb cb, void* user_data)
+{
+       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
+       return CONTACTS_ERROR_INTERNAL;
+}
+
+API int contacts_db_remove_status_changed_cb(
+               contacts_db_status_changed_cb cb, void* user_data)
+{
+       CTS_ERR("Please use contacts-service2 instead of contacts-service3");
+       return CONTACTS_ERROR_INTERNAL;
+}
diff --git a/server/ctsvc_notification.h b/server/ctsvc_notification.h
new file mode 100644 (file)
index 0000000..314632b
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_NOTIFICATION_H__
+#define __CTSVC_NOTIFICATION_H__
+
+#include "ctsvc_db_sqlite.h"
+
+void ctsvc_set_contact_noti(const char *zone_name);
+void ctsvc_set_my_profile_noti(const char *zone_name);
+void ctsvc_set_phonelog_noti(const char *zone_name);
+void ctsvc_set_speed_noti(const char *zone_name);
+void ctsvc_set_addressbook_noti(const char *zone_name);
+void ctsvc_set_group_noti(const char *zone_name);
+void ctsvc_set_group_rel_noti(const char *zone_name);
+void ctsvc_set_person_noti(const char *zone_name);
+void ctsvc_set_data_noti(const char *zone_name);
+void ctsvc_set_activity_noti(const char *zone_name);
+void ctsvc_set_activity_photo_noti(const char *zone_name);
+void ctsvc_set_address_noti(const char *zone_name);
+void ctsvc_set_event_noti(const char *zone_name);
+void ctsvc_set_messenger_noti(const char *zone_name);
+void ctsvc_set_number_noti(const char *zone_name);
+void ctsvc_set_email_noti(const char *zone_name);
+void ctsvc_set_name_noti(const char *zone_name);
+void ctsvc_set_note_noti(const char *zone_name);
+void ctsvc_set_url_noti(const char *zone_name);
+void ctsvc_set_nickname_noti(const char *zone_name);
+void ctsvc_set_relationship_noti(const char *zone_name);
+void ctsvc_set_image_noti(const char *zone_name);
+void ctsvc_set_profile_noti(const char *zone_name);
+void ctsvc_set_sdn_noti(const char *zone_name);
+void ctsvc_set_company_noti(const char *zone_name);
+
+void ctsvc_notification_send(const char *zone_name);
+void ctsvc_nofitication_cancel(const char *zone_name);
+void ctsvc_noti_publish_socket_initialize(const char *zone_name);
+
+void ctsvc_db_data_delete_callback(sqlite3_context * context,
+               int argc, sqlite3_value ** argv);
+
+#endif /* __CTSVC_NOTIFICATION_H__ */
similarity index 69%
rename from native/ctsvc_number_utils.c
rename to server/ctsvc_number_utils.c
index 3e0a901..cf35b1b 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_number_utils.h"
@@ -285,7 +285,7 @@ char* ctsvc_get_network_cc(bool reload)
        TapiHandle *handle = NULL;
        static bool cc_loaded = false;
 
-       if (cc_loaded && !reload)
+       if (cc_loaded && false == reload)
                return cc;
 
        cc_loaded = true;
@@ -314,12 +314,15 @@ char* ctsvc_get_network_cc(bool reload)
                return NULL;
        }
 
-       if (temp && strlen(temp) > 3)
+       if (temp && 3 < strlen(temp))
                temp[3] = '\0';
        mcc = atoi(temp);
-       for (i=0;i<sizeof(__mcc_cc_list)/sizeof(ctsvc_mcc_cc_map);i++)
-               if(__mcc_cc_list[i].mcc == mcc)
+       for (i=0;i<sizeof(__mcc_cc_list)/sizeof(ctsvc_mcc_cc_map);i++) {
+               if (__mcc_cc_list[i].mcc == mcc) {
                        cc = __mcc_cc_list[i].cc;
+                       break;
+               }
+       }
        return cc;
 }
 
@@ -366,7 +369,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
        case 7:
                break;
        case 2:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 0:
                case 7:
@@ -386,7 +389,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 3:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 0:
                case 1:
@@ -406,7 +409,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 4:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 0:
                case 1:
@@ -426,7 +429,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 5:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 1:
                case 2:
@@ -446,7 +449,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 6:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 0:
                case 1:
@@ -466,7 +469,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 8:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 1:
                case 2:
@@ -486,7 +489,7 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
                }
                break;
        case 9:
-               if (ret >= len) return 0;
+               if (len <= ret) return 0;
                switch (src[ret++]-'0') {
                case 0:
                case 1:
@@ -514,16 +517,18 @@ static inline int __ctsvc_phone_number_has_country_code(const char *src, int len
        return ret;
 }
 
-// Number Matching Rule
-// refer to the http://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.164C-2011-PDF-E.pdf
+/*
+ * Number Matching Rule
+ * refer to the http://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.164C-2011-PDF-E.pdf
+ */
 enum {
-       CTSVC_PLUS_ONLY,                // +
-       CTSVC_PLUS_IP_ONLY,     // +IP (International prefix)
-       CTSVC_PLUS_CC_ONLY,     // +CC (Country code)
-       CTSVC_PLUS_IP_CC,       // +IP CC
-       CTSVC_IP_ONLY,  // IP
-       CTSVC_CC_ONLY,  // CC
-       CTSVC_IP_CC,            // IP CC
+       CTSVC_PLUS_ONLY,     /* + */
+       CTSVC_PLUS_IP_ONLY,  /* +IP (International prefix) */
+       CTSVC_PLUS_CC_ONLY,  /* +CC (Country code) */
+       CTSVC_PLUS_IP_CC,    /* +IP CC */
+       CTSVC_IP_ONLY,       /* IP */
+       CTSVC_CC_ONLY,       /* CC */
+       CTSVC_IP_CC,         /* IP CC */
        CTSVC_NONE,
 };
 
@@ -536,7 +541,7 @@ static int __ctsvc_number_has_ip_and_cc(const char*number, int len, int *index)
        int match_len;
        *index = 0;
 
-       // Check IP
+       /* Check IP */
        start_index = 0;
        match_len = 0;
 
@@ -544,188 +549,191 @@ static int __ctsvc_number_has_ip_and_cc(const char*number, int len, int *index)
        case '+':
                start_index++;
                have_plus = true;
-               if (start_index >= len) {
+               if (len <= start_index) {
                        *index = start_index;
-                       return CTSVC_PLUS_ONLY;         //'+'
+                       return CTSVC_PLUS_ONLY;   /* '+' */
                }
        default:
                {
-                       // IP can be
-                       //                      0 (Turks and Caicos Islands, Samoa)
-                       //                      00, 011, 0011, 010, 000
-                       //                      001/007 (Cambodia), 001/008 (Indonesia, Singapore), 001/002 (Korea), 002(Taiwan)
-                       //                      810 (Belarus, Kazakhstan, Russian, Tajikistan, Turkmenistan)
-                       //                      009/007/005(Colombia), 009(Nigeria)
-                       //                      119 (Cuba)
-                       //                      00/012/013/014 (Israel)
+                       /*
+                        * IP can be
+                        *  0 (Turks and Caicos Islands, Samoa)
+                        *  00, 011, 0011, 010, 000
+                        *  001/007 (Cambodia), 001/008 (Indonesia, Singapore)
+                        *  001/002 (Korea), 002(Taiwan)
+                        *  810 (Belarus, Kazakhstan, Russian, Tajikistan, Turkmenistan)
+                        *  009/007/005(Colombia), 009(Nigeria)
+                        *  119 (Cuba)
+                        *  00/012/013/014 (Israel)
+                        */
                        switch(number[start_index]) {
-                       case '0':               // '+0'
+                       case '0':   /* '+0' */
                                {
                                        start_index++;
-                                       if (start_index >= len) {
+                                       if (len <= start_index) {
                                                *index = start_index;
-                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+0'
+                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY); /* '+0' */
                                        }
 
                                        switch(number[start_index]) {
-                                       case '0':               // '+00'
+                                       case '0':   /* '+00' */
                                                {
                                                        start_index++;
-                                                       if (start_index >= len) {
+                                                       if (len <= start_index) {
                                                                *index = start_index;
-                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+00'
+                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);      /* '+00' */
                                                        }
 
                                                        switch(number[start_index]) {
-                                                       case '0':               // '+000'
-                                                       case '2':               // '+002'
-                                                       case '5':               // '+005'
-                                                       case '7':               // '+007'
-                                                       case '8':               // '+008'
-                                                       case '9':               // '+009'
-                                                                                               // or '+00 CC'
+                                                       case '0':   /* '+000' */
+                                                       case '2':   /* '+002' */
+                                                       case '5':   /* '+005' */
+                                                       case '7':   /* '+007' */
+                                                       case '8':   /* '+008' */
+                                                       case '9':   /* '+009' */
+                                                                           /* or '+00 CC' */
                                                                start_index++;
-                                                               if (start_index >= len) {
+                                                               if (len <= start_index) {
                                                                        *index = start_index;
-                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);                    // '+00Y'
+                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);  /* '+00Y' */
                                                                }
 
                                                                have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
-                                                               if (have_cc > 0) {
+                                                               if (0 < have_cc) {
                                                                        *index = start_index;
-                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                                        // '+00Y CC'
+                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);      /* '+00Y CC' */
                                                                }
                                                                else {
                                                                        have_cc = __ctsvc_phone_number_has_country_code(&number[start_index-1], len-start_index+1);
-                                                                       if (have_cc > 0) {
+                                                                       if (0 < have_cc) {
                                                                                *index = start_index-1;
-                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                // '+00 CC'
+                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);  /* '+00 CC' */
                                                                        }
                                                                }
                                                                *index = start_index;
-                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);    // '+00Y XXX'
-                                                       case '1':               // '+001'
+                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);      /* '+00Y XXX' */
+                                                       case '1':   /* '+001' */
                                                                start_index++;
-                                                               if (start_index >= len) {
+                                                               if (len <= start_index) {
                                                                        *index = start_index;
-                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+001'
+                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);  /* '+001' */
                                                                }
 
                                                                if (number[start_index] == '1') {
                                                                        start_index++;
-                                                                       if (start_index >= len) {
+                                                                       if (len <= start_index) {
                                                                                *index = start_index;
-                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+0011'
+                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);   /* '+0011' */
                                                                        }
 
                                                                        have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
-                                                                       if (have_cc > 0) {
+                                                                       if (0 < have_cc) {
                                                                                *index = start_index;
-                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                        //  '+0011 CC'
+                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);  /*  '+0011 CC' */
                                                                        }
                                                                        start_index--;
                                                                }
 
                                                                have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
                                                                *index = start_index;
-                                                               if (have_cc > 0)
-                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                        // '+001 CC'
+                                                               if (0 < have_cc)
+                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);      /* '+001 CC' */
                                                                else
-                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+001 XXX'
-                                                       default:                // '+00 3', '+00 4', '+00 6'
+                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);  /* '+001 XXX' */
+                                                       default:   /* '+00 3', '+00 4', '+00 6' */
                                                                *index = start_index;
                                                                have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
-                                                               if (have_cc > 0)
-                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                        // '+00 CC'
+                                                               if (0 < have_cc)
+                                                                       return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);      /* '+00 CC' */
                                                                else
-                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);    // '+00 XXX'
-                                                       }       // end of fourth switch
+                                                                       return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);  /* '+00 XXX' */
+                                                       }   /* end of fourth switch */
                                                }
                                                break;
-                                       case '1':               // '+01'
+                                       case '1':   /* '+01' */
                                                {
                                                        start_index++;
-                                                       if (start_index >= len) {
-                                                               *index = start_index-1; // '+0 1'
-                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);
+                                                       if (len <= start_index) {
+                                                               *index = start_index-1;   /* '+0 1' */
+                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_NONE);
                                                        }
 
                                                        switch(number[start_index]) {
-                                                       case '0':               // '+010'
-                                                       case '1':               // '+011'
-                                                       case '2':               // '+012'
-                                                       case '3':               // '+013'
-                                                       case '4':               // '+014'
+                                                       case '0':   /* '+010' */
+                                                       case '1':   /* '+011' */
+                                                       case '2':   /* '+012' */
+                                                       case '3':   /* '+013' */
+                                                       case '4':   /* '+014' */
                                                                {
                                                                        start_index++;
-                                                                       if (start_index >= len) {
+                                                                       if (len <= start_index) {
                                                                                *index = start_index;
-                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);            // '+01Y'
+                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);   /* '+01Y' */
                                                                        }
 
                                                                        have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
                                                                        *index = start_index;
-                                                                       if (have_cc > 0)
-                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                        // '+01Y CC'
+                                                                       if (0 < have_cc)
+                                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);   /* '+01Y CC' */
                                                                        else
-                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);    // '+01Y XXX'
+                                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);   /* '+01Y XXX' */
                                                                }
                                                                break;
                                                        default:
-                                                               *index = start_index-1; // '+0 1'
-                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);
+                                                               *index = start_index-1;   /* '+0 1' */
+                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_NONE);
                                                        }
                                                }
                                                break;
-                                       default:                // '+0 CC'
+                                       default:   /* '+0 CC' */
                                                {
                                                        have_cc = __ctsvc_phone_number_has_country_code(&number[start_index], len-start_index);
                                                        *index = start_index;
-                                                       if (have_cc > 0)
-                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);                        // '+0 CC'
+                                                       if (0 < have_cc)
+                                                               return (have_plus?CTSVC_PLUS_IP_CC:CTSVC_IP_CC);          /* '+0 CC' */
                                                        else
-                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);    // '+0 XXX'
+                                                               return (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);      /* '+0 XXX' */
                                                }
                                                break;
-                                       }               // end of third switch
+                                       }   /* end of third switch */
                                }
-                               break;          // end of '+0'
-                       case '1':               // '+1'
+                               break;   /* end of '+0' */
+                       case '1':   /* '+1' */
                                start_index++;
-                               if (start_index+2 <= len && strncmp(&number[start_index], "19", 2) == 0) {      // '+119'
+                               if (start_index+2 <= len && STRING_EQUAL == strncmp(&number[start_index], "19", 2)) {   /* '+119' */
                                        match_len = start_index + 2;
                                        ret = (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);
                                }
                                else {
                                        match_len = start_index-1;
-                                       ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);           // '+ CC'
+                                       ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);   /* '+ CC' */
                                }
                                break;
-                       case '8':               // '+8'
+                       case '8':   /* '+8' */
                                start_index++;
-                               if (start_index+2 <= len && strncmp(&number[start_index], "10", 2) == 0) {      // '+810'
+                               if (start_index+2 <= len && STRING_EQUAL == strncmp(&number[start_index], "10", 2)) {   /* '+810' */
                                        match_len = start_index + 2;
                                        ret = (have_plus?CTSVC_PLUS_IP_ONLY:CTSVC_IP_ONLY);
                                }
                                else {
                                        match_len = start_index-1;
-                                       ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);           // '+ CC'
+                                       ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);   /* '+ CC' */
                                }
                                break;
                        default:
                                match_len = start_index;
-                               ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);           // '+ CC'
+                               ret = (have_plus?CTSVC_PLUS_ONLY:CTSVC_NONE);   /* '+ CC' */
                                break;
-                       }               // end of second switch
+                       }   /* end of second switch */
                }
-               break;          // '+' default
-       }       // end of first switch
+               break;   /* '+' default */
+       }   /* end of first switch */
        *index = match_len;
 
-       // Check CC
+       /* Check CC */
        if (match_len < len) {
                have_cc = __ctsvc_phone_number_has_country_code(&number[match_len], len-match_len);
-               if (have_cc > 0) {
+               if (0 < have_cc) {
                        switch (ret) {
                        case CTSVC_NONE:
                                return CTSVC_CC_ONLY;
@@ -761,18 +769,20 @@ int ctsvc_normalize_number(const char *src, char *dest, int dest_size, bool repl
        cc = ctsvc_get_network_cc(false);
        n = __ctsvc_number_has_ip_and_cc(src, d_pos-ctsvc_get_phonenumber_min_match_digit(), &index);
 
-       if (src[0] == '0'       // remove first '0'
-                       || (cc && cc[0] == '7' && src[0] == '8'))       // Russian
+       if (src[0] == '0'   /* remove first '0' */
+                       || (cc && cc[0] == '7' && src[0] == '8'))   /* Russian */
                first_zero = 1;
 
-       // 001 82 10 1234 5678 -> +82 10 1234 5678
-       // +001 82 10 1234 5678 -> +82 10 1234 5678
-       // 82 10 1234 5678 -> +82 10 1234 5678
-       // add '+'
-       // do not append + if the number without cc is too short
-       // cc 010-1234-5678 ==> +cc 010-1234-5678, cc3456 => cc3456
+       /*
+        * 001 82 10 1234 5678 -> +82 10 1234 5678
+        * +001 82 10 1234 5678 -> +82 10 1234 5678
+        * 82 10 1234 5678 -> +82 10 1234 5678
+        * add '+'
+        * do not append + if the number without cc is too short
+        * cc 010-1234-5678 ==> +cc 010-1234-5678, cc3456 => cc3456
+        */
        if (CTSVC_IP_CC == n || CTSVC_CC_ONLY == n) {
-               if (dest_size > d_pos + 1) {
+               if (d_pos + 1 < dest_size) {
                        dest[0] = '+';
                        memcpy(dest+1, src, d_pos+1);
                        d_pos++;
@@ -782,21 +792,23 @@ int ctsvc_normalize_number(const char *src, char *dest, int dest_size, bool repl
        }
        else if (CTSVC_PLUS_ONLY == n || CTSVC_PLUS_CC_ONLY == n
                 || CTSVC_PLUS_IP_ONLY == n || CTSVC_PLUS_IP_CC == n) {
-               if (dest_size > d_pos) {
-                       // Just copy
+               if (d_pos < dest_size) {
+                       /* Just copy */
                        memcpy(dest, src, d_pos+1);
                        dest[d_pos] = 0;
                        return d_pos;
                }
        }
-       // append country code
-       else {  // CTSVC_NONE,  // invalid case : CTSVC_IP_ONLY
-               if (cc && d_pos >= ctsvc_get_phonenumber_min_match_digit()) {
-                       // add '+cc'
-                       // do not append cc if the number is too short
-                       // 010-1234-5678 ==> +cc 10-1234-5678, 1234 ==> 1234
-                       // 8 XXX-XXX-XX-XX ===> +7 XXX-XXX-XX-XX
-                       if (dest_size > d_pos + strlen(cc) + 1) {
+       /* append country code */
+       else {  /* CTSVC_NONE,        invalid case : CTSVC_IP_ONLY */
+               if (cc && ctsvc_get_phonenumber_min_match_digit() <= d_pos) {
+                       /*
+                        * add '+cc'
+                        * do not append cc if the number is too short
+                        * 010-1234-5678 ==> +cc 10-1234-5678, 1234 ==> 1234
+                        * 8 XXX-XXX-XX-XX ===> +7 XXX-XXX-XX-XX
+                        */
+                       if (d_pos + strlen(cc) + 1 < dest_size) {
                                dest[0] = '+';
                                memcpy(dest+1, cc, strlen(cc));
                                memcpy(dest+1+strlen(cc), src+first_zero, d_pos+1-first_zero);
@@ -813,8 +825,10 @@ int ctsvc_normalize_number(const char *src, char *dest, int dest_size, bool repl
        return d_pos;
 }
 
-// vaild character : digit, +, *, #, , ;, alphabet(depends on replace_alphabet parameter)
-// Remove invalid string from number
+/*
+ * vaild character : digit, +, *, #,, ;, alphabet(depends on replace_alphabet parameter)
+ * Remove invalid string from number
+ */
 int ctsvc_clean_number(const char *src, char *dest, int dest_size, bool replace_alphabet)
 {
        int s_pos;
@@ -831,7 +845,7 @@ int ctsvc_clean_number(const char *src, char *dest, int dest_size, bool replace_
        pos = 0;
        while (src[s_pos] != 0) {
                int char_len;
-               if (pos > dest_size-2) break;
+               if (dest_size - 2 < pos) break;
 
                char_len = ctsvc_check_utf8(src[s_pos]);
                if (char_len <= 0) {
@@ -839,26 +853,26 @@ int ctsvc_clean_number(const char *src, char *dest, int dest_size, bool replace_
                }
 
                if (char_len == 3) {
-                       // fullwidth -> halfwidth
+                       /* fullwidth -> halfwidth */
                        if (src[s_pos] == 0xef) {
                                if (src[s_pos+1] == 0xbc) {
-                                       if (0x90 <= src[s_pos+2] && src[s_pos+2] <= 0x99)                               // ef bc 90 : '0' ~ ef bc 99 : '9'
+                                       if (0x90 <= src[s_pos+2] && src[s_pos+2] <= 0x99)        /* ef bc 90 : '0' ~ ef bc 99 : '9' */
                                                temp[pos++] = src[s_pos+2] - 0x60;
-                                       else if (0xa1 <= src[s_pos+2] && src[s_pos+2] <= 0xba)                  // ef bc a1 : 'A' ~ ef bc ba : 'Z'
+                                       else if (0xa1 <= src[s_pos+2] && src[s_pos+2] <= 0xba)   /* ef bc a1 : 'A' ~ ef bc ba : 'Z' */
                                                temp[pos++] = src[s_pos+2] - 0x60;
-                                       else if (0x8b == src[s_pos+2])                                                          // ef bc 8b : '+'
+                                       else if (0x8b == src[s_pos+2])   /* ef bc 8b : '+' */
                                                temp[pos++] = '+';
-                                       else if (0x8a == src[s_pos+2])                                                          // ef bc 8a : '*'
+                                       else if (0x8a == src[s_pos+2])   /* ef bc 8a : '*' */
                                                temp[pos++] = '*';
-                                       else if (0x83 == src[s_pos+2])                                                          // ef bc 83 : '#'
+                                       else if (0x83 == src[s_pos+2])   /* ef bc 83 : '#' */
                                                temp[pos++] = '#';
-                                       else if (0x8c == src[s_pos+2])                                                          // ef bc 8c : ','
+                                       else if (0x8c == src[s_pos+2])   /* ef bc 8c : ',' */
                                                temp[pos++] = ',';
-                                       else if (0x9b == src[s_pos+2])                                                          // ef bc 9b : ';'
+                                       else if (0x9b == src[s_pos+2])   /* ef bc 9b : ';' */
                                                temp[pos++] = ';';
                                }
                                else if (src[s_pos+1] == 0xbd
-                                               && (0x81 <= src[s_pos+2] && src[s_pos+2] <= 0x9a))              // ef bd 81 : 'a' ~ ef bd 9a : 'z'
+                                               && (0x81 <= src[s_pos+2] && src[s_pos+2] <= 0x9a))   /* ef bd 81 : 'a' ~ ef bd 9a : 'z' */
                                        temp[pos++] = src[s_pos+2] - 0x40;
                        }
                        else {
@@ -867,9 +881,9 @@ int ctsvc_clean_number(const char *src, char *dest, int dest_size, bool replace_
                        }
                }
                else if (char_len == 1) {
-                       if (0x41 <= src[s_pos] && src[s_pos] <= 0x5a)                   // 'A' ~ 'Z'
+                       if (0x41 <= src[s_pos] && src[s_pos] <= 0x5a)        /* 'A' ~ 'Z' */
                                temp[pos++] = src[s_pos];
-                       else if (0x61 <= src[s_pos] && src[s_pos] <= 0x7a)                      // 'a' ~ 'z'
+                       else if (0x61 <= src[s_pos] && src[s_pos] <= 0x7a)   /* 'a' ~ 'z' */
                                temp[pos++] = src[s_pos] - 0x20;
                        else
                                temp[pos++] = src[s_pos];
@@ -880,7 +894,7 @@ int ctsvc_clean_number(const char *src, char *dest, int dest_size, bool replace_
 
        pos = 0;
        d_pos = 0;
-       while(temp[pos] != 0) {
+       while (temp[pos] != 0) {
                if ('0' <= temp[pos] && temp[pos] <= '9')
                        dest[d_pos++] = temp[pos];
                else if (temp[pos] == '+' || temp[pos] == '#'
@@ -915,7 +929,7 @@ static int __ctsvc_minmatch_number(const char *src, char *dest, int dest_size, i
        len = strlen(temp_number);
 
        if (0 < len) {
-               while(0 <= (len-d_pos-1) && temp_number[len-d_pos-1]
+               while (0 <= (len-d_pos-1) && temp_number[len-d_pos-1]
                                && d_pos < min_match) {
                        if (dest_size-d_pos == 0) {
                                CTS_ERR("Destination string buffer is not enough(%s)", src);
@@ -928,7 +942,7 @@ static int __ctsvc_minmatch_number(const char *src, char *dest, int dest_size, i
                dest[d_pos] = 0;
 
                len = strlen(dest);
-               for(i=0; i<len/2;i++) {
+               for (i=0; i<len/2;i++) {
                        char c;
                        c = dest[i];
                        dest[i] = dest[len-i-1];
@@ -952,7 +966,7 @@ int ctsvc_get_minmatch_number(const char *src, char *dest, int dest_size, int mi
 
        ret = __ctsvc_minmatch_number(src, dest, dest_size, min_match);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("__ctsvc_minmatch_number() failed(%d)", ret);
+               CTS_ERR("__ctsvc_minmatch_number() Fail(%d)", ret);
                return ret;
        }
 
@@ -964,10 +978,10 @@ static bool __ctsvc_is_phonenumber_halfwidth(const char* keyword)
        int i;
        int len = strlen(keyword);
 
-       // TODO: we should add predicate including '+'
-       // TODO: finally, we try to check the number with regular expression.
-       for(i=0; i<len; i++) {
-               if ((keyword[i] < '0' || keyword[i] > '9') && keyword[i] != '+') {
+       /* TODO: we should add predicate including '+' */
+       /* TODO: finally, we try to check the number with regular expression. */
+       for (i=0; i<len; i++) {
+               if ((keyword[i] < '0' || '9' < keyword[i]) && keyword[i] != '+') {
                        CTS_ERR("keyword[%d]: %c is not number)", i, keyword[i]);
                        return false;
                }
@@ -992,9 +1006,9 @@ static bool __ctsvc_is_phonenumber_fullwidth(const char* keyword)
 
                if (keyword[i] == 0xef) {
                        if (keyword[i+1] == 0xbc) {
-                               if (0x90 <= keyword[i+2] && keyword[i+2] <= 0x99)                       // ef bc 90 : '0' ~ ef bc 99 : '9'
+                               if (0x90 <= keyword[i+2] && keyword[i+2] <= 0x99)            /* ef bc 90 : '0' ~ ef bc 99 : '9' */
                                        continue;
-                               else if (0x8b == keyword[i+2])                                                          // ef bc 8b : '+'
+                               else if (0x8b == keyword[i+2])   /* ef bc 8b : '+' */
                                        continue;
                                else
                                        return false;
@@ -1010,10 +1024,10 @@ static bool __ctsvc_is_phonenumber_fullwidth(const char* keyword)
 
 bool ctsvc_is_phonenumber(const char* src)
 {
-       return ( __ctsvc_is_phonenumber_halfwidth(src) || __ctsvc_is_phonenumber_fullwidth(src) );
+       return (__ctsvc_is_phonenumber_halfwidth(src) || __ctsvc_is_phonenumber_fullwidth(src));
 }
 
-// numbers are cleaned number or normalized number
+/* numbers are cleaned number or normalized number */
 static bool __ctsvc_number_compare(const char *number1, const char *number2)
 {
        int len1;
@@ -1028,8 +1042,8 @@ static bool __ctsvc_number_compare(const char *number1, const char *number2)
        len1 = strlen(number1);
        len2 = strlen(number2);
 
-       // compare  number in reverse order
-       for (matched = 0; len1 > 0 && len2 > 0;) {
+       /* compare  number in reverse order */
+       for (matched = 0; 0 < len1 && 0 < len2;) {
                if (number1[len1-1] != number2[len2-1])
                        break;
                len1--;
@@ -1037,33 +1051,35 @@ static bool __ctsvc_number_compare(const char *number1, const char *number2)
                matched++;
        }
 
-       // full match
+       /* full match */
        if (len1 == 0 && len2 == 0)
                return true;
 
-       // one is substring of the other string
-       if (matched >= minmatch_len && (len1 == 0 || len2 == 0))
+       /* one is substring of the other string */
+       if (minmatch_len <= matched && (len1 == 0 || len2 == 0))
                return true;
 
-       // one is +IPCC or +CC, the other is start wth NTP (National trunk prefix)
-       if (matched >= minmatch_len) {
+       /* one is +IPCC or +CC, the other is start wth NTP (National trunk prefix) */
+       if (minmatch_len <= matched) {
                int index1 = 0;
                int index2 = 0;
                int cc_index = 0;
 
-               ///////////////////////////////////////////////////
-               // International Prefix (IP) is related to current location where to call
-               // Country Code (CC) is related to the SIM card who to call
-               // If you try to call in United State using Korea SIM card,
-               // the number will be 011 82 X XXXXXXXX.
-               // So, when comparing number, just check IP validation and CC and natinal number matching.
+               /*
+                * International Prefix (IP) is related to current location where to call
+                * Country Code (CC) is related to the SIM card who to call
+                * If you try to call in United State using Korea SIM card,
+                * the number will be 011 82 X XXXXXXXX.
+                * So, when comparing number, just check IP validation and CC and natinal number matching.
+                */
 
                int n1 = __ctsvc_number_has_ip_and_cc(number1, len1, &index1);
                int n2 = __ctsvc_number_has_ip_and_cc(number2, len2, &index2);
 
-               ///////////////////////////////////////////////////
-               // + (IP) CC XXXXXXXX, 0XXXXXXXX
-               // + (810) 7 XXX XXX XX XX, 8XXX XXX XX XX (Russian)
+               /*
+                * + (IP) CC XXXXXXXX, 0XXXXXXXX
+                * + (810) 7 XXX XXX XX XX, 8XXX XXX XX XX (Russian)
+                */
                if ((CTSVC_PLUS_IP_CC == n1 || CTSVC_PLUS_CC_ONLY == n1 ||
                                CTSVC_IP_CC == n1 || CTSVC_CC_ONLY == n1)
                                && (number2[0] == '0' || (cc && cc[0] == '7' && number2[0] == '8')))
@@ -1072,24 +1088,26 @@ static bool __ctsvc_number_compare(const char *number1, const char *number2)
                                        CTSVC_IP_CC == n2 || CTSVC_CC_ONLY == n2)
                                && (number1[0] == '0' || (cc && cc[0] == '7' && number1[0] == '8')))
                        return true;
-               //////////////////////////////////////////////////
-               // + IP CC XXXXXXXX, + CC XXXXXXXX  (ex. +001 82  11 1234 5678 , +82 10 1234 5678)
+               /*
+                * + IP CC XXXXXXXX, + CC XXXXXXXX  (ex. +001 82  11 1234 5678, +82 10 1234 5678)
+                */
                else if ((CTSVC_PLUS_IP_CC == n1 || CTSVC_IP_CC == n1)
                                && (CTSVC_PLUS_CC_ONLY == n2 || CTSVC_CC_ONLY == n2)) {
                        int p = (CTSVC_PLUS_CC_ONLY == n2)?1:0;
                        cc_index = __ctsvc_phone_number_has_country_code(&number2[p], len2-p);
-                       if (cc_index > 0 && strncmp(&number1[index1], &number2[p], cc_index) == 0)
+                       if (0 < cc_index && STRING_EQUAL == strncmp(&number1[index1], &number2[p], cc_index))
                                return true;
                }
                else if ((CTSVC_PLUS_IP_CC == n2 || CTSVC_IP_CC == n2)
                                && (CTSVC_PLUS_CC_ONLY == n1 || CTSVC_CC_ONLY == n1)) {
                        int p = (CTSVC_PLUS_CC_ONLY == n1)?1:0;
                        cc_index = __ctsvc_phone_number_has_country_code(&number1[p], len1-p);
-                       if (cc_index > 0 && strncmp(&number2[index2], &number1[p], cc_index) == 0)
+                       if (0 < cc_index && STRING_EQUAL == strncmp(&number2[index2], &number1[p], cc_index))
                                return true;
                }
-               ///////////////////////////////////////////////////
-               // + CC XXXXXXXX, + IP CC XXXXXXXX  (ex. +001 82  10 1234 5678 , +82 10 1234 5678)
+               /*
+                * + CC XXXXXXXX, + IP CC XXXXXXXX  (ex. +001 82  10 1234 5678, +82 10 1234 5678)
+                */
                else if ((CTSVC_PLUS_IP_ONLY == n1 || CTSVC_IP_ONLY == n1)
                                && CTSVC_PLUS_ONLY == n2) {
                        return true;
@@ -1103,7 +1121,7 @@ static bool __ctsvc_number_compare(const char *number1, const char *number2)
        return false;
 }
 
-// When querying _NUMBER_COMPARE_, this function will be called.
+/* When querying _NUMBER_COMPARE_, this function will be called. */
 void ctsvc_db_phone_number_equal_callback(sqlite3_context * context,
                int argc, sqlite3_value ** argv)
 {
similarity index 89%
rename from native/ctsvc_number_utils.h
rename to server/ctsvc_number_utils.h
index cd6125b..d93cb7d 100644 (file)
@@ -16,8 +16,8 @@
  * limitations under the License.
  *
  */
-#ifndef __TIZEN_SOCIAL_CTSVC_NUMBER_UTILS_H__
-#define __TIZEN_SOCIAL_CTSVC_NUMBER_UTILS_H__
+#ifndef __CTSVC_NUMBER_UTILS_H__
+#define __CTSVC_NUMBER_UTILS_H__
 
 #include <sqlite3.h>
 
@@ -32,4 +32,4 @@ void ctsvc_db_phone_number_equal_callback(sqlite3_context * context, int argc, s
 void* ctsvc_init_tapi_handle_for_cc(void);
 void ctsvc_deinit_tapi_handle_for_cc(void);
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_NUMBER_UTILS_H__ */
+#endif /* __CTSVC_NUMBER_UTILS_H__ */
old mode 100755 (executable)
new mode 100644 (file)
index 720ecc6..2720091
@@ -19,7 +19,6 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/stat.h>
-#include <db-util.h>
 #include <sqlite3.h>
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_server_sqlite.h"
 #include "schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_schema_recovery.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_server_zone.h"
 
-// Additional Error
+/* Additional Error */
 enum {
        CTSVC_ERR_NO_DB_FILE = -10000,
        CTSVC_ERR_NO_TABLE,
 };
 
-static inline int __ctsvc_server_check_db_file(void)
+static inline int __ctsvc_server_check_db_file(const char *zone_name)
 {
-       int fd = open(CTSVC_DB_PATH, O_RDONLY);
+       int len = 0;
+
+       char db_path[CTSVC_PATH_MAX_LEN] = {0};
+       len = ctsvc_zone_get_root_path(zone_name, db_path, sizeof(db_path));
+       snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_PATH);
+
+       int fd = open(db_path, O_RDONLY);
        RETVM_IF(-1 == fd, CTSVC_ERR_NO_DB_FILE, "DB file is not exist");
 
        close(fd);
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_server_remake_db_file()
+static inline int __ctsvc_server_remake_db_file(const char *zone_name)
 {
        int ret, fd;
        char *errmsg;
        sqlite3 *db;
 
-       ret = ctsvc_server_db_open(&db);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Failed(%d)", ret);
+       int len = 0;
+       char db_path[CTSVC_PATH_MAX_LEN] = {0};
+       len = ctsvc_zone_get_root_path(zone_name, db_path, sizeof(db_path));
+       snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_PATH);
+
+       len = 0;
+       char journal_path[CTSVC_PATH_MAX_LEN] = {0};
+       len = ctsvc_zone_get_root_path(zone_name, journal_path, sizeof(journal_path));
+       snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_JOURNAL_PATH);
+
+       ret = ctsvc_server_db_open(zone_name, &db);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Fail(%d)", ret);
 
        ret = sqlite3_exec(db, schema_query, NULL, 0, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("remake contacts DB file is Failed : %s", errmsg);
+               CTS_ERR("remake contacts DB file Failed : %s", errmsg);
                sqlite3_free(errmsg);
        }
 
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
 
-       fd = open(CTSVC_DB_PATH, O_CREAT | O_RDWR, 0660);
+       fd = open(db_path, O_CREAT | O_RDWR, 0660);
        RETVM_IF(-1 == fd, CONTACTS_ERROR_SYSTEM, "open Failed");
 
        ret = fchown(fd, getuid(), CTS_SECURITY_FILE_GROUP);
        if (0 != ret)
-               CTS_ERR("fchown(%s) Failed(%d)", CTSVC_DB_PATH, ret);
+               CTS_ERR("fchown(%s) Fail(%d)", db_path, ret);
        ret = fchmod(fd, CTS_SECURITY_DEFAULT_PERMISSION);
        if (0 != ret)
-               CTS_ERR("fchown(%s) Failed(%d)", CTSVC_DB_PATH, ret);
+               CTS_ERR("fchown(%s) Fail(%d)", db_path, ret);
        close(fd);
 
-       fd = open(CTSVC_DB_JOURNAL_PATH, O_CREAT | O_RDWR, 0660);
+       fd = open(journal_path, O_CREAT | O_RDWR, 0660);
        RETVM_IF(-1 == fd, CONTACTS_ERROR_SYSTEM, "open Failed");
 
        ret = fchown(fd, getuid(), CTS_SECURITY_FILE_GROUP);
        if (0 != ret)
-               CTS_ERR("fchown(%s) Failed(%d)", CTSVC_DB_JOURNAL_PATH, ret);
+               CTS_ERR("fchown(%s) Fail(%d)", journal_path, ret);
        ret = fchmod(fd, CTS_SECURITY_DEFAULT_PERMISSION);
        if (0 != ret)
-               CTS_ERR("fchown(%s) Failed(%d)", CTSVC_DB_JOURNAL_PATH, ret);
+               CTS_ERR("fchown(%s) Fail(%d)", journal_path, ret);
        close(fd);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_server_check_table()
+static int __ctsvc_server_check_table(const char *zone_name)
 {
        int ret;
        sqlite3 *db;
        char query[CTS_SQL_MAX_LEN] = {0};
        cts_stmt stmt = NULL;
 
-       ret = ctsvc_server_db_open(&db);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Failed(%d)", ret);
+       ret = ctsvc_server_db_open(zone_name, &db);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT name FROM sqlite_master WHERE type='table' AND name='%s'",
                        CTS_TABLE_CONTACTS);
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
        if (SQLITE_OK != ret) {
-               CTS_ERR("DB error : sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
-               ctsvc_server_db_close();
+               CTS_ERR("DB error : sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -112,21 +129,21 @@ static int __ctsvc_server_check_table()
        if (SQLITE_ROW != ret) {
                CTS_ERR("contacts table does not exist in contacts DB file : %s", sqlite3_errmsg(db));
                sqlite3_finalize(stmt);
-               ctsvc_server_db_close();
+               ctsvc_server_db_close(zone_name);
                return CTSVC_ERR_NO_TABLE;
        }
 
        sqlite3_finalize(stmt);
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_check_schema(void)
+int ctsvc_server_check_schema(const char *zone_name)
 {
-       if (CTSVC_ERR_NO_DB_FILE == __ctsvc_server_check_db_file())
-               __ctsvc_server_remake_db_file();
-       else if (CTSVC_ERR_NO_TABLE == __ctsvc_server_check_table())
-               __ctsvc_server_remake_db_file();
+       if (CTSVC_ERR_NO_DB_FILE == __ctsvc_server_check_db_file(zone_name))
+               __ctsvc_server_remake_db_file(zone_name);
+       else if (CTSVC_ERR_NO_TABLE == __ctsvc_server_check_table(zone_name))
+               __ctsvc_server_remake_db_file(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
old mode 100755 (executable)
new mode 100644 (file)
index 77ccfc8..2302209
@@ -19,8 +19,8 @@
 #ifndef __CTSVC_SERVER_SCHEMA_RECOVERY_H__
 #define __CTSVC_SERVER_SCHEMA_RECOVERY_H__
 
-int ctsvc_server_check_schema();
+int ctsvc_server_check_schema(const char *zone_name);
 
-#endif // __CTSVC_SERVER_SCHEMA_RECOVERY_H__
+#endif /* __CTSVC_SERVER_SCHEMA_RECOVERY_H__ */
 
 
old mode 100755 (executable)
new mode 100644 (file)
index 38fc1ca..81a68a1
 #include <string.h>
 #include <pims-ipc.h>
 #include <pims-ipc-svc.h>
-#include <unistd.h>    //getuid
-#include <grp.h>               //setgroups
+#include <unistd.h>
+#include <grp.h>
+#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "ctsvc_internal.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_schema_recovery.h"
 #include "ctsvc_server_socket.h"
 #include "ctsvc_server_utils.h"
 #include "ctsvc_server_bg.h"
 #include "ctsvc_server_update.h"
+#include "ctsvc_server_zone.h"
 #include "ctsvc_db_access_control.h"
-#include "ctsvc_notification.h"
 
 #include "ctsvc_ipc_define.h"
 #include "ctsvc_ipc_server.h"
 #include "ctsvc_ipc_server2.h"
 
-static gboolean _ctsvc_idler_for_socket_init(gpointer user_data)
+#define CTSVC_TIMEOUT_IDLER 1
+#define CTSVC_TIMEOUT_FOR_DEFAULT 0
+
+static int ctsvc_list_count = 0;
+static char **ctsvc_zone_name_list = NULL;
+static int ctsvc_timeout_sec = CTSVC_TIMEOUT_FOR_DEFAULT;
+static GMainLoop *main_loop = NULL;
+
+static gboolean  _ctsvc_idler_for_zone(gpointer user_data)
 {
        CTS_FN_CALL;
+       int ret = 0;
        if (g_access(CTSVC_IPC_SOCKET_PATH, F_OK) || g_access(CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION, F_OK)) {
                CTS_ERR("No file exists");
                return TRUE;
        }
-       ctsvc_noti_publish_socket_initialize();
+
+       ret = ctsvc_server_zone_initialize();
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_zone_initialize() Fail(%d)", ret);
+
+       ret = ctsvc_server_zone_declare_link();
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, TRUE, "ctsvc_server_zone_declare_link() Fail(%d)", ret);
+
+       ctsvc_server_zone_get_activated_zone_name_list(&ctsvc_zone_name_list, &ctsvc_list_count);
+       int i;
+       for (i=0;i<ctsvc_list_count;i++) {
+               ctsvc_server_zone_initialize_zone(ctsvc_zone_name_list[i]);
+       }
+
        return FALSE;
 }
 
-
 static int __server_main(void)
 {
-       int ret;
+       int i;
        pims_ipc_svc_init(CTSVC_IPC_SOCKET_PATH, CTS_SECURITY_FILE_GROUP, 0777);
 
        do {
-               // register handle functions
-               // These functions will be called when requesting from client module depends on module name and function name (pims_ipc_call, ctsvc_ipc_call)
-               // pims_ipc_svc_register(MODULE_NAME, FUNCTION_NAME ...);
+               /*
+                * register handle functions
+                * These functions will be called when requesting from client module depends on module name and function name (pims_ipc_call, ctsvc_ipc_call)
+                * pims_ipc_svc_register(MODULE_NAME, FUNCTION_NAME ...);
+                */
                if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, ctsvc_ipc_server_connect, NULL) != 0) break;
                if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, ctsvc_ipc_server_disconnect, NULL) != 0) break;
                if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CHECK_PERMISSION, ctsvc_ipc_server_check_permission, NULL) != 0) break;
@@ -103,7 +126,7 @@ static int __server_main(void)
 #ifdef ENABLE_LOG_FEATURE
                if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, ctsvc_ipc_phone_log_reset_statistics, NULL) != 0) break;
                if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_DELETE, ctsvc_ipc_phone_log_delete, NULL) != 0) break;
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
                if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_GET_NAME_DISPLAY_ORDER, ctsvc_ipc_setting_get_name_display_order, NULL) != 0) break;
                if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_SET_NAME_DISPLAY_ORDER, ctsvc_ipc_setting_set_name_display_order, NULL) != 0) break;
@@ -112,35 +135,19 @@ static int __server_main(void)
 
                pims_ipc_svc_init_for_publish(CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION, CTS_SECURITY_FILE_GROUP, 0660);
 
-               g_idle_add(_ctsvc_idler_for_socket_init, NULL);
-
-               ret = contacts_connect();
-               if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("contacts_connect fail(%d)", ret);
-                       break;
-               }
-               ctsvc_set_client_access_info("contacts-service", NULL);
+               g_timeout_add_seconds(CTSVC_TIMEOUT_IDLER, _ctsvc_idler_for_zone, NULL);
 
-               ctsvc_server_bg_add_cb();
-               ctsvc_server_bg_delete_start();
-
-               ret = ctsvc_server_init_configuration();
-               CTS_DBG("%d", ret);
-
-               GMainLoop* main_loop;
                main_loop = g_main_loop_new(NULL, FALSE);
 
                pims_ipc_svc_run_main_loop(main_loop);
 
-               ctsvc_server_final_configuration();
-
-               ctsvc_server_bg_remove_cb();
-
-               ctsvc_unset_client_access_info();
+               for (i=0;i<ctsvc_list_count;i++) {
+                       ctsvc_server_zone_finalize_zone(ctsvc_zone_name_list[i]);
+                       free(ctsvc_zone_name_list[i]);
+               }
+               free(ctsvc_zone_name_list);
 
-               ret = contacts_disconnect();
-               if (CONTACTS_ERROR_NONE != ret)
-                       CTS_DBG("%d", ret);
+               ctsvc_server_final_configuration();
 
                pims_ipc_svc_deinit_for_publish();
 
@@ -148,32 +155,40 @@ static int __server_main(void)
 
                return 0;
 
-       } while(0);
+       } while (0);
 
        CTS_ERR("pims_ipc_svc_register error");
        return -1;
 }
 
+void ctsvc_server_quit(void)
+{
+       g_main_loop_quit(main_loop);
+       main_loop = NULL;
+}
+
+int ctsvc_server_get_timeout_sec(void)
+{
+       CTS_DBG("ctsvc_timeout_sec:%d", ctsvc_timeout_sec);
+       return ctsvc_timeout_sec;
+}
+
 int main(int argc, char *argv[])
 {
        CTS_FN_CALL;
        INFO("Start contacts-service");
        int ret;
 
-       if (getuid() == 0) {                    // root
+       if (getuid() == 0) {   /* root */
                gid_t glist[] = {CTS_SECURITY_FILE_GROUP};
-               ret = setgroups(1, glist);              // client and server should have same Groups
+               ret = setgroups(1, glist);   /* client and server should have same Groups */
                WARN_IF(ret <0, "setgroups Fail(%d)", ret);
        }
 
-       ctsvc_server_load_feature_list();
-       ctsvc_server_check_schema();
-       if (2 <= argc && !strcmp(argv[1], "schema"))
-               return CONTACTS_ERROR_NONE;
-
-       // update DB for compatability
-       ctsvc_server_db_update();
+       if (2 <= argc && STRING_EQUAL == strcmp(argv[1], "timeout"))
+               ctsvc_timeout_sec = atoi(argv[2]);
 
+       ctsvc_server_load_feature_list();
        ret = ctsvc_server_socket_init();
        CTS_DBG("%d", ret);
 
similarity index 73%
rename from native/ctsvc_activity.h
rename to server/ctsvc_server.h
index f95dc52..4e5c3bf 100644 (file)
@@ -1,24 +1,28 @@
-/*\r
- * Contacts Service\r
- *\r
- * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __TIZEN_SOCIAL_CTSVC_ACTIVITY_H__\r
-#define __TIZEN_SOCIAL_CTSVC_ACTIVITY_H__\r
-\r
-#endif // __TIZEN_SOCIAL_CTSVC_PERSON_H__\r
-\r
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_H__
+#define __CTSVC_SERVER_H__
+
+void ctsvc_server_quit(void);
+int ctsvc_server_get_timeout_sec(void);
+
+#endif /* __CTSVC_SERVER_H__ */
+
+
similarity index 57%
rename from native/ctsvc_activity.c
rename to server/ctsvc_server_activity.c
index e18f051..b830a5a 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-API int contacts_activity_delete_by_contact_id(int contact_id)
+int ctsvc_activity_delete_by_contact_id(const char *zone_name, int contact_id)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (contact activity)");
        RETV_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER);
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_ACTIVITIES" WHERE contact_id = %d", contact_id);
 
-       int ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       int ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        return ret;
 }
 
-API int contacts_activity_delete_by_account_id(int account_id)
+int ctsvc_activity_delete_by_account_id(const char *zone_name, int account_id)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (contact activity)");
        RETV_IF(account_id < 0, CONTACTS_ERROR_INVALID_PARAMETER);
 
@@ -66,20 +66,20 @@ API int contacts_activity_delete_by_account_id(int account_id)
                        "WHERE A.account_id = %d)",
                        CTS_TABLE_ACTIVITIES, CTS_TABLE_CONTACTS, CTS_TABLE_ADDRESSBOOKS, account_id);
 
-       int ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       int ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        return ret;
 }
 
diff --git a/server/ctsvc_server_activity.h b/server/ctsvc_server_activity.h
new file mode 100644 (file)
index 0000000..f05a8b3
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_ACTIVITY_H__
+#define __CTSVC_SERVER_ACTIVITY_H__
+
+int ctsvc_activity_delete_by_contact_id(const char *zone_name, int contact_id);
+int ctsvc_activity_delete_by_account_id(const char *zone_name, int account_id);
+
+
+#endif /* __CTSVC_SERVER_ACTIVITY_H__ */
+
index 204f4ec..a94d576 100644 (file)
 
 #include <glib.h>
 #include <stdlib.h>
-#include <unistd.h>    //sleep
+#include <unistd.h>
 
-#ifdef CTS_MOBILE
 #include <account.h>
-#endif // CTS_MOBILE
+#include <vasum.h>
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_inotify.h"
+#include "ctsvc_handle.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_server_service.h"
 #include "ctsvc_server_bg.h"
 #include "ctsvc_server_utils.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_plugin_addressbook_helper.h"
+#include "ctsvc_server_zone.h"
 #include "ctsvc_db_access_control.h"
 
 #define CTSVC_SERVER_BG_DELETE_COUNT 50
 #define CTSVC_SERVER_BG_DELETE_STEP_TIME 1
 #define CTSVC_SERVER_BG_DELETE_THREAD "ctsvc_server_bg_delete"
 
-#define CTSVC_SERVER_BG_BASE_CPU_USAGE         10  // Delete contacts when cpu usage is under the value
+#define CTSVC_SERVER_BG_BASE_CPU_USAGE 10  /* Delete contacts when cpu usage is under the value */
 
 typedef enum
 {
-       STEP_1, // get contact_ids
-       STEP_2, // delete data
-       STEP_3, // delete activity
-       STEP_4, // delete search_index, contact(image by trigger)
+       STEP_1, /* get contact_ids */
+       STEP_2, /* delete data */
+       STEP_3, /* delete activity */
+       STEP_4, /* delete search_index, contact(image by trigger) */
 } __ctsvc_delete_step_e;
 
 typedef struct {
+       const char *zone_name;
        GSList *contact_ids;
        int current_contact_id;
        __ctsvc_delete_step_e step;
@@ -59,9 +63,12 @@ GThread *__ctsvc_server_bg_delete_thread = NULL;
 GCond __ctsvc_server_bg_delete_cond;
 GMutex __ctsvc_server_bg_delete_mutex;
 
-#ifdef CTS_MOBILE
-account_subscribe_h account = NULL;
-#endif // CTS_MOBILE
+struct ctsvc_bg_data_s {
+       account_subscribe_h account;
+       contacts_h contact;
+       char *zone_name;
+};
+static GHashTable *ctsvc_bg_data_table = NULL;
 
 static int __ctsvc_server_bg_contact_delete_step1(__ctsvc_delete_data_s* data)
 {
@@ -72,12 +79,12 @@ static int __ctsvc_server_bg_contact_delete_step1(__ctsvc_delete_data_s* data)
        GSList *cursor;
 
        if (data->contact_ids == NULL) {
-               // get event_list
+               /* get event_list */
                snprintf(query, sizeof(query), "SELECT contact_id FROM "CTS_TABLE_CONTACTS" WHERE deleted = 1");
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(data->zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
-               while(1 == (ret = ctsvc_stmt_step(stmt))) {
+               while (1 == (ret = ctsvc_stmt_step(stmt))) {
                        int id = 0;
                        id = ctsvc_stmt_get_int(stmt, 0);
                        data->contact_ids = g_slist_append(data->contact_ids, GINT_TO_POINTER(id));
@@ -103,7 +110,7 @@ static int __ctsvc_server_bg_contact_delete_step1(__ctsvc_delete_data_s* data)
        }
 }
 
-// remove data
+/* remove data */
 static int __ctsvc_server_bg_contact_delete_step2(__ctsvc_delete_data_s* data)
 {
     CTS_FN_CALL;
@@ -114,15 +121,15 @@ static int __ctsvc_server_bg_contact_delete_step2(__ctsvc_delete_data_s* data)
        int count = 0;
        GSList *cursor;
 
-       // get event_list
+       /* get event_list */
        snprintf(query, sizeof(query),
-               "SELECT id FROM "CTS_TABLE_DATA" WHERE contact_id = %d LIMIT %d",
+               "SELECT id FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND is_my_profile = 0 LIMIT %d",
                data->current_contact_id, CTSVC_SERVER_BG_DELETE_COUNT);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(data->zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
-       while(1 == (ret = ctsvc_stmt_step(stmt))) {
+       while (1 == (ret = ctsvc_stmt_step(stmt))) {
                int id = 0;
                id = ctsvc_stmt_get_int(stmt, 0);
                list = g_slist_append(list, GINT_TO_POINTER(id));
@@ -133,30 +140,30 @@ static int __ctsvc_server_bg_contact_delete_step2(__ctsvc_delete_data_s* data)
        if (count <= 0)
                return CONTACTS_ERROR_NO_DATA;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed" );
+       ret = ctsvc_begin_trans(data->zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed");
 
        cursor = g_slist_nth(list, 0);
-       while(cursor) {
+       while (cursor) {
                int id = GPOINTER_TO_INT(cursor->data);
                snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d", id);
 
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(data->zone_name, query);
                if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("DB failed");
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(data->zone_name, false);
                        g_slist_free(list);
                        return ret;
                }
                cursor = g_slist_next(cursor);
        }
        g_slist_free(list);
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(data->zone_name, true);
 
        return ret;
 }
 
-// remove activities
+/* remove activities */
 static int __ctsvc_server_bg_contact_delete_step3(__ctsvc_delete_data_s* data)
 {
     CTS_FN_CALL;
@@ -168,15 +175,15 @@ static int __ctsvc_server_bg_contact_delete_step3(__ctsvc_delete_data_s* data)
        int count = 0;
        GSList *cursor;
 
-       // get event_list
+       /* get event_list */
        snprintf(query, sizeof(query),
                "SELECT id FROM "CTS_TABLE_ACTIVITIES" WHERE contact_id = %d LIMIT %d",
                data->current_contact_id, CTSVC_SERVER_BG_DELETE_COUNT);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(data->zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
-       while(1 == (ret = ctsvc_stmt_step(stmt))) {
+       while (1 == (ret = ctsvc_stmt_step(stmt))) {
                int id = 0;
                id = ctsvc_stmt_get_int(stmt, 0);
                list = g_slist_append(list, GINT_TO_POINTER(id));
@@ -187,25 +194,25 @@ static int __ctsvc_server_bg_contact_delete_step3(__ctsvc_delete_data_s* data)
        if (count <= 0)
                return CONTACTS_ERROR_NO_DATA;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed" );
+       ret = ctsvc_begin_trans(data->zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed");
 
        cursor = g_slist_nth(list, 0);
-       while(cursor) {
+       while (cursor) {
                int id = GPOINTER_TO_INT(cursor->data);
                snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_ACTIVITIES" WHERE id = %d", id);
 
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(data->zone_name, query);
                if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("DB failed");
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(data->zone_name, false);
                        g_slist_free(list);
                        return ret;
                }
                cursor = g_slist_next(cursor);
        }
        g_slist_free(list);
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(data->zone_name, true);
 
        return ret;
 }
@@ -215,35 +222,35 @@ static int __ctsvc_server_bg_contact_delete_step4(__ctsvc_delete_data_s* data)
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed" );
+       ret = ctsvc_begin_trans(data->zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB failed");
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_SEARCH_INDEX" WHERE contact_id = %d",
                                        data->current_contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(data->zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("DB failed");
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(data->zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d",
                                        data->current_contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(data->zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("DB failed");
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(data->zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(data->zone_name, true);
        return ret;
 }
 
 static bool __ctsvc_server_bg_contact_delete_step(int ret, __ctsvc_delete_data_s* data)
 {
        if (ret != CONTACTS_ERROR_NONE && ret != CONTACTS_ERROR_NO_DATA) {
-               if(data->contact_ids)
+               if (data->contact_ids)
                        g_slist_free(data->contact_ids);
                CTS_ERR("fail (%d)",ret);
                return false;
@@ -252,7 +259,7 @@ static bool __ctsvc_server_bg_contact_delete_step(int ret, __ctsvc_delete_data_s
        switch (data->step) {
        case STEP_1:
                if (ret == CONTACTS_ERROR_NO_DATA) {
-                       if(data->contact_ids)
+                       if (data->contact_ids)
                                g_slist_free(data->contact_ids);
                        CTS_ERR("step_1 no_data");
                        return false;
@@ -283,31 +290,31 @@ static bool  __ctsvc_server_db_delete_run(__ctsvc_delete_data_s* data)
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
 
-       if(data == NULL) {
+       if (data == NULL) {
                CTS_ERR("data is NULL");
                return false;
        }
 
        switch (data->step) {
                case STEP_1:
-                       // get deleted contact id list
+                       /* get deleted contact id list */
                        ret = __ctsvc_server_bg_contact_delete_step1(data);
                        break;
                case STEP_2:
-                       // delete data of current contact id (MAX CTSVC_SERVER_BG_DELETE_COUNT)
+                       /* delete data of current contact id (MAX CTSVC_SERVER_BG_DELETE_COUNT) */
                        ret = __ctsvc_server_bg_contact_delete_step2(data);
                        break;
                case STEP_3:
-                       // delete activity of current contact id (MAX CTSVC_SERVER_BG_DELETE_COUNT each time)
+                       /* delete activity of current contact id (MAX CTSVC_SERVER_BG_DELETE_COUNT each time) */
                        ret = __ctsvc_server_bg_contact_delete_step3(data);
                        break;
                case STEP_4:
-                       // delete search index of current contact id
+                       /* delete search index of current contact id */
                        ret = __ctsvc_server_bg_contact_delete_step4(data);
                        break;
                default:
                        CTS_ERR("invalid step");
-                       if(data->contact_ids)
+                       if (data->contact_ids)
                        g_slist_free(data->contact_ids);
                        return false;
        }
@@ -343,9 +350,12 @@ static process_stat* __ctsvc_get_cpu_stat()
        }
 
        result = calloc(1, sizeof(process_stat));
-       RETVM_IF(NULL == result, NULL, "calloc() return NULL");
-
-       for(i=0; i < 10;i++) {
+       if (NULL == result)
+       {
+               CTS_ERR("calloc() Fail");
+               return NULL;
+       }
+       for (i=0; i < 10;i++) {
                if (i < 3)
                        result->cpu_work_time += cpu_time[i];
                result->cpu_total_time += cpu_time[i];
@@ -379,7 +389,7 @@ static bool __ctsvc_cpu_is_busy()
 
        cpu_usage = ((double)work_time_diff/(double)total_time_diff) * 100;
        CTS_INFO("cpu usage : %.2lf (%ld/%ld)", cpu_usage, work_time_diff, total_time_diff);
-       if (cpu_usage > CTSVC_SERVER_BG_BASE_CPU_USAGE)
+       if (CTSVC_SERVER_BG_BASE_CPU_USAGE < cpu_usage)
                return true;
        return false;
 }
@@ -389,28 +399,31 @@ static gpointer __ctsvc_server_bg_delete(gpointer user_data)
        CTS_FN_CALL;
        int ret;
        __ctsvc_delete_data_s *callback_data = NULL;
+       char *zone_name = user_data;
 
-       while(1) {
+       while (1) {
                callback_data = calloc(1,sizeof(__ctsvc_delete_data_s));
                if (callback_data == NULL) {
                        CTS_ERR("calloc fail");
                        continue;
                }
                callback_data->step = STEP_1;
+               callback_data->zone_name = zone_name;
 
-               ret = contacts_connect();
+               ret = ctsvc_connect(callback_data->zone_name);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("contacts_connect() fail(%d)", ret);
+                       CTS_ERR("contacts_connect() Fail(%d)", ret);
                        free(callback_data);
                        continue;
                }
-               ctsvc_set_client_access_info("contacts-service", NULL);
+               ctsvc_set_client_access_info(callback_data->zone_name, "contacts-service", NULL);
+
+               ctsvc_server_stop_timeout();
+               while (1) {
 
-               while(1) {
-//                     sleep(CTSVC_SERVER_BG_DELETE_STEP_TIME); // sleep 1 sec.
-                       if (__ctsvc_cpu_is_busy()) {                            // sleep 1 sec in function
+                       if (__ctsvc_cpu_is_busy()) {   /* sleep 1 sec in function */
                                CTS_ERR("Now CPU is busy.. waiting");
-                               sleep(CTSVC_SERVER_BG_DELETE_STEP_TIME*59); // sleep 60 sec(1 min) totally
+                               sleep(CTSVC_SERVER_BG_DELETE_STEP_TIME*59); /* sleep 60 sec(1 min) totally */
                                continue;
                        }
                        if (__ctsvc_server_db_delete_run(callback_data) == false) {
@@ -420,22 +433,24 @@ static gpointer __ctsvc_server_bg_delete(gpointer user_data)
                        }
                }
 
-               ctsvc_unset_client_access_info();
+               ctsvc_unset_client_access_info(zone_name);
 
-               ret = contacts_disconnect();
+               ret = ctsvc_disconnect(zone_name);
                if (CONTACTS_ERROR_NONE != ret)
                        CTS_ERR("contacts_disconnect Fail(%d)", ret);
+               ctsvc_server_start_timeout();
 
                g_mutex_lock(&__ctsvc_server_bg_delete_mutex);
                CTS_DBG("wait");
                g_cond_wait(&__ctsvc_server_bg_delete_cond, &__ctsvc_server_bg_delete_mutex);
                g_mutex_unlock(&__ctsvc_server_bg_delete_mutex);
        }
-
+       free(zone_name);
+       ctsvc_server_start_timeout();
        return NULL;
 }
 
-void ctsvc_server_bg_delete_start()
+void ctsvc_server_bg_delete_start(const char *zone_name)
 {
        CTS_FN_CALL;
 
@@ -443,71 +458,116 @@ void ctsvc_server_bg_delete_start()
                g_mutex_init(&__ctsvc_server_bg_delete_mutex);
                g_cond_init(&__ctsvc_server_bg_delete_cond);
                __ctsvc_server_bg_delete_thread = g_thread_new(CTSVC_SERVER_BG_DELETE_THREAD,
-                               __ctsvc_server_bg_delete, NULL);
+                               __ctsvc_server_bg_delete, strdup(zone_name));
        }
 
-       // don't use mutex.
+       /* don't use mutex. */
        g_cond_signal(&__ctsvc_server_bg_delete_cond);
 }
 
 static void __ctsvc_server_addressbook_deleted_cb(const char *view_uri, void *data)
 {
-       // access control update
+       struct ctsvc_bg_data_s *bg_data = data;
+
+       /* access control update */
        ctsvc_reset_all_client_access_info();
 
-       ctsvc_server_bg_delete_start();
+       ctsvc_server_bg_delete_start(bg_data->zone_name);
 }
 
 static void __ctsvc_server_contact_deleted_cb(const char *view_uri, void *data)
 {
-       ctsvc_server_bg_delete_start();
+       struct ctsvc_bg_data_s *bg_data = data;
+       ctsvc_server_bg_delete_start(bg_data->zone_name);
 }
 
-#ifdef CTS_MOBILE
 static bool __ctsvc_server_account_delete_cb(const char* event_type, int account_id, void* user_data)
 {
        CTS_FN_CALL;
+       struct ctsvc_bg_data_s *bg_data = user_data;
        CTS_INFO("event_type : %s, account_id : %d", event_type, account_id);
-       if (strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE) == 0)
-               ctsvc_addressbook_delete(account_id);
+
+       if (STRING_EQUAL == strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE)) {
+               ctsvc_server_stop_timeout();
+               ctsvc_addressbook_delete(bg_data->zone_name, account_id);
+       }
+       ctsvc_server_start_timeout();
        return true;
 }
-#endif // CTS_MOBILE
 
-void ctsvc_server_bg_add_cb()
+static void ctsvc_server_bg_data_free(gpointer p)
+{
+       struct ctsvc_bg_data_s *bg_data = p;
+       ctsvc_handle_destroy(bg_data->contact);
+       free(bg_data->zone_name);
+       free(bg_data);
+}
+
+void ctsvc_server_bg_add_cb(const char *zone_name)
 {
        int ret;
-       ret = contacts_db_add_changed_cb(_contacts_address_book._uri, __ctsvc_server_addressbook_deleted_cb, NULL);
-       CTS_DBG("call contacts_db_add_changed_cb (_contacts_address_book)  : return (%d)", ret);
-       ret = contacts_db_add_changed_cb(_contacts_contact._uri, __ctsvc_server_contact_deleted_cb, NULL);
-       CTS_DBG("call contacts_db_add_changed_cb (_contacts_contact): return (%d)", ret);
+       account_subscribe_h account = NULL;
+
+       struct ctsvc_bg_data_s *bg_data = calloc(1, sizeof(struct ctsvc_bg_data_s));
+       if (NULL == bg_data)
+       {
+               CTS_ERR("calloc() Fail");
+               return;
+       }
+       bg_data->zone_name = g_strdup(zone_name);
+
+       if (NULL == ctsvc_bg_data_table)
+               ctsvc_bg_data_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, ctsvc_server_bg_data_free);
+       g_hash_table_replace(ctsvc_bg_data_table, g_strdup(zone_name), bg_data);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       contacts_h contact = NULL;
+       ctsvc_handle_create(&contact);
+       ctsvc_handle_set_zone_name(contact, zone_name);
+       bg_data->contact = contact;
+
+       ret = ctsvc_inotify_subscribe(bg_data->contact, _contacts_address_book._uri, __ctsvc_server_addressbook_deleted_cb, bg_data);
+       CTS_DBG("call ctsvc_inotify_subscribe (_contacts_address_book)  : return (%d)", ret);
+
+       ret = ctsvc_inotify_subscribe(bg_data->contact, _contacts_contact._uri, __ctsvc_server_contact_deleted_cb, bg_data);
+       CTS_DBG("call ctsvc_inotify_subscribe (_contacts_contact): return (%d)", ret);
 
-#ifdef CTS_MOBILE
        ret = account_subscribe_create(&account);
+       bg_data->account = account;
+
        if (ACCOUNT_ERROR_NONE == ret) {
-               ret = account_subscribe_notification(account, __ctsvc_server_account_delete_cb, NULL);
+               ret = account_subscribe_notification(account, __ctsvc_server_account_delete_cb, bg_data);
                if (ACCOUNT_ERROR_NONE != ret) {
                        CTS_ERR("account_subscribe_notification Failed (%d)", ret);
                }
        }
        else
                CTS_ERR("account_subscribe_create Failed (%d)", ret);
-#endif // CTS_MOBILE
+
+       ctsvc_server_zone_join(zone_old);
 }
 
-void ctsvc_server_bg_remove_cb()
+void ctsvc_server_bg_remove_cb(const char *zone_name)
 {
        int ret;
-       ret = contacts_db_remove_changed_cb(_contacts_address_book._uri, __ctsvc_server_addressbook_deleted_cb, NULL);
-       CTS_ERR("call contacts_db_remove_changed_cb (_contacts_address_book): return (%d)", ret);
-       ret = contacts_db_remove_changed_cb(_contacts_contact._uri, __ctsvc_server_contact_deleted_cb, NULL);
-       CTS_ERR("call contacts_db_remove_changed_cb (_contacts_contact) : return (%d)", ret);
-
-#ifdef CTS_MOBILE
-       if (account) {
-               account_unsubscribe_notification(account);              // unsubscirbe & destroy
-               account = NULL;
-       }
-#endif // CTS_MOBILE
+
+       struct ctsvc_bg_data_s *bg_data = NULL;
+       bg_data = g_hash_table_lookup(ctsvc_bg_data_table, zone_name);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = ctsvc_inotify_unsubscribe(bg_data->contact, _contacts_address_book._uri, __ctsvc_server_addressbook_deleted_cb, bg_data);
+       CTS_ERR("call ctsvc_inotify_unsubscribe (_contacts_address_book): return (%d)", ret);
+       ret = ctsvc_inotify_unsubscribe(bg_data->contact, _contacts_contact._uri, __ctsvc_server_contact_deleted_cb, bg_data);
+       CTS_ERR("call ctsvc_inotify_unsubscribe (_contacts_contact) : return (%d)", ret);
+
+       account_unsubscribe_notification(bg_data->account);   /* unsubscirbe & destroy */
+
+       ctsvc_server_zone_join(zone_old);
+
+       g_hash_table_remove(ctsvc_bg_data_table, zone_name);
 }
 
index bbc51ee..233af51 100644 (file)
@@ -1,27 +1,27 @@
-/*\r
- * Contact Service\r
- *\r
- * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- */\r
-\r
-#ifndef __CTSVC_SERVER_BG_H__\r
-#define __CTSVC_SERVER_BG_H__\r
-\r
-void ctsvc_server_bg_delete_start();\r
-void ctsvc_server_bg_add_cb();\r
-void ctsvc_server_bg_remove_cb();\r
-\r
-#endif /* __CTSVC_SERVER_BG_H__ */\r
+/*
+ * Contact Service
+ *
+ * Copyright (c) 2000 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_BG_H__
+#define __CTSVC_SERVER_BG_H__
+
+void ctsvc_server_bg_delete_start(const char *zone_name);\r
+void ctsvc_server_bg_add_cb(const char *zone_name);\r
+void ctsvc_server_bg_remove_cb(const char *zone_name);\r
+
+#endif /* __CTSVC_SERVER_BG_H__ */
index fdef853..569b0ef 100644 (file)
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_ipc_define.h"
+#include "ctsvc_ipc_marshal.h"
 #include "ctsvc_server_change_subject.h"
 
 #define CTSVC_SUBSCRIBE_MAX_LEN        1024
 
+struct ctsvc_changed_info {
+       char *info;
+       unsigned int buf_size;
+};
+
 #ifdef ENABLE_LOG_FEATURE
-static __thread char *__phone_log_chanaged_info = NULL;
-static __thread unsigned int __phone_log_buf_size = 0;
-#endif // ENABLE_LOG_FEATURE
+static __thread GHashTable *ctsvc_phone_log_changed_info_table = NULL;
+#endif /* ENABLE_LOG_FEATURE */
 
-static __thread char *__person_changed_info = NULL;
-static __thread unsigned int __person_buf_size = 0;
+static __thread GHashTable *ctsvc_person_changed_info_table = NULL;
 
-static gboolean __ctsvc_publish_changes_with_data(const char *view_uri, char *data)
+static gboolean __ctsvc_publish_changes_with_data(const char *zone_name, const char *view_uri, GHashTable *changed_info_table)
 {
        pims_ipc_data_h indata = NULL;
-       if( NULL == data )
+       struct ctsvc_changed_info *changed_info = NULL;
+
+       if (NULL == changed_info_table)
+               return true;
+
+       changed_info = g_hash_table_lookup(changed_info_table, zone_name);
+       if (NULL == changed_info || NULL == changed_info->info)
                return true;
 
        indata = pims_ipc_data_create(0);
-       if (!indata) {
-               CTS_ERR("pims_ipc_data_create error\n");
+       if (NULL == indata) {
+               CTS_ERR("pims_ipc_data_create() return NULL");
                return false;
        }
 
-       if (pims_ipc_data_put(indata, data, strlen(data) + 1) != 0) {
-               CTS_ERR("pims_ipc_data_put error\n");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_string(changed_info->info, indata)) {
+               CTS_ERR("ctsvc_ipc_marshal_string() Fail");
                pims_ipc_data_destroy(indata);
                return false;
        }
 
-       if (pims_ipc_svc_publish(CTSVC_IPC_SUBSCRIBE_MODULE, (char*)view_uri, indata) != 0) {
+       if (pims_ipc_svc_publish_for_zone(zone_name, CTSVC_IPC_SUBSCRIBE_MODULE, (char*)view_uri, indata) != 0) {
                CTS_ERR("pims_ipc_svc_publish error (%s)\n", view_uri);
                return false;
        }
@@ -64,108 +74,170 @@ static gboolean __ctsvc_publish_changes_with_data(const char *view_uri, char *da
        return true;
 }
 
-void ctsvc_change_subject_publish_changed_info()
+void ctsvc_change_subject_publish_changed_info(const char *zone_name)
 {
-       __ctsvc_publish_changes_with_data(_contacts_person._uri, __person_changed_info);
+       __ctsvc_publish_changes_with_data(zone_name, _contacts_person._uri, ctsvc_person_changed_info_table);
 #ifdef ENABLE_LOG_FEATURE
-       __ctsvc_publish_changes_with_data(_contacts_phone_log._uri, __phone_log_chanaged_info);
-#endif // ENABLE_LOG_FEATURE
-       ctsvc_change_subject_clear_changed_info();
+       __ctsvc_publish_changes_with_data(zone_name, _contacts_phone_log._uri, ctsvc_phone_log_changed_info_table);
+#endif /* ENABLE_LOG_FEATURE */
+
+       ctsvc_change_subject_clear_changed_info(zone_name);
+}
+
+static void __ctsvc_clear_changed_info(struct ctsvc_changed_info *changed_info)
+{
+       if (NULL == changed_info)
+               return;
+       free(changed_info->info);
+       changed_info->info = NULL;
+       changed_info->buf_size = 0;
 }
 
-void ctsvc_change_subject_clear_changed_info()
+void ctsvc_change_subject_clear_changed_info(const char *zone_name)
 {
+       if (ctsvc_person_changed_info_table) {
+               struct ctsvc_changed_info *person_changed_info = NULL;
+               person_changed_info = g_hash_table_lookup(ctsvc_person_changed_info_table, zone_name);
+               __ctsvc_clear_changed_info(person_changed_info);
+       }
+
 #ifdef ENABLE_LOG_FEATURE
-       free(__phone_log_chanaged_info);
-       __phone_log_chanaged_info = NULL;
-       __phone_log_buf_size = 0;
-#endif // ENABLE_LOG_FEATURE
-
-       free(__person_changed_info);
-       __person_changed_info = NULL;
-       __person_buf_size = 0;
+       if (ctsvc_phone_log_changed_info_table) {
+               struct ctsvc_changed_info *phone_log_changed_info = NULL;
+               phone_log_changed_info = g_hash_table_lookup(ctsvc_phone_log_changed_info_table, zone_name);
+               __ctsvc_clear_changed_info(phone_log_changed_info);
+       }
+#endif /* ENABLE_LOG_FEATURE */
+
+
 }
 
 #ifdef ENABLE_LOG_FEATURE
-void ctsvc_change_subject_add_changed_phone_log_id(contacts_changed_e type, int id)
+void ctsvc_change_subject_add_changed_phone_log_id(const char *zone_name, contacts_changed_e type, int id)
 {
        CTS_FN_CALL;
-       int len = 0;
+       int cur_len = 0;
        int info_len = 0;
-       char changed_info[30] = {0};
+       char info[CTSVC_SUBSCRIBE_MAX_LEN] = {0};
+
+       struct ctsvc_changed_info *changed_info = NULL;
+       if (NULL == ctsvc_phone_log_changed_info_table)
+               ctsvc_phone_log_changed_info_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               changed_info = g_hash_table_lookup(ctsvc_phone_log_changed_info_table, zone_name);
+
+       if (NULL == changed_info) {
+               changed_info = calloc(1, sizeof(struct ctsvc_changed_info));
+               if (NULL == changed_info)
+               {
+                       CTS_ERR("calloc() Fail");
+                       return;
+               }
+               g_hash_table_replace(ctsvc_phone_log_changed_info_table, g_strdup(zone_name), changed_info);
+       }
 
-       if (!__phone_log_chanaged_info) {
-               __phone_log_chanaged_info = (char*)calloc(CTSVC_SUBSCRIBE_MAX_LEN, sizeof(char));
-               __phone_log_buf_size = CTSVC_SUBSCRIBE_MAX_LEN;
-               __phone_log_chanaged_info[0] = '\0';
+       if (NULL == changed_info->info) {
+               changed_info->info = (char*)calloc(CTSVC_SUBSCRIBE_MAX_LEN, sizeof(char));
+               if (NULL == changed_info->info)
+               {
+                       CTS_ERR("calloc() Fail");
+                       return;
+               }
+               changed_info->buf_size = CTSVC_SUBSCRIBE_MAX_LEN;
+               changed_info->info[0] = '\0';
        }
 
-       len = snprintf(changed_info, sizeof(changed_info), "%d:%d,", type, id);
-       info_len = strlen(__phone_log_chanaged_info);
-       CTS_DBG("%s(len : %d), %s (crrent_len : %d), max_len : %d",
-               changed_info, len, __phone_log_chanaged_info, info_len, __phone_log_buf_size);
-       if (info_len + len > __phone_log_buf_size) {
-               __phone_log_chanaged_info = realloc(__phone_log_chanaged_info, __phone_log_buf_size * 2);
-               __phone_log_buf_size *= 2;
+       info_len = snprintf(info, sizeof(info), "%d:%d,", type, id);
+       cur_len = strlen(changed_info->info);
+       CTS_DBG("%s(info_len : %d), %s(crrent_len : %d), max_len : %u",
+               info, info_len, changed_info->info, cur_len, changed_info->buf_size);
+
+       if (changed_info->buf_size <= (cur_len + info_len)) {
+               changed_info->buf_size *= 2;
+               changed_info->info = realloc(changed_info->info, changed_info->buf_size);
        }
-       snprintf(__phone_log_chanaged_info + info_len, __phone_log_buf_size - info_len, "%s", changed_info);
-       CTS_DBG("%s", __phone_log_chanaged_info);
+       snprintf(changed_info->info + cur_len, changed_info->buf_size - cur_len, "%s", info);
+       CTS_DBG("%s", changed_info->info);
 }
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-void ctsvc_change_subject_add_changed_person_id(contacts_changed_e type, int id)
+void ctsvc_change_subject_add_changed_person_id(const char *zone_name, contacts_changed_e type, int id)
 {
        CTS_FN_CALL;
-       int len = 0;
+       int cur_len = 0;
        int info_len = 0;
-       char changed_info[30] = {0};
+       char info[CTSVC_SUBSCRIBE_MAX_LEN] = {0};
+
+       struct ctsvc_changed_info *changed_info = NULL;
+       if (NULL == ctsvc_person_changed_info_table)
+               ctsvc_person_changed_info_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               changed_info = g_hash_table_lookup(ctsvc_person_changed_info_table, zone_name);
+
+       if (NULL == changed_info) {
+               changed_info = calloc(1, sizeof(struct ctsvc_changed_info));
+               if (NULL == changed_info)
+               {
+                       CTS_ERR("calloc() Fail");
+                       return;
+               }
+               g_hash_table_replace(ctsvc_person_changed_info_table, g_strdup(zone_name), changed_info);
+       }
 
-       if (!__person_changed_info) {
-               __person_changed_info = (char*)calloc(CTSVC_SUBSCRIBE_MAX_LEN, sizeof(char));
-               __person_buf_size = CTSVC_SUBSCRIBE_MAX_LEN;
-               __person_changed_info[0] = '\0';
+       if (NULL == changed_info->info) {
+               changed_info->info = (char*)calloc(CTSVC_SUBSCRIBE_MAX_LEN, sizeof(char));
+               if (NULL == changed_info->info)
+               {
+                       CTS_ERR("calloc() Fail");
+                       return;
+               }
+               changed_info->buf_size= CTSVC_SUBSCRIBE_MAX_LEN;
+               changed_info->info[0] = '\0';
        }
 
-       len = snprintf(changed_info, sizeof(changed_info), "%d:%d,", type, id);
-       info_len = strlen(__person_changed_info);
-       if (info_len + len > __person_buf_size) {
-               __person_changed_info = realloc(__person_changed_info, __person_buf_size * 2);
-               __person_buf_size *= 2;
+       info_len = snprintf(info, sizeof(info), "%d:%d,", type, id);
+       cur_len = strlen(changed_info->info);
+       CTS_DBG("%s(info_len : %d), %s(crrent_len : %d), max_len : %u",
+               info, info_len, changed_info->info, cur_len, changed_info->buf_size);
+
+       if (changed_info->buf_size <= (cur_len + info_len)) {
+               changed_info->buf_size *= 2;
+               changed_info->info = realloc(changed_info->info, changed_info->buf_size);
        }
-       snprintf(__person_changed_info + info_len, __person_buf_size - info_len, "%s", changed_info);
+       snprintf(changed_info->info + cur_len, changed_info->buf_size - cur_len, "%s", info);
 }
 
-void ctsvc_change_subject_publish_setting(const char *setting_id, int value)
+void ctsvc_change_subject_publish_setting(const char *zone_name, const char *setting_id, int value)
 {
        pims_ipc_data_h indata = NULL;
        indata = pims_ipc_data_create(0);
-       RETM_IF(NULL == indata, "pims_ipc_data_create error");
+       RETM_IF(NULL == indata, "pims_ipc_data_create() Fail");
 
-       if (pims_ipc_data_put(indata, (void*)&value, sizeof(int)) != 0) {
-               CTS_ERR("pims_ipc_data_put error");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(value, indata)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                pims_ipc_data_destroy(indata);
                return;
        }
 
-       if (pims_ipc_svc_publish(CTSVC_IPC_SUBSCRIBE_MODULE, (char*)setting_id, indata) != 0)
+       if (pims_ipc_svc_publish_for_zone(zone_name, CTSVC_IPC_SUBSCRIBE_MODULE, (char*)setting_id, indata) != 0)
                CTS_ERR("pims_ipc_svc_publish error (%s)", setting_id);
 
        pims_ipc_data_destroy(indata);
 }
 
-void ctsvc_change_subject_publish_status(contacts_db_status_e status)
+void ctsvc_change_subject_publish_status(const char *zone_name, contacts_db_status_e status)
 {
        pims_ipc_data_h indata = NULL;
        indata = pims_ipc_data_create(0);
-       RETM_IF(NULL == indata, "pims_ipc_data_create error");
+       RETM_IF(NULL == indata, "pims_ipc_data_create() Fail");
 
-       if (pims_ipc_data_put(indata, (void*)&status, sizeof(int)) != 0) {
-               CTS_ERR("pims_ipc_data_put error");
+       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(status, indata)) {
+               CTS_ERR("ctsvc_ipc_marshal_int() Fail");
                pims_ipc_data_destroy(indata);
                return;
        }
 
-       if (pims_ipc_svc_publish(CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED, indata) != 0)
+       if (pims_ipc_svc_publish_for_zone(zone_name, CTSVC_IPC_SUBSCRIBE_MODULE, CTSVC_IPC_SERVER_DB_STATUS_CHANGED, indata) != 0)
                CTS_ERR("pims_ipc_svc_publish error(service status)");
 
        pims_ipc_data_destroy(indata);
index d8ce5a4..01afc01 100644 (file)
 #include "contacts_db_status.h"
 #include "contacts_types.h"
 
-// Publish change info using PIMS-IPC PUB/SUB socket
-// It is only available in client-server architecture
+/*
+ * Publish change info using PIMS-IPC PUB/SUB socket
+ * It is only available in client-server architecture
+ */
 
-void ctsvc_change_subject_publish_changed_info();
-void ctsvc_change_subject_clear_changed_info();
+void ctsvc_change_subject_publish_changed_info(const char *zone_name);
+void ctsvc_change_subject_clear_changed_info(const char *zone_name);
 
 #ifdef ENABLE_LOG_FEATURE
-void ctsvc_change_subject_add_changed_phone_log_id(contacts_changed_e type, int id);
-#endif // ENABLE_LOG_FEATURE
-void ctsvc_change_subject_add_changed_person_id(contacts_changed_e type, int id);
+void ctsvc_change_subject_add_changed_phone_log_id(const char *zone_name, contacts_changed_e type, int id);
+#endif /* ENABLE_LOG_FEATURE */
+void ctsvc_change_subject_add_changed_person_id(const char *zone_name, contacts_changed_e type, int id);
 
-void ctsvc_change_subject_publish_setting(const char *setting_id, int value);
-void ctsvc_change_subject_publish_status(contacts_db_status_e status);
+void ctsvc_change_subject_publish_setting(const char *zone_name, const char *setting_id, int value);
+void ctsvc_change_subject_publish_status(const char *zone_name, contacts_db_status_e status);
 
-#endif // __CTSVC_SERVER_CHANGE_SUBJECT_H__
\ No newline at end of file
+#endif /* __CTSVC_SERVER_CHANGE_SUBJECT_H__ */
\ No newline at end of file
similarity index 62%
rename from native/ctsvc_group.c
rename to server/ctsvc_server_group.c
index 360a227..975b7e1 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_plugin_contact_helper.h"
-#include "ctsvc_group.h"
+#include "ctsvc_server_group.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-int ctsvc_group_add_contact_in_transaction(int group_id, int contact_id)
+int ctsvc_group_add_contact_in_transaction(const char *zone_name, int group_id, int contact_id)
 {
        int ret;
        int version;
@@ -42,222 +42,220 @@ int ctsvc_group_add_contact_in_transaction(int group_id, int contact_id)
                        "SELECT COUNT(*) FROM %s WHERE group_id = %d AND contact_id=%d AND deleted = 0",
                        CTS_TABLE_GROUP_RELATIONS, group_id, contact_id);
 
-       ret = ctsvc_query_get_first_int_result(query, &exist);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &exist);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_DBG("ctsvc_query_get_first_int_result fail(%d)");
+               CTS_DBG("ctsvc_query_get_first_int_result Fail(%d)");
                return ret;
        }
-       if (1 == exist) {
+       if (1 == exist) {
                CTS_DBG("group relation already exist (group_id:%d, contac_id:%d)", group_id, contact_id);
                return CONTACTS_ERROR_NONE;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM %s WHERE group_id = %d",
                        CTS_TABLE_GROUPS, group_id);
-       ret = ctsvc_query_get_first_int_result(query, &grp_acc);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &grp_acc);
        RETVM_IF(CONTACTS_ERROR_NO_DATA == ret, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid Parameter: group_id(%d) is Invalid", group_id);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM %s WHERE contact_id = %d AND deleted = 0",
                        CTS_TABLE_CONTACTS, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &contact_acc);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &contact_acc);
        RETVM_IF(CONTACTS_ERROR_NO_DATA == ret, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid Parameter: contact_id(%d) is Invalid", contact_id);
-       RETVM_IF( contact_acc != grp_acc, CONTACTS_ERROR_INVALID_PARAMETER,
+       RETVM_IF(contact_acc != grp_acc, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid Parameter: group_acc(%d) is differ from contact_acc(%d) Invalid", grp_acc, contact_acc);
 
        snprintf(query, sizeof(query), "INSERT OR REPLACE INTO %s VALUES(%d, %d, %d, 0)",
                        CTS_TABLE_GROUP_RELATIONS, group_id, contact_id, version);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
 
-       rel_changed = ctsvc_db_change();
+       rel_changed = ctsvc_db_change(zone_name);
        ctsvc_stmt_finalize(stmt);
 
        if (0 < rel_changed) {
                snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_GROUPS" SET member_changed_ver=%d WHERE group_id=%d",
                                version, group_id);
-               ret = ctsvc_query_exec(query);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_set_group_rel_noti();
+               ret = ctsvc_query_exec(zone_name, query);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_set_group_rel_noti(zone_name);
                return rel_changed;
        }
 
        return ret;
 }
 
-API int contacts_group_add_contact(int group_id, int contact_id)
+int ctsvc_group_add_contact(const char *zone_name, int group_id, int contact_id)
 {
        int ret;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (group)");
-       RETVM_IF( group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: group_id should be greater than 0");
-       RETVM_IF( contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: contact_id should be greater than 0");
+       RETVM_IF(group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: group_id should be greater than 0");
+       RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: contact_id should be greater than 0");
 
        /* BEGIN_TRANSACTION */
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id from "CTSVC_DB_VIEW_CONTACT"  WHERE contact_id = %d", contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to get this group record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        /* DOING JOB */
        do {
-               int changed = ctsvc_group_add_contact_in_transaction(group_id, contact_id);
+               int changed = ctsvc_group_add_contact_in_transaction(zone_name, group_id, contact_id);
                if (changed < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("DB error : ctsvc_group_add_contact_in_transaction() Failed(%d)", changed);
+                       CTS_ERR("DB error : ctsvc_group_add_contact_in_transaction() Fail(%d)", changed);
                        ret = changed;
                        break;
                }
 
-               ret = ctsvc_db_contact_update_changed_time(contact_id);
+               ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
                        ret = CONTACTS_ERROR_DB;
                        break;
                }
-               ctsvc_set_person_noti();
+               ctsvc_set_person_noti(zone_name);
 
-               ret = ctsvc_end_trans(true);
-               if(ret < CONTACTS_ERROR_NONE )
-               {
-                       CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               ret = ctsvc_end_trans(zone_name, true);
+               if (ret < CONTACTS_ERROR_NONE) {
+                       CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                        return ret;
                }
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        /* ROLLBACK TRANSACTION */
-       ctsvc_end_trans(false);
+       ctsvc_end_trans(zone_name, false);
 
        return ret;
 }
 
-int ctsvc_group_remove_contact_in_transaction(int group_id, int contact_id)
+int ctsvc_group_remove_contact_in_transaction(const char *zone_name, int group_id, int contact_id)
 {
        int ret;
        int version;
        cts_stmt stmt = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(query, sizeof(query),
                        "UPDATE %s SET deleted=1, ver = %d WHERE group_id = %d AND contact_id = %d",
                        CTS_TABLE_GROUP_RELATIONS, version, group_id, contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "DB Error: ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "DB Error: ctsvc_stmt_step() Fail(%d)", ret);
 
-       int rel_changed = ctsvc_db_change();
+       int rel_changed = ctsvc_db_change(zone_name);
        ctsvc_stmt_finalize(stmt);
 
        if (0 <= rel_changed) {
                snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_GROUPS" SET member_changed_ver=%d WHERE group_id=%d",
                                version, group_id);
-               ret = ctsvc_query_exec(query);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_set_group_rel_noti();
+               ret = ctsvc_query_exec(zone_name, query);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_set_group_rel_noti(zone_name);
                return rel_changed;
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_group_remove_contact(int group_id, int contact_id)
+int ctsvc_group_remove_contact(const char *zone_name, int group_id, int contact_id)
 {
        int ret;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (group)");
-       RETVM_IF( group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: group_id should be greater than 0");
-       RETVM_IF( contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: contact_id should be greater than 0");
+       RETVM_IF(group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: group_id should be greater than 0");
+       RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid Parameter: contact_id should be greater than 0");
 
        /* BEGIN_TRANSACTION */
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id from "CTSVC_DB_VIEW_CONTACT"  WHERE contact_id = %d", contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to get this group record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        /* DOING JOB */
        do {
-               int changed = ctsvc_group_remove_contact_in_transaction(group_id, contact_id);
+               int changed = ctsvc_group_remove_contact_in_transaction(zone_name, group_id, contact_id);
                if (changed < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("DB error : ctsvc_group_remove_contact_in_transaction() Failed(%d)", changed);
+                       CTS_ERR("DB error : ctsvc_group_remove_contact_in_transaction() Fail(%d)", changed);
                        ret = changed;
                        break;
                }
 
-               ret = ctsvc_db_contact_update_changed_time(contact_id);
+               ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
                        ret = CONTACTS_ERROR_DB;
                        break;
                }
-               ctsvc_set_person_noti();
+               ctsvc_set_person_noti(zone_name);
 
-               ret = ctsvc_end_trans(true);
-               if(ret < CONTACTS_ERROR_NONE )
-               {
-                       CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               ret = ctsvc_end_trans(zone_name, true);
+               if (ret < CONTACTS_ERROR_NONE) {
+                       CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                        return ret;
                }
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        /* ROLLBACK TRANSACTION */
-       ctsvc_end_trans(false);
+       ctsvc_end_trans(zone_name, false);
 
        return ret;
 }
 
 
-API int contacts_group_set_group_order(int group_id, int previous_group_id, int next_group_id)
+int ctsvc_group_set_group_order(const char *zone_name, int group_id, int previous_group_id, int next_group_id)
 {
        int ret;
        double previous_prio = 0.0;
@@ -267,26 +265,26 @@ API int contacts_group_set_group_order(int group_id, int previous_group_id, int
        cts_stmt stmt;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (group)");
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id from "CTS_TABLE_GROUPS"  WHERE group_id = %d", group_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : group_id (%d) is not exist", group_id);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to get this group record : addresbook_id(%d)", addressbook_id);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query), "SELECT group_prio, addressbook_id FROM "CTS_TABLE_GROUPS" WHERE group_id = ?");
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ctsvc_stmt_bind_int(stmt, 1, previous_group_id);
        ret = ctsvc_stmt_step(stmt);
@@ -311,10 +309,10 @@ API int contacts_group_set_group_order(int group_id, int previous_group_id, int
 
        RETVM_IF(0.0 == previous_prio && 0.0 == next_prio, CONTACTS_ERROR_INVALID_PARAMETER,
                        "The indexes for previous and next are invalid.");
-       RETVM_IF(previous_group_id && previous_addressbook_id != addressbook_id , CONTACTS_ERROR_INVALID_PARAMETER,
+       RETVM_IF(previous_group_id && previous_addressbook_id != addressbook_id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "previous group(%d) and group(%d) are not the same addressbook(%d, %d) groups",
                                previous_group_id, group_id, previous_addressbook_id, addressbook_id);
-       RETVM_IF(next_group_id && next_addressbook_id != addressbook_id , CONTACTS_ERROR_INVALID_PARAMETER,
+       RETVM_IF(next_group_id && next_addressbook_id != addressbook_id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "next group(%d) and group(%d) are not the same addressbook(%d, %d) groups",
                                next_group_id, group_id, next_addressbook_id, addressbook_id);
 
@@ -323,26 +321,25 @@ API int contacts_group_set_group_order(int group_id, int previous_group_id, int
        else
                prio = (previous_prio + next_prio) / 2;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "UPDATE %s SET group_prio = %f WHERE group_id = %d",
                        CTS_TABLE_GROUPS, prio, group_id);
 
-       ret = ctsvc_query_exec(query);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+       ret = ctsvc_query_exec(zone_name, query);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_group_noti();
+       ctsvc_set_group_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
similarity index 58%
rename from native/ctsvc_group.h
rename to server/ctsvc_server_group.h
index 9b1bcf1..1bd522f 100644 (file)
  *
  */
 
-#ifndef __CTSVC_GROUP_H__
-#define __CTSVC_GROUP_H__
+#ifndef __CTSVC_SERVER_GROUP_H__
+#define __CTSVC_SERVER_GROUP_H__
+
+int ctsvc_group_add_contact_in_transaction(const char *zone_name, int group_id, int contact_id);
+
+int ctsvc_group_remove_contact_in_transaction(const char *zone_name, int group_id, int contact_id);
+int ctsvc_group_add_contact(const char *zone_name, int group_id, int contact_id);
+int ctsvc_group_remove_contact(const char *zone_name, int group_id, int contact_id);
+int ctsvc_group_set_group_order(const char *zone_name, int group_id, int previous_group_id, int next_group_id);
 
-int ctsvc_group_add_contact_in_transaction(int group_id, int contact_id);
 
-int ctsvc_group_remove_contact_in_transaction(int group_id, int contact_id);
 /*
 int ctsvc_group_add_contacts_in_person(int group_id, int person_id);
 int ctsvc_group_remove_contacts_in_person(int group_id, int person_id);
 */
 
-#endif // __CTSVC_GROUP_H__
+#endif /* __CTSVC_SERVER_GROUP_H__ */
\ No newline at end of file
similarity index 65%
rename from native/ctsvc_person.c
rename to server/ctsvc_server_person.c
index 76b1ac9..29d9db3 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_plugin_person_helper.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_access_control.h"
 
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
 
 #ifdef _CONTACTS_IPC_SERVER
 #include "ctsvc_server_change_subject.h"
@@ -42,7 +42,7 @@ enum {
        CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE,
 };
 
-static inline int __ctsvc_get_person_default_number_value(int id, contacts_record_h *record)
+static inline int __ctsvc_get_person_default_number_value(const char *zone_name, int id, contacts_record_h *record)
 {
        int ret;
        cts_stmt stmt;
@@ -56,8 +56,8 @@ static inline int __ctsvc_get_person_default_number_value(int id, contacts_recor
                                "WHERE contacts.person_id = %d",
                                CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CTSVC_DATA_NUMBER, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
@@ -92,7 +92,7 @@ static inline int __ctsvc_get_person_default_number_value(int id, contacts_recor
        return ret;
 }
 
-static inline int __ctsvc_get_person_default_email_value(int id, contacts_record_h *record)
+static inline int __ctsvc_get_person_default_email_value(const char *zone_name, int id, contacts_record_h *record)
 {
        int ret;
        cts_stmt stmt;
@@ -106,8 +106,8 @@ static inline int __ctsvc_get_person_default_email_value(int id, contacts_record
                                        "WHERE contacts.person_id = %d",
                                        CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CTSVC_DATA_EMAIL, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
@@ -140,7 +140,7 @@ static inline int __ctsvc_get_person_default_email_value(int id, contacts_record
        return ret;
 }
 
-static inline int __ctsvc_get_person_default_image_value(int id, contacts_record_h *record)
+static inline int __ctsvc_get_person_default_image_value(const char *zone_name, int id, contacts_record_h *record)
 {
        int ret;
        cts_stmt stmt;
@@ -155,8 +155,8 @@ static inline int __ctsvc_get_person_default_image_value(int id, contacts_record
                                "WHERE contacts.person_id = %d",
                                        CTSVC_DATA_IMAGE, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
@@ -189,26 +189,25 @@ static inline int __ctsvc_get_person_default_image_value(int id, contacts_record
        return ret;
 }
 
-static int __ctsvc_get_person_value(int op_code,
+static int __ctsvc_get_person_value(const char *zone_name, int op_code,
                int person_id, contacts_record_h *record)
 {
        int ret;
 
        RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       switch (op_code)
-       {
+       switch (op_code) {
        case CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE:
-               ret = __ctsvc_get_person_default_number_value(person_id, record);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_number_value() Failed(%d)", ret);
+               ret = __ctsvc_get_person_default_number_value(zone_name, person_id, record);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_number_value() Fail(%d)", ret);
                break;
        case CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE:
-               ret = __ctsvc_get_person_default_email_value(person_id, record);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_email_value() Failed(%d)", ret);
+               ret = __ctsvc_get_person_default_email_value(zone_name, person_id, record);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_email_value() Fail(%d)", ret);
                break;
        case CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE:
-               ret = __ctsvc_get_person_default_image_value(person_id, record);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_image_value() Failed(%d)", ret);
+               ret = __ctsvc_get_person_default_image_value(zone_name, person_id, record);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "__ctsvc_get_person_default_image_value() Fail(%d)", ret);
                break;
        default:
                CTS_ERR("Invalid parameter : The op_code(%d) is not supported", op_code);
@@ -221,7 +220,7 @@ static int __ctsvc_get_person_value(int op_code,
        return ret;
 }
 
-static inline int __ctsvc_put_person_default_name(int person_id, int contact_id)
+static inline int __ctsvc_put_person_default_name(const char *zone_name, int person_id, int contact_id)
 {
        int ret;
        int id;
@@ -231,29 +230,26 @@ static inline int __ctsvc_put_person_default_name(int person_id, int contact_id)
                        "SELECT person_id FROM %s WHERE contact_id=%d AND deleted = 0",
                                        CTS_TABLE_CONTACTS, contact_id);
 
-       ret = ctsvc_query_get_first_int_result(query, &id);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_get_first_int_result() Fail(%d)", ret);
 
        if (id == person_id) {
-               ret = ctsvc_begin_trans();
-               RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               ret = ctsvc_begin_trans(zone_name);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                snprintf(query, sizeof(query),
                                                "UPDATE %s SET name_contact_id=%d WHERE person_id=%d",
                                                CTS_TABLE_PERSONS, contact_id, person_id);
 
-               ret = ctsvc_query_exec(query);
-               if( CONTACTS_ERROR_NONE != ret )
-               {
-                       CTS_ERR( "ctsvc_query_exec() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
-               else
-               {
-                       ret = ctsvc_end_trans(true);
-                       if (ret < CONTACTS_ERROR_NONE)
-                       {
-                               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               else {
+                       ret = ctsvc_end_trans(zone_name, true);
+                       if (ret < CONTACTS_ERROR_NONE) {
+                               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                                return ret;
                        }
                        else
@@ -268,7 +264,7 @@ static inline int __ctsvc_put_person_default_name(int person_id, int contact_id)
        return ret;
 }
 
-static inline int __ctsvc_put_person_default_image(int person_id, int id)
+static inline int __ctsvc_put_person_default_image(const char *zone_name, int person_id, int id)
 {
        int ret;
        int is_default;
@@ -277,8 +273,8 @@ static inline int __ctsvc_put_person_default_image(int person_id, int id)
        char *image_path;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT D.is_default, D.contact_id, D.data3 "
@@ -286,17 +282,17 @@ static inline int __ctsvc_put_person_default_image(int person_id, int id)
                                "ON D.contact_id = C.contact_id AND C.deleted = 0 "
                                "WHERE D.datatype=%d AND D.is_my_profile = 0 AND C.person_id=%d AND D.id=%d",
                                CTSVC_DATA_IMAGE, person_id, id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -305,98 +301,98 @@ static inline int __ctsvc_put_person_default_image(int person_id, int id)
        image_path = SAFE_STRDUP(ctsvc_stmt_get_text(stmt, 2));
        ctsvc_stmt_finalize(stmt);
 
-       // unset is_primary_default of all data of the person
+       /* unset is_primary_default of all data of the person */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default=0 WHERE datatype=%d AND is_my_profile = 0 "
                                "AND contact_id IN (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
                                                                                "WHERE person_id=%d AND deleted = 0) ",
                                CTSVC_DATA_IMAGE, person_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // unset is_default of all data of person if the data is not default
-       if (!is_default) {
+       /* unset is_default of all data of person if the data is not default */
+       if (false == is_default) {
                snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_DATA" SET is_default=0 WHERE datatype=%d  AND is_my_profile = 0 "
                                        "AND contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id=%d) ",
                                        CTSVC_DATA_IMAGE, id);
 
-               ret = ctsvc_query_exec(query);
-               if(CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
                        free(image_path);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
        }
 
-       // set is_default, is _primary_default
+       /* set is_default, is _primary_default */
        snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_DATA" SET is_primary_default=1, is_default=1 WHERE id=%d ", id);
-       ret = ctsvc_query_exec(query);
-       if( CONTACTS_ERROR_NONE != ret ) {
-               CTS_ERR( "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // update person's image_thumbnail_path
+       /* update person's image_thumbnail_path */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id=%d ", person_id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       if( NULL == stmt ) {
-               CTS_ERR( "ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       if (NULL == stmt) {
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ctsvc_stmt_bind_text(stmt, 1, image_path);
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       // update contact's image_thumbnail_path
+       /* update contact's image_thumbnail_path */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_CONTACTS" SET image_thumbnail_path=? WHERE contact_id=%d ", contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       if( NULL == stmt ) {
-               CTS_ERR( "ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       if (NULL == stmt) {
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ctsvc_stmt_bind_text(stmt, 1, image_path);
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                free(image_path);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
        free(image_path);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        return ret;
 }
 
-static inline int __ctsvc_put_person_default_data(int person_id, int id, int datatype)
+static inline int __ctsvc_put_person_default_data(const char *zone_name, int person_id, int id, int datatype)
 {
        int ret;
        int is_default = 0;
@@ -412,8 +408,8 @@ static inline int __ctsvc_put_person_default_data(int person_id, int id, int dat
                                "WHERE D.datatype=%d AND C.person_id=%d AND D.id=%d",
                                CTS_TABLE_DATA, CTS_TABLE_CONTACTS, datatype, person_id, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
@@ -427,46 +423,46 @@ static inline int __ctsvc_put_person_default_data(int person_id, int id, int dat
 
        ctsvc_stmt_finalize(stmt);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       // unset is_primary_default of all data of the person
+       /* unset is_primary_default of all data of the person */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default=0 WHERE datatype=%d AND is_my_profile = 0 "
                                "AND contact_id IN (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
                                                                                "WHERE person_id=%d AND deleted = 0) ",
                                datatype, person_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // unset is_default of all data of person if the data is not default
-       if (!is_default) {
+       /* unset is_default of all data of person if the data is not default */
+       if (false == is_default) {
                snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_DATA" SET is_default=0 WHERE datatype=%d AND is_my_profile = 0 "
                                        "AND contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id=%d) ",
                                        datatype, id);
 
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
        }
 
-       // set is_default, is _primary_default
+       /* set is_default, is _primary_default */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default=1, is_default=1 WHERE id=%d ", id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR( "ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -476,14 +472,14 @@ static inline int __ctsvc_put_person_default_data(int person_id, int id, int dat
                source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL;
 
        if (CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID != source_type)
-               ctsvc_contact_update_display_name(contact_id, source_type);
+               ctsvc_contact_update_display_name(zone_name, contact_id, source_type);
 
        snprintf(query, sizeof(query),
                        "SELECT name_contact_id FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", person_id);
-       ret = ctsvc_query_get_first_int_result(query, &name_contact_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &name_contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR( "ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -491,10 +487,10 @@ static inline int __ctsvc_put_person_default_data(int person_id, int id, int dat
                int org_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID;
                snprintf(query, sizeof(query),
                        "SELECT display_name_source FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d", name_contact_id);
-               ret = ctsvc_query_get_first_int_result(query, &org_source_type);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &org_source_type);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR( "ctsvc_query_get_first_int_result() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
@@ -502,19 +498,18 @@ static inline int __ctsvc_put_person_default_data(int person_id, int id, int dat
                        snprintf(query, sizeof(query),
                                                "UPDATE %s SET name_contact_id=%d WHERE person_id=%d",
                                                CTS_TABLE_PERSONS, contact_id, person_id);
-                       ret = ctsvc_query_exec(query);
+                       ret = ctsvc_query_exec(zone_name, query);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR( "ctsvc_query_exec() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
+                               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                               ctsvc_end_trans(zone_name, false);
                                return ret;
                        }
                }
        }
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
@@ -526,20 +521,25 @@ void ctsvc_db_person_delete_callback(sqlite3_context * context,
 {
 #ifdef _CONTACTS_IPC_SERVER
        int person_id;
+       char *zone_name = NULL;
 
        if (argc < 1) {
                sqlite3_result_null(context);
                return;
        }
 
+       zone_name = sqlite3_user_data(context);
+
        person_id = sqlite3_value_int(argv[0]);
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_DELETED, person_id);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_DELETED, person_id);
 
 #ifdef ENABLE_LOG_FEATURE
-       // update phonelog
-       // CASE : do not know the proper new person_id
-       ctsvc_db_phone_log_update_person_id(NULL, person_id, -1, false);
-#endif // ENABLE_LOG_FEATURE
+       /*
+        * update phonelog
+        * CASE : do not know the proper new person_id
+        */
+       ctsvc_db_phone_log_update_person_id(zone_name, NULL, person_id, -1, false);
+#endif /* ENABLE_LOG_FEATURE */
        sqlite3_result_null(context);
        return;
 #endif
@@ -559,7 +559,7 @@ inline static const char* __ctsvc_get_image_filename(const char* src)
        return src+pos;
 }
 
-int ctsvc_person_aggregate(int person_id)
+int ctsvc_person_aggregate(const char *zone_name, int person_id)
 {
        int ret, len = 0;
        int version;
@@ -581,9 +581,12 @@ int ctsvc_person_aggregate(int person_id)
        ctsvc_person_s *person;
        bool person_is_favorite = false;
 
-       // person aggregation : person link/unlink, contact insert (auto link), contact delete, garbage collection (addressbook delete)
-       // It should be get all contacts of person regardless of permission
-       // Get person info directly instead of contacts_db_get_record( _contacts_person._uri, person_id, (contacts_record_h*)&person);
+       /*
+        * person aggregation : person link/unlink, contact insert (auto link),
+        *  contact delete, garbage collection (addressbook delete)
+        * It should be get all contacts of person regardless of permission
+        * Get person info directly instead of contacts_db_get_record(_contacts_person._uri, person_id, (contacts_record_h*)&person);
+        */
        snprintf(query, sizeof(query),
                        "SELECT person_id, "
                                        "name_contact_id, "
@@ -593,8 +596,8 @@ int ctsvc_person_aggregate(int person_id)
                                        "message_alert "
                                "FROM "CTS_TABLE_PERSONS" "
                                "WHERE persons.person_id = %d", person_id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (1 != ctsvc_stmt_step(stmt)) {
           CTS_ERR("ctsvc_stmt_step() Failed\n");
@@ -617,7 +620,7 @@ int ctsvc_person_aggregate(int person_id)
        person->message_alert = SAFE_STRDUP(temp);
        ctsvc_stmt_finalize(stmt);
 
-       // check image_thumbnail_path
+       /* check image_thumbnail_path */
        if (person->image_thumbnail_path) {
                temp = __ctsvc_get_image_filename(person->image_thumbnail_path);
                snprintf(query, sizeof(query),
@@ -625,8 +628,8 @@ int ctsvc_person_aggregate(int person_id)
                                "WHERE C.person_id=%d AND C.contact_id=D.contact_id AND C.deleted = 0 "
                                        "AND D.datatype=%d AND D.is_primary_default = 1 AND D.data3='%s'",
                                person->person_id, CTSVC_DATA_IMAGE, temp);
-               ret = ctsvc_query_get_first_int_result(query, &id);
-               if(ret == CONTACTS_ERROR_NONE) {
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+               if (ret == CONTACTS_ERROR_NONE) {
                        image_thumbnail_path = SAFE_STRDUP(temp);
                }
        }
@@ -634,14 +637,14 @@ int ctsvc_person_aggregate(int person_id)
                image_thumbnail_path = NULL;
        }
 
-       // check name_contact_id
+       /* check name_contact_id */
        snprintf(query, sizeof(query),
                        "SELECT contact_id FROM %s "
                        "WHERE person_id=%d AND contact_id=%d AND deleted = 0",
                        CTS_TABLE_CONTACTS, person->person_id, person->name_contact_id);
 
-       ret = ctsvc_query_get_first_int_result(query, &id);
-       if(ret == CONTACTS_ERROR_NONE) {
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+       if (ret == CONTACTS_ERROR_NONE) {
                name_contact_id = person->name_contact_id;
                person_name_contact_id = person->name_contact_id;
        }
@@ -650,16 +653,16 @@ int ctsvc_person_aggregate(int person_id)
                person_name_contact_id = 0;
        }
 
-       // get status of person
+       /* get status of person */
        snprintf(query, sizeof(query),
                "SELECT a.status FROM %s c, %s a "
                "ON c.contact_id = a.contact_id AND c.deleted = 0 "
                "WHERE c.person_id=%d "
                "ORDER BY timestamp DESC LIMIT 1",
                CTS_TABLE_CONTACTS, CTS_TABLE_ACTIVITIES, person->person_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                free(image_thumbnail_path);
                contacts_record_destroy((contacts_record_h)person, true);
                return ret;
@@ -671,15 +674,15 @@ int ctsvc_person_aggregate(int person_id)
        }
        ctsvc_stmt_finalize(stmt);
 
-       // check ringtone_path
+       /* check ringtone_path */
        if (person->ringtone_path) {
                snprintf(query, sizeof(query),
                        "SELECT C.contact_id FROM "CTS_TABLE_CONTACTS" C "
                                "WHERE C.person_id=%d AND C.deleted = 0 "
                                        "AND C.ringtone_path = '%s'",
                                person->person_id, person->ringtone_path);
-               ret = ctsvc_query_get_first_int_result(query, &id);
-               if(ret == CONTACTS_ERROR_NONE) {
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+               if (ret == CONTACTS_ERROR_NONE) {
                        ringtone_path = SAFE_STRDUP(person->ringtone_path);
                }
        }
@@ -687,15 +690,15 @@ int ctsvc_person_aggregate(int person_id)
                ringtone_path = NULL;
        }
 
-       // check vibration
+       /* check vibration */
        if (person->vibration) {
                snprintf(query, sizeof(query),
                        "SELECT C.contact_idFROM "CTS_TABLE_CONTACTS" C "
                                "WHERE C.person_id=%d AND C.deleted = 0 "
                                        "AND C.vibration = '%s'",
                                person->person_id, person->vibration);
-               ret = ctsvc_query_get_first_int_result(query, &id);
-               if(ret == CONTACTS_ERROR_NONE) {
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+               if (ret == CONTACTS_ERROR_NONE) {
                        vibration = SAFE_STRDUP(person->vibration);
                }
        }
@@ -703,15 +706,15 @@ int ctsvc_person_aggregate(int person_id)
                vibration = NULL;
        }
 
-       // check vibration
+       /* check vibration */
        if (person->message_alert) {
                snprintf(query, sizeof(query),
                        "SELECT C.contact_id FROM "CTS_TABLE_CONTACTS" C "
                                "WHERE C.person_id=%d AND C.deleted = 0 "
                                        "AND C.message_alert = '%s'",
                                person->person_id, person->message_alert);
-               ret = ctsvc_query_get_first_int_result(query, &id);
-               if(ret == CONTACTS_ERROR_NONE) {
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
+               if (ret == CONTACTS_ERROR_NONE) {
                        message_alert = SAFE_STRDUP(person->message_alert);
                }
        }
@@ -727,9 +730,9 @@ int ctsvc_person_aggregate(int person_id)
                        "WHERE person_id = %d AND contacts.deleted = 0 "
                        "ORDER BY contact_id",
                        CTS_TABLE_CONTACTS, person_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                free(image_thumbnail_path);
                free(ringtone_path);
                free(vibration);
@@ -770,7 +773,7 @@ int ctsvc_person_aggregate(int person_id)
 
                link_count++;
 
-               if (contact_display_name_source_type > display_name_source_type) {
+               if (display_name_source_type < contact_display_name_source_type) {
                        display_name_source_type = contact_display_name_source_type;
                        name_contact_id = contact_id;
                }
@@ -789,27 +792,27 @@ int ctsvc_person_aggregate(int person_id)
                        addressbook_ids = realloc(addressbook_ids, addressbooks_len);
                }
 
-               len += snprintf(addressbook_ids + len, addressbooks_len -len, "%d%s", addressbook_id, ADDRESSBOOK_ID_DELIM );
+               len += snprintf(addressbook_ids + len, addressbooks_len -len, "%d%s", addressbook_id, ADDRESSBOOK_ID_DELIM);
 
-               if (!image_thumbnail_path && contact_image_thumbnail_path && *contact_image_thumbnail_path) {
+               if (NULL == image_thumbnail_path && contact_image_thumbnail_path && *contact_image_thumbnail_path) {
                        temp = __ctsvc_get_image_filename(contact_image_thumbnail_path);
                        image_thumbnail_path = SAFE_STRDUP(temp);
-                       // update data table : is_primary_default
+                       /* update data table : is_primary_default */
                }
                free(contact_image_thumbnail_path);
 
                temp_str = contact_ringtone_path;
-               if (!ringtone_path && temp_str && strlen(temp_str))
+               if (NULL == ringtone_path && temp_str && strlen(temp_str))
                        ringtone_path = SAFE_STRDUP(temp_str);
                free(contact_ringtone_path);
 
                temp_str = contact_vibration;
-               if (!vibration && temp_str && strlen(temp_str))
+               if (NULL == vibration && temp_str && strlen(temp_str))
                        vibration = SAFE_STRDUP(temp_str);
                free(contact_vibration);
 
                temp_str = contact_message_alert;
-               if (!message_alert && temp_str && strlen(temp_str))
+               if (NULL == message_alert && temp_str && strlen(temp_str))
                        message_alert = SAFE_STRDUP(temp_str);
                free(contact_message_alert);
 
@@ -817,7 +820,7 @@ int ctsvc_person_aggregate(int person_id)
                        person_is_favorite = true;
        }
        ctsvc_stmt_finalize(stmt);
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
 
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_PERSONS" SET dirty=0, name_contact_id = %d, changed_ver = %d, "
@@ -830,9 +833,9 @@ int ctsvc_person_aggregate(int person_id)
                        name_contact_id, version, person_id,
                        person_id, link_count, person_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                free(addressbook_ids);
                free(image_thumbnail_path);
                free(ringtone_path);
@@ -857,7 +860,7 @@ int ctsvc_person_aggregate(int person_id)
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                free(addressbook_ids);
                free(image_thumbnail_path);
@@ -877,33 +880,33 @@ int ctsvc_person_aggregate(int person_id)
        free(message_alert);
        free(status);
 
-       if (!person_is_favorite) {
+       if (false == person_is_favorite) {
                snprintf(query, sizeof(query),
                                "DELETE FROM "CTS_TABLE_FAVORITES" WHERE person_id = %d", person_id);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 #ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_UPDATED, person_id);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_UPDATED, person_id);
 #endif
 
        return CONTACTS_ERROR_NONE;
 }
 
-static bool __ctsvc_get_person_favorite_info(int person_id, double *priority)
+static bool __ctsvc_get_person_favorite_info(const char *zone_name, int person_id, double *priority)
 {
        int ret;
        cts_stmt stmt;
        char query[CTS_SQL_MIN_LEN] = {0};
        snprintf(query, sizeof(query),
                        "SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id = %d", person_id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 == ret) {
@@ -915,7 +918,7 @@ static bool __ctsvc_get_person_favorite_info(int person_id, double *priority)
        return false;
 }
 
-API int contacts_person_link_person(int base_person_id, int person_id)
+int ctsvc_person_link_person(const char *zone_name, int base_person_id, int person_id)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -927,17 +930,17 @@ API int contacts_person_link_person(int base_person_id, int person_id)
        bool is_favorite = false;
        double favorite_prio = 0.0;
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (person)");
        RETVM_IF(base_person_id == person_id, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : base_person_id(%d), person_id(%d)", base_person_id, person_id);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, base_person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
-               ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, person_id, &record);
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, base_person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, person_id, &record);
                if (CONTACTS_ERROR_NONE == ret) {
                        contacts_record_get_int(record, CTSVC_PROPERTY_NUMBER_ID, &default_number_id);
                        contacts_record_destroy(record, true);
@@ -948,10 +951,10 @@ API int contacts_person_link_person(int base_person_id, int person_id)
                contacts_record_destroy(record, true);
        }
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, base_person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
-               ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, person_id, &record);
-               if (CONTACTS_ERROR_NONE == ret ) {
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, base_person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, person_id, &record);
+               if (CONTACTS_ERROR_NONE == ret) {
                        contacts_record_get_int(record, CTSVC_PROPERTY_EMAIL_ID, &default_email_id);
                        contacts_record_destroy(record, true);
                }
@@ -961,10 +964,10 @@ API int contacts_person_link_person(int base_person_id, int person_id)
                contacts_record_destroy(record, true);
        }
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, base_person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
-               ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, person_id, &record);
-               if (CONTACTS_ERROR_NONE == ret ) {
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, base_person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, person_id, &record);
+               if (CONTACTS_ERROR_NONE == ret) {
                        contacts_record_get_int(record, CTSVC_PROPERTY_IMAGE_ID, &default_image_id);
                        contacts_record_destroy(record, true);
                }
@@ -974,91 +977,94 @@ API int contacts_person_link_person(int base_person_id, int person_id)
                contacts_record_destroy(record, true);
        }
 
-       base_is_favorite = __ctsvc_get_person_favorite_info(base_person_id, &favorite_prio);
-       if (!base_is_favorite)
-               is_favorite = __ctsvc_get_person_favorite_info(person_id, &favorite_prio);
+       base_is_favorite = __ctsvc_get_person_favorite_info(zone_name, base_person_id, &favorite_prio);
+       if (false == base_is_favorite)
+               is_favorite = __ctsvc_get_person_favorite_info(zone_name, person_id, &favorite_prio);
 
        snprintf(query, sizeof(query),
                        "UPDATE %s SET person_id = %d WHERE person_id = %d AND deleted = 0",
                        CTS_TABLE_CONTACTS, base_person_id, person_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_person_aggregate(base_person_id);
+       ctsvc_person_aggregate(zone_name, base_person_id);
 
        if (default_number_id)
-               __ctsvc_put_person_default_data(base_person_id, default_number_id, CTSVC_DATA_NUMBER);
+               __ctsvc_put_person_default_data(zone_name, base_person_id, default_number_id, CTSVC_DATA_NUMBER);
 
        if (default_email_id)
-               __ctsvc_put_person_default_data(base_person_id, default_email_id, CTSVC_DATA_EMAIL);
+               __ctsvc_put_person_default_data(zone_name, base_person_id, default_email_id, CTSVC_DATA_EMAIL);
 
        if (default_image_id)
-               __ctsvc_put_person_default_image(base_person_id, default_image_id);
+               __ctsvc_put_person_default_image(zone_name, base_person_id, default_image_id);
 
 #ifdef ENABLE_LOG_FEATURE
-       // update phonelog
-       // Updating phonelog person_id before deleting person
-       // Because, when deleting, ctsvc_db_person_delete_callback will be called
-       // the logic takes more time to find proper person_id (base_person_id)
-       ctsvc_db_phone_log_update_person_id(NULL, person_id, base_person_id, true);
-#endif // ENABLE_LOG_FEATURE
+       /*
+        * update phonelog
+        * Updating phonelog person_id before deleting person
+        * Because, when deleting, ctsvc_db_person_delete_callback will be called
+        * the logic takes more time to find proper person_id (base_person_id)
+        */
+       ctsvc_db_phone_log_update_person_id(zone_name, NULL, person_id, base_person_id, true);
+#endif /* ENABLE_LOG_FEATURE */
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE person_id = %d",
                        CTS_TABLE_PERSONS, person_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-//#ifdef _CONTACTS_IPC_SERVER
-//     It will be added in ctsvc_db_person_delete_callback
-//     ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_DELETED, person_id);
-//#endif
+/*
+ *#ifdef _CONTACTS_IPC_SERVER
+ *  It will be added in ctsvc_db_person_delete_callback
+ *  ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_DELETED, person_id);
+ *#endif
+ */
 
        if (is_favorite) {
                snprintf(query, sizeof(query),
                                "INSERT INTO "CTS_TABLE_FAVORITES" values(%d, %f)", base_person_id, favorite_prio);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
        }
 
-       ctsvc_set_person_noti();
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ctsvc_set_person_noti(zone_name);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_update_primary_default_data(int person_id)
+static int __ctsvc_update_primary_default_data(const char *zone_name, int person_id)
 {
        int ret;
        contacts_record_h record = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
        cts_stmt stmt;
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_NUMBER_VALUE, person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
                snprintf(query, sizeof(query),
                                "SELECT contact_id "
                                "FROM %s "
                                "WHERE person_id = %d AND deleted = 0 "
                                "ORDER BY contact_id",
                                CTS_TABLE_CONTACTS, person_id);
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                while (1 == ctsvc_stmt_step(stmt)) {
                        int contact_id = ctsvc_stmt_get_int(stmt, 0);
@@ -1069,16 +1075,16 @@ static int __ctsvc_update_primary_default_data(int person_id)
                                        "WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
                                        CTS_TABLE_DATA, contact_id, CTSVC_DATA_NUMBER);
 
-                       ret = ctsvc_query_prepare(query, &stmt_number);
+                       ret = ctsvc_query_prepare(zone_name, query, &stmt_number);
                        if (NULL == stmt_number) {
-                               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
 
-                       if( 1 == ctsvc_stmt_step(stmt_number) ) {
+                       if (1 == ctsvc_stmt_step(stmt_number)) {
                                int default_number_id = ctsvc_stmt_get_int(stmt_number, 0);
-                               __ctsvc_put_person_default_data(person_id, default_number_id, CTSVC_DATA_NUMBER);
+                               __ctsvc_put_person_default_data(zone_name, person_id, default_number_id, CTSVC_DATA_NUMBER);
                                ctsvc_stmt_finalize(stmt_number);
                                break;
                        }
@@ -1090,16 +1096,16 @@ static int __ctsvc_update_primary_default_data(int person_id)
                contacts_record_destroy(record, true);
        }
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_EMAIL_VALUE, person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
                snprintf(query, sizeof(query),
                                "SELECT contact_id "
                                "FROM %s "
                                "WHERE person_id = %d AND deleted = 0 "
                                "ORDER BY contact_id",
                                CTS_TABLE_CONTACTS, person_id);
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                while (1 == ctsvc_stmt_step(stmt)) {
                        int contact_id = ctsvc_stmt_get_int(stmt, 0);
@@ -1110,16 +1116,16 @@ static int __ctsvc_update_primary_default_data(int person_id)
                                        "WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
                                        CTS_TABLE_DATA, contact_id, CTSVC_DATA_EMAIL);
 
-                       ret = ctsvc_query_prepare(query, &stmt_email);
+                       ret = ctsvc_query_prepare(zone_name, query, &stmt_email);
                        if (NULL == stmt_email) {
-                               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
 
-                       if( 1 == ctsvc_stmt_step(stmt_email))   {
+                       if (1 == ctsvc_stmt_step(stmt_email)) {
                                int default_email_id = ctsvc_stmt_get_int(stmt_email, 0);
-                               __ctsvc_put_person_default_data(person_id, default_email_id, CTSVC_DATA_EMAIL);
+                               __ctsvc_put_person_default_data(zone_name, person_id, default_email_id, CTSVC_DATA_EMAIL);
                                ctsvc_stmt_finalize(stmt_email);
                                break;
                        }
@@ -1131,18 +1137,18 @@ static int __ctsvc_update_primary_default_data(int person_id)
                contacts_record_destroy(record, true);
        }
 
-       ret = __ctsvc_get_person_value(CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, person_id, &record);
-       if (CONTACTS_ERROR_NONE != ret ) {
+       ret = __ctsvc_get_person_value(zone_name, CTSVC_GET_PERSON_DEFAULT_IMAGE_VALUE, person_id, &record);
+       if (CONTACTS_ERROR_NONE != ret) {
                snprintf(query, sizeof(query),
                                "SELECT contact_id "
                                "FROM %s "
                                "WHERE person_id = %d AND deleted = 0 "
                                "ORDER BY contact_id",
                                CTS_TABLE_CONTACTS, person_id);
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
-               while ( 1 == ctsvc_stmt_step(stmt)) {
+               while (1 == ctsvc_stmt_step(stmt)) {
                        int contact_id = ctsvc_stmt_get_int(stmt, 0);
                        cts_stmt stmt_image;
 
@@ -1151,16 +1157,16 @@ static int __ctsvc_update_primary_default_data(int person_id)
                                        "WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
                                        CTS_TABLE_DATA, contact_id, CTSVC_DATA_IMAGE);
 
-                       ret = ctsvc_query_prepare(query, &stmt_image);
+                       ret = ctsvc_query_prepare(zone_name, query, &stmt_image);
                        if (NULL == stmt_image) {
-                               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
 
-                       if( 1 == ctsvc_stmt_step(stmt_image))   {
+                       if (1 == ctsvc_stmt_step(stmt_image)) {
                                int default_image_id = ctsvc_stmt_get_int(stmt_image, 0);
-                               __ctsvc_put_person_default_image(person_id, default_image_id);
+                               __ctsvc_put_person_default_image(zone_name, person_id, default_image_id);
                                ctsvc_stmt_finalize(stmt_image);
                                break;
                        }
@@ -1175,7 +1181,7 @@ static int __ctsvc_update_primary_default_data(int person_id)
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_person_unlink_contact(int person_id, int contact_id, int* out_person_id )
+int ctsvc_person_unlink_contact(const char *zone_name, int person_id, int contact_id, int* out_person_id)
 {
        int ret;
        int id;
@@ -1185,79 +1191,79 @@ API int contacts_person_unlink_contact(int person_id, int contact_id, int* out_p
        bool is_favorite = false;
        double priority = 0.0;
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (person)");
-       RETVM_IF(person_id <= 0 || contact_id <= 0 , CONTACTS_ERROR_INVALID_PARAMETER,
+       RETVM_IF(person_id <= 0 || contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : person_id(%d), person_id(%d)", person_id, person_id);
 
        if (out_person_id)
                *out_person_id = 0;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT link_count FROM "CTS_TABLE_PERSONS" WHERE person_id=%d", person_id);
-       ret = ctsvc_query_get_first_int_result(query, &link_count);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &link_count);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (link_count == 1) {
                CTS_ERR("This person(%d) has one contact(%d)", person_id, contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       ret = ctsvc_db_contact_get(contact_id, (contacts_record_h*)&record);
+       ret = ctsvc_db_contact_get(zone_name, contact_id, (contacts_record_h*)&record);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_db_contact_get() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_db_contact_get() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // create new person
-       id = ctsvc_db_insert_person(record);
-       if (CONTACTS_ERROR_NONE > id) {
-               CTS_ERR("ctsvc_db_insert_person() Failed(%d)", id);
-               ctsvc_end_trans(false);
+       /* create new person */
+       id = ctsvc_db_insert_person(zone_name, record);
+       if (id < CONTACTS_ERROR_NONE) {
+               CTS_ERR("ctsvc_db_insert_person() Fail(%d)", id);
+               ctsvc_end_trans(zone_name, false);
                contacts_record_destroy(record, true);
                return id;
        }
 
-       // insert statistic info for new person
+       /* insert statistic info for new person */
        snprintf(query, sizeof(query),
                        "INSERT INTO %s (person_id, usage_type, times_used) "
                        "SELECT %d, usage_type, times_used FROM %s WHERE person_id = %d",
-                       CTS_TABLE_CONTACT_STAT, id, CTS_TABLE_CONTACT_STAT, person_id );
-       ret = ctsvc_query_exec(query);
+                       CTS_TABLE_CONTACT_STAT, id, CTS_TABLE_CONTACT_STAT, person_id);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                contacts_record_destroy(record, true);
                return ret;
        }
 
-       is_favorite = __ctsvc_get_person_favorite_info(person_id, &priority);
+       is_favorite = __ctsvc_get_person_favorite_info(zone_name, person_id, &priority);
 
-       // update person_id of unlinked contact
+       /* update person_id of unlinked contact */
        snprintf(query, sizeof(query),
                        "UPDATE %s SET person_id = %d WHERE contact_id = %d",
                        CTS_TABLE_CONTACTS, id, contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                contacts_record_destroy(record, true);
                return ret;
        }
 
-       // update bsae person info
-       ret = ctsvc_person_aggregate(person_id);
+       /* update bsae person info */
+       ret = ctsvc_person_aggregate(zone_name, person_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_person_aggregate(%d) Failed(%d)", person_id, ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_person_aggregate(%d) Fail(%d)", person_id, ret);
+               ctsvc_end_trans(zone_name, false);
                contacts_record_destroy(record, true);
                return ret;
        }
@@ -1265,37 +1271,36 @@ API int contacts_person_unlink_contact(int person_id, int contact_id, int* out_p
        if (is_favorite && ((ctsvc_contact_s*)record)->is_favorite) {
                snprintf(query, sizeof(query),
                                "INSERT OR REPLACE INTO "CTS_TABLE_FAVORITES" values(%d, %f)", id, priority);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        contacts_record_destroy(record, true);
                        return ret;
                }
        }
        contacts_record_destroy(record, true);
 
-       __ctsvc_update_primary_default_data(person_id);
+       __ctsvc_update_primary_default_data(zone_name, person_id);
 
 #ifdef ENABLE_LOG_FEATURE
-       // update phonelog
-       ctsvc_db_phone_log_update_person_id(NULL, person_id, id, false);
-#endif // ENABLE_LOG_FEATURE
+       /* update phonelog */
+       ctsvc_db_phone_log_update_person_id(zone_name, NULL, person_id, id, false);
+#endif /* ENABLE_LOG_FEATURE */
 
        if (out_person_id)
                *out_person_id = id;
-       ctsvc_set_person_noti();
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ctsvc_set_person_noti(zone_name);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_person_do_garbage_collection(void)
+int ctsvc_person_do_garbage_collection(const char *zone_name)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -1303,29 +1308,29 @@ int ctsvc_person_do_garbage_collection(void)
 
        snprintf(query, sizeof(query), "SELECT person_id FROM "CTS_TABLE_PERSONS" WHERE dirty=1");
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
-       while ( 1 /*CTS_TRUE*/ == ctsvc_stmt_step(stmt)) {
+       while (1 /*CTS_TRUE*/ == ctsvc_stmt_step(stmt)) {
                int person_id;
                person_id = ctsvc_stmt_get_int(stmt, 0);
-               ctsvc_person_aggregate(person_id);
+               ctsvc_person_aggregate(zone_name, person_id);
 #ifdef ENABLE_LOG_FEATURE
-               // update phonelog
-               ctsvc_db_phone_log_update_person_id(NULL, person_id, -1, false);
-#endif // ENABLE_LOG_FEATURE
+               /* update phonelog */
+               ctsvc_db_phone_log_update_person_id(zone_name, NULL, person_id, -1, false);
+#endif /* ENABLE_LOG_FEATURE */
        }
        ctsvc_stmt_finalize(stmt);
 
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_person_reset_usage(int person_id, contacts_usage_type_e type)
+int ctsvc_person_reset_usage(const char *zone_name, int person_id, contacts_usage_type_e type)
 {
        int ret ;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (person)");
        RETVM_IF(person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,"contact_id should be greater than 0");
 
@@ -1333,27 +1338,26 @@ API int contacts_person_reset_usage(int person_id, contacts_usage_type_e type)
                "UPDATE %s SET times_used = 0 WHERE person_id = %d AND usage_type = %d",
                CTS_TABLE_CONTACT_STAT, person_id, type);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_person_set_favorite_order(int person_id, int front_person_id, int back_person_id)
+int ctsvc_person_set_favorite_order(const char *zone_name, int person_id, int front_person_id, int back_person_id)
 {
        int ret;
        double front_prio = 0.0;
@@ -1362,13 +1366,13 @@ API int contacts_person_set_favorite_order(int person_id, int front_person_id, i
        cts_stmt stmt;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write");
 
        snprintf(query, sizeof(query), "SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id = ?");
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ctsvc_stmt_bind_int(stmt, 1, front_person_id);
        ret = ctsvc_stmt_step(stmt);
@@ -1389,75 +1393,75 @@ API int contacts_person_set_favorite_order(int person_id, int front_person_id, i
        else
                prio = (front_prio + back_prio) / 2;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "UPDATE %s SET favorite_prio = %f WHERE person_id = %d",
                        CTS_TABLE_FAVORITES, prio, person_id);
 
-       ret = ctsvc_query_exec(query);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+       ret = ctsvc_query_exec(zone_name, query);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_person_set_default_property(contacts_person_property_e property, int person_id,
+int ctsvc_person_set_default_property(const char *zone_name, contacts_person_property_e property, int person_id,
                int id)
 {
        int ret;
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (person)");
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, CONTACTS_ERROR_DB, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, CONTACTS_ERROR_DB, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        switch(property) {
        case CONTACTS_PERSON_PROPERTY_NAME_CONTACT:
-               ret = __ctsvc_put_person_default_name(person_id, id);           // contact id
+               ret = __ctsvc_put_person_default_name(zone_name, person_id, id);  /* contact id */
                break;
        case CONTACTS_PERSON_PROPERTY_NUMBER:
-               ret = __ctsvc_put_person_default_data(person_id, id, CTSVC_DATA_NUMBER);        // number id
+               ret = __ctsvc_put_person_default_data(zone_name, person_id, id, CTSVC_DATA_NUMBER); /* number id */
                break;
        case CONTACTS_PERSON_PROPERTY_EMAIL:
-               ret = __ctsvc_put_person_default_data(person_id, id, CTSVC_DATA_EMAIL);         // email id
+               ret = __ctsvc_put_person_default_data(zone_name, person_id, id, CTSVC_DATA_EMAIL);  /* email id */
                break;
        case CONTACTS_PERSON_PROPERTY_IMAGE:
-               ret = __ctsvc_put_person_default_image(person_id, id);          // image id
+               ret = __ctsvc_put_person_default_image(zone_name, person_id, id);  /* image id */
                break;
        default:
                ret = CONTACTS_ERROR_INVALID_PARAMETER;
                break;
        }
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("contacts_person_set_default_property() Failed(%d) : person property (%d)", ret, property);
-               ctsvc_end_trans(false);
+               CTS_ERR("contacts_person_set_default_property() Fail(%d) : person property (%d)", ret, property);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
 #ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_UPDATED, person_id);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_UPDATED, person_id);
 #endif
-       ctsvc_set_person_noti();
-       ret = ctsvc_end_trans(true);
+       ctsvc_set_person_noti(zone_name);
+       ret = ctsvc_end_trans(zone_name, true);
 
        return ret;
 }
 
-API int contacts_person_get_default_property(contacts_person_property_e property, int person_id,
+
+int ctsvc_person_get_default_property(const char *zone_name, contacts_person_property_e property, int person_id,
                int *id)
 {
        int ret = CONTACTS_ERROR_NONE;
@@ -1465,7 +1469,7 @@ API int contacts_person_get_default_property(contacts_person_property_e property
 
        RETVM_IF(person_id <= 0 || id == NULL, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
        *id = 0;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact read (contact)");
 
        switch(property) {
@@ -1502,8 +1506,8 @@ API int contacts_person_get_default_property(contacts_person_property_e property
 
        if (*query) {
                int result = 0;
-               ret = ctsvc_query_get_first_int_result(query, &result);
-               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_get_first_int_result failed(%d)", ret);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &result);
+               RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_query_get_first_int_result Fail(%d)", ret);
                *id = result;
        }
 
diff --git a/server/ctsvc_server_person.h b/server/ctsvc_server_person.h
new file mode 100644 (file)
index 0000000..057f19f
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_PERSON_H__
+#define __CTSVC_SERVER_PERSON_H__
+
+#include "ctsvc_db_sqlite.h"
+
+int ctsvc_person_do_garbage_collection(const char *zone_name);
+int ctsvc_person_aggregate(const char *zone_name, int person_id);
+void ctsvc_db_person_delete_callback(sqlite3_context * context, int argc, sqlite3_value ** argv);
+int ctsvc_person_link_person(const char *zone_name, int base_person_id, int person_id);
+int ctsvc_person_unlink_contact(const char *zone_name, int person_id, int contact_id, int* out_person_id);
+int ctsvc_person_reset_usage(const char *zone_name, int person_id, contacts_usage_type_e type);
+int ctsvc_person_set_favorite_order(const char *zone_name, int person_id, int front_person_id, int back_person_id);
+int ctsvc_person_set_default_property(const char *zone_name, contacts_person_property_e property, int person_id, int id);
+int ctsvc_person_get_default_property(const char *zone_name, contacts_person_property_e property, int person_id, int *id);
+
+#endif /* __CTSVC_SERVER_PERSON_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_phonelog.c
rename to server/ctsvc_server_phonelog.c
index 4b13001..87cf4fa 100644 (file)
 #include "contacts_phone_log_internal.h"
 
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_number_utils.h"
 #include "ctsvc_localize_utils.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
+#include "ctsvc_server_phonelog.h"
 
 #ifdef _CONTACTS_IPC_SERVER
 #include "ctsvc_server_change_subject.h"
-#ifdef ENABLE_SIM_FEATURE
 #include "ctsvc_server_sim.h"
-#endif // ENABLE_SIM_FEATURE
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
 
-API int contacts_phone_log_reset_statistics()
+int ctsvc_phone_log_reset_statistics(const char *zone_name)
 {
        char query[CTS_SQL_MIN_LEN] = {0};
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_PHONELOG_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_PHONELOG_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (phonelog)");
        snprintf(query, sizeof(query),"DELETE FROM "CTS_TABLE_PHONELOG_STAT);
-       return ctsvc_query_exec(query);
+       return ctsvc_query_exec(zone_name, query);
 }
 
-API int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...)
+int ctsvc_phone_log_delete(const char *zone_name, contacts_phone_log_delete_e op, ...)
 {
        int ret;
        int extra_data1;
@@ -54,7 +53,7 @@ API int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...)
        char *number = NULL;
        va_list args;
 
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_PHONELOG_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_PHONELOG_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
                                "Permission denied : contact write (phonelog)");
        switch(op) {
        case CONTACTS_PHONE_LOG_DELETE_BY_ADDRESS:
@@ -86,17 +85,17 @@ API int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...)
                CTS_ERR("Invalid parameter : the operation is not proper (op : %d)", op);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_phonelog_noti();
-       ret = ctsvc_end_trans(true);
+       ctsvc_set_phonelog_noti(zone_name);
+       ret = ctsvc_end_trans(zone_name, true);
        return ret;
 }
 
@@ -105,21 +104,24 @@ void ctsvc_db_phone_log_delete_callback(sqlite3_context * context,
 {
 #ifdef _CONTACTS_IPC_SERVER
        int phone_log_id;
+       char *zone_name = NULL;
 
        if (argc < 1) {
                sqlite3_result_null(context);
                return;
        }
 
+       zone_name = sqlite3_user_data(context);
+
        phone_log_id = sqlite3_value_int(argv[0]);
-       ctsvc_change_subject_add_changed_phone_log_id(CONTACTS_CHANGE_DELETED, phone_log_id);
+       ctsvc_change_subject_add_changed_phone_log_id(zone_name, CONTACTS_CHANGE_DELETED, phone_log_id);
 
        sqlite3_result_null(context);
        return;
 #endif
 }
 
-static int __ctsvc_db_phone_log_find_person_id(char *number, char *normal_num, char *minmatch, int person_id, int *find_number_type)
+static int __ctsvc_db_phone_log_find_person_id(const char *zone_name, char *number, char *normal_num, char *minmatch, int person_id, int *find_number_type)
 {
        int ret;
        int find_person_id = -1;
@@ -130,7 +132,7 @@ static int __ctsvc_db_phone_log_find_person_id(char *number, char *normal_num, c
 
        *find_number_type = -1;
        if (normal_num) {
-               snprintf(query, sizeof(query),
+               ret = snprintf(query, sizeof(query),
                                "SELECT person_id, data1 FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_DATA" "
                                        "ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
                                                "AND datatype = %d AND is_my_profile = 0 AND deleted = 0 "
@@ -141,14 +143,14 @@ static int __ctsvc_db_phone_log_find_person_id(char *number, char *normal_num, c
        }
 
        if (*query) {
-               // several person can have same number
+               /* several person can have same number */
                cts_stmt stmt = NULL;
                int id;
                int number_type = -1;
 
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (stmt == NULL) {
-                       CTS_ERR("ctsvc_query_prepare fail(%d)", ret);
+                       CTS_ERR("ctsvc_query_prepare Fail(%d)", ret);
                        if (bind_text) {
                                for (cursor=bind_text;cursor;cursor=cursor->next)
                                        free(cursor->data);
@@ -168,8 +170,8 @@ static int __ctsvc_db_phone_log_find_person_id(char *number, char *normal_num, c
                while ((ret = ctsvc_stmt_step(stmt))) {
                        id = ctsvc_stmt_get_int(stmt, 0);
                        number_type = ctsvc_stmt_get_int(stmt, 1);
-                       if (find_person_id <= 0 && id > 0) {
-                               find_person_id = id;            // find first match person_id
+                       if (find_person_id <= 0 && 0 < id) {
+                               find_person_id = id;   /* find first match person_id */
                                *find_number_type = number_type;
                                if (person_id <= 0)
                                        break;
@@ -193,7 +195,7 @@ static int __ctsvc_db_phone_log_find_person_id(char *number, char *normal_num, c
        return find_person_id;
 }
 
-int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, int candidate_person_id, bool person_link)
+int ctsvc_db_phone_log_update_person_id(const char *zone_name, const char *number, int old_person_id, int candidate_person_id, bool person_link)
 {
        CTS_FN_CALL;
        int ret;
@@ -215,7 +217,7 @@ int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, i
 
        if (number && *number) {
                char clean_num[strlen(number)+1];
-               len += snprintf(query+len, sizeof(query)-len, "AND ((number = ? ) ");
+               len += snprintf(query+len, sizeof(query)-len, "AND ((number = ?) ");
                bind_text = g_slist_append(bind_text, strdup(number));
 
                ret = ctsvc_clean_number(number, clean_num, sizeof(clean_num), true);
@@ -241,14 +243,14 @@ int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, i
                        len += snprintf(query+len, sizeof(query)-len, ") ");
        }
 
-       if (old_person_id > 0)
+       if (0 < old_person_id)
                len += snprintf(query+len, sizeof(query)-len, "AND person_id = %d ", old_person_id);
        else
                len += snprintf(query+len, sizeof(query)-len, "AND person_id IS NULL ");
 
-       ret = ctsvc_query_prepare(query, &get_log);
+       ret = ctsvc_query_prepare(zone_name, query, &get_log);
        if (get_log == NULL) {
-               CTS_ERR("ctsvc_query_prepare fail(%d)", ret);
+               CTS_ERR("ctsvc_query_prepare Fail(%d)", ret);
                if (bind_text) {
                        for (cursor=bind_text;cursor;cursor=cursor->next)
                                free(cursor->data);
@@ -266,9 +268,9 @@ int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, i
        }
 
        snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_PHONELOGS" SET person_id=?, number_type = ? WHERE id = ?");
-       ret = ctsvc_query_prepare(query, &update_log);
+       ret = ctsvc_query_prepare(zone_name, query, &update_log);
        if (update_log == NULL) {
-               CTS_ERR("ctsvc_query_prepare fail(%d)", ret);
+               CTS_ERR("ctsvc_query_prepare Fail(%d)", ret);
                ctsvc_stmt_finalize(get_log);
 
                if (bind_text) {
@@ -293,48 +295,50 @@ int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, i
                normal_address = ctsvc_stmt_get_text(get_log, 2);
                minmatch_address = ctsvc_stmt_get_text(get_log, 3);
 
-               //CASE : number is inserted (contact insert/update) => update person_id of phone logs from NULL
-               if (number && old_person_id <= 0 && candidate_person_id > 0) {
-                       __ctsvc_db_phone_log_find_person_id(address, normal_address, minmatch_address, candidate_person_id, &number_type);
+               /* CASE : number is inserted (contact insert/update) => update person_id of phone logs from NULL */
+               if (number && old_person_id <= 0 && 0 < candidate_person_id) {
+                       __ctsvc_db_phone_log_find_person_id(zone_name, address, normal_address, minmatch_address, candidate_person_id, &number_type);
                        new_person_id = candidate_person_id;
                }
-               //CASE : phonelog insert without person_id
+               /* CASE : phonelog insert without person_id */
                else if (number && old_person_id <= 0) {
-                       // address == number
-                       new_person_id = __ctsvc_db_phone_log_find_person_id(address, normal_address, minmatch_address, -1, &number_type);
+                       /* address == number */
+                       new_person_id = __ctsvc_db_phone_log_find_person_id(zone_name, address, normal_address, minmatch_address, -1, &number_type);
                        if (new_person_id <= 0) continue;
                }
-               // CASE : number update/delete (contact update/delete) => find new_person_id by address
-               // CASE : phonelog insert with person_id
-               else if (number && old_person_id > 0) {
-                       // address == number
-                       // although new_person_id and old_person_id are same, update phonelog for setting number_type
-                       new_person_id = __ctsvc_db_phone_log_find_person_id(address, normal_address, minmatch_address, old_person_id, &number_type);
+               /* CASE : number update/delete (contact update/delete) => find new_person_id by address */
+               /* CASE : phonelog insert with person_id */
+               else if (number && 0 < old_person_id) {
+                       /* address == number */
+                       /* although new_person_id and old_person_id are same, update phonelog for setting number_type */
+                       new_person_id = __ctsvc_db_phone_log_find_person_id(zone_name, address, normal_address, minmatch_address, old_person_id, &number_type);
                }
-               // CASE : person link => deleted person_id -> new person_id (base_person_id)
-               else if (NULL == number && old_person_id  > 0 && candidate_person_id > 0 && person_link) {
+               /* CASE : person link => deleted person_id -> new person_id (base_person_id) */
+               else if (NULL == number && 0 < old_person_id && 0 < candidate_person_id && person_link) {
                        new_person_id = candidate_person_id;
                }
-               // CASE : person unlink => check person_id of the address,
-               // if person_id is not old_person_id then change person_id to new_person_id
-               else if (NULL == number && old_person_id  > 0 && candidate_person_id > 0) {
-                       temp_id = __ctsvc_db_phone_log_find_person_id(address, normal_address, minmatch_address, candidate_person_id, &number_type);
-                       if (temp_id > 0 && temp_id == old_person_id)
+               /* CASE : person unlink => check person_id of the address, */
+               /* if person_id is not old_person_id then change person_id to new_person_id */
+               else if (NULL == number && 0 < old_person_id && 0 < candidate_person_id) {
+                       temp_id = __ctsvc_db_phone_log_find_person_id(zone_name, address, normal_address, minmatch_address, candidate_person_id, &number_type);
+                       if (0 < temp_id && temp_id == old_person_id)
                                continue;
-                       else if (temp_id > 0 && temp_id != old_person_id)
+                       else if (0 < temp_id && temp_id != old_person_id)
                                new_person_id = temp_id;
                }
-               // CASE : person delete => find new_person_id by address
-               else if (NULL == number && old_person_id  > 0) {
-                       new_person_id = __ctsvc_db_phone_log_find_person_id(address, normal_address, minmatch_address, candidate_person_id, &number_type);
+               /* CASE : person delete => find new_person_id by address */
+               else if (NULL == number && 0 < old_person_id) {
+                       new_person_id = __ctsvc_db_phone_log_find_person_id(zone_name, address, normal_address, minmatch_address, candidate_person_id, &number_type);
                }
-               // Already check this case as above : RETVM_IF(old_person_id <= 0 && NULL == number, ...
-//             else
-//                     continue;
+               /* Already check this case as above : RETVM_IF(old_person_id <= 0 && NULL == number, ... */
+               /*
+                * else
+                *  continue;
+                */
 
-               if (new_person_id > 0)
+               if (0 < new_person_id)
                        ctsvc_stmt_bind_int(update_log, 1, new_person_id);
-               if (number_type >= 0)
+               if (0 <= number_type)
                        ctsvc_stmt_bind_int(update_log, 2, number_type);
                ctsvc_stmt_bind_int(update_log, 3, phonelog_id);
                ctsvc_stmt_step(update_log);
similarity index 61%
rename from native/ctsvc_phonelog.h
rename to server/ctsvc_server_phonelog.h
index 6e4afc1..880288a 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_PHONELOG_H__
-#define __TIZEN_SOCIAL_CTSVC_PHONELOG_H__
+#ifndef __CTSVC_SERVER_PHONELOG_H__
+#define __CTSVC_SERVER_PHONELOG_H__
 
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
+#include "contacts_phone_log_internal.h"
+
+int ctsvc_phone_log_reset_statistics(const char *zone_name);
+int ctsvc_phone_log_delete(const char *zone_name, contacts_phone_log_delete_e op, ...);
 void ctsvc_db_phone_log_delete_callback(sqlite3_context * context,
                int argc, sqlite3_value ** argv);
-int ctsvc_db_phone_log_update_person_id(const char *number, int old_person_id, int candidate_person_id, bool person_link);
+int ctsvc_db_phone_log_update_person_id(const char *zone_name, const char *number, int old_person_id, int candidate_person_id, bool person_link);
 
-#endif // __TIZEN_SOCIAL_CTSVC_PHONELOG_H__
\ No newline at end of file
+#endif /* __CTSVC_SERVER_PHONELOG_H__ */
\ No newline at end of file
diff --git a/server/ctsvc_server_service.c b/server/ctsvc_server_service.c
new file mode 100644 (file)
index 0000000..e01aaa2
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_socket.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_inotify.h"
+#include "ctsvc_db_init.h"
+#include "ctsvc_server_setting.h"
+#include "ctsvc_db_access_control.h"
+#include "ctsvc_number_utils.h"
+
+static GHashTable *ctsvc_con_table = NULL;
+static __thread GHashTable *ctsvc_thread_con_table = NULL;
+
+int ctsvc_connect(const char *zone_name)
+{
+       CTS_FN_CALL;
+       int ret;
+
+       int ctsvc_connection = 0;
+       int thread_connection = 0;
+
+       if (NULL == ctsvc_con_table)
+               ctsvc_con_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               ctsvc_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_con_table, zone_name));
+
+       if (NULL == ctsvc_thread_con_table)
+               ctsvc_thread_con_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               thread_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_thread_con_table, zone_name));
+
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+       if (0 == ctsvc_connection) {
+               ret = ctsvc_inotify_init();
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_inotify_init() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+               ctsvc_db_plugin_init();
+               ctsvc_view_uri_init();
+               ctsvc_register_vconf(zone_name);
+       }
+       else
+               CTS_DBG("System : Contacts service has been already connected");
+
+       ctsvc_connection++;
+       g_hash_table_replace(ctsvc_con_table, g_strdup(zone_name), GINT_TO_POINTER(ctsvc_connection));
+
+       if (0 == thread_connection) {
+               ret = ctsvc_db_init(zone_name);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_db_init() Fail(%d)", ret);
+                       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+                       return ret;
+               }
+       }
+       thread_connection++;
+       g_hash_table_replace(ctsvc_thread_con_table, g_strdup(zone_name), GINT_TO_POINTER(thread_connection));
+
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_disconnect(const char *zone_name)
+{
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+
+       RETVM_IF(NULL == ctsvc_con_table, CONTACTS_ERROR_DB, "ctsvc_con_table is NULL");
+       RETVM_IF(NULL == ctsvc_thread_con_table, CONTACTS_ERROR_DB, "ctsvc_thread_con_table is NULL");
+
+       int ctsvc_connection = 0;
+       int thread_connection = 0;
+       ctsvc_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_con_table, zone_name));
+       thread_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_thread_con_table, zone_name));
+
+       if (1 == thread_connection) {
+               ctsvc_db_deinit(zone_name);
+       }
+       else if (thread_connection <= 0) {
+               CTS_DBG("System : please call contacts_connect_on_thread(), thread_connection count is (%d)", thread_connection);
+               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+       thread_connection--;
+       g_hash_table_replace(ctsvc_thread_con_table, g_strdup(zone_name), GINT_TO_POINTER(thread_connection));
+
+       if (1 == ctsvc_connection) {
+               ctsvc_inotify_close();
+               ctsvc_deregister_vconf(zone_name);
+               ctsvc_view_uri_deinit();
+               ctsvc_db_plugin_deinit();
+               ctsvc_deinit_tapi_handle_for_cc();
+       }
+       else if (1 < ctsvc_connection)
+               CTS_DBG("System : connection count is %d", ctsvc_connection);
+       else {
+               CTS_DBG("System : please call contacts_connect(), connection count is (%d)", ctsvc_connection);
+               ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+       ctsvc_connection--;
+       g_hash_table_replace(ctsvc_con_table, g_strdup(zone_name), GINT_TO_POINTER(ctsvc_connection));
+
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_contacts_internal_disconnect(const char *zone_name)
+{
+       ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
+
+       RETVM_IF(NULL == ctsvc_con_table, CONTACTS_ERROR_DB, "ctsvc_con_table is NULL");
+       RETVM_IF(NULL == ctsvc_thread_con_table, CONTACTS_ERROR_DB, "ctsvc_thread_con_table is NULL");
+
+       int ctsvc_connection = 0;
+       int thread_connection = 0;
+       ctsvc_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_con_table, zone_name));
+       thread_connection = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_thread_con_table, zone_name));
+
+       if (1 == thread_connection) {
+               ctsvc_db_deinit(zone_name);
+               thread_connection--;
+               g_hash_table_replace(ctsvc_thread_con_table, g_strdup(zone_name), GINT_TO_POINTER(thread_connection));
+
+               if (1 <= ctsvc_connection) {
+                       ctsvc_connection--;
+                       g_hash_table_replace(ctsvc_con_table, g_strdup(zone_name), GINT_TO_POINTER(ctsvc_connection));
+               }
+       }
+
+       ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
+       return CONTACTS_ERROR_NONE;
+}
+
similarity index 76%
rename from native/ctsvc_service.h
rename to server/ctsvc_server_service.h
index c8022db..6406666 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_SERVICE_H__
-#define __TIZEN_SOCIAL_CTSVC_SERVICE_H__
+#ifndef __CTSVC_SERVER_SERVICE_H__
+#define __CTSVC_SERVER_SERVICE_H__
 
-int ctsvc_contacts_internal_disconnect();
+int ctsvc_connect(const char *zone_name);
+int ctsvc_disconnect(const char *zone_name);
+int ctsvc_contacts_internal_disconnect(const char *zone_name);
 
-#endif /*  __TIZEN_SOCIAL_CTSVC_SERVICE_H__ */
+#endif /* __CTSVC_SERVER_SERVICE_H__ */
 
diff --git a/server/ctsvc_server_setting.c b/server/ctsvc_server_setting.c
new file mode 100644 (file)
index 0000000..468bb6c
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <glib.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <vasum.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_notify.h"
+#include "ctsvc_server_setting.h"
+#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
+#include "ctsvc_server_zone.h"
+#include "ctsvc_db_access_control.h"
+
+#ifdef _CONTACTS_IPC_SERVER
+#include "ctsvc_server_change_subject.h"
+#endif
+
+static int primary_sort = -1;
+static int secondary_sort = -1;
+
+static int phonenumber_min_match_digit = -1;
+
+static const char *CTSVC_VCONF_DISPLAY_ORDER = VCONFKEY_CONTACTS_SVC_NAME_DISPLAY_ORDER;
+static const char *CTSVC_VCONF_SORTING_ORDER = VCONFKEY_CONTACTS_SVC_NAME_SORTING_ORDER;
+static const char *CTSVC_VCONF_PHONENUMBER_MIN_MATCH_DIGIT = VCONFKEY_CONTACTS_SVC_PHONENUMBER_MIN_MATCH_DIGIT;
+
+static GHashTable *ctsvc_vconf_data_table = NULL;
+
+int ctsvc_setting_get_name_display_order(const char *zone_name, contacts_name_display_order_e *order)
+{
+       int ret;
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
+                       "Permission denied : contact read");
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       int name_display_order;
+       ret = vconf_get_int(CTSVC_VCONF_DISPLAY_ORDER, &name_display_order);
+       ctsvc_server_zone_join(zone_old);
+
+       RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : vconf_get_int() Fail(%d)", ret);
+       *order = name_display_order;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_setting_set_name_display_order(const char *zone_name, contacts_name_display_order_e order)
+{
+       int ret;
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+                       "Permission denied : contact write");
+       RETVM_IF(CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST != order && CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST != order,
+                       CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : The parameter(order:%d) is Invalid", order);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_set_int(CTSVC_VCONF_DISPLAY_ORDER, order);
+       ctsvc_server_zone_join(zone_old);
+       RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : vconf_set_int() Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_setting_get_name_sorting_order(const char *zone_name, contacts_name_sorting_order_e *order)
+{
+       int ret;
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_READ), CONTACTS_ERROR_PERMISSION_DENIED,
+                       "Permission denied : contact read");
+
+       int name_sorting_order;
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_get_int(CTSVC_VCONF_SORTING_ORDER, &name_sorting_order);
+       ctsvc_server_zone_join(zone_old);
+       RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : vconf_get_int(sort order) Fail(%d)", ret);
+
+       *order = name_sorting_order;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_setting_set_name_sorting_order(const char *zone_name, contacts_name_sorting_order_e order)
+{
+       int ret;
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_WRITE), CONTACTS_ERROR_PERMISSION_DENIED,
+                       "Permission denied : contact write");
+       RETVM_IF(CONTACTS_NAME_SORTING_ORDER_FIRSTLAST != order && CONTACTS_NAME_SORTING_ORDER_LASTFIRST != order,
+                       CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : The parameter(order:%d) is Invalid", order);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_set_int(CTSVC_VCONF_SORTING_ORDER, order);
+       ctsvc_server_zone_join(zone_old);
+       RETVM_IF(ret < 0, CONTACTS_ERROR_SYSTEM, "System : vconf_set_int(sort order) Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static void ctsvc_vconf_display_order_cb(keynode_t *key, void *data)
+{
+       int ret;
+       int name_display_order;
+       char *zone_name = data;
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_get_int(CTSVC_VCONF_DISPLAY_ORDER, &name_display_order);
+       ctsvc_server_zone_join(zone_old);
+       RETM_IF(ret < 0, "System : vconf_get_int() Fail(%d)", ret);
+
+#ifdef _CONTACTS_IPC_SERVER
+       /* publish display order changed */
+       ctsvc_change_subject_publish_setting(zone_name, CTSVC_SETTING_DISPLAY_ORDER_CHANGED, name_display_order);
+#endif
+}
+
+static void ctsvc_vconf_sorting_order_cb(keynode_t *key, void *data)
+{
+       int ret;
+       char *zone_name = data;
+       int name_sorting_order;
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_get_int(CTSVC_VCONF_SORTING_ORDER, &name_sorting_order);
+       ctsvc_server_zone_join(zone_old);
+       RETM_IF(ret < 0, "System : vconf_get_int() Fail(%d)", ret);
+
+#ifdef _CONTACTS_IPC_SERVER
+       /* publish sort order changed */
+       ctsvc_change_subject_publish_setting(zone_name, CTSVC_SETTING_SORTING_ORDER_CHANGED, name_sorting_order);
+#endif
+}
+
+void ctsvc_set_sort_memory(int sort_type)
+{
+       primary_sort = sort_type;
+       secondary_sort = CTSVC_SORT_WESTERN;
+}
+
+static void ctsvc_vconf_sort_change_cb(keynode_t *key, void *data)
+{
+       int sort = vconf_keynode_get_int(key);
+       ctsvc_set_sort_memory(sort);
+}
+
+int ctsvc_register_vconf(const char *zone_name)
+{
+       int ret;
+
+       char *zone_name_copy = g_strdup(zone_name);
+       if (NULL == ctsvc_vconf_data_table)
+               ctsvc_vconf_data_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);
+       g_hash_table_replace(ctsvc_vconf_data_table, g_strdup(zone_name), zone_name_copy);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_notify_key_changed(CTSVC_VCONF_DISPLAY_ORDER,
+                       ctsvc_vconf_display_order_cb, zone_name_copy);
+       if (ret < 0) {
+               CTS_ERR("vconf_notify_key_changed(display order) Fail(%d)", ret);
+               ctsvc_server_zone_join(zone_old);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       ret = vconf_notify_key_changed(CTSVC_VCONF_SORTING_ORDER,
+                       ctsvc_vconf_sorting_order_cb, zone_name_copy);
+       if (ret < 0) {
+               CTS_ERR("vconf_notify_key_changed(sort order) Fail(%d)", ret);
+               ctsvc_server_zone_join(zone_old);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       /* phonenumber min match digit */
+       ret = vconf_get_int(CTSVC_VCONF_PHONENUMBER_MIN_MATCH_DIGIT, &phonenumber_min_match_digit);
+       if (ret < 0 || phonenumber_min_match_digit <= 0) {
+               CTS_ERR("vconf_get_int() Fail(%d)", ret);
+               phonenumber_min_match_digit = 8;
+       }
+
+       ret = vconf_get_int(ctsvc_get_default_sort_vconfkey(), &primary_sort);
+       if (ret < 0) {
+               CTS_ERR("vconf_get_int(sort order) Fail(%d)", ret);
+               ctsvc_server_zone_join(zone_old);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+       ctsvc_server_zone_join(zone_old);
+
+       ctsvc_set_sort_memory(primary_sort);
+       ret = vconf_notify_key_changed(ctsvc_get_default_sort_vconfkey(),
+                       ctsvc_vconf_sort_change_cb, NULL);
+       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(deafult lang) Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+void ctsvc_deregister_vconf(const char *zone_name)
+{
+       int ret;
+
+       if (ctsvc_vconf_data_table)
+               g_hash_table_remove(ctsvc_vconf_data_table, zone_name);
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
+       ret = vconf_ignore_key_changed(CTSVC_VCONF_DISPLAY_ORDER, ctsvc_vconf_display_order_cb);
+       if (ret < 0) {
+               CTS_ERR("vconf_ignore_key_changed(display order) Fail(%d)", ret);
+               ctsvc_server_zone_join(zone_old);
+               return;
+       }
+
+       ret = vconf_ignore_key_changed(CTSVC_VCONF_SORTING_ORDER, ctsvc_vconf_sorting_order_cb);
+       if (ret < 0) {
+               CTS_ERR("vconf_ignore_key_changed(sort order) Fail(%d)", ret);
+               ctsvc_server_zone_join(zone_old);
+               return;
+       }
+       ctsvc_server_zone_join(zone_old);
+
+       ret = vconf_ignore_key_changed(ctsvc_get_default_sort_vconfkey(), ctsvc_vconf_sort_change_cb);
+       RETM_IF(ret<0,"vconf_ignore_key_changed(default_lang) Fail(%d)", ret);
+}
+
+int ctsvc_get_phonenumber_min_match_digit(void)
+{
+       return phonenumber_min_match_digit;
+}
+
+void ctsvc_set_phonenumber_min_match_digit(int min)
+{
+       phonenumber_min_match_digit = min;
+}
+
+
+const char* ctsvc_get_default_sort_vconfkey(void)
+{
+       return "file/private/contacts-service/default_lang";
+}
+
+int ctsvc_get_primary_sort(void)
+{
+       if (primary_sort < 0) {
+               int ret;
+               ret = vconf_get_int(ctsvc_get_default_sort_vconfkey(), &primary_sort);
+               WARN_IF(ret < 0, "vconf_get_int() Fail(%d)", ret);
+               ctsvc_set_sort_memory(primary_sort);
+       }
+       return primary_sort;
+}
+
+int ctsvc_get_secondary_sort(void)
+{
+       return secondary_sort;
+}
+
diff --git a/server/ctsvc_server_setting.h b/server/ctsvc_server_setting.h
new file mode 100644 (file)
index 0000000..7f3c55c
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_SETTING_H__
+#define __CTSVC_SERVER_SETTING_H__
+
+int ctsvc_setting_get_name_display_order(const char *zone_name, contacts_name_display_order_e *order);
+int ctsvc_setting_set_name_display_order(const char *zone_name, contacts_name_display_order_e order);
+int ctsvc_setting_get_name_sorting_order(const char *zone_name, contacts_name_sorting_order_e *order);
+int ctsvc_setting_set_name_sorting_order(const char *zone_name, contacts_name_sorting_order_e order);
+
+int ctsvc_register_vconf(const char *zone_name);
+void ctsvc_deregister_vconf(const char *zone_name);
+
+int ctsvc_get_phonenumber_min_match_digit(void);
+void ctsvc_set_phonenumber_min_match_digit(int min);
+int ctsvc_get_primary_sort(void);
+int ctsvc_get_secondary_sort(void);
+const char *ctsvc_get_default_sort_vconfkey(void);
+void ctsvc_set_sort_memory(int sort_type);
+
+
+#endif /* __CTSVC_SERVER_SETTING_H__ */
+
old mode 100755 (executable)
new mode 100644 (file)
index 19dc976..f721d0e
 
 #include "ctsvc_internal.h"
 #include "ctsvc_struct.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_server_socket.h"
 #include "ctsvc_server_sqlite.h"
 #include "ctsvc_server_utils.h"
 #include "ctsvc_server_sim.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_server_zone.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_access_control.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_db_query.h"
 
-//#define CTSVC_SIM_FIELD_FULL_SUPPORT// support ANR,EMAIL2,3,NICK NAME
+/* #define CTSVC_SIM_FIELD_FULL_SUPPORT// support ANR,EMAIL2,3,NICK NAME */
 #define DEFAULT_ADDRESS_BOOK_ID 0
 
 #define CTSVC_TAPI_SIM_PB_MAX 0xFFFF
@@ -58,35 +61,41 @@ typedef struct {
 }sim_file_s;
 
 typedef struct {
-       // SIM slot number
+       /* SIM slot number */
        int sim_slot_no;
 
-       // SIM info table id
-       // it is used when inserting/seaching phonelog
+       /*
+        * SIM info table id
+        * it is used when inserting/seaching phonelog
+        */
        int sim_info_id;
 
-       // SIM slot id
+       /* SIM slot id */
        char *cp_name;
 
-       // Tapi handle to control each SIM slot
+       /* Tapi handle to control each SIM slot */
        TapiHandle *handle;
 
-       // SIM type
+       /* SIM type */
        TelSimPbType_t sim_type;
 
-       // Each sim file info (max index, max text length, used count)
+       /* Each sim file info (max index, max text length, used count) */
        sim_file_s file_record[TAPI_PB_MAX_FILE_CNT];
 
-       //To bulk insert SIM contact, Free after insert them
+       /* To bulk insert SIM contact, Free after insert them */
        GSList *import_contacts;
 
-       // Set true after read SIM meta info
-       // in case of private : set true after reading all SIM contact and save to DB
+       /*
+        * Set true after read SIM meta info
+        * in case of private : set true after reading all SIM contact and save to DB
+        */
        bool initialized;
 
-       // unique info of SIM : iccid
-       // It should be save to phone log table
-       // in order to find which SIM is used to the call/message log
+       /*
+        * unique info of SIM : iccid
+        * It should be save to phone log table
+        * in order to find which SIM is used to the call/message log
+        */
        char* sim_unique_id;
 
 } ctsvc_sim_info_s;
@@ -102,12 +111,11 @@ static int __ctsvc_server_sim_init_info(ctsvc_sim_info_s *info);
 
 static TapiHandle* __ctsvc_server_sim_get_tapi_handle(ctsvc_sim_info_s *info)
 {
-       if (info->handle == NULL) {
+       if (NULL == info->handle) {
                int bReady = 0;
-               // TODO: it should be changed API
                vconf_get_bool(VCONFKEY_TELEPHONY_READY, &bReady);
 
-               if (!bReady) {
+               if (0 == bReady) {
                        CTS_ERR("telephony is not ready ");
                        return NULL;
                }
@@ -127,13 +135,13 @@ static inline void __ctsvc_server_sim_set_return_data(void* data)
 
 static inline void* __ctsvc_server_sim_get_return_data(void)
 {
-       RETVM_IF(greturn_data == NULL, NULL, "greturn_data is NULL");
+       RETVM_IF(NULL == greturn_data, NULL, "greturn_data is NULL");
        return greturn_data;
 }
 
-void ctsvc_server_sim_record_destroy(sim_contact_s *record)
+static void __ctsvc_server_sim_record_destroy(sim_contact_s *record)
 {
-       RETM_IF(record == NULL, "record is NULL");
+       RET_IF(NULL == record);
 
        free(record->name);
        free(record->number);
@@ -152,7 +160,10 @@ void ctsvc_server_sim_record_destroy(sim_contact_s *record)
 static sim_contact_s * __ctsvc_server_sim_record_clone(TelSimPbRecord_t *sim_record)
 {
        sim_contact_s *record = calloc(1,sizeof(sim_contact_s));
-       RETVM_IF(NULL == record, NULL, "calloc() return NULL");
+       if (NULL == record) {
+               CTS_ERR("calloc() Fail");
+               return NULL;
+       }
 
        record->sim_index = sim_record->index;
        record->name = SAFE_STRDUP((char*)sim_record->name);
@@ -173,14 +184,14 @@ static inline int __ctsvc_server_sim_record_add_num(contacts_record_h *record, c
 {
        int ret;
 
-       RETVM_IF(number == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "invalid number");
+       RETVM_IF(NULL == number, CONTACTS_ERROR_INVALID_PARAMETER, "invalid number");
 
        ret = contacts_record_create(_contacts_number._uri, record);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create() Fail(%d)", ret);
        ret = contacts_record_set_str(*record, _contacts_number.number, number);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_str() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_str() Fail(%d)", ret);
        ret = contacts_record_set_int(*record, _contacts_number.type, CONTACTS_NUMBER_TYPE_OTHER);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_int() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_int() Fail(%d)", ret);
 
        return ret;
 }
@@ -189,14 +200,14 @@ static inline int __ctsvc_server_sim_record_add_email(contacts_record_h *record,
 {
        int ret;
 
-       RETVM_IF(email == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "invalid email");
+       RETVM_IF(NULL == email, CONTACTS_ERROR_INVALID_PARAMETER, "invalid email");
 
        ret = contacts_record_create(_contacts_email._uri, record);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create() Fail(%d)", ret);
        ret = contacts_record_set_str(*record, _contacts_email.email, email);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_str() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_str() Fail(%d)", ret);
        ret = contacts_record_set_int(*record, _contacts_email.type,CONTACTS_EMAIL_TYPE_OTHER);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_int() Failed(%d)", ret);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_set_int() Fail(%d)", ret);
 
        return ret;
 }
@@ -211,15 +222,15 @@ static int __ctsvc_server_sim_ctsvc_record_clone(sim_contact_s *record,
        contacts_record_h number = NULL;
        contacts_record_h email = NULL;
 
-       RETVM_IF(contact == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : contact is NULL");
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
        *contact = NULL;
-       RETVM_IF(record == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
+       RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
        RETVM_IF(record->sim_index <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "The index(%d) is invalid", record->sim_index);
 
        CTS_DBG("insert record->sim_index %d", record->sim_index);
 
        ret = contacts_record_create(_contacts_contact._uri, contact);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        snprintf(sim_id, sizeof(sim_id), "%d", record->sim_index);
        contacts_record_set_str(*contact, _contacts_contact.uid, sim_id);
 
@@ -240,7 +251,7 @@ static int __ctsvc_server_sim_ctsvc_record_clone(sim_contact_s *record,
                        contacts_record_add_child_record(*contact, _contacts_contact.nickname, nick);
                }
        }
-#endif //CTSVC_SIM_FIELD_FULL_SUPPORT
+#endif /* CTSVC_SIM_FIELD_FULL_SUPPORT */
 
        ret = __ctsvc_server_sim_record_add_num(&number, (char *)record->number);
        if (CONTACTS_ERROR_NONE == ret)
@@ -258,7 +269,7 @@ static int __ctsvc_server_sim_ctsvc_record_clone(sim_contact_s *record,
        ret = __ctsvc_server_sim_record_add_num(&number, (char *)record->anr3);
        if (CONTACTS_ERROR_NONE == ret)
                contacts_record_add_child_record(*contact, _contacts_contact.number, number);
-#endif //CTSVC_SIM_FIELD_FULL_SUPPORT
+#endif /* CTSVC_SIM_FIELD_FULL_SUPPORT */
 
        ret = __ctsvc_server_sim_record_add_email(&email, (char *)record->email1);
        if (CONTACTS_ERROR_NONE == ret)
@@ -276,7 +287,7 @@ static int __ctsvc_server_sim_ctsvc_record_clone(sim_contact_s *record,
        ret = __ctsvc_server_sim_record_add_email(&email, (char *)record->email4);
        if (CONTACTS_ERROR_NONE == ret)
                contacts_record_add_child_record(*contact, _contacts_contact.email, email);
-#endif //CTSVC_SIM_FIELD_FULL_SUPPORT
+#endif /* CTSVC_SIM_FIELD_FULL_SUPPORT */
 
        contacts_record_set_int(*contact, _contacts_contact.address_book_id, addressbook_id);
 
@@ -286,7 +297,7 @@ static int __ctsvc_server_sim_ctsvc_record_clone(sim_contact_s *record,
 static ctsvc_sim_info_s* __ctsvc_server_sim_get_handle_by_tapi_handle(TapiHandle *handle)
 {
        GSList *cursor = NULL;
-       for(cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
+       for (cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
                ctsvc_sim_info_s *info = cursor->data;
                if (info->handle == handle)
                        return info;
@@ -301,7 +312,7 @@ static ctsvc_sim_info_s* __ctsvc_server_sim_get_handle_by_sim_slot_no(int slot_n
        if (slot_no < 0)
                return NULL;
 
-       for(cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
+       for (cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
                ctsvc_sim_info_s *info = cursor->data;
                if (info->sim_slot_no == slot_no) {
                        if (NULL == __ctsvc_server_sim_get_tapi_handle(info))
@@ -319,7 +330,7 @@ int ctsvc_server_sim_get_info_id_by_sim_slot_no(int slot_no)
        if (slot_no < 0)
                return -1;
 
-       for(cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
+       for (cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
                ctsvc_sim_info_s *info = cursor->data;
                if (info->sim_slot_no == slot_no) {
                        if (NULL == __ctsvc_server_sim_get_tapi_handle(info))
@@ -333,7 +344,7 @@ int ctsvc_server_sim_get_info_id_by_sim_slot_no(int slot_no)
 int ctsvc_server_sim_get_sim_slot_no_by_info_id(int sim_info_id)
 {
        GSList *cursor = NULL;
-       for(cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
+       for (cursor=__ctsvc_sim_info;cursor;cursor=cursor->next) {
                ctsvc_sim_info_s *info = cursor->data;
                if (info->sim_info_id == sim_info_id) {
                        if (NULL == __ctsvc_server_sim_get_tapi_handle(info))
@@ -344,42 +355,69 @@ int ctsvc_server_sim_get_sim_slot_no_by_info_id(int sim_info_id)
        return -1;
 }
 
+static void __ctsvc_server_sim_destroy_records(gpointer data)
+{
+       sim_contact_s *record = data;
+       __ctsvc_server_sim_record_destroy(record);
+}
+
+static void __ctsvc_server_sim_destroy_import_contacts(ctsvc_sim_info_s *info)
+{
+       RET_IF(NULL == info);
+       RET_IF(NULL == info->import_contacts);
+
+       g_slist_free_full(info->import_contacts, __ctsvc_server_sim_destroy_records);
+       info->import_contacts = NULL;
+}
+
 static int __ctsvc_server_sim_insert_records_to_db(ctsvc_sim_info_s *info)
 {
        CTS_FN_CALL;
        int i;
        int ret = 0;
+       int count = 0;
        sim_contact_s *record = NULL;
        contacts_record_h contact = NULL;
        contacts_list_h list = NULL;
        GSList *cursor = NULL;
+       const char *zone_name = ctsvc_server_zone_get_default_zone();
+
+       /* insert contacts to DB */
+       ret = contacts_list_create(&list);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("contacts_list_create() Fail(%d)", ret);
+               return CONTACTS_ERROR_INTERNAL;
+       }
 
-       // insert contacts to DB
        for (cursor = info->import_contacts, i=0;cursor;i++) {
-               if (list == NULL)
-                       contacts_list_create(&list);
-               ret = __ctsvc_server_sim_ctsvc_record_clone(cursor->data, DEFAULT_ADDRESS_BOOK_ID, &contact);
-               contacts_list_add(list, contact);
-               if (i == 50) {
-                       ret = contacts_db_insert_records(list, NULL, NULL);
-                       WARN_IF(ret < CONTACTS_ERROR_NONE, "contacts_db_insert_records() Failed(%d)", ret);
+               record = cursor->data;
+               ret = __ctsvc_server_sim_ctsvc_record_clone(record, DEFAULT_ADDRESS_BOOK_ID, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("__ctsvc_server_sim_ctsvc_record_clone() Fail(%d)", ret);
+                       contacts_list_destroy(list, true);
+                       return CONTACTS_ERROR_INTERNAL;
+               }
+               ret = contacts_list_add(list, contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("contacts_list_add() Fail(%d)", ret);
                        contacts_list_destroy(list, true);
-                       list = NULL;
-                       i = 0;
+                       return CONTACTS_ERROR_INTERNAL;
                }
                cursor = cursor->next;
-               info->import_contacts = g_slist_remove(info->import_contacts, record);
-               ctsvc_server_sim_record_destroy(record);
        }
-       g_slist_free(info->import_contacts);
-       info->import_contacts = NULL;
 
-       if (list) {
-               ret = contacts_db_insert_records(list, NULL, NULL);
-               WARN_IF(ret < CONTACTS_ERROR_NONE, "contacts_db_insert_records() Failed(%d)", ret);
-               contacts_list_destroy(list, true);
+       contacts_list_get_count(list, &count);
+       CTS_DBG("records count:%d", count);
+       if (0 < count) {
+               ret = ctsvc_db_insert_records(zone_name, list, NULL, NULL);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_db_insert_records() Fail(%d)", ret);
+                       contacts_list_destroy(list, true);
+                       return ret;
+               }
        }
 
+       contacts_list_destroy(list, true);
        return CONTACTS_ERROR_NONE;
 }
 
@@ -394,42 +432,56 @@ static void __ctsvc_server_sim_import_contact_cb(TapiHandle *handle, int result,
 
        if (NULL == sim_info) {
                CTS_ERR("sim_info is NULL, result = %d", access_rt);
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto ERROR_RETURN;
+               ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_SYSTEM, 0, NULL);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+               __ctsvc_server_sim_set_return_data(NULL);
+               return;
        }
 
        info = __ctsvc_server_sim_get_handle_by_tapi_handle(handle);
-       if (info == NULL) {
-               CTS_ERR("__ctsvc_server_sim_get_handle_by_tapi_handle fail");
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto ERROR_RETURN;
+       if (NULL == info) {
+               CTS_ERR("__ctsvc_server_sim_get_handle_by_tapi_handle() Fail");
+               ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL, 0, NULL);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+               __ctsvc_server_sim_set_return_data(NULL);
+               return;
        }
 
-       if (access_rt == TAPI_SIM_PB_INVALID_INDEX) {
+       if (TAPI_SIM_PB_INVALID_INDEX == access_rt) {
                int start_index = 0;
-               if (user_data != NULL)
+               if (user_data)
                        start_index = (int)user_data;
                CTS_DBG("TAPI_SIM_PB_INVALID_INDEX : start_index = %d",start_index);
                start_index++;
-               if (start_index > info->file_record[TAPI_PB_3G_NAME].index_max) {
+               if (info->file_record[TAPI_PB_3G_NAME].index_max < start_index) {
                        CTS_ERR("start_index is invalid start_index = %d, total = %d", start_index,
-                                               info->file_record[TAPI_PB_3G_NAME].index_max);
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto ERROR_RETURN;
+                                       info->file_record[TAPI_PB_3G_NAME].index_max);
+                       ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL, 0, NULL);
+                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+                       __ctsvc_server_sim_destroy_import_contacts(info);
+                       __ctsvc_server_sim_set_return_data(NULL);
+                       return;
                }
                ret = tel_read_sim_pb_record(handle, info->sim_type, start_index,
-                                       __ctsvc_server_sim_import_contact_cb, (void*)start_index);
-               if (ret != TAPI_API_SUCCESS) {
-                       CTS_ERR("SIM phonebook access Failed(%d) start_indext(%d)", access_rt,start_index);
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto ERROR_RETURN;
+                               __ctsvc_server_sim_import_contact_cb, (void*)start_index);
+               if (TAPI_API_SUCCESS != ret) {
+                       CTS_ERR("SIM phonebook access Fail(%d) start_indext(%d)", access_rt,start_index);
+                       ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_SYSTEM, 0, NULL);
+                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+                       __ctsvc_server_sim_destroy_import_contacts(info);
+                       __ctsvc_server_sim_set_return_data(NULL);
+                       return;
                }
+               return;
        }
 
        if (TAPI_SIM_PB_SUCCESS != access_rt) {
-               CTS_ERR("SIM phonebook access Failed(%d)", access_rt);
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto ERROR_RETURN;
+               CTS_ERR("SIM phonebook access Fail(%d)", access_rt);
+               ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_SYSTEM, 0, NULL);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+               __ctsvc_server_sim_destroy_import_contacts(info);
+               __ctsvc_server_sim_set_return_data(NULL);
+               return;
        }
 
        switch (sim_info->phonebook_type) {
@@ -442,38 +494,35 @@ static void __ctsvc_server_sim_import_contact_cb(TapiHandle *handle, int result,
        case TAPI_SIM_PB_SDN:
        default:
                CTS_ERR("Unknown storage type(%d)", sim_info->phonebook_type);
-               ret = CONTACTS_ERROR_SYSTEM;
-               goto ERROR_RETURN;
+               ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_SYSTEM, 0, NULL);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+               __ctsvc_server_sim_destroy_import_contacts(info);
+               __ctsvc_server_sim_set_return_data(NULL);
+               return;
        }
 
        if (sim_info->next_index && CTSVC_TAPI_SIM_PB_MAX != sim_info->next_index) {
                CTS_DBG("NextIndex = %d", sim_info->next_index);
                ret = tel_read_sim_pb_record(__ctsvc_server_sim_get_tapi_handle(info), sim_info->phonebook_type,
                                sim_info->next_index, __ctsvc_server_sim_import_contact_cb, NULL);
+
                if (TAPI_API_SUCCESS != ret) {
-                       CTS_ERR("tel_read_sim_pb_record() Failed(%d)", ret);
-                       ret = CONTACTS_ERROR_SYSTEM;
-                       goto ERROR_RETURN;
-               }
-       }
-       else {
-               // insert imported contact to DB
-               __ctsvc_server_sim_insert_records_to_db(info);
-               if (__ctsvc_server_sim_get_return_data()) {
-                       ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_NONE, 0, NULL);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Failed(%d)", ret);
+                       CTS_ERR("tel_read_sim_pb_record() Fail(%d)", ret);
+                       ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_SYSTEM, 0, NULL);
+                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+                       __ctsvc_server_sim_destroy_import_contacts(info);
                        __ctsvc_server_sim_set_return_data(NULL);
+                       return;
                }
        }
-       return;
-
-ERROR_RETURN:
-       if (__ctsvc_server_sim_get_return_data()) {
+       else {
+               /* insert imported contact to DB */
+               ret = __ctsvc_server_sim_insert_records_to_db(info);
                ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), ret, 0, NULL);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_socket_return() Fail(%d)", ret);
+               __ctsvc_server_sim_destroy_import_contacts(info);
                __ctsvc_server_sim_set_return_data(NULL);
        }
-       return;
 }
 
 int ctsvc_server_sim_import_contact(void* data, int sim_slot_no)
@@ -483,23 +532,23 @@ int ctsvc_server_sim_import_contact(void* data, int sim_slot_no)
        ctsvc_sim_info_s *info;
 
        info = __ctsvc_server_sim_get_handle_by_sim_slot_no(sim_slot_no);
-       RETVM_IF(NULL == info, CONTACTS_ERROR_SYSTEM, "sim init is not completed");
-       RETVM_IF(false == info->initialized, CONTACTS_ERROR_SYSTEM, "sim init is not completed");
-       RETVM_IF(NULL != __ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL,
+       RETV_IF(NULL == info, CONTACTS_ERROR_SYSTEM);
+       RETV_IF(false == info->initialized, CONTACTS_ERROR_SYSTEM);
+       RETVM_IF(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL,
                        "Server is already processing with sim");
 
        __ctsvc_server_sim_set_return_data(data);
 
-       if (info->file_record[TAPI_PB_3G_NAME].used_count == 0) {
+       if (0 == info->file_record[TAPI_PB_3G_NAME].used_count) {
                ret = ctsvc_server_socket_return(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_NO_DATA, 0, NULL);
-               WARN_IF(CONTACTS_ERROR_SYSTEM != ret, "helper_socket_return() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "helper_socket_return() Fail(%d)", ret);
                __ctsvc_server_sim_set_return_data(NULL);
                return ret;
        }
 
        ret = tel_read_sim_pb_record(__ctsvc_server_sim_get_tapi_handle(info), info->sim_type, 1,
                        __ctsvc_server_sim_import_contact_cb, NULL);
-       if (ret != TAPI_API_SUCCESS) {
+       if (TAPI_API_SUCCESS != ret) {
                CTS_ERR("tel_read_sim_pb_record = %d",ret);
                __ctsvc_server_sim_set_return_data(NULL);
                return CONTACTS_ERROR_SYSTEM;
@@ -522,35 +571,37 @@ static void __ctsvc_server_sim_sdn_read_cb(TapiHandle *handle, int result, void
 {
        CTS_FN_CALL;
        int ret=0;
-       TelSimPbAccessResult_t sec_rt = result;
+       TelSimPbAccessResult_t access_rt = result;
        TelSimPbRecord_t *sim_info = data;
        ctsvc_sim_info_s *info = (ctsvc_sim_info_s*)user_data;
 
-       RETM_IF(sim_info == NULL,  "sim_info is NULL");
+       RET_IF(NULL == sim_info);
 
-       if (TAPI_SIM_PB_SUCCESS != sec_rt) {
+       if (TAPI_SIM_PB_SUCCESS != access_rt) {
                if (TAPI_SIM_PB_SDN == sim_info->phonebook_type &&
-                               TAPI_SIM_PB_INVALID_INDEX == sec_rt) {
+                               TAPI_SIM_PB_INVALID_INDEX == access_rt) {
                        CTS_DBG("Index = %d", sim_info->index);
                        ret = tel_read_sim_pb_record(handle, sim_info->phonebook_type, sim_info->index+1,
                                        __ctsvc_server_sim_sdn_read_cb, info);
-                       RETM_IF(ret != TAPI_API_SUCCESS,  "tel_read_sim_pb_record() Failed(%d)", ret);
+                       RETM_IF(TAPI_API_SUCCESS != ret,  "tel_read_sim_pb_record() Fail(%d)", ret);
                }
-               CTS_ERR("SIM phonebook access Failed(%d)", sec_rt);
-               goto ERROR_RETURN;
+               CTS_ERR("SIM phonebook access Fail(%d)", access_rt);
+               ctsvc_server_trim_memory();
+               return;
        }
 
        switch (sim_info->phonebook_type) {
        case TAPI_SIM_PB_SDN:
-               ret = ctsvc_server_insert_sdn_contact((char *)sim_info->name, (char *)sim_info->number, info->sim_slot_no);
-               WARN_IF(ret != CONTACTS_ERROR_NONE, "ctsvc_server_insert_sdn_contact() Failed(%d)", ret);
+               ret = ctsvc_server_insert_sdn_contact(ctsvc_server_zone_get_default_zone(), (char *)sim_info->name, (char *)sim_info->number, info->sim_slot_no);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_insert_sdn_contact() Fail(%d)", ret);
                break;
        case TAPI_SIM_PB_ADN:
        case TAPI_SIM_PB_3GSIM:
        case TAPI_SIM_PB_FDN:
        default:
                CTS_ERR("Not SDN type(%d)", sim_info->phonebook_type);
-               goto ERROR_RETURN;
+               ctsvc_server_trim_memory();
+               return;
        }
 
        if (sim_info->next_index && CTSVC_TAPI_SIM_PB_MAX != sim_info->next_index) {
@@ -558,45 +609,39 @@ static void __ctsvc_server_sim_sdn_read_cb(TapiHandle *handle, int result, void
                ret = tel_read_sim_pb_record(handle, sim_info->phonebook_type,sim_info->next_index,
                                __ctsvc_server_sim_sdn_read_cb, info);
                if (TAPI_API_SUCCESS != ret) {
-                       CTS_ERR("tel_read_sim_pb_record() Failed(%d)", ret);
-                       goto ERROR_RETURN;
+                       CTS_ERR("tel_read_sim_pb_record() Fail(%d)", ret);
+                       ctsvc_server_trim_memory();
+                       return;
                }
        }
        else {
                ctsvc_server_trim_memory();
        }
-       return;
-
-ERROR_RETURN:
-       ctsvc_server_trim_memory();
-
-       return;
 }
 
-static void __ctsvc_server_sim_sdn_meta_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
+static void __ctsvc_server_sim_sdn_count_cb(TapiHandle *handle, int result, void *data, void *user_data)
 {
        CTS_FN_CALL;
        int ret = 0;
-       TelSimPbAccessResult_t sec_rt = result;
-       TelSimPbEntryInfo_t *pe = data;
+       TelSimPbAccessResult_t access_rt = result;
+       TelSimPbStorageInfo_t *ps = data;
        ctsvc_sim_info_s *info = (ctsvc_sim_info_s*)user_data;
 
-       RETM_IF(TAPI_SIM_PB_SUCCESS != sec_rt, "TelSimPbAccessResult_t fail(%d)",sec_rt);
-       RETM_IF(pe == NULL, "pe is NULL result =%d",sec_rt);
+       RETM_IF(TAPI_SIM_PB_SUCCESS != access_rt, "TelSimPbAccessResult:%d", access_rt);
+       RETM_IF(NULL == ps, "ps is NULL. TelSimPbAccessResult:%d", access_rt);
 
-       if (pe->PbUsedCount > 0) {
+       if (0 < ps->UsedRecordCount) {
                ret = tel_read_sim_pb_record(info->handle, TAPI_SIM_PB_SDN, 1, __ctsvc_server_sim_sdn_read_cb, info);
                if (TAPI_API_SUCCESS != ret) {
-                       CTS_ERR("tel_read_sim_pb_record() Failed(%d)", ret);
-                       goto ERROR_RETURN;
+                       CTS_ERR("tel_read_sim_pb_record() Fail(%d)", ret);
+                       ctsvc_server_trim_memory();
+                       return;
                }
        }
-       else
-               CTS_ERR("pe->PbUsedCount : 0 no sdn!!!!", ret);
-
-ERROR_RETURN:
+       else {
+               CTS_ERR("ps->UsedRecordCount:0. No SDN!!!!");
+       }
        ctsvc_server_trim_memory();
-       return;
 }
 
 static int __ctsvc_server_sim_sdn_read(ctsvc_sim_info_s* info)
@@ -606,45 +651,47 @@ static int __ctsvc_server_sim_sdn_read(ctsvc_sim_info_s* info)
        int card_changed = 0;
        TelSimCardStatus_t sim_status;
 
-       RETVM_IF(NULL != __ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL,
+       RETVM_IF(__ctsvc_server_sim_get_return_data(), CONTACTS_ERROR_INTERNAL,
                        "Server is already processing with sim");
 
        ret = tel_get_sim_init_info(info->handle, &sim_status, &card_changed);
-       if(TAPI_API_SUCCESS != ret) {
-               CTS_ERR("tel_get_sim_init_info() Failed(%d)", ret);
+       if (TAPI_API_SUCCESS != ret) {
+               CTS_ERR("tel_get_sim_init_info() Fail(%d)", ret);
                CTS_DBG("sim_status = %d, card_changed = %d", sim_status, card_changed);
-               goto ERROR_RETURN;
+               ctsvc_server_trim_memory();
+               return CONTACTS_ERROR_SYSTEM;
        }
 
        if (TAPI_SIM_STATUS_CARD_NOT_PRESENT == sim_status ||
                        TAPI_SIM_STATUS_CARD_REMOVED == sim_status) {
-               ret = ctsvc_server_delete_sdn_contact(info->sim_slot_no);
-               if(CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_server_delete_sdn_contact() Failed(%d)", ret);
-                       goto ERROR_RETURN;
+               ret = ctsvc_server_delete_sdn_contact(ctsvc_server_zone_get_default_zone(), info->sim_slot_no);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_delete_sdn_contact() Fail(%d)", ret);
+                       ctsvc_server_trim_memory();
+                       return ret;
                }
        }
        else if (TAPI_SIM_STATUS_SIM_INIT_COMPLETED == sim_status) {
-               ret = ctsvc_server_delete_sdn_contact(info->sim_slot_no);
-               if(CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_server_delete_sdn_contact() Failed(%d)", ret);
-                       goto ERROR_RETURN;
+               ret = ctsvc_server_delete_sdn_contact(ctsvc_server_zone_get_default_zone(), info->sim_slot_no);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_server_delete_sdn_contact() Fail(%d)", ret);
+                       ctsvc_server_trim_memory();
+                       return ret;
                }
 
-               ret = tel_get_sim_pb_meta_info(info->handle, TAPI_SIM_PB_SDN, __ctsvc_server_sim_sdn_meta_info_cb, info);
+               ret = tel_get_sim_pb_count(info->handle, TAPI_SIM_PB_SDN, __ctsvc_server_sim_sdn_count_cb, info);
                if (TAPI_API_SUCCESS != ret) {
-                       CTS_ERR("tel_get_sim_pb_meta_info() Failed(%d)", ret);
-                       goto ERROR_RETURN;
+                       CTS_ERR("tel_get_sim_pb_meta_info() Fail(%d)", ret);
+                       ctsvc_server_trim_memory();
+                       return CONTACTS_ERROR_SYSTEM;
                }
        }
-       else
-               CTS_ERR("sim_status Failed(%d)", sim_status);
+       else {
+               CTS_ERR("sim_status Fail(%d)", sim_status);
+               return CONTACTS_ERROR_SYSTEM;
+       }
 
        return CONTACTS_ERROR_NONE;
-
-ERROR_RETURN:
-       ctsvc_server_trim_memory();
-       return ret;
 }
 
 static void __ctsvc_server_sim_get_meta_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
@@ -659,7 +706,7 @@ static void __ctsvc_server_sim_get_meta_info_cb(TapiHandle *handle, int result,
        CTS_DBG("sim slot id :%d, sim_type = %d", info->sim_slot_no, info->sim_type);
        if (TAPI_SIM_PB_3GSIM == info->sim_type) {
                TelSimPbCapabilityInfo_t *capa = data;
-               RETM_IF(capa == NULL, "capa is NULL result =%d",access_rt);
+               RETM_IF(NULL == capa, "capa is NULL result =%d",access_rt);
 
                for (i=0; i < capa->FileTypeCount; i++) {
                        type = capa->FileTypeInfo[i].field_type;
@@ -677,7 +724,7 @@ static void __ctsvc_server_sim_get_meta_info_cb(TapiHandle *handle, int result,
        }
        else if (TAPI_SIM_PB_ADN == info->sim_type) {
                TelSimPbEntryInfo_t *pe = data;
-               RETM_IF(pe == NULL, "pe is NULL result =%d",access_rt);
+               RETM_IF(NULL == pe, "pe is NULL result =%d", access_rt);
 
                info->file_record[CTSVC_2GSIM_NAME].support = true;
                info->file_record[CTSVC_2GSIM_NAME].index_max = pe->PbIndexMax;
@@ -703,10 +750,10 @@ static void __ctsvc_server_sim_get_meta_info_cb(TapiHandle *handle, int result,
                return;
        }
 
-       if (!info->initialized) {
+       if (false == info->initialized) {
                info->initialized = true;
                ret = __ctsvc_server_sim_sdn_read(info);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_sdn_read() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_sdn_read() Fail(%d)", ret);
        }
 
        return;
@@ -720,13 +767,13 @@ static void __ctsvc_server_sim_get_iccid_cb(TapiHandle *handle, int result, void
        int ret;
        int id;
 
-       RETM_IF(access_rt != TAPI_SIM_ACCESS_SUCCESS, "tel_get_sim_iccid fail(%d)", access_rt);
+       RETM_IF(TAPI_SIM_ACCESS_SUCCESS != access_rt, "tel_get_sim_iccid Fail(%d)", access_rt);
 
        CTS_DBG("%d, %s", iccid->icc_length, iccid->icc_num);
 
        info->sim_unique_id = strdup(iccid->icc_num);
 
-       ret = ctsvc_server_get_sim_id(info->sim_unique_id, &id);
+       ret = ctsvc_server_get_sim_id(ctsvc_server_zone_get_default_zone(), info->sim_unique_id, &id);
        if (CONTACTS_ERROR_NONE == ret)
                info->sim_info_id = id;
 }
@@ -736,22 +783,24 @@ static int __ctsvc_server_sim_init_meta_info(ctsvc_sim_info_s *info)
        int ret = TAPI_API_SUCCESS;
        int err = CONTACTS_ERROR_NONE;
 
-       if (info->sim_type == TAPI_SIM_PB_UNKNOWNN){
+       if (TAPI_SIM_PB_UNKNOWNN == info->sim_type) {
                err = __ctsvc_server_sim_init_info(info);
-               WARN_IF(CONTACTS_ERROR_NONE != err, "__ctsvc_server_sim_init_info() Failed(%d)", err);
+               WARN_IF(CONTACTS_ERROR_NONE != err, "__ctsvc_server_sim_init_info() Fail(%d)", err);
        }
 
-       if (info->sim_type == TAPI_SIM_PB_3GSIM)
+       if (TAPI_SIM_PB_3GSIM == info->sim_type) {
                ret = tel_get_sim_pb_usim_meta_info(info->handle, __ctsvc_server_sim_get_meta_info_cb, info);
-       else if (info->sim_type == TAPI_SIM_PB_ADN)
+       }
+       else if (TAPI_SIM_PB_ADN == info->sim_type) {
                ret = tel_get_sim_pb_meta_info(info->handle, info->sim_type, __ctsvc_server_sim_get_meta_info_cb, info);
-       else{
+       }
+       else {
                CTS_ERR("info->sim_type is invalid(%d) stop sim init !!!", info->sim_type);
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       RETVM_IF(ret != TAPI_API_SUCCESS, CONTACTS_ERROR_SYSTEM,
-                               "tel_get_sim_(usim)_meta_info(type:%d) fail (%d)", info->sim_type, ret);
+       RETVM_IF(TAPI_API_SUCCESS != ret, CONTACTS_ERROR_SYSTEM,
+                               "tel_get_sim_(usim)_meta_info(type:%d) Fail(%d)", info->sim_type, ret);
 
        return CONTACTS_ERROR_NONE;
 }
@@ -762,59 +811,48 @@ static int __ctsvc_server_sim_init_info(ctsvc_sim_info_s *info)
        int ret;
        TelSimCardType_t cardtype = TAPI_SIM_PB_UNKNOWNN;
 
-       // get sim_type
+       /* get sim_type */
        ret = tel_get_sim_type(info->handle, &cardtype);
-       RETVM_IF(ret != TAPI_API_SUCCESS, CONTACTS_ERROR_SYSTEM, "tel_get_sim_type failed(%d)slot no(%d)", ret, info->sim_slot_no);
-       if (cardtype == TAPI_SIM_CARD_TYPE_USIM)
+       RETVM_IF(TAPI_API_SUCCESS != ret, CONTACTS_ERROR_SYSTEM, "tel_get_sim_type Fail(%d)slot no(%d)", ret, info->sim_slot_no);
+       if (TAPI_SIM_CARD_TYPE_USIM == cardtype) {
                info->sim_type = TAPI_SIM_PB_3GSIM;
-       else if (cardtype == TAPI_SIM_CARD_TYPE_GSM)
+       }
+       else if (TAPI_SIM_CARD_TYPE_GSM == cardtype) {
                info->sim_type = TAPI_SIM_PB_ADN;
-       else{
+       }
+       else {
                CTS_ERR("cardtype(%d)is invalid!!!", cardtype);
                return CONTACTS_ERROR_SYSTEM;
        }
 
-       // set iccid : unique info of SIM
-       ret = tel_get_sim_iccid (info->handle, __ctsvc_server_sim_get_iccid_cb, info);
-       RETVM_IF(ret != TAPI_API_SUCCESS, CONTACTS_ERROR_SYSTEM, "tel_get_sim_iccid failed(%d)", ret);
+       /* set iccid : unique info of SIM */
+       ret = tel_get_sim_iccid(info->handle, __ctsvc_server_sim_get_iccid_cb, info);
+       RETVM_IF(TAPI_API_SUCCESS != ret, CONTACTS_ERROR_SYSTEM, "tel_get_sim_iccid Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static void __ctsvc_server_sim_data_remove(ctsvc_sim_info_s *info)
-{
-       GSList *cursor;
-       sim_contact_s *record = NULL;
-
-       for (cursor=info->import_contacts;cursor;cursor=cursor->next) {
-               record = cursor->data;
-               info->import_contacts = g_slist_remove(info->import_contacts, record);
-               ctsvc_server_sim_record_destroy(record);
-       }
-       g_slist_free(info->import_contacts);
-       info->import_contacts = NULL;
-}
-
 static void __ctsvc_server_sim_noti_pb_status(TapiHandle *handle, const char *noti_id, void *data, void *user_data)
 {
        CTS_FN_CALL;
        int ret = 0;
        ctsvc_sim_info_s *info = (ctsvc_sim_info_s*)user_data;
        TelSimPbStatus_t *pb_status = (TelSimPbStatus_t *)data;
-       RETM_IF(pb_status == NULL, "pb_status is null");
+       RET_IF(NULL == pb_status);
        INFO("received pb status noti : b_3g[%d], b_adn[%d], b_fdn[%d]", pb_status->pb_list.b_3g, pb_status->pb_list.b_adn, pb_status->pb_list.b_fdn);
 
-       if (pb_status->pb_list.b_3g == 1 || pb_status->pb_list.b_adn == 1) {
+       if ((1 == pb_status->pb_list.b_3g) || (1 == pb_status->pb_list.b_adn)) {
                if (info->initialized)
                        return;
                ret = __ctsvc_server_sim_init_meta_info(info);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_meta_info() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_meta_info() Fail(%d)", ret);
        }
-       // FDN on : can not import sim contacts
-       else if (pb_status->pb_list.b_fdn ==1 && pb_status->pb_list.b_adn == 0 && info->sim_type == TAPI_SIM_PB_ADN) {
+       /* FDN on : can not import sim contacts */
+       else if ((1 == pb_status->pb_list.b_fdn) && (0 == pb_status->pb_list.b_adn)
+                       && (TAPI_SIM_PB_ADN == info->sim_type)) {
                CTS_INFO("This is sim card is 2G and FDN on status. sim phonebook will be block");
                info->initialized = false;
-               __ctsvc_server_sim_data_remove(info);
+               __ctsvc_server_sim_destroy_import_contacts(info);
        }
        else {
                CTS_ERR("This noti did not control !!!");
@@ -828,7 +866,7 @@ static void __ctsvc_server_sim_noti_sim_refreshed(TapiHandle *handle, const char
 
        INFO("Recieved SIM Refresh event");
        info->initialized = false;
-       __ctsvc_server_sim_data_remove(info);
+       __ctsvc_server_sim_destroy_import_contacts(info);
 }
 
 static int __ctsvc_server_sim_info_init()
@@ -840,24 +878,28 @@ static int __ctsvc_server_sim_info_init()
        int i;
        unsigned int cp_index = 0;
 
+#if !GLIB_CHECK_VERSION(2,35,0)
        g_type_init();
+#endif
        cp_name = tel_get_cp_name_list();
-       RETVM_IF(cp_name == NULL, CONTACTS_ERROR_SYSTEM, "tel_get_cp_name_list fail (cp_name is NULL)");
+       RETVM_IF(NULL == cp_name, CONTACTS_ERROR_SYSTEM, "tel_get_cp_name_list() Fail(cp_name is NULL)");
 
-       ret = ctsvc_server_delete_sdn_contact(-1);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_delete_sdn_contact() Failed(%d)", ret);
+       ret = ctsvc_server_delete_sdn_contact(ctsvc_server_zone_get_default_zone(), -1);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_delete_sdn_contact() Fail(%d)", ret);
 
-       while(cp_name[cp_index]){
+       while (cp_name[cp_index]) {
                cp_index++;
        }
 
        cp_index = 0;
-       while(cp_name[cp_index]) {
+       while (cp_name[cp_index]) {
                TapiHandle *handle;
                ctsvc_sim_info_s *info = calloc(1, sizeof(ctsvc_sim_info_s));
-               if (NULL == info) {
-                       CTS_ERR("calloc() return NULL");
-                       break;
+               if (NULL == info)
+               {
+                       CTS_ERR("calloc() Fail");
+                       g_strfreev(cp_name);
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                }
                info->cp_name = strdup(cp_name[cp_index]);
                INFO("SIM cp_name[%d] : %s", cp_index, info->cp_name);
@@ -868,7 +910,7 @@ static int __ctsvc_server_sim_info_init()
                info->import_contacts = NULL;
                info->sim_unique_id = NULL;
 
-               // initialize file_record meta info
+               /* initialize file_record meta info */
                for (i = 0 ;i <TAPI_PB_MAX_FILE_CNT; i++) {
                        info->file_record[i].support = false;
                        info->file_record[i].index_max = 0;
@@ -879,21 +921,21 @@ static int __ctsvc_server_sim_info_init()
                handle = __ctsvc_server_sim_get_tapi_handle(info);
                if (handle) {
                        ret = __ctsvc_server_sim_init_info(info);
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_info() Failed(%d)", ret);
+                       WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_info() Fail(%d)", ret);
                        ret = tel_get_sim_pb_init_info(handle, &sim_stat, &pb_list);
-                       if (TAPI_API_SUCCESS == ret && (pb_list.b_3g == 1 || pb_list.b_adn == 1)) {
+                       if (TAPI_API_SUCCESS == ret && ((1 == pb_list.b_3g) || (1 == pb_list.b_adn))) {
                                ret = __ctsvc_server_sim_init_meta_info(info);
-                               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_meta_info() Failed(%d)", ret);
+                               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_server_sim_init_meta_info() Fail(%d)", ret);
                        }
 
                        ret = tel_register_noti_event(handle, TAPI_NOTI_PB_STATUS, __ctsvc_server_sim_noti_pb_status, info);
-                       WARN_IF( TAPI_API_SUCCESS != ret, "tel_register_noti_event() Failed(%d)", ret);
+                       WARN_IF(TAPI_API_SUCCESS != ret, "tel_register_noti_event() Fail(%d)", ret);
 
                        ret = tel_register_noti_event(handle, TAPI_NOTI_SIM_REFRESHED, __ctsvc_server_sim_noti_sim_refreshed, info);
-                       WARN_IF( TAPI_API_SUCCESS != ret, "tel_register_noti_event() Failed(%d)", ret);
+                       WARN_IF(TAPI_API_SUCCESS != ret, "tel_register_noti_event() Fail(%d)", ret);
                }
                else {
-                       CTS_ERR("tel_init fail");
+                       CTS_ERR("tel_init() Fail");
                }
 
                __ctsvc_sim_info = g_slist_append(__ctsvc_sim_info, (void*)info);
@@ -918,22 +960,23 @@ static void __ctsvc_server_sim_ready_cb(keynode_t *key, void *data)
        __ctsvc_sim_cb = false;
        vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_STATUS, __ctsvc_server_sim_ready_cb);
 
+       ctsvc_server_stop_timeout();
        __ctsvc_server_sim_info_init();
+       ctsvc_server_start_timeout();
 }
 
 static void __ctsvc_server_telephony_ready_cb(keynode_t *key, void *data)
 {
        int bReady = 0;
-       // TODO: it should be changed API
-       vconf_get_bool(VCONFKEY_TELEPHONY_TAPI_STATE, &bReady);
+       vconf_get_bool(VCONFKEY_TELEPHONY_READY, &bReady);
 
-       if (!bReady) {
+       if (0 == bReady) {
                CTS_ERR("telephony is not ready ");
                return;
        }
        INFO("telephony is Ready");
 
-       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_TAPI_STATE, __ctsvc_server_telephony_ready_cb);
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_READY, __ctsvc_server_telephony_ready_cb);
        __ctsvc_tapi_cb = false;
 
        int status = 0;
@@ -945,19 +988,20 @@ static void __ctsvc_server_telephony_ready_cb(keynode_t *key, void *data)
                return;
        }
 
+       ctsvc_server_stop_timeout();
        __ctsvc_server_sim_info_init();
+       ctsvc_server_start_timeout();
 }
 
 
 int ctsvc_server_sim_init()
 {
        int bReady = 0;
-       // TODO: it should be changed API
-       vconf_get_bool(VCONFKEY_TELEPHONY_TAPI_STATE, &bReady);
+       vconf_get_bool(VCONFKEY_TELEPHONY_READY, &bReady);
 
-       if (!bReady) {
+       if (0 == bReady) {
                CTS_ERR("telephony is not ready ");
-               vconf_notify_key_changed(VCONFKEY_TELEPHONY_TAPI_STATE, __ctsvc_server_telephony_ready_cb, NULL);
+               vconf_notify_key_changed(VCONFKEY_TELEPHONY_READY, __ctsvc_server_telephony_ready_cb, NULL);
                __ctsvc_tapi_cb = true;
                return CONTACTS_ERROR_NONE;
        }
@@ -978,31 +1022,24 @@ int ctsvc_server_sim_final(void)
 {
        CTS_FN_CALL;
        GSList *info_cursor = NULL;
-       sim_contact_s *record = NULL;
        int ret = 0;
 
        if (__ctsvc_tapi_cb)
-               vconf_ignore_key_changed(VCONFKEY_TELEPHONY_TAPI_STATE, __ctsvc_server_telephony_ready_cb);
+               vconf_ignore_key_changed(VCONFKEY_TELEPHONY_READY, __ctsvc_server_telephony_ready_cb);
        if (__ctsvc_sim_cb)
                vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_STATUS, __ctsvc_server_sim_ready_cb);
 
        for (info_cursor=__ctsvc_sim_info;info_cursor;info_cursor=info_cursor->next) {
                ctsvc_sim_info_s *info = info_cursor->data;
-               GSList *cursor;
                free(info->cp_name);
                free(info->sim_unique_id);
 
                if (info->handle) {
                        ret = tel_deinit(info->handle);
-                       WARN_IF(TAPI_API_SUCCESS != ret, "tel_deinit() Failed(%d)", ret);
+                       WARN_IF(TAPI_API_SUCCESS != ret, "tel_deinit() Fail(%d)", ret);
                }
 
-               for (cursor=info->import_contacts;cursor;cursor=cursor->next) {
-                       record = cursor->data;
-                       info->import_contacts = g_slist_remove(info->import_contacts, record);
-                       ctsvc_server_sim_record_destroy(record);
-               }
-               g_slist_free(info->import_contacts);
+               __ctsvc_server_sim_destroy_import_contacts(info);
 
                free(info);
        }
old mode 100755 (executable)
new mode 100644 (file)
index 30a36d0..8ceb096
@@ -19,8 +19,6 @@
 #ifndef __CTSVC_SERVER_SIM_H__
 #define __CTSVC_SERVER_SIM_H__
 
-#include <tapi_type.h>
-
 typedef struct {
        int sim_index;
        int contact_id;
@@ -46,5 +44,5 @@ int ctsvc_server_sim_get_info_id_by_sim_slot_no(int sim_slot_no);
 int ctsvc_server_sim_get_sim_slot_no_by_info_id(int sim_info_id);
 int ctsvc_server_socket_get_sim_init_status(void* data, int sim_slot_no);
 
-#endif // __CTSVC_SERVER_SIM_H__
+#endif /* __CTSVC_SERVER_SIM_H__ */
 
index 57fc694..20efd9f 100644 (file)
 #include "contacts.h"
 #include "ctsvc_internal.h"
 #include "ctsvc_struct.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_socket.h"
 #include "ctsvc_server_socket.h"
-#ifdef ENABLE_SIM_FEATURE
-#include "ctsvc_server_sim.h"
 #include "ctsvc_server_utils.h"
-#endif
+#include "ctsvc_server_sim.h"
 
 static int sockfd = -1;
 
@@ -80,8 +78,9 @@ int ctsvc_server_socket_return(GIOChannel *src, int value, int attach_num, int *
        CTS_FN_CALL;
        int ret;
        ctsvc_socket_msg_s msg = {0};
+       RETVM_IF(NULL == src, CONTACTS_ERROR_INVALID_PARAMETER, "src is NULL");
 
-       //      RETVM_IF(CONTACTS_ERROR_SYSTEM == value, value, "Socket has problems");
+       /* RETVM_IF(CONTACTS_ERROR_SYSTEM == value, value, "Socket has problems"); */
        RETVM_IF(CTSVC_SOCKET_MSG_REQUEST_MAX_ATTACH < attach_num, CONTACTS_ERROR_INTERNAL,
                        "Invalid msg(attach_num = %d)", attach_num);
 
@@ -104,7 +103,6 @@ int ctsvc_server_socket_return(GIOChannel *src, int value, int attach_num, int *
        return CONTACTS_ERROR_NONE;
 }
 
-#ifdef ENABLE_SIM_FEATURE
 static void __ctsvc_server_socket_import_sim(GIOChannel *src, int size)
 {
        CTS_FN_CALL;
@@ -113,10 +111,10 @@ static void __ctsvc_server_socket_import_sim(GIOChannel *src, int size)
        GError *gerr = NULL;
        char receiver[CTS_SQL_MAX_LEN] = {0};
 
-       if (size > 0) {
+       if (0 < size) {
                g_io_channel_read_chars(src, receiver, size, &len, &gerr);
                if (gerr) {
-                       CTS_ERR("g_io_channel_read_chars() Failed(%s)", gerr->message);
+                       CTS_ERR("g_io_channel_read_chars() Fail(%s)", gerr->message);
                        g_error_free(gerr);
                        return;
                }
@@ -133,7 +131,7 @@ static void __ctsvc_server_socket_import_sim(GIOChannel *src, int size)
        }
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_sim_import_contact() Failed(%d)", ret);
+               CTS_ERR("ctsvc_server_sim_import_contact() Fail(%d)", ret);
                ctsvc_server_socket_return(src, ret, 0, NULL);
        }
 }
@@ -147,10 +145,10 @@ static void __ctsvc_server_socket_get_sim_init_status(GIOChannel *src, int size)
        GError *gerr = NULL;
        char receiver[CTS_SQL_MAX_LEN] = {0};
 
-       if (size > 0) {
+       if (0 < size) {
                g_io_channel_read_chars(src, receiver, size, &len, &gerr);
                if (gerr) {
-                       CTS_ERR("g_io_channel_read_chars() Failed(%s)", gerr->message);
+                       CTS_ERR("g_io_channel_read_chars() Fail(%s)", gerr->message);
                        g_error_free(gerr);
                        return;
                }
@@ -167,7 +165,7 @@ static void __ctsvc_server_socket_get_sim_init_status(GIOChannel *src, int size)
        }
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_socket_get_sim_init_status() Failed(%d)", ret);
+               CTS_ERR("ctsvc_server_socket_get_sim_init_status() Fail(%d)", ret);
                ctsvc_server_socket_return(src, ret, 0, NULL);
        }
 }
@@ -181,7 +179,7 @@ int ctsvc_server_socket_return_sim_int(GIOChannel *src, int value)
 
        str_len = snprintf(count_str, sizeof(count_str), "%d", value);
        ret = ctsvc_server_socket_return(src, CONTACTS_ERROR_NONE, 1, &str_len);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_socket_return() Failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_socket_return() Fail(%d)", ret);
        CTS_DBG("count_str : %s", count_str);
        ret = __ctsvc_server_socket_safe_write(g_io_channel_unix_get_fd(src), count_str, str_len);
        RETVM_IF(-1 == ret, CONTACTS_ERROR_SYSTEM, "__ctsvc_server_socket_safe_write() Failed(errno = %d)", errno);
@@ -200,22 +198,18 @@ static void __ctsvc_server_socket_read_flush(GIOChannel *src, int size)
 
        g_io_channel_read_chars(src, receiver, size, &len, &gerr);
        if (gerr) {
-               CTS_ERR("g_io_channel_read_chars() Failed(%s)", gerr->message);
+               CTS_ERR("g_io_channel_read_chars() Fail(%s)", gerr->message);
                g_error_free(gerr);
        }
 }
-#endif // ENABLIE_SIM_FEATURE
 
 static gboolean __ctsvc_server_socket_request_handler(GIOChannel *src, GIOCondition condition,
                gpointer data)
 {
        int ret;
        int fd;
-#ifdef ENABLE_SIM_FEATURE
        bool have_read_permission = false;
        bool have_write_permission = false;
-       bool have_telephony_feature = false;
-#endif // ENABLE_SIM_FEATURE
 
        ctsvc_socket_msg_s msg = {0};
        CTS_FN_CALL;
@@ -231,17 +225,16 @@ static gboolean __ctsvc_server_socket_request_handler(GIOChannel *src, GIOCondit
 
        CTS_DBG("attach number = %d", msg.attach_num);
 
-
-
-#ifdef ENABLE_SIM_FEATURE
+       bool have_telephony_feature = false;
        have_telephony_feature = ctsvc_server_have_telephony_feature();
-       if (!have_telephony_feature) {
+       if (false == have_telephony_feature) {
                CTS_ERR("Telephony feature disabled");
-               __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);     // sim_id
+               __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);  /* sim_id */
                ctsvc_server_socket_return(src, CONTACTS_ERROR_NOT_SUPPORTED, 0, NULL);
                return TRUE;
        }
 
+
        if (SECURITY_SERVER_API_SUCCESS == (ret = security_server_check_privilege_by_sockfd(fd, "contacts-service::svc", "r")))
                have_read_permission = true;
        else
@@ -251,29 +244,26 @@ static gboolean __ctsvc_server_socket_request_handler(GIOChannel *src, GIOCondit
                have_write_permission = true;
        else
                INFO("fd(%d) : does not have contact write permission (%d)", fd, ret);
-#endif // ENABLE_SIM_FEATURE
 
        switch (msg.type) {
-#ifdef ENABLE_SIM_FEATURE
        case CTSVC_SOCKET_MSG_TYPE_REQUEST_IMPORT_SIM:
-               if (!have_write_permission) {
+               if (false == have_write_permission) {
                        CTS_ERR("write permission denied");
-                       __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);             // sim_id
+                       __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);  /* sim_id */
                        ctsvc_server_socket_return(src, CONTACTS_ERROR_PERMISSION_DENIED, 0, NULL);
                        return TRUE;
                }
                __ctsvc_server_socket_import_sim(src, msg.attach_sizes[0]);
                break;
        case CTSVC_SOCKET_MSG_TYPE_REQUEST_SIM_INIT_COMPLETE:
-               if (!have_read_permission) {
+               if (false == have_read_permission) {
                        CTS_ERR("read permission denied");
-                       __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);             // sim_id
+                       __ctsvc_server_socket_read_flush(src, msg.attach_sizes[0]);  /* sim_id */
                        ctsvc_server_socket_return(src, CONTACTS_ERROR_PERMISSION_DENIED, 0, NULL);
                        return TRUE;
                }
                __ctsvc_server_socket_get_sim_init_status(src, msg.attach_sizes[0]);
                break;
-#endif // ENABLE_SIM_FEATURE
        default:
                CTS_ERR("Unknown request type(%d)", msg.type);
                break;
@@ -319,15 +309,19 @@ int ctsvc_server_socket_init(void)
        RETVM_IF(-1 == sockfd, CONTACTS_ERROR_SYSTEM, "socket() Failed(errno = %d)", errno);
 
        ret = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));
-       RETVM_IF(-1 == ret, CONTACTS_ERROR_SYSTEM, "bind() Failed(errno = %d)", errno);
+       if (-1 == ret) {
+               close(sockfd);
+               CTS_ERR("bind() Failed(errno = %d)", errno);
+               return CONTACTS_ERROR_SYSTEM;
+       }
 
        ret = chown(CTSVC_SOCKET_PATH, getuid(), CTS_SECURITY_FILE_GROUP);
        if (0 != ret)
-               CTS_ERR("chown(%s) Failed(%d)", CTSVC_SOCKET_PATH, ret);
+               CTS_ERR("chown(%s) Fail(%d)", CTSVC_SOCKET_PATH, ret);
 
        ret = chmod(CTSVC_SOCKET_PATH, CTS_SECURITY_DEFAULT_PERMISSION);
        if (0 != ret)
-               CTS_ERR("chmod(%s) Failed(%d)", CTSVC_SOCKET_PATH, ret);
+               CTS_ERR("chmod(%s) Fail(%d)", CTSVC_SOCKET_PATH, ret);
 
        ret = listen(sockfd, 30);
        if (-1 == ret) {
index e623679..bbb5b43 100644 (file)
@@ -26,4 +26,4 @@ int ctsvc_server_socket_deinit(void);
 int ctsvc_server_socket_return(GIOChannel *src, int value, int attach_num, int *attach_size);
 int ctsvc_server_socket_return_sim_int(GIOChannel *src, int value);
 
-#endif // __CTSVC_SERVER_SOCKET_H__
+#endif /* __CTSVC_SERVER_SOCKET_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 6009f48..383f34c
 
 #include "ctsvc_internal.h"
 #include "contacts.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_notify.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_localize.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_db_plugin_group_helper.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 
-#include "ctsvc_person.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_server_person.h"
 
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
 
-static sqlite3 *server_db;
+static GHashTable *ctsvc_db_table = NULL;
 
-int ctsvc_server_db_open(sqlite3 **db)
+int ctsvc_server_db_open(const char *zone_name, sqlite3 **db)
 {
        CTS_FN_CALL;
        int ret;
 
-       if (!server_db) {
-               ret = db_util_open(CTSVC_DB_PATH, &server_db, 0);
-               RETVM_IF(ret != SQLITE_OK, CONTACTS_ERROR_DB,
-                               "db_util_open() Failed(%d)", ret);
+       sqlite3 *server_db = NULL;
+       if (NULL == ctsvc_db_table)
+               ctsvc_db_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               server_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+
+       if (NULL == server_db) {
+               char db_path[CTSVC_PATH_MAX_LEN] = {0};
+               int len = ctsvc_zone_get_root_path(zone_name, db_path, sizeof(db_path));
+               snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_PATH);
+
+               ret = db_util_open(db_path, &server_db, 0);
+               RETVM_IF(ret != SQLITE_OK, CONTACTS_ERROR_DB, "db_util_open() Fail(%d)", ret);
+               g_hash_table_replace(ctsvc_db_table, g_strdup(zone_name), server_db);
 
-               ret = sqlite3_create_function(server_db, "_DATA_DELETE_", 2, SQLITE_UTF8, NULL,
+               ret = sqlite3_create_function(server_db, "_DATA_DELETE_", 2, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_data_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(server_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(server_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_image_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(server_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(server_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_company_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
 #ifdef ENABLE_LOG_FEATURE
-               ret = sqlite3_create_function(server_db, "_PHONE_LOG_DELETE_", 1, SQLITE_UTF8, NULL,
+               ret = sqlite3_create_function(server_db, "_PHONE_LOG_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_phone_log_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-#endif // ENABLE_LOG_FEATURE
-               ret = sqlite3_create_function(server_db, "_PERSON_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+#endif /* ENABLE_LOG_FEATURE */
+               ret = sqlite3_create_function(server_db, "_PERSON_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_person_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(server_db, "_GROUP_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(server_db, "_GROUP_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_group_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
                ret = sqlite3_create_function(server_db, "_NUMBER_COMPARE_", 4, SQLITE_UTF8, NULL,
                                        ctsvc_db_phone_number_equal_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
        }
+
        if (db)
                *db = server_db;
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_db_close(void)
+int ctsvc_server_db_close(const char *zone_name)
 {
+       RETV_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_NONE);
+
+       sqlite3 *server_db = NULL;
+       server_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+
        if (server_db) {
+               g_hash_table_remove(ctsvc_db_table, zone_name);
                db_util_close(server_db);
                server_db = NULL;
        }
@@ -106,10 +124,15 @@ int ctsvc_server_db_close(void)
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_begin_trans(void)
+int ctsvc_server_begin_trans(const char *zone_name)
 {
-       int ret = -1;
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+
+       sqlite3 *server_db = NULL;
+       server_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == server_db, CONTACTS_ERROR_DB, "g_hash_table_lookup(%s) return NULL", zone_name);
 
+       int ret = -1;
        ret = sqlite3_exec(server_db, "BEGIN IMMEDIATE TRANSACTION",
                        NULL, NULL, NULL);
 
@@ -120,15 +143,21 @@ int ctsvc_server_begin_trans(void)
        }
 
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec() Failed(%d)", ret);
+               CTS_ERR("sqlite3_exec() Fail(%d)", ret);
                return CONTACTS_ERROR_DB;
        }
        return CONTACTS_ERROR_NONE;
 }
 
 #define CTS_COMMIT_TRY_MAX 5
-int ctsvc_server_end_trans(bool success)
+int ctsvc_server_end_trans(const char *zone_name, bool success)
 {
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+
+       sqlite3 *server_db = NULL;
+       server_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == server_db, CONTACTS_ERROR_DB, "g_hash_table_lookup(%s) return NULL", zone_name);
+
        int ret = -1, i=0;
        char *errmsg = NULL;
 
@@ -137,7 +166,7 @@ int ctsvc_server_end_trans(bool success)
                        ret = sqlite3_exec(server_db, "COMMIT TRANSACTION",
                                        NULL, NULL, &errmsg);
                        if (SQLITE_OK != ret) {
-                               CTS_ERR("sqlite3_exec(COMMIT) Failed(%d, %s)", ret, errmsg);
+                               CTS_ERR("sqlite3_exec(COMMIT) Fail(%d, %s)", ret, errmsg);
                                sqlite3_free(errmsg);
                                i++;
                                sleep(1);
@@ -156,7 +185,7 @@ int ctsvc_server_end_trans(bool success)
                ret = sqlite3_exec(server_db, "ROLLBACK TRANSACTION",
                                NULL, NULL, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("sqlite3_exec(ROLLBACK) Failed(%d, %s)", ret, errmsg);
+                       CTS_ERR("sqlite3_exec(ROLLBACK) Fail(%d, %s)", ret, errmsg);
                        sqlite3_free(errmsg);
                        i++;
                        sleep(1);
@@ -164,7 +193,7 @@ int ctsvc_server_end_trans(bool success)
        } while ((SQLITE_BUSY == ret || SQLITE_LOCKED == ret) && i < CTS_COMMIT_TRY_MAX);
 
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(ROLLBACK) Failed(%d) : DB lock", ret);
+               CTS_ERR("sqlite3_exec(ROLLBACK) Fail(%d) : DB lock", ret);
                return CONTACTS_ERROR_DB;
        }
        else {
@@ -173,7 +202,7 @@ int ctsvc_server_end_trans(bool success)
        }
 }
 
-int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary)
+int ctsvc_server_update_sort(const char *zone_name, int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary)
 {
        CTS_FN_CALL;
        int ret;
@@ -181,20 +210,20 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
        char *errmsg = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = ctsvc_server_db_open(&db);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Failed(%d)", ret);
+       ret = ctsvc_server_db_open(zone_name, &db);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Fail(%d)", ret);
 
-       ret = ctsvc_server_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_server_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_server_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_server_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language =%d",
                        CTS_TABLE_CONTACTS, prev_sort_primary, CTSVC_SORT_PRIMARY);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -202,10 +231,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                        CTS_TABLE_CONTACTS, prev_sort_secondary, CTSVC_SORT_SECONDARY);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -213,10 +242,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                                CTS_TABLE_CONTACTS, CTSVC_SORT_PRIMARY, new_sort_primary);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -224,10 +253,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                        CTS_TABLE_CONTACTS, CTSVC_SORT_SECONDARY, new_sort_secondary);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -235,10 +264,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                                CTS_TABLE_CONTACTS, prev_sort_primary, CTSVC_SORT_PRIMARY);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -246,10 +275,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                        CTS_TABLE_CONTACTS, prev_sort_secondary, CTSVC_SORT_SECONDARY);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -257,10 +286,10 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                                CTS_TABLE_CONTACTS, CTSVC_SORT_PRIMARY, new_sort_primary);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -268,22 +297,22 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                        CTS_TABLE_CONTACTS, CTSVC_SORT_SECONDARY, new_sort_secondary);
        ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
        if (SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+               CTS_ERR("sqlite3_exec(%s) Fail(%d, %s)", query, ret, errmsg);
                sqlite3_free(errmsg);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
        ret = ctsvc_server_set_default_sort(new_sort_primary);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
                return ret;
        }
-       ret = ctsvc_server_end_trans(true);
+       ret = ctsvc_server_end_trans(zone_name, true);
 
-       // person noti
+       /* person noti */
 #if 0
        if (CONTACTS_ERROR_NONE == ret) {
                int fd = open(CTSVC_NOTI_PERSON_CHANGED, O_TRUNC | O_RDWR);
@@ -291,12 +320,12 @@ int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int
                        close(fd);
        }
 #endif
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
 
        return ret;
 }
 
-int ctsvc_server_insert_sdn_contact(const char *name, const char *number,
+int ctsvc_server_insert_sdn_contact(const char *zone_name, const char *name, const char *number,
                int sim_slot_no)
 {
        int ret;
@@ -304,16 +333,16 @@ int ctsvc_server_insert_sdn_contact(const char *name, const char *number,
        sqlite3_stmt* stmt = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = ctsvc_server_db_open(&db);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Failed(%d)", ret);
+       ret = ctsvc_server_db_open(zone_name, &db);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Fail(%d)", ret);
 
        snprintf(query, sizeof(query), "INSERT INTO %s(name, number, sim_slot_no) VALUES(?, ?, ?)",
                        CTS_TABLE_SDN);
 
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
-               ctsvc_server_db_close();
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
 
@@ -323,26 +352,26 @@ int ctsvc_server_insert_sdn_contact(const char *name, const char *number,
 
        ret = sqlite3_step(stmt);
        if (SQLITE_DONE != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                sqlite3_finalize(stmt);
-               ctsvc_server_db_close();
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
        sqlite3_finalize(stmt);
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_delete_sdn_contact(int sim_slot_no)
+int ctsvc_server_delete_sdn_contact(const char *zone_name, int sim_slot_no)
 {
        int ret;
        sqlite3* db = NULL;
        sqlite3_stmt* stmt = NULL;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_server_db_open(&db);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "helper_db_open() Failed(%d)", ret);
+       ret = ctsvc_server_db_open(zone_name, &db);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "helper_db_open() Fail(%d)", ret);
 
        if (sim_slot_no < 0)
                snprintf(query, sizeof(query), "DELETE FROM %s", CTS_TABLE_SDN);
@@ -350,25 +379,25 @@ int ctsvc_server_delete_sdn_contact(int sim_slot_no)
                snprintf(query, sizeof(query), "DELETE FROM %s WHERE sim_slot_no = %d", CTS_TABLE_SDN, sim_slot_no);
 
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
-               ctsvc_server_db_close();
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
        ret = sqlite3_step(stmt);
        if (SQLITE_DONE != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                sqlite3_finalize(stmt);
-               ctsvc_server_db_close();
+               ctsvc_server_db_close(zone_name);
                return CONTACTS_ERROR_DB;
        }
        sqlite3_finalize(stmt);
 
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_update_collation()
+int ctsvc_server_update_collation(const char *zone_name)
 {
        int ret = 0;
        sqlite3* db = NULL;
@@ -376,20 +405,20 @@ int ctsvc_server_update_collation()
        cts_stmt update_stmt = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ctsvc_db_set_status(CONTACTS_DB_STATUS_CHANGING_COLLATION);
+       ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_CHANGING_COLLATION);
 
-       ret = ctsvc_server_db_open(&db);
+       ret = ctsvc_server_db_open(zone_name, &db);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_db_open() Failed(%d)", ret);
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+               CTS_ERR("ctsvc_server_db_open() Fail(%d)", ret);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return ret;
        }
 
-       ret = ctsvc_server_begin_trans();
-       if(CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_begin_trans() Failed(%d)", ret);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       ret = ctsvc_server_begin_trans(zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_begin_trans() Fail(%d)", ret);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return ret;
        }
 
@@ -397,11 +426,11 @@ int ctsvc_server_update_collation()
                        "SELECT contact_id, sort_name, reverse_sort_name "
                                "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return CONTACTS_ERROR_DB;
        }
 
@@ -409,12 +438,12 @@ int ctsvc_server_update_collation()
                        "UPDATE "CTS_TABLE_CONTACTS" SET sortkey=?, reverse_sortkey=? "
                                "WHERE contact_id = ?");
        ret = sqlite3_prepare_v2(db, query, strlen(query), &update_stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
                sqlite3_finalize(stmt);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return CONTACTS_ERROR_DB;
        }
 
@@ -445,12 +474,12 @@ int ctsvc_server_update_collation()
                free(reverse_sortkey);
 
                if (SQLITE_DONE != ret) {
-                       CTS_ERR("sqlite3_step(%s) Failed(%d, %s)", query, ret, sqlite3_errmsg(db));
+                       CTS_ERR("sqlite3_step(%s) Fail(%d, %s)", query, ret, sqlite3_errmsg(db));
                        sqlite3_finalize(stmt);
                        sqlite3_finalize(update_stmt);
-                       ctsvc_server_end_trans(false);
-                       ctsvc_server_db_close();
-                       ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+                       ctsvc_server_end_trans(zone_name, false);
+                       ctsvc_server_db_close(zone_name);
+                       ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                        return CONTACTS_ERROR_DB;
                }
 
@@ -459,19 +488,19 @@ int ctsvc_server_update_collation()
        }
 
        if (SQLITE_ROW != ret && SQLITE_DONE != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                sqlite3_finalize(update_stmt);
                sqlite3_finalize(stmt);
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return CONTACTS_ERROR_DB;
        }
 
        sqlite3_finalize(update_stmt);
        sqlite3_finalize(stmt);
 
-       ret = ctsvc_server_end_trans(true);
+       ret = ctsvc_server_end_trans(zone_name, true);
        if (CONTACTS_ERROR_NONE == ret) {
                int fd;
                fd = open(CTSVC_NOTI_CONTACT_CHANGED, O_TRUNC | O_RDWR);
@@ -481,14 +510,14 @@ int ctsvc_server_update_collation()
                if (0 <= fd)
                        close(fd);
        }
-       ctsvc_server_db_close();
+       ctsvc_server_db_close(zone_name);
 
-       ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
 
        return ret;
 }
 
-int ctsvc_server_get_sim_id(const char *unique_id, int *sim_id)
+int ctsvc_server_get_sim_id(const char *zone_name, const char *unique_id, int *sim_id)
 {
        int ret;
        int id;
@@ -500,21 +529,21 @@ int ctsvc_server_get_sim_id(const char *unique_id, int *sim_id)
        snprintf(query, sizeof(query),
                                "SELECT sim_id FROM "CTS_TABLE_SIM_INFO" "
                                                                "WHERE unique_id = '%s'", unique_id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        if (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret) {
-               CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
                return ret;
        }
 
        if (CONTACTS_ERROR_NO_DATA == ret) {
                snprintf(query, sizeof(query),
                        "INSERT INTO "CTS_TABLE_SIM_INFO" (unique_id) VALUES('%s')", unique_id);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_query_exec Fail(%d)", ret);
                        return ret;
                }
-               id = ctsvc_db_get_last_insert_id();
+               id = ctsvc_db_get_last_insert_id(zone_name);
        }
        CTS_DBG("id :%d, unique_id :%s", id, unique_id);
        *sim_id = id;
@@ -538,11 +567,11 @@ static int __ctsvc_server_db_get_contact_data(sqlite3* db, int id, ctsvc_contact
                                        "WHERE data.contact_id = %d  AND is_my_profile = 0 "
                                        "ORDER BY is_default DESC", id);
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       RETVM_IF(SQLITE_OK != ret, ret, "DB error : sqlite3_prepare_v2() Failed(%d)", ret);
+       RETVM_IF(SQLITE_OK != ret, ret, "DB error : sqlite3_prepare_v2() Fail(%d)", ret);
 
        ret = sqlite3_step(stmt);
        if (SQLITE_ROW != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                sqlite3_finalize(stmt);
                return ret;
        }
@@ -568,14 +597,14 @@ static int __ctsvc_server_db_get_contact_data(sqlite3* db, int id, ctsvc_contact
                default:
                        break;
                }
-       }while(SQLITE_ROW == sqlite3_step(stmt));
+       } while (SQLITE_ROW == sqlite3_step(stmt));
 
        sqlite3_finalize(stmt);
 
        return SQLITE_DONE;
 }
 
-int ctsvc_server_update_sort_name()
+int ctsvc_server_update_sort_name(const char *zone_name)
 {
        int ret = 0;
        sqlite3* db = NULL;
@@ -586,20 +615,20 @@ int ctsvc_server_update_sort_name()
 
        INFO("Start to update sort_name");
 
-       ctsvc_db_set_status(CONTACTS_DB_STATUS_CHANGING_COLLATION);
+       ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_CHANGING_COLLATION);
 
-       ret = ctsvc_server_db_open(&db);
+       ret = ctsvc_server_db_open(zone_name, &db);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_db_open() Failed(%d)", ret);
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+               CTS_ERR("ctsvc_server_db_open() Fail(%d)", ret);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return ret;
        }
 
-       ret = ctsvc_server_begin_trans();
-       if(CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_server_begin_trans() Failed(%d)", ret);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       ret = ctsvc_server_begin_trans(zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_server_begin_trans() Fail(%d)", ret);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return ret;
        }
 
@@ -607,15 +636,15 @@ int ctsvc_server_update_sort_name()
                        "SELECT contact_id "
                                "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
-               ctsvc_server_end_trans(false);
-               ctsvc_server_db_close();
-               ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
+               ctsvc_server_end_trans(zone_name, false);
+               ctsvc_server_db_close(zone_name);
+               ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
                return CONTACTS_ERROR_DB;
        }
 
-       // Update sort_name, sortkey, display_name_language of contact table
+       /* Update sort_name, sortkey, display_name_language of contact table */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_CONTACTS" "
                                "SET sort_name = ?, reverse_sort_name = ?, sortkey = ?, reverse_sortkey = ?, "
@@ -623,19 +652,19 @@ int ctsvc_server_update_sort_name()
                                        " display_name_source = ? "
                                "WHERE contact_id = ?");
        ret = sqlite3_prepare_v2(db, query, strlen(query), &update_stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_propare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_propare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
                ret = CONTACTS_ERROR_DB;
                goto DATA_FREE;
        }
 
-       // Update name of search_index table
+       /* Update name of search_index table */
        snprintf(query, sizeof(query),
                        "UPDATE %s SET name=? WHERE contact_id = ?",
                        CTS_TABLE_SEARCH_INDEX);
        ret = sqlite3_prepare_v2(db, query, strlen(query), &search_name_stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_propare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_propare_v2(%s) Fail(%s)", query, sqlite3_errmsg(db));
                ret = CONTACTS_ERROR_DB;
                goto DATA_FREE;
        }
@@ -644,18 +673,18 @@ int ctsvc_server_update_sort_name()
                int contact_id = sqlite3_column_int(stmt, 0);
                char *search_name = NULL;
 
-               // get_contact_info
+               /* get_contact_info */
                ctsvc_contact_s *contact = NULL;
                contacts_record_create(_contacts_contact._uri, (contacts_record_h*)&contact);
                ret = __ctsvc_server_db_get_contact_data(db, contact_id, contact);
                if (SQLITE_DONE != ret) {
-                       CTS_ERR("sqlite3_step(%s) Failed(%d, %s)", query, ret, sqlite3_errmsg(db));
+                       CTS_ERR("sqlite3_step(%s) Fail(%d, %s)", query, ret, sqlite3_errmsg(db));
                        contacts_record_destroy((contacts_record_h)contact, true);
                        ret = CONTACTS_ERROR_DB;
                        goto DATA_FREE;
                }
 
-               // update sort_name, sortkey, display_name_language(sort group)
+               /* update sort_name, sortkey, display_name_language(sort group) */
                ctsvc_contact_make_display_name(contact);
                if (contact->sort_name)
                        sqlite3_bind_text(update_stmt, 1, contact->sort_name, strlen(contact->sort_name), SQLITE_STATIC);
@@ -672,14 +701,14 @@ int ctsvc_server_update_sort_name()
 
                ret = sqlite3_step(update_stmt);
                if (SQLITE_DONE != ret) {
-                       CTS_ERR("sqlite3_step(%s) Failed(%d, %s)", query, ret, sqlite3_errmsg(db));
+                       CTS_ERR("sqlite3_step(%s) Fail(%d, %s)", query, ret, sqlite3_errmsg(db));
                        contacts_record_destroy((contacts_record_h)contact, true);
                        ret = CONTACTS_ERROR_DB;
                        goto DATA_FREE;
                }
                sqlite3_reset(update_stmt);
 
-               // update name valud of search_index table
+               /* update name valud of search_index table */
                ctsvc_contact_make_search_name(contact, &search_name);
                if (search_name) {
                        sqlite3_bind_text(search_name_stmt, 1, search_name, strlen(search_name), SQLITE_STATIC);
@@ -687,7 +716,7 @@ int ctsvc_server_update_sort_name()
                        ret = sqlite3_step(search_name_stmt);
                        free(search_name);
                        if (SQLITE_DONE != ret) {
-                               CTS_ERR("sqlite3_step(%s) Failed(%d, %s)", query, ret, sqlite3_errmsg(db));
+                               CTS_ERR("sqlite3_step(%s) Fail(%d, %s)", query, ret, sqlite3_errmsg(db));
                                contacts_record_destroy((contacts_record_h)contact, true);
                                ret = CONTACTS_ERROR_DB;
                                goto DATA_FREE;
@@ -699,7 +728,7 @@ int ctsvc_server_update_sort_name()
        }
 
        if (SQLITE_ROW != ret && SQLITE_DONE != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                ret = CONTACTS_ERROR_DB;
                goto DATA_FREE;
        }
@@ -712,9 +741,9 @@ DATA_FREE:
        if (search_name_stmt)
                sqlite3_finalize(search_name_stmt);
 
-       // send notification
+       /* send notification */
        if (CONTACTS_ERROR_DB != ret) {
-               ret = ctsvc_server_end_trans(true);
+               ret = ctsvc_server_end_trans(zone_name, true);
                if (CONTACTS_ERROR_NONE == ret) {
                        int fd;
                        fd = open(CTSVC_NOTI_CONTACT_CHANGED, O_TRUNC | O_RDWR);
@@ -726,10 +755,10 @@ DATA_FREE:
                }
        }
        else
-               ctsvc_server_end_trans(false);
+               ctsvc_server_end_trans(zone_name, false);
 
-       ctsvc_server_db_close();
-       ctsvc_db_set_status(CONTACTS_DB_STATUS_NORMAL);
+       ctsvc_server_db_close(zone_name);
+       ctsvc_db_set_status(zone_name, CONTACTS_DB_STATUS_NORMAL);
 
        INFO("End to update sort_name");
 
old mode 100755 (executable)
new mode 100644 (file)
index 35b79ab..529ecae
 
 #include <sqlite3.h>
 
-int ctsvc_server_db_open(sqlite3 **db);
-int ctsvc_server_db_close(void);
-int ctsvc_server_update_sort(int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary);
-int ctsvc_server_insert_sdn_contact(const char *name, const char *number, int sim_slot_no);
-int ctsvc_server_delete_sdn_contact(int sim_slot_no);
-int ctsvc_server_update_collation();
-int ctsvc_server_update_sort_name();
+int ctsvc_server_db_open(const char *zone_name, sqlite3 **db);
+int ctsvc_server_db_close(const char *zone_name);
+int ctsvc_server_update_sort(const char *zone_name, int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary);
+int ctsvc_server_insert_sdn_contact(const char *zone_name, const char *name, const char *number, int sim_slot_no);
+int ctsvc_server_delete_sdn_contact(const char *zone_name, int sim_slot_no);
+int ctsvc_server_update_collation(const char *zone_name);
+int ctsvc_server_update_sort_name(const char *zone_name);
 
-int ctsvc_server_get_sim_id(const char *unique_id, int *sim_id);
+int ctsvc_server_get_sim_id(const char *zone_name, const char *unique_id, int *sim_id);
 
-#endif // __CTSVC_SERVER_SQLITE_H__
+#endif /* __CTSVC_SERVER_SQLITE_H__ */
 
 
old mode 100755 (executable)
new mode 100644 (file)
index 20e7e74..5d8c9ce
 #include "contacts.h"
 
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_number_utils.h"
 #include "ctsvc_localize_utils.h"
+#include "ctsvc_zone.h"
 #include "ctsvc_server_update.h"
+#include "ctsvc_server_zone.h"
 
-// It should be updated whenever DB schema including VIEW query is changed
-// You have to update user version schema.sql
-//                     PRAGMA user_version = 100;
-#define CTSVC_SCHEMA_VERSION           101
+/*
+ * It should be updated whenever DB schema including VIEW query is changed
+ * You have to update user version schema.sql
+ *                     PRAGMA user_version = 100;
+ */
+#define CTSVC_SCHEMA_VERSION 101
 
 #ifdef ENABLE_LOG_FEATURE
 static int __ctsvc_server_find_person_id_of_phonelog(sqlite3 *__db, char *normal_num,
@@ -62,7 +66,7 @@ static int __ctsvc_server_find_person_id_of_phonelog(sqlite3 *__db, char *normal
 
        ret = sqlite3_prepare_v2(__db, query, sizeof(query), &stmt, NULL);
        if (stmt == NULL) {
-               CTS_ERR("sqlite3_prepare_v2 fail(%d)", ret);
+               CTS_ERR("sqlite3_prepare_v2 Fail(%d)", ret);
                if (bind_text) {
                        for (cursor=bind_text;cursor;cursor=cursor->next,i++)
                                free(cursor->data);
@@ -82,8 +86,8 @@ static int __ctsvc_server_find_person_id_of_phonelog(sqlite3 *__db, char *normal
        while ((ret = sqlite3_step(stmt))) {
                id = sqlite3_column_int(stmt, 0);
                number_type = sqlite3_column_int(stmt, 1);
-               if (find_person_id <= 0 && id > 0) {
-                       find_person_id = id;            // find first match person_id
+               if (find_person_id <= 0 && 0 < id) {
+                       find_person_id = id;   /* find first match person_id */
                        *find_number_type = number_type;
                        if (person_id <= 0)
                                break;
@@ -105,7 +109,7 @@ static int __ctsvc_server_find_person_id_of_phonelog(sqlite3 *__db, char *normal
 
        return find_person_id;
 }
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
 static void __ctsvc_server_number_info_update(sqlite3 *__db)
 {
@@ -115,13 +119,13 @@ static void __ctsvc_server_number_info_update(sqlite3 *__db)
        char query[CTS_SQL_MIN_LEN] = {0};
 
 #ifdef ENABLE_LOG_FEATURE
-       // update number of phonelog table
+       /* update number of phonelog table */
        ret = snprintf(query, sizeof(query),
                        "SELECT id, number, person_id FROM "CTS_TABLE_PHONELOGS " "
                        "WHERE log_type < %d", CONTACTS_PLOG_TYPE_EMAIL_RECEIVED);
        ret = sqlite3_prepare_v2(__db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(__db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(__db));
                return;
        }
 
@@ -129,13 +133,13 @@ static void __ctsvc_server_number_info_update(sqlite3 *__db)
                        "UPDATE "CTS_TABLE_PHONELOGS" SET normal_num=?, clean_num=?, "
                        "minmatch=?, person_id=?, number_type=? WHERE id = ?");
        ret = sqlite3_prepare_v2(__db, query, strlen(query), &update_stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(__db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(__db));
                sqlite3_finalize(stmt);
                return;
        }
 
-       while(SQLITE_ROW == (ret = sqlite3_step(stmt))) {
+       while (SQLITE_ROW == (ret = sqlite3_step(stmt))) {
                int phonelog_id = sqlite3_column_int(stmt, 0);
                char *number = (char*)sqlite3_column_text(stmt, 1);
                int person_id = sqlite3_column_int(stmt, 2);
@@ -157,16 +161,16 @@ static void __ctsvc_server_number_info_update(sqlite3 *__db)
                                        find_person_id  = __ctsvc_server_find_person_id_of_phonelog(__db, normal_num, minmatch, person_id, &number_type);
                                }
 
-                               if (find_person_id > 0)
+                               if (0 < find_person_id)
                                        sqlite3_bind_int(update_stmt, 4, find_person_id);
-                               if (number_type >= 0)
+                               if (0 <= number_type)
                                        sqlite3_bind_int(update_stmt, 5, number_type);
                        }
                        sqlite3_bind_int(update_stmt, 6, phonelog_id);
 
                        ret = sqlite3_step(update_stmt);
                        if (SQLITE_DONE != ret) {
-                               CTS_ERR("sqlite3_step() Failed(%d, %s)", ret, sqlite3_errmsg(__db));
+                               CTS_ERR("sqlite3_step() Fail(%d, %s)", ret, sqlite3_errmsg(__db));
                                break;
                        }
                        sqlite3_reset(update_stmt);
@@ -174,28 +178,28 @@ static void __ctsvc_server_number_info_update(sqlite3 *__db)
        }
        sqlite3_finalize(stmt);
        sqlite3_finalize(update_stmt);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-       // update number of data table
+       /* update number of data table */
        snprintf(query, sizeof(query),
                        "SELECT id, data3 FROM "CTS_TABLE_DATA" "
                        "WHERE datatype = %d", CTSVC_DATA_NUMBER);
        ret = sqlite3_prepare_v2(__db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(__db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(__db));
                return;
        }
 
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET data4=?, data5=?, data6=?  WHERE id = ?");
        ret = sqlite3_prepare_v2(__db, query, strlen(query), &update_stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(__db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(__db));
                sqlite3_finalize(stmt);
                return;
        }
 
-       while(SQLITE_ROW == (ret = sqlite3_step(stmt))) {
+       while (SQLITE_ROW == (ret = sqlite3_step(stmt))) {
                int id = sqlite3_column_int(stmt, 0);
                char *number = (char*)sqlite3_column_text(stmt, 1);
                char clean_num[SAFE_STRLEN(number)+1];
@@ -215,7 +219,7 @@ static void __ctsvc_server_number_info_update(sqlite3 *__db)
                        sqlite3_bind_int(update_stmt, 4, id);
                        ret = sqlite3_step(update_stmt);
                        if (SQLITE_DONE != ret) {
-                               CTS_ERR("sqlite3_step() Failed(%d, %s)", ret, sqlite3_errmsg(__db));
+                               CTS_ERR("sqlite3_step() Fail(%d, %s)", ret, sqlite3_errmsg(__db));
                                break;
                        }
                        sqlite3_reset(update_stmt);
@@ -237,13 +241,13 @@ static int __ctsvc_server_get_db_version(sqlite3 *db, int *version)
 
        snprintf(query, sizeof(query), "PRAGMA user_version;");
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(db));
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(db));
                return CONTACTS_ERROR_DB;
        }
        ret = sqlite3_step(stmt);
        if (SQLITE_ROW != ret) {
-               CTS_ERR("sqlite3_step() Failed(%s)", sqlite3_errmsg(db));
+               CTS_ERR("sqlite3_step() Fail(%s)", sqlite3_errmsg(db));
                sqlite3_finalize(stmt);
                return CONTACTS_ERROR_DB;
        }
@@ -252,7 +256,7 @@ static int __ctsvc_server_get_db_version(sqlite3 *db, int *version)
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_server_db_update(void)
+int ctsvc_server_db_update(const char *zone_name)
 {
        int ret;
        int old_version = 0;
@@ -260,116 +264,120 @@ int ctsvc_server_db_update(void)
        sqlite3 *__db;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = db_util_open(CTSVC_DB_PATH, &__db, 0);
+       char db_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, db_path, sizeof(db_path));
+       snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_PATH);
+
+       ret = db_util_open(db_path, &__db, 0);
        RETVM_IF(ret != SQLITE_OK, CONTACTS_ERROR_DB,
-                       "db_util_open() Failed(%d)", ret);
+                       "db_util_open() Fail(%d)", ret);
 
-       // check DB schema version
+       /* check DB schema version */
        __ctsvc_server_get_db_version(__db, &old_version);
 
-       // Tizen 2.3a Releae 0.9.114.7 ('14/5)  -----------------------------------
+       /* Tizen 2.3a Releae 0.9.114.7 ('14/5)  ----------------------------------- */
        if (old_version <= 100) {
                ret = sqlite3_exec(__db, "CREATE INDEX name_lookup_idx1 ON name_lookup(contact_id);", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view view_person_contact_group Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("drop view view_person_contact_group Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "CREATE INDEX phone_lookup_idx1 ON phone_lookup(contact_id);", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view view_person_contact_group Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("drop view view_person_contact_group Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
-               // add view_activity_photos
+               /* add view_activity_photos */
                ret = sqlite3_exec(__db, "DROP VIEW view_phonelog_number", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view view_person_contact_group Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("drop view view_person_contact_group Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
-               // add view_person_contact_group_assigned
-               // add view_person_contact_group_not_assigned
-               // change DB VIEW view_person_contact_group for performance
+               /* add view_person_contact_group_assigned */
+               /* add view_person_contact_group_not_assigned */
+               /* change DB VIEW view_person_contact_group for performance */
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_PERSON_GROUP, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view view_person_contact_group Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("drop view view_person_contact_group Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
-               // change DB VIEW view_contact_group for performance
+               /* change DB VIEW view_contact_group for performance */
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_CONTACT_GROUP, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
                        CTS_ERR("drop view view_contact_group Failed : %s", errmsg);
                        sqlite3_free(errmsg);
                }
 
-               // for number compare
+               /* for number compare */
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_NUMBER, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view %s Failed(%d) : %s", CTSVC_DB_VIEW_NUMBER, ret, errmsg);
+                       CTS_ERR("drop view %s Fail(%d) : %s", CTSVC_DB_VIEW_NUMBER, ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_SPEEDIDAL, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view %s Failed(%d) : %s", CTSVC_DB_VIEW_SPEEDIDAL, ret, errmsg);
+                       CTS_ERR("drop view %s Fail(%d) : %s", CTSVC_DB_VIEW_SPEEDIDAL, ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_PERSON_NUMBER, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view %s Failed(%d) : %s", CTSVC_DB_VIEW_PERSON_NUMBER, ret, errmsg);
+                       CTS_ERR("drop view %s Fail(%d) : %s", CTSVC_DB_VIEW_PERSON_NUMBER, ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_CONTACT_NUMBER, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view %s Failed(%d) : %s", CTSVC_DB_VIEW_CONTACT_NUMBER, ret, errmsg);
+                       CTS_ERR("drop view %s Fail(%d) : %s", CTSVC_DB_VIEW_CONTACT_NUMBER, ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "DROP VIEW "CTSVC_DB_VIEW_PERSON_PHONELOG, NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop view %s Failed(%d) : %s", CTSVC_DB_VIEW_PERSON_PHONELOG, ret, errmsg);
+                       CTS_ERR("drop view %s Fail(%d) : %s", CTSVC_DB_VIEW_PERSON_PHONELOG, ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "ALTER TABLE "CTS_TABLE_PHONELOGS" ADD COLUMN clean_num TEXT", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add phonelogs.clean_num Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add phonelogs.clean_num Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "ALTER TABLE "CTS_TABLE_PHONELOGS" ADD COLUMN sim_id TEXT", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add phonelogs.sim_id Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add phonelogs.sim_id Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "ALTER TABLE "CTS_TABLE_PHONELOGS" ADD COLUMN number_type TEXT", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add phonelogs.number_type Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add phonelogs.number_type Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
-               // update phonelog, data number value
+               /* update phonelog, data number value */
                __ctsvc_server_number_info_update(__db);
 
                ret = sqlite3_exec(__db, "ALTER TABLE "CTS_TABLE_SDN" ADD COLUMN sim_slot_no TEXT", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add sdn.sim_id Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add sdn.sim_id Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
                ret = sqlite3_exec(__db, "ALTER TABLE "CTS_TABLE_ADDRESSBOOKS" ADD COLUMN smack_label TEXT", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add sdn.sim_id Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add sdn.sim_id Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
                ret = sqlite3_exec(__db, "UPDATE "CTS_TABLE_ADDRESSBOOKS" SET='org.tizen.contact' WHERE addressbook_id = 0", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("add sdn.sim_id Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("add sdn.sim_id Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
@@ -386,7 +394,7 @@ int ctsvc_server_db_update(void)
 
                ret = sqlite3_exec(__db, "DROP trigger trg_contacts_update", NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("drop trigger trg_contacts_update Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("drop trigger trg_contacts_update Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
                ret = sqlite3_exec(__db,
@@ -401,7 +409,7 @@ int ctsvc_server_db_update(void)
                                " END;",
                                NULL, 0, &errmsg);
                if (SQLITE_OK != ret) {
-                       CTS_ERR("create trigger trg_contacts_update Failed(%d) : %s", ret, errmsg);
+                       CTS_ERR("create trigger trg_contacts_update Fail(%d) : %s", ret, errmsg);
                        sqlite3_free(errmsg);
                }
 
@@ -411,8 +419,8 @@ int ctsvc_server_db_update(void)
        snprintf(query, sizeof(query),
                        "PRAGMA user_version = %d", CTSVC_SCHEMA_VERSION);
        ret = sqlite3_exec(__db, query, NULL, 0, &errmsg);
-       if(SQLITE_OK != ret) {
-               CTS_ERR("sqlite3_exec() Failed(%s)", errmsg);
+       if (SQLITE_OK != ret) {
+               CTS_ERR("sqlite3_exec() Fail(%s)", errmsg);
                sqlite3_free(errmsg);
        }
 
old mode 100755 (executable)
new mode 100644 (file)
index b349916..037bb3a
@@ -19,7 +19,7 @@
 #ifndef __CTSVC_SERVER_UDATE_H__
 #define __CTSVC_SERVER_UDATE_H__
 
-int ctsvc_server_db_update(void);
+int ctsvc_server_db_update(const char *zone_name);
 
-#endif // __CTSVC_SERVER_UDATE_H__
+#endif /* __CTSVC_SERVER_UDATE_H__ */
 
old mode 100755 (executable)
new mode 100644 (file)
index fa2673b..1f85e04
 #include "contacts.h"
 
 #include "ctsvc_internal.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_server_utils.h"
-#ifdef ENABLE_SIM_FEATURE
 #include "ctsvc_server_sim.h"
-#endif // ENABLE_SIM_FEATURE
 #include "ctsvc_server_sqlite.h"
 #include "ctsvc_localize.h"
+#include "ctsvc_server_zone.h"
 #include "ctsvc_normalize.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_server.h"
 
 #define CTSVC_FEATURE_TELEPHONY "http://tizen.org/feature/network.telephony"
 
 static int system_language = -1;
-static bool _have_telephony_feature = false;
+static bool _ctsvc_have_telephony_feature = false;
+static guint _ctsvc_timeout = 0;
 
 int ctsvc_server_load_feature_list(void)
 {
-       system_info_get_platform_bool(CTSVC_FEATURE_TELEPHONY, &_have_telephony_feature);
+       system_info_get_platform_bool(CTSVC_FEATURE_TELEPHONY, &_ctsvc_have_telephony_feature);
        return CONTACTS_ERROR_NONE;
 }
 
 bool ctsvc_server_have_telephony_feature(void)
 {
-       return _have_telephony_feature;
+       return _ctsvc_have_telephony_feature;
 }
 
 inline int ctsvc_server_set_default_sort(int sort)
 {
        int ret = vconf_set_int(ctsvc_get_default_sort_vconfkey(), sort);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_set_int() Failed(%d)", ret);
+       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_set_int() Fail(%d)", ret);
        ctsvc_set_sort_memory(sort);
        return CONTACTS_ERROR_NONE;
 }
@@ -68,11 +70,22 @@ static void __ctsvc_server_change_language_cb(keynode_t *key, void *data)
        char *langset = NULL;
 
        new_langset = vconf_keynode_get_str(key);
-       RETM_IF(NULL == new_langset, "vconf_keynode_get_str() return NULL");
+       if (NULL == new_langset)
+       {
+               CTS_ERR("vconf_keynode_get_str() Fail");
+               return;
+       }
        langset = ctsvc_get_langset();
        INFO("%s --> %s", langset, new_langset);
-       if (strcmp(langset, new_langset) != 0) {
+
+       ctsvc_server_stop_timeout();
+
+       if (STRING_EQUAL != strcmp(langset, new_langset)) {
+               int i;
+               int zone_name_list_count;
+               char **zone_name_list = NULL;
                bool sort_name_update = false;
+
                old_primary_sort = ctsvc_get_primary_sort();
                if (old_primary_sort < 0) {
                        RETM_IF(ret<0, "ctsvc_get_primary_sort() Fail(%d)", ret);
@@ -82,12 +95,12 @@ static void __ctsvc_server_change_language_cb(keynode_t *key, void *data)
                        RETM_IF(ret<0, "ctsvc_get_secondary_sort() Fail(%d)", ret);
                }
 
-               if (strncmp(langset, "zh", strlen("zh")) == 0 ||
-                       strncmp(langset, "ko", strlen("ko")) == 0 ||
-                       strncmp(langset, "ja", strlen("ja")) == 0 ||
-                       strncmp(new_langset, "zh", strlen("zh")) == 0 ||
-                       strncmp(new_langset, "ko", strlen("ko")) == 0 ||
-                       strncmp(new_langset, "ja", strlen("ja")) == 0) {
+               if (STRING_EQUAL == strncmp(langset, "zh", strlen("zh")) ||
+                               STRING_EQUAL == strncmp(langset, "ko", strlen("ko")) ||
+                               STRING_EQUAL == strncmp(langset, "ja", strlen("ja")) ||
+                               STRING_EQUAL == strncmp(new_langset, "zh", strlen("zh")) ||
+                               STRING_EQUAL == strncmp(new_langset, "ko", strlen("ko")) ||
+                               STRING_EQUAL == strncmp(new_langset, "ja", strlen("ja"))) {
                        sort_name_update = true;
                }
                ctsvc_set_langset(strdup(new_langset));
@@ -100,17 +113,25 @@ static void __ctsvc_server_change_language_cb(keynode_t *key, void *data)
 
                new_secondary_sort = CTSVC_SORT_WESTERN;
 
-               if (sort_name_update) {
-                  ctsvc_server_set_default_sort(new_primary_sort);
-                       ctsvc_server_update_sort_name();
-               }
-               else {
-                       if (new_primary_sort != old_primary_sort)
-                               ret = ctsvc_server_update_sort(old_primary_sort, old_secondary_sort, new_primary_sort, new_secondary_sort);
-
-                       ctsvc_server_update_collation();
+               ret = ctsvc_server_zone_get_activated_zone_name_list(&zone_name_list, &zone_name_list_count);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_zone_get_activated_zone_name_list() Fail(%d)", ret);
+
+               for (i=0;i<zone_name_list_count;i++) {
+                       if (sort_name_update) {
+                               ctsvc_server_set_default_sort(new_primary_sort);
+                               ctsvc_server_update_sort_name(zone_name_list[i]);
+                       }
+                       else {
+                               if (new_primary_sort != old_primary_sort)
+                                       ret = ctsvc_server_update_sort(zone_name_list[i], old_primary_sort, old_secondary_sort, new_primary_sort, new_secondary_sort);
+                               ctsvc_server_update_collation(zone_name_list[i]);
+                       }
+                       free(zone_name_list[i]);
                }
+               free(zone_name_list);
        }
+
+       ctsvc_server_start_timeout();
 }
 
 void ctsvc_server_final_configuration(void)
@@ -118,11 +139,9 @@ void ctsvc_server_final_configuration(void)
        int ret = -1;
 
        ret = vconf_ignore_key_changed(VCONFKEY_LANGSET, __ctsvc_server_change_language_cb);
-       RETM_IF(ret<0,"vconf_ignore_key_changed(%s) Failed(%d)", VCONFKEY_LANGSET, ret);
+       RETM_IF(ret<0,"vconf_ignore_key_changed(%s) Fail(%d)", VCONFKEY_LANGSET, ret);
 
-#ifdef ENABLE_SIM_FEATURE
        ctsvc_server_sim_final();
-#endif // ENABLE_SIM_FEATURE
 }
 
 int ctsvc_server_init_configuration(void)
@@ -138,7 +157,7 @@ int ctsvc_server_init_configuration(void)
 
        ret = vconf_get_int(ctsvc_get_default_sort_vconfkey(), &sort_type);
        if (ret < 0 || sort_type == CTSVC_SORT_OTHERS) {
-               CTS_ERR("vconf_get_int(%s) Failed(%d)", ctsvc_get_default_sort_vconfkey() ,ret);
+               CTS_ERR("vconf_get_int(%s) Fail(%d)", ctsvc_get_default_sort_vconfkey(),ret);
                sort_type = ctsvc_get_sort_type_from_language(system_language);
                if (sort_type == CTSVC_SORT_OTHERS)
                        sort_type = CTSVC_SORT_WESTERN;
@@ -147,13 +166,11 @@ int ctsvc_server_init_configuration(void)
 
        ret = vconf_notify_key_changed(VCONFKEY_LANGSET,
                        __ctsvc_server_change_language_cb, NULL);
-       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
+       RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Fail(%d)",
                        VCONFKEY_LANGSET, ret);
 
-#ifdef ENABLE_SIM_FEATURE
        ret = ctsvc_server_sim_init();
-       RETVM_IF(ret !=CONTACTS_ERROR_NONE, ret, "ctsvc_server_sim_init Failed(%d)", ret);
-#endif // ENABLE_SIM_FEATURE
+       RETVM_IF(ret !=CONTACTS_ERROR_NONE, ret, "ctsvc_server_sim_init Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
@@ -163,3 +180,36 @@ void ctsvc_server_trim_memory(void)
        malloc_trim(0);
        sqlite3_release_memory(-1);
 }
+
+static gboolean _timeout_cb(gpointer user_data)
+{
+       CTS_FN_CALL;
+       ctsvc_server_quit();
+       return TRUE;
+}
+
+void ctsvc_server_start_timeout(void)
+{
+       int timeout = ctsvc_server_get_timeout_sec();
+       if (timeout < 1)
+               return;
+
+       ctsvc_mutex_lock(CTS_MUTEX_TIMEOUT);
+       if (_ctsvc_timeout)
+               g_source_remove(_ctsvc_timeout);
+       _ctsvc_timeout = g_timeout_add_seconds(timeout, _timeout_cb, NULL);
+       ctsvc_mutex_unlock(CTS_MUTEX_TIMEOUT);
+}
+
+void ctsvc_server_stop_timeout(void)
+{
+       int timeout = ctsvc_server_get_timeout_sec();
+       if (timeout < 1)
+               return;
+
+       ctsvc_mutex_lock(CTS_MUTEX_TIMEOUT);
+       if (_ctsvc_timeout)
+               g_source_remove(_ctsvc_timeout);
+       _ctsvc_timeout = 0;
+       ctsvc_mutex_unlock(CTS_MUTEX_TIMEOUT);
+}
old mode 100755 (executable)
new mode 100644 (file)
index 77881e0..f71cd25
@@ -28,6 +28,8 @@ void ctsvc_server_final_configuration(void);
 int ctsvc_server_set_default_sort(int lang);
 
 void ctsvc_server_trim_memory(void);
+void ctsvc_server_start_timeout(void);
+void ctsvc_server_stop_timeout(void);
 
-#endif // __CTSVC_SERVER_UTILS_H__
+#endif /* __CTSVC_SERVER_UTILS_H__ */
 
diff --git a/server/ctsvc_server_zone.c b/server/ctsvc_server_zone.c
new file mode 100644 (file)
index 0000000..cd8082c
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+#include "contacts.h"
+#include "ctsvc_socket.h"
+#include "ctsvc_server_service.h"
+#include "ctsvc_server_bg.h"
+#include "ctsvc_db_access_control.h"
+#include "ctsvc_ipc_define.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_notification.h"
+#include "ctsvc_schema_recovery.h"
+#include "ctsvc_server_update.h"
+#include "ctsvc_server_zone.h"
+#include "ctsvc_server_utils.h"
+#include "ctsvc_zone.h"
+
+vsm_context_h ctsvc_vsm_ctx = NULL;
+static bool _ctsvc_zone_enabled = false;
+
+void ctsvc_server_zone_finalize_zone(const char *zone_name)
+{
+       ctsvc_server_bg_remove_cb(zone_name);
+       ctsvc_unset_client_access_info(zone_name);
+       ctsvc_disconnect(zone_name);
+}
+
+char* ctsvc_server_zone_get_default_zone()
+{
+       if (_ctsvc_zone_enabled)
+               return CTSVC_ZONE_NAME_PERSONAL;
+       else
+               return CTSVC_ZONE_NAME_HOST;
+}
+
+void ctsvc_server_zone_initialize_zone(const char *zone_name)
+{
+       CTS_FN_CALL;
+       int ret;
+
+       RET_IF(NULL == zone_name);
+
+       if (zone_name && *zone_name)
+               _ctsvc_zone_enabled = true;
+
+       ctsvc_noti_publish_socket_initialize(zone_name);
+
+       ret = ctsvc_server_check_schema(zone_name);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_check_schema() Fail(%d)", ret);
+
+       ret = ctsvc_server_db_update(zone_name);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_db_update() Fail(%d)", ret);
+
+       ret = ctsvc_connect(zone_name);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_connect() Fail(%d)", ret);
+
+       ctsvc_set_client_access_info(zone_name, "contacts-service", NULL);
+       ctsvc_server_bg_add_cb(zone_name);
+       ctsvc_server_bg_delete_start(zone_name);
+
+       if ('\0' == *zone_name || STRING_EQUAL == g_strcmp0(zone_name, CTSVC_ZONE_NAME_PERSONAL)) {
+               ret = ctsvc_server_init_configuration();
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_server_init_configuration() Fail(%d)", ret);
+       }
+}
+
+static int _ctsvc_vsm_status_cb(vsm_zone_h zone, vsm_zone_state_t state, void *user_data)
+{
+       CTS_FN_CALL;
+
+       const char *zone_name = vsm_get_zone_name(zone);
+       CTS_DBG("state(%d) [%s]", state, zone_name);
+
+       switch (state) {
+       case VSM_ZONE_STATE_STARTING:
+               CTS_DBG("STARTING");
+               ctsvc_server_zone_initialize_zone(zone_name);
+               break;
+       case VSM_ZONE_STATE_STOPPED:
+               CTS_DBG("STOPPED");
+               break;
+       case VSM_ZONE_STATE_RUNNING:
+               CTS_DBG("RUNNING");
+               break;
+       case VSM_ZONE_STATE_STOPPING:
+               CTS_DBG("STOPPING");
+               ctsvc_server_zone_finalize_zone(zone_name);
+               break;
+       case VSM_ZONE_STATE_ABORTING:
+               CTS_DBG("ABORTING");
+               break;
+       case VSM_ZONE_STATE_FREEZING:
+               CTS_DBG("FREEZING");
+               break;
+       case VSM_ZONE_STATE_FROZEN:
+               CTS_DBG("FROZEN");
+               break;
+       case VSM_ZONE_STATE_THAWED:
+               CTS_DBG("THAWED");
+               break;
+       default:
+               CTS_DBG("###### invalid status");
+               break;
+       }
+CTS_FN_END;
+       return 0;
+}
+
+static gboolean _ctsvc_server_zone_mainloop_cb(GIOChannel *channel, GIOCondition condition, void *data)
+{
+       CTS_FN_CALL;
+       vsm_context_h ctx = data;
+       vsm_enter_eventloop(ctx, 0, 0);
+       return TRUE;
+}
+
+int ctsvc_server_zone_initialize(void)
+{
+       CTS_FN_CALL;
+       int ret = 0;
+
+       if (ctsvc_vsm_ctx) {
+               CTS_DBG("already existed");
+               ctsvc_server_zone_finalize();
+       }
+
+       vsm_context_h ctx = vsm_create_context();
+       RETVM_IF(NULL == ctx, CONTACTS_ERROR_DB, "vsm_create_context() return NULL");
+
+       ret = vsm_add_state_changed_callback(ctx, _ctsvc_vsm_status_cb, NULL);
+       WARN_IF(ret < 0, "vsm_add_state_callback() Fail(%d)", ret);
+
+       GIOChannel *channel = NULL;
+       int fd = vsm_get_poll_fd(ctx);
+       channel = g_io_channel_unix_new(fd);
+       g_io_add_watch(channel, G_IO_IN, _ctsvc_server_zone_mainloop_cb, ctx);
+       g_io_channel_unref(channel);
+
+       ctsvc_vsm_ctx = ctx;
+
+       CTS_FN_END;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_server_zone_declare_link(void)
+{
+       CTS_FN_CALL;
+       int ret = 0;
+
+       if (NULL == ctsvc_vsm_ctx) {
+               ret = ctsvc_server_zone_initialize();
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_zone_initialize() Fail(%d)", ret);
+       }
+       vsm_context_h ctx = ctsvc_vsm_ctx;
+
+       ret = vsm_declare_link(ctx, CTSVC_SOCKET_PATH, CTSVC_SOCKET_PATH);
+       RETVM_IF(ret < 0, ret, "vsm_declare_link() Fail(%d)", ret);
+
+       ret = vsm_declare_link(ctx, CTSVC_IPC_SOCKET_PATH, CTSVC_IPC_SOCKET_PATH);
+       RETVM_IF(ret < 0, ret, "vsm_declare_link() Fail(%d)", ret);
+
+       ret = vsm_declare_link(ctx, CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION, CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION);
+       RETVM_IF(ret < 0, ret, "vsm_declare_link() Fail(%d)", ret);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+void ctsvc_server_zone_finalize(void)
+{
+       RET_IF(NULL == ctsvc_vsm_ctx);
+       vsm_cleanup_context(ctsvc_vsm_ctx);
+}
+
+int ctsvc_server_zone_get_zone_name_by_pid(int pid, char **p_zone_name)
+{
+       if (NULL == ctsvc_vsm_ctx)
+               ctsvc_server_zone_initialize();
+
+       RETV_IF(pid < 0, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(NULL == p_zone_name, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       vsm_zone_h zone = NULL;
+       zone = vsm_lookup_zone_by_pid(ctsvc_vsm_ctx, pid);
+       RETVM_IF(NULL == zone, CONTACTS_ERROR_INVALID_PARAMETER, "vsm_lookup_zone_by_pid() return NULL");
+
+       const char *zone_name = vsm_get_zone_name(zone);
+       *p_zone_name = g_strdup(zone_name);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static void _ctsvc_server_zone_get_activated_zone_iter_cb(vsm_zone_h zone, void *user_data)
+{
+       GList **list = user_data;
+
+       /* try to connect zone with before launched service. */
+       RET_IF(NULL == zone);
+       const char *zone_name = vsm_get_zone_name(zone);
+       RET_IF(NULL == zone_name);
+
+       *list = g_list_append(*list, strdup(zone_name));
+}
+
+int ctsvc_server_zone_get_activated_zone_name_list(char ***p_zone_name_list, int *p_list_count)
+{
+       CTS_FN_CALL;
+       int ret;
+       GList *list = NULL;
+
+       RETV_IF(NULL == p_zone_name_list, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(NULL == p_list_count, CONTACTS_ERROR_INVALID_PARAMETER);
+       *p_zone_name_list = NULL;
+       *p_list_count = 0;
+
+       RETVM_IF(NULL == ctsvc_vsm_ctx, CONTACTS_ERROR_SYSTEM, "ctsvc_vsm_ctx is NULL");
+       ret = vsm_iterate_zone(ctsvc_vsm_ctx, _ctsvc_server_zone_get_activated_zone_iter_cb, &list); /* return value is handle */
+       WARN_IF(0 != ret, "vsm_iterate_zone() Fail(%d)", ret);
+
+       GList *c;
+       char **zone_name_list = NULL;
+       int list_count = g_list_length(list);
+       zone_name_list = calloc(list_count, sizeof(char *));
+       if (NULL == zone_name_list)
+       {
+               CTS_ERR("calloc() Fail");
+               g_list_free(list);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
+       int i=0;
+       for (c=list;c;c=c->next) {
+               char *zone_name = c->data;
+               zone_name_list[i++] = zone_name;
+       }
+       g_list_free(list);
+
+       *p_zone_name_list = zone_name_list;
+       *p_list_count = list_count;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+vsm_zone_h ctsvc_server_zone_lookup_by_zone_name(const char *zone_name)
+{
+       RETVM_IF(NULL == ctsvc_vsm_ctx, NULL, "ctsvc_vsm_ctx is NULL");
+       vsm_zone_h zone = vsm_lookup_zone_by_name(ctsvc_vsm_ctx, zone_name);
+       return zone;
+}
+
+vsm_zone_h ctsvc_server_zone_join(vsm_zone_h zone)
+{
+       CTS_FN_CALL;
+       RETVM_IF(NULL == zone, NULL, "zone is NULL");
+       RETVM_IF(NULL == ctsvc_vsm_ctx, NULL, "ctsvc_vsm_ctx is NULL");
+       vsm_zone_h zone_old = vsm_join_zone(zone);
+       return zone_old;
+}
+
diff --git a/server/ctsvc_server_zone.h b/server/ctsvc_server_zone.h
new file mode 100644 (file)
index 0000000..114b4cb
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2015 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_SERVER_ZONE_H__
+#define __CTSVC_SERVER_ZONE_H__
+
+#include <vasum.h>
+
+void ctsvc_server_zone_initialize_zone(const char *zone_name);
+void ctsvc_server_zone_finalize_zone(const char *zone_name);
+vsm_zone_h ctsvc_server_zone_lookup_by_zone_name(const char *zone_name);
+vsm_zone_h ctsvc_server_zone_join(vsm_zone_h zone);
+int ctsvc_server_zone_initialize(void);
+void ctsvc_server_zone_finalize(void);
+int ctsvc_server_zone_get_activated_zone_name_list(char ***zone_name_list, int *list_count);
+int ctsvc_server_zone_get_zone_name_by_pid(int pid, char **zone_name);
+int ctsvc_server_zone_declare_link(void);
+char* ctsvc_server_zone_get_default_zone();
+
+#endif /* __CTSVC_SERVER_ZONE_H__ */
+
similarity index 68%
rename from native/ctsvc_db_access_control.c
rename to server/db/ctsvc_db_access_control.c
index 692bf10..85d9b85 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_mutex.h"
-#include "ctsvc_service.h"
+#include "ctsvc_server_service.h"
+#include "ctsvc_zone.h"
 
 typedef struct {
        unsigned int thread_id;
@@ -34,13 +35,14 @@ typedef struct {
        int permission;
        int *write_list;
        int write_list_count;
+       char *zone_name;
 }ctsvc_permission_info_s;
 
 static GList *__thread_list = NULL;
 
 static int have_smack = -1;
 
-// check SMACK enable or disable
+/* check SMACK enable or disable */
 static int __ctsvc_have_smack(void)
 {
        if (-1 == have_smack) {
@@ -52,24 +54,26 @@ static int __ctsvc_have_smack(void)
        return have_smack;
 }
 
-// this function is called in mutex lock
-static ctsvc_permission_info_s * __ctsvc_find_access_info(unsigned int thread_id)
+/* this function is called in mutex lock */
+static ctsvc_permission_info_s * __ctsvc_find_access_info(const char *zone_name, unsigned int thread_id)
 {
        GList *cursor;
        CTS_VERBOSE("thread id : %08x", thread_id);
        for (cursor=__thread_list;cursor;cursor = cursor->next) {
                ctsvc_permission_info_s *info = NULL;
                info = cursor->data;
-               if (info->thread_id == thread_id)
+               if (info->thread_id == thread_id && STRING_EQUAL == g_strcmp0(zone_name, info->zone_name))
                        return info;
        }
        return NULL;
 }
 
-// Check the client has read permission of the file(path)
-// success : CONTACTS_ERROR_NONE
-// fail : return negative value
-int ctsvc_have_file_read_permission(const char *path)
+/*
+ * Check the client has read permission of the file(path)
+ * success : CONTACTS_ERROR_NONE
+ * fail : return negative value
+ */
+int ctsvc_have_file_read_permission(const char *zone_name, const char *file_path)
 {
        int ret;
        int permission = -1;
@@ -79,21 +83,25 @@ int ctsvc_have_file_read_permission(const char *path)
        int have_smack;
        unsigned int thread_id;
 
+       char file_full_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, file_full_path, sizeof(file_full_path));
+       snprintf(file_full_path+len, sizeof(file_full_path)-len, "/%s", file_path);
+
        have_smack = __ctsvc_have_smack();
-       if (have_smack != 1)            // smack disable
+       if (have_smack != 1)   /* smack disable */
                return CONTACTS_ERROR_NONE;
 
-       // Get SMACK label of the file
-       ret = smack_getlabel(path, &file_label, SMACK_LABEL_ACCESS);
-       if(ret < 0) {
+       /* Get SMACK label of the file */
+       ret = smack_getlabel(file_full_path, &file_label, SMACK_LABEL_ACCESS);
+       if (ret < 0) {
                CTS_ERR("smack_getlabel Fail (%d)", ret);
                return CONTACTS_ERROR_SYSTEM;
        }
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
        thread_id = (unsigned int)pthread_self();
-       find = __ctsvc_find_access_info(thread_id);
-       if (!find) {
+       find = __ctsvc_find_access_info(zone_name, thread_id);
+       if (NULL == find) {
                CTS_ERR("does not have access info of the thread");
                free(file_label);
                ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
@@ -103,7 +111,7 @@ int ctsvc_have_file_read_permission(const char *path)
        smack_label = find->smack_label;
        permission = smack_have_access(smack_label, file_label, "r");
        free(file_label);
-        if (permission == 0) {
+       if (permission == 0) {
                CTS_ERR("Thread(0x%x), smack_have_access Fail(%d) : does not have permission", thread_id, permission);
                ret = CONTACTS_ERROR_PERMISSION_DENIED;
        }
@@ -119,8 +127,8 @@ int ctsvc_have_file_read_permission(const char *path)
        return ret;
 }
 
-// this function is called in mutex lock
-static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cookie)
+/* this function is called in mutex lock */
+static void __ctsvc_set_permission_info(const char *zone_name, unsigned int thread_id, const char *cookie)
 {
        int ret;
        int count;
@@ -136,17 +144,20 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
        else
                INFO("SAMCK disabled");
 
-       find = __ctsvc_find_access_info(thread_id);
-       if (!find) {
+       find = __ctsvc_find_access_info(zone_name, thread_id);
+       if (NULL == find) {
                CTS_ERR("does not have access info of the thread");
                return;
        }
        smack_label = find->smack_label;
-
-       if (!find->permission) {                // check once
-               // contacts-service daemon has all permission
-               // Or, if smack is disabled, client has all permission
-               if ((smack_label && 0 == strcmp(smack_label, "contacts-service")) || !smack_enabled) {
+       FREEandSTRDUP(find->zone_name, zone_name);
+
+       if (0 == find->permission) {   /* check once */
+               /*
+                * contacts-service daemon has all permission
+                * Or, if smack is disabled, client has all permission
+                */
+               if ((smack_label && STRING_EQUAL == strcmp(smack_label, "contacts-service")) || false == smack_enabled) {
                        find->permission |= CTSVC_PERMISSION_CONTACT_READ;
                        find->permission |= CTSVC_PERMISSION_CONTACT_WRITE;
                        find->permission |= CTSVC_PERMISSION_PHONELOG_READ;
@@ -173,16 +184,16 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
        }
        INFO("Thread(0x%x), info(%p), permission:%d", thread_id, find, find->permission);
 
-       // white listing : core module
+       /* white listing : core module */
        free(find->write_list);
        find->write_list = NULL;
        find->write_list_count = 0;
 
        snprintf(query, sizeof(query),
                        "SELECT count(addressbook_id) FROM "CTS_TABLE_ADDRESSBOOKS);
-       ret = ctsvc_query_get_first_int_result(query, &count);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &count);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
                return;
        }
 
@@ -193,9 +204,9 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, mode, smack_label FROM "CTS_TABLE_ADDRESSBOOKS);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                return;
        }
 
@@ -206,7 +217,7 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
                char *temp = NULL;
 
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return;
                }
@@ -215,7 +226,9 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
                mode = ctsvc_stmt_get_int(stmt, 1);
                temp = ctsvc_stmt_get_text(stmt, 2);
 
-               if (smack_label && ((0 == strcmp(temp, smack_label)) || (0 == strcmp(smack_label, "contacts-service")))) {
+               INFO("temp=%s, smack_label=%s", temp, smack_label);
+
+               if (smack_label && ((STRING_EQUAL == strcmp(temp, smack_label)) || (STRING_EQUAL == strcmp(smack_label, "contacts-service")))) {
                        if (find->permission & CTSVC_PERMISSION_CONTACT_WRITE)
                                find->write_list[write_index++] = id;
                        continue;
@@ -237,25 +250,29 @@ static void __ctsvc_set_permission_info(unsigned int thread_id, const char *cook
        ctsvc_stmt_finalize(stmt);
 }
 
-void ctsvc_unset_client_access_info()
+void ctsvc_unset_client_access_info(const char *zone_name)
 {
        ctsvc_permission_info_s *find = NULL;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
-       find = __ctsvc_find_access_info(pthread_self());
+       find = __ctsvc_find_access_info(zone_name, pthread_self());
        if (find) {
                free(find->smack_label);
                free(find->write_list);
+               free(find->zone_name);
                __thread_list = g_list_remove(__thread_list, find);
                free(find);
        }
        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
 }
 
-// release permission info resource when disconnecting client
-// It is set as callback function using pims-ipc API
+/*
+ * release permission info resource when disconnecting client
+ * It is set as callback function using pims-ipc API
+ */
 static void __ctsvc_client_disconnected_cb(pims_ipc_h ipc, void *user_data)
 {
+       char *zone_name = NULL;
        ctsvc_permission_info_s *info;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
@@ -265,48 +282,55 @@ static void __ctsvc_client_disconnected_cb(pims_ipc_h ipc, void *user_data)
                                                        info->thread_id, info, info->permission);
                free(info->smack_label);
                free(info->write_list);
+               zone_name = SAFE_STRDUP(info->zone_name);
                __thread_list = g_list_remove(__thread_list, info);
                free(info);
        }
 
        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
 
-       // if client did not call disconnect function such as contacts_disconnect, contacts_disconnect_on_thread
-       // DB will be closed in ctsvc_contacts_internal_disconnect()
-       ctsvc_contacts_internal_disconnect();
+       /*
+        * if client did not call disconnect function
+        * such as contacts_disconnect, contacts_disconnect_on_thread
+        * DB will be closed in ctsvc_contacts_internal_disconnect()
+        */
+       ctsvc_contacts_internal_disconnect(zone_name);
+       free(zone_name);
 }
 
-// Set access permission info per thread(client)
-void ctsvc_set_client_access_info(const char *smack_label, const char *cookie)
+/* Set access permission info per thread(client) */
+void ctsvc_set_client_access_info(const char *zone_name, const char *smack_label, const char *cookie)
 {
        unsigned int thread_id;
        ctsvc_permission_info_s *info = NULL;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
        thread_id = (unsigned int)pthread_self();
-       info = __ctsvc_find_access_info(thread_id);
+       info = __ctsvc_find_access_info(zone_name, thread_id);
        if (NULL == info) {
                info = calloc(1, sizeof(ctsvc_permission_info_s));
                if (NULL == info) {
+                       CTS_ERR("Thread(0x%x), calloc() Fail", thread_id);
                        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
-                       CTS_ERR("calloc()() return NULL");
                        return;
                }
                __thread_list  = g_list_append(__thread_list, info);
        }
        info->thread_id = thread_id;
+       info->zone_name = SAFE_STRDUP(zone_name);
        FREEandSTRDUP(info->smack_label, smack_label);
-       __ctsvc_set_permission_info(thread_id, cookie);
+       __ctsvc_set_permission_info(zone_name, thread_id, cookie);
 
-       if (strcmp(smack_label, "contacts-service") != 0)
+       if (STRING_EQUAL != strcmp(smack_label, "contacts-service"))
                pims_ipc_svc_set_client_disconnected_cb(__ctsvc_client_disconnected_cb, info);
 
        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
-
 }
 
-// Whenever changing addressbook this function will be called
-// to reset read/write permssion info of each addressbook
+/*
+ * Whenever changing addressbook this function will be called
+ * to reset read/write permssion info of each addressbook
+ */
 void ctsvc_reset_all_client_access_info()
 {
        GList *cursor;
@@ -314,24 +338,26 @@ void ctsvc_reset_all_client_access_info()
        for (cursor=__thread_list;cursor;cursor=cursor->next) {
                ctsvc_permission_info_s *info = (ctsvc_permission_info_s *)cursor->data;
                if (info == NULL) continue;
-               __ctsvc_set_permission_info(info->thread_id, NULL);
+               char *zone_name = SAFE_STRDUP(info->zone_name);
+               __ctsvc_set_permission_info(zone_name, info->thread_id, NULL);
+               free(zone_name);
        }
        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
 }
 
-bool ctsvc_have_permission(int permission)
+bool ctsvc_have_permission(const char *zone_name, int permission)
 {
        ctsvc_permission_info_s *find = NULL;
        unsigned int thread_id;
 
        have_smack = __ctsvc_have_smack();
-       if (have_smack != 1)            // smack disable
+       if (have_smack != 1)   /* smack disable */
                return true;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
        thread_id = (unsigned int)pthread_self();
-       find = __ctsvc_find_access_info(thread_id);
-       if (!find) {
+       find = __ctsvc_find_access_info(zone_name, thread_id);
+       if (NULL == find) {
                ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
                return false;
        }
@@ -353,20 +379,20 @@ bool ctsvc_have_permission(int permission)
        return false;
 }
 
-bool ctsvc_have_ab_write_permission(int addressbook_id)
+bool ctsvc_have_ab_write_permission(const char *zone_name, int addressbook_id)
 {
        int i;
        unsigned int thread_id;
        ctsvc_permission_info_s *find = NULL;
 
        have_smack = __ctsvc_have_smack();
-       if (have_smack != 1)            // smack disable
+       if (have_smack != 1)   /* smack disable */
                return true;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
        thread_id = (unsigned int)pthread_self();
-       find = __ctsvc_find_access_info(thread_id);
-       if (!find) {
+       find = __ctsvc_find_access_info(zone_name, thread_id);
+       if (NULL == find) {
                ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
                CTS_ERR("can not found access info");
                return false;
@@ -390,23 +416,26 @@ bool ctsvc_have_ab_write_permission(int addressbook_id)
        return false;
 }
 
-int ctsvc_get_write_permitted_addressbook_ids(int **addressbook_ids, int *count)
+int ctsvc_get_write_permitted_addressbook_ids(const char *zone_name, int **addressbook_ids, int *count)
 {
+       unsigned int thread_id;
        ctsvc_permission_info_s *find = NULL;
        *count = 0;
        *addressbook_ids = NULL;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
-       find = __ctsvc_find_access_info(pthread_self());
+       thread_id = (unsigned int)pthread_self();
+       find = __ctsvc_find_access_info(zone_name, thread_id);
        if (find) {
-               if (find->write_list && find->write_list_count > 0) {
+               if (find->write_list && 0 < find->write_list_count) {
                        int size = find->write_list_count * sizeof(int);
                        int *list = calloc(1, size);
                        if (NULL == list) {
+                               CTS_ERR("Thread(0x%x), calloc() Fail", thread_id);
                                ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
-                               CTS_ERR("calloc() return NULL");
                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
+
                        memcpy(list, find->write_list, size);
                        *count = find->write_list_count;
                        *addressbook_ids = list;
@@ -421,20 +450,20 @@ int ctsvc_get_write_permitted_addressbook_ids(int **addressbook_ids, int *count)
        return CONTACTS_ERROR_INTERNAL;
 }
 
-char* ctsvc_get_client_smack_label()
+char* ctsvc_get_client_smack_label(const char *zone_name)
 {
        ctsvc_permission_info_s *find = NULL;
        char *smack = NULL;
 
        ctsvc_mutex_lock(CTS_MUTEX_ACCESS_CONTROL);
-       find = __ctsvc_find_access_info(pthread_self());
+       find = __ctsvc_find_access_info(zone_name, pthread_self());
        if (find)
                smack = strdup(find->smack_label);
        ctsvc_mutex_unlock(CTS_MUTEX_ACCESS_CONTROL);
        return smack;
 }
 
-int ctsvc_is_owner(int addressbook_id)
+int ctsvc_is_owner(const char *zone_name, int addressbook_id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -445,15 +474,15 @@ int ctsvc_is_owner(int addressbook_id)
        snprintf(query, sizeof(query),
                        "SELECT addressbook_name, smack_label FROM "CTS_TABLE_ADDRESSBOOKS" "
                                "WHERE addressbook_id = %d", addressbook_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
@@ -461,9 +490,9 @@ int ctsvc_is_owner(int addressbook_id)
        ret = CONTACTS_ERROR_PERMISSION_DENIED;
 
        saved_smack = ctsvc_stmt_get_text(stmt, 1);
-       smack = ctsvc_get_client_smack_label();
+       smack = ctsvc_get_client_smack_label(zone_name);
 
-       if (smack && strcmp(smack, saved_smack) == 0)
+       if (smack && STRING_EQUAL == strcmp(smack, saved_smack))
                ret = CONTACTS_ERROR_NONE;
 
        ctsvc_stmt_finalize(stmt);
@@ -471,4 +500,3 @@ int ctsvc_is_owner(int addressbook_id)
        free(smack);
        return ret;
 }
-
diff --git a/server/db/ctsvc_db_access_control.h b/server/db/ctsvc_db_access_control.h
new file mode 100644 (file)
index 0000000..fab291e
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_DB_ACCESS_CONTROL_H__
+#define __CTSVC_DB_ACCESS_CONTROL_H__
+
+int ctsvc_have_file_read_permission(const char *zone_name, const char *path);
+
+void ctsvc_set_client_access_info(const char *zone_name, const char *smack_label, const char *cookie);
+void ctsvc_unset_client_access_info(const char *zone_name);
+void ctsvc_reset_all_client_access_info(void);
+
+bool ctsvc_have_permission(const char *zone_name, int permission);
+char* ctsvc_get_client_smack_label(const char *zone_name);
+
+int ctsvc_get_write_permitted_addressbook_ids(const char *zone_name, int **addressbook_ids, int *count);
+bool ctsvc_have_ab_write_permission(const char *zone_name, int addressbook_id);
+int ctsvc_is_owner(const char *zone_name, int addressbook_id);
+
+
+#endif /* __CTSVC_DB_ACCESS_CONTROL_H__ */
\ No newline at end of file
similarity index 85%
rename from native/ctsvc_db_init.c
rename to server/db/ctsvc_db_init.c
index ec824f0..d163d3d 100644 (file)
 #include "contacts.h"
 
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_view.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
@@ -41,11 +41,9 @@ extern ctsvc_db_plugin_info_s ctsvc_db_plugin_group;
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_person;
 #ifdef ENABLE_LOG_FEATURE
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_phonelog;
-#endif // ENABLE_LOG_FEATURE
-#ifdef ENABLE_SIM_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_speeddial;
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_sdn;
-#endif // ENABLE_SIM_FEATURE
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_activity;
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_activity_photo;
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_address;
@@ -72,7 +70,7 @@ static int __ctsvc_db_view_ref_count = 0;
 static GHashTable *__ctsvc_db_view_hash_table = NULL;
 
 #ifdef _CONTACTS_IPC_SERVER
-static bool __ctsvc_db_view_already_created = false;
+static GHashTable *ctsvc_db_view_created_table = NULL;
 #endif
 
 typedef struct {
@@ -112,12 +110,14 @@ static const db_table_info_s __db_tables[] = {
        {CTSVC_VIEW_URI_GROUP_RELATION, CTSVC_DB_VIEW_GROUP_RELATION, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
        {CTSVC_VIEW_URI_EXTENSION,              CTSVC_DB_VIEW_EXTENSION, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
 
-// Do not support get_all_records, get_records_with_query, get_count, get_count_with_query
-//     {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_UPDATED_INFO, false},
-//     {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO, false},
-//     {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO, false},
-//     {CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO, NULL, false},
-//     {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, NULL, false},
+/* Do not support get_all_records, get_records_with_query, get_count, get_count_with_query */
+/*
+ * {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_UPDATED_INFO, false},
+ * {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO, false},
+ * {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO, false},
+ * {CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO, NULL, false},
+ * {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, NULL, false},
+ */
 
        {CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, CTSVC_DB_VIEW_PERSON_CONTACT, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
        {CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER, CTSVC_DB_VIEW_PERSON_NUMBER, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
@@ -137,7 +137,7 @@ static const db_table_info_s __db_tables[] = {
 
 };
 
-// this function is called in mutex lock
+/* this function is called in mutex lock */
 int ctsvc_db_plugin_init()
 {
        int i;
@@ -168,7 +168,7 @@ int ctsvc_db_plugin_deinit()
                return;
 #endif
 
-       if (!__ctsvc_db_view_hash_table) {
+       if (NULL == __ctsvc_db_view_hash_table) {
                return CONTACTS_ERROR_NONE;
        }
        g_hash_table_destroy(__ctsvc_db_view_hash_table);
@@ -181,7 +181,7 @@ int ctsvc_db_get_table_name(const char *view_uri, const char **out_table)
 {
        db_table_info_s* db_view_info = NULL;
 
-       if(__ctsvc_db_view_hash_table){
+       if (__ctsvc_db_view_hash_table) {
                db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
                if (db_view_info) {
                        *out_table = db_view_info->table_name;
@@ -198,7 +198,7 @@ int ctsvc_required_read_permission(const char *view_uri)
 {
        db_table_info_s* db_view_info = NULL;
 
-       if(__ctsvc_db_view_hash_table){
+       if (__ctsvc_db_view_hash_table) {
                db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
                if (db_view_info) {
                        return db_view_info->read_permission;
@@ -214,7 +214,7 @@ int ctsvc_required_write_permission(const char *view_uri)
 {
        db_table_info_s* db_view_info = NULL;
 
-       if(__ctsvc_db_view_hash_table){
+       if (__ctsvc_db_view_hash_table) {
                db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
                if (db_view_info) {
                        return db_view_info->write_permission;
@@ -230,7 +230,7 @@ bool ctsvc_should_ab_access_control(const char *view_uri)
 {
        db_table_info_s* db_view_info = NULL;
 
-       if(__ctsvc_db_view_hash_table){
+       if (__ctsvc_db_view_hash_table) {
                db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
                if (db_view_info) {
                        return db_view_info->need_ab_access_control;
@@ -294,13 +294,11 @@ ctsvc_db_plugin_info_s* ctsvc_db_get_plugin_info(ctsvc_record_type_e type)
 #ifdef ENABLE_LOG_FEATURE
        case CTSVC_RECORD_PHONELOG:
                return &ctsvc_db_plugin_phonelog;
-#endif // ENABLE_LOG_FEATURE
-#ifdef ENABLE_SIM_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        case CTSVC_RECORD_SPEEDDIAL:
                return &ctsvc_db_plugin_speeddial;
        case CTSVC_RECORD_SDN:
                return &ctsvc_db_plugin_sdn;
-#endif // ENABLE_SIM_FEATURE
        case CTSVC_RECORD_UPDATED_INFO:
        case CTSVC_RECORD_RESULT:
        default:
@@ -309,29 +307,35 @@ ctsvc_db_plugin_info_s* ctsvc_db_get_plugin_info(ctsvc_record_type_e type)
 }
 
 #ifdef _CONTACTS_IPC_SERVER
-static int __ctsvc_db_create_views()
+static int __ctsvc_db_create_views(const char *zone_name)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       if( __ctsvc_db_view_already_created )
+       bool db_view_created = false;
+       if (NULL == ctsvc_db_view_created_table)
+               ctsvc_db_view_created_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               db_view_created = (bool)GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_db_view_created_table, zone_name));
+
+       if (db_view_created)
                return CONTACTS_ERROR_NONE;
 
-       // CTSVC_DB_VIEW_CONTACT
+       /* CTSVC_DB_VIEW_CONTACT */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT" AS "
                        "SELECT * FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_execs() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_execs() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_MY_PROFILE
+       /* CTSVC_DB_VIEW_MY_PROFILE */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MY_PROFILE" AS "
                        "SELECT * FROM "CTS_TABLE_MY_PROFILES" WHERE deleted = 0");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON
+       /* CTSVC_DB_VIEW_PERSON */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON" AS "
                        "SELECT persons.person_id, "
@@ -354,10 +358,10 @@ static int __ctsvc_db_create_views()
                                        "(SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) favorite_prio "
                        "FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_PERSONS" "
                        "ON (name_contact_id = contacts.contact_id) ");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_NAME
+       /* CTSVC_DB_VIEW_NAME */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NAME" AS "
                        "SELECT id, "
@@ -375,10 +379,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_NAME);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_NUMBER
+       /* CTSVC_DB_VIEW_NUMBER */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NUMBER" AS "
                        "SELECT id, "
@@ -395,10 +399,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_EMAIL
+       /* CTSVC_DB_VIEW_EMAIL */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EMAIL" AS "
                        "SELECT id, "
@@ -412,10 +416,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_ADDRESS
+       /* CTSVC_DB_VIEW_ADDRESS */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ADDRESS" AS "
                        "SELECT id, "
@@ -435,10 +439,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_POSTAL);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_URL
+       /* CTSVC_DB_VIEW_URL */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_URL" AS "
                        "SELECT id, "
@@ -451,10 +455,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_URL);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_EVENT
+       /* CTSVC_DB_VIEW_EVENT */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EVENT" AS "
                        "SELECT id, "
@@ -469,10 +473,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_EVENT);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_GROUP_RELATION
+       /* CTSVC_DB_VIEW_GROUP_RELATION */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_GROUP_RELATION" AS "
                        "SELECT "CTS_TABLE_GROUP_RELATIONS".group_id, "
@@ -482,10 +486,10 @@ static int __ctsvc_db_create_views()
                        "FROM "CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
                        "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND deleted = 0 "
                        "ORDER BY group_prio");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_RELATIONSHIP
+       /* CTSVC_DB_VIEW_RELATIONSHIP */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_RELATIONSHIP" AS "
                        "SELECT id, "
@@ -498,10 +502,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_RELATIONSHIP);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_IMAGE
+       /* CTSVC_DB_VIEW_IMAGE */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_IMAGE" AS "
                        "SELECT id, "
@@ -515,10 +519,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_IMAGE);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_COMPANY
+       /* CTSVC_DB_VIEW_COMPANY */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_COMPANY" AS "
                        "SELECT id, "
@@ -539,10 +543,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_COMPANY);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_NICKNAME
+       /* CTSVC_DB_VIEW_NICKNAME */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NICKNAME" AS "
                        "SELECT id, "
@@ -553,10 +557,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_NICKNAME);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_MESSENGER
+       /* CTSVC_DB_VIEW_MESSENGER */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MESSENGER" AS "
                        "SELECT id, "
@@ -569,10 +573,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_MESSENGER);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_NOTE
+       /* CTSVC_DB_VIEW_NOTE */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NOTE" AS "
                        "SELECT id, "
@@ -583,10 +587,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_NOTE);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PROFILE
+       /* CTSVC_DB_VIEW_PROFILE */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PROFILE" AS "
                        "SELECT id, "
@@ -607,10 +611,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_PROFILE);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_EXTENSION
+       /* CTSVC_DB_VIEW_EXTENSION */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EXTENSION" AS "
                        "SELECT id, "
@@ -632,10 +636,10 @@ static int __ctsvc_db_create_views()
                        "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "WHERE datatype = %d AND is_my_profile = 0 ",
                                CTSVC_DATA_EXTENSION);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_ACTIVITY
+       /* CTSVC_DB_VIEW_ACTIVITY */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY" AS "
                        "SELECT id, "
@@ -649,10 +653,10 @@ static int __ctsvc_db_create_views()
                        "FROM "CTS_TABLE_ACTIVITIES", "CTSVC_DB_VIEW_CONTACT" "
                        "ON "CTS_TABLE_ACTIVITIES".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
                        "ORDER BY timestamp DESC");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_ACTIVITY_PHOTOS
+       /* CTSVC_DB_VIEW_ACTIVITY_PHOTOS */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY_PHOTOS" AS "
                        "SELECT "CTS_TABLE_ACTIVITY_PHOTOS".id, "
@@ -661,11 +665,10 @@ static int __ctsvc_db_create_views()
                                        "sort_index "
                        "FROM "CTS_TABLE_ACTIVITY_PHOTOS", "CTSVC_DB_VIEW_ACTIVITY" "
                        "ON "CTS_TABLE_ACTIVITY_PHOTOS".activity_id = "CTSVC_DB_VIEW_ACTIVITY".id");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-#ifdef ENABLE_SIM_FEATURE
-       // CTSVC_DB_VIEW_SPEEDIDAL
+       /* CTSVC_DB_VIEW_SPEEDIDAL */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_SPEEDIDAL" AS "
                        "SELECT persons.person_id, "
@@ -691,12 +694,10 @@ static int __ctsvc_db_create_views()
                                "AND temp_contacts.contact_id = data.contact_id "
                                "AND data.id = speeddials.number_id) "
                        "ORDER BY speeddials.speed_number");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
-#endif // ENABLE_SIM_FEATURE
-
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_CONTACT
+       /* CTSVC_DB_VIEW_PERSON_CONTACT */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_CONTACT" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
@@ -708,10 +709,10 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_ADDRESSBOOKS") temp_addressbooks "
                        "ON temp_contacts.person_id_in_contact = "CTSVC_DB_VIEW_PERSON".person_id "
                                "AND addressbook_id = temp_addressbooks.addressbook_id_in_addressbooks");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_NUMBER
+       /* CTSVC_DB_VIEW_PERSON_NUMBER */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_NUMBER" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
@@ -727,10 +728,10 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
                        "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
                                CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_EMAIL
+       /* CTSVC_DB_VIEW_PERSON_EMAIL */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_EMAIL" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
@@ -743,11 +744,11 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
                        "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
                                CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
 #ifdef ENABLE_LOG_FEATURE
-       // CTSVC_DB_VIEW_PERSON_PHONELOG
+       /* CTSVC_DB_VIEW_PERSON_PHONELOG */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_PHONELOG" AS "
                        "SELECT L.id phonelog_id, "
@@ -775,11 +776,11 @@ static int __ctsvc_db_create_views()
                                        "LEFT JOIN "CTS_TABLE_CONTACTS" C "
                                                "ON P.name_contact_id = C.contact_id AND C.deleted = 0 "
                        "ORDER BY L.log_time DESC");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
-#endif // ENABLE_LOG_FEATURE
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
+#endif /* ENABLE_LOG_FEATURE */
 
-       // CTSVC_DB_VIEW_PERSON_USAGE
+       /* CTSVC_DB_VIEW_PERSON_USAGE */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_USAGE" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
@@ -789,10 +790,10 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_CONTACT_STAT") usage "
                        "ON usage.person_id = "CTSVC_DB_VIEW_PERSON".person_id "
                        "ORDER BY usage.times_used");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_GROUP
+       /* CTSVC_DB_VIEW_PERSON_GROUP */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP" AS "
                        "SELECT view_person_contact.*, groups.group_id, group_prio "
@@ -803,18 +804,18 @@ static int __ctsvc_db_create_views()
                                        "LEFT JOIN "CTS_TABLE_GROUPS" "
                                                "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id "
                                        "ORDER BY group_prio");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED
+       /* CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
                        "WHERE contact_id NOT IN (select contact_id FROM "CTS_TABLE_GROUP_RELATIONS" WHERE deleted = 0)");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED
+       /* CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED" AS "
                        "SELECT "CTSVC_DB_VIEW_PERSON_CONTACT".*, groups.group_id, group_prio "
@@ -825,10 +826,10 @@ static int __ctsvc_db_create_views()
                        CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND "
                        CTS_TABLE_GROUP_RELATIONS".deleted = 0 "
                        "ORDER BY group_prio");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_CONTACT_NUMBER
+       /* CTSVC_DB_VIEW_CONTACT_NUMBER */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_NUMBER" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
@@ -844,10 +845,10 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
                        "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
                                CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_CONTACT_EMAIL
+       /* CTSVC_DB_VIEW_CONTACT_EMAIL */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_EMAIL" AS "
                        "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
@@ -860,10 +861,10 @@ static int __ctsvc_db_create_views()
                                        "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
                        "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
                                CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_CONTACT_GROUP
+       /* CTSVC_DB_VIEW_CONTACT_GROUP */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_GROUP" AS "
                        "SELECT C.*, groups.group_id, group_name "
@@ -873,10 +874,10 @@ static int __ctsvc_db_create_views()
                                                        CTS_TABLE_GROUP_RELATIONS".contact_id = C.contact_id "
                                "LEFT JOIN "CTS_TABLE_GROUPS" "
                                        "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       // CTSVC_DB_VIEW_CONTACT_ACTIVITY
+       /* CTSVC_DB_VIEW_CONTACT_ACTIVITY */
        snprintf(query, sizeof(query),
                "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_ACTIVITY" AS "
                        "SELECT A.contact_id, "
@@ -902,29 +903,29 @@ static int __ctsvc_db_create_views()
                        "ON A.contact_id = AC.contact_id "
                        "AND A.addressbook_id = AB.addressbook_id "
                        "ORDER BY timestamp DESC");
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       __ctsvc_db_view_already_created = true;
+       g_hash_table_replace(ctsvc_db_view_created_table, g_strdup(zone_name), GINT_TO_POINTER((int)true));
 
        return CONTACTS_ERROR_NONE;
 }
 
 #endif
 
-int ctsvc_db_init()
+int ctsvc_db_init(const char *zone_name)
 {
        int ret = CONTACTS_ERROR_NONE;
-       ret = ctsvc_db_open();
+       ret = ctsvc_db_open(zone_name);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_db_open() Failed(%d)", ret);
+               CTS_ERR("ctsvc_db_open() Fail(%d)", ret);
                return ret;
        }
 
 #ifdef _CONTACTS_IPC_SERVER
-       ret = __ctsvc_db_create_views();
+       ret = __ctsvc_db_create_views(zone_name);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("__ctsvc_db_create_views() Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_create_views() Fail(%d)", ret);
                return ret;
        }
 #endif
@@ -932,12 +933,12 @@ int ctsvc_db_init()
        return ret;
 }
 
-int ctsvc_db_deinit()
+int ctsvc_db_deinit(const char *zone_name)
 {
        int ret = CONTACTS_ERROR_NONE;
-       ret = ctsvc_db_close();
+       ret = ctsvc_db_close(zone_name);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_db_close() Failed(%d)", ret);
+               CTS_ERR("ctsvc_db_close() Fail(%d)", ret);
                return ret;
        }
 
similarity index 56%
rename from native/ctsvc_db_init.h
rename to server/db/ctsvc_db_init.h
index 7eb082e..1504a8e 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_DB_INIT_H__
-#define __TIZEN_SOCIAL_CTSVC_DB_INIT_H__
+#ifndef __CTSVC_DB_INIT_H__
+#define __CTSVC_DB_INIT_H__
 
 #include "contacts.h"
 #include "ctsvc_struct.h"
 
-typedef int (*ctsvc_db_insert_record_cb)( contacts_record_h record, int *id );
-typedef int (*ctsvc_db_get_record_cb)( int id, contacts_record_h* out_record );
-typedef int (*ctsvc_db_update_record_cb)( contacts_record_h record );
-typedef int (*ctsvc_db_delete_record_cb)( int id );
-typedef int (*ctsvc_db_replace_record_cb)( contacts_record_h record, int id );
+typedef int (*ctsvc_db_insert_record_cb)(const char *zone_name, contacts_record_h record, int *id);
+typedef int (*ctsvc_db_get_record_cb)(const char *zone_name, int id, contacts_record_h* out_record);
+typedef int (*ctsvc_db_update_record_cb)(const char *zone_name, contacts_record_h record);
+typedef int (*ctsvc_db_delete_record_cb)(const char *zone_name, int id);
+typedef int (*ctsvc_db_replace_record_cb)(const char *zone_name, contacts_record_h record, int id);
 
-typedef int (*ctsvc_db_insert_records_cb)(const contacts_list_h in_list, int **ids);
-typedef int (*ctsvc_db_update_records_cb)(const contacts_list_h in_list);
-typedef int (*ctsvc_db_delete_records_cb)(int ids[], int count);
-typedef int (*ctsvc_db_replace_records_cb)(const contacts_list_h in_list, int ids[], int count);
+typedef int (*ctsvc_db_insert_records_cb)(const char *zone_name, const contacts_list_h in_list, int **ids);
+typedef int (*ctsvc_db_update_records_cb)(const char *zone_name, const contacts_list_h in_list);
+typedef int (*ctsvc_db_delete_records_cb)(const char *zone_name, int ids[], int count);
+typedef int (*ctsvc_db_replace_records_cb)(const char *zone_name, const contacts_list_h in_list, int ids[], int count);
 
-typedef int (*ctsvc_db_get_all_records_cb)( int offset, int limit, contacts_list_h* out_list );
-typedef int (*ctsvc_db_get_records_with_query_cb)( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-typedef int (*ctsvc_db_get_count_cb)( int *out_count);
-typedef int (*ctsvc_db_get_count_with_query_cb)( contacts_query_h query, int *out_count);
+typedef int (*ctsvc_db_get_all_records_cb)(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+typedef int (*ctsvc_db_get_records_with_query_cb)(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
+typedef int (*ctsvc_db_get_count_cb)(const char *zone_name, int *out_count);
+typedef int (*ctsvc_db_get_count_with_query_cb)(const char *zone_name, contacts_query_h query, int *out_count);
 
 typedef struct {
     bool is_query_only;
@@ -60,8 +60,8 @@ typedef struct {
     ctsvc_db_get_count_with_query_cb get_count_with_query;
 } ctsvc_db_plugin_info_s;
 
-int ctsvc_db_init();
-int ctsvc_db_deinit();
+int ctsvc_db_init(const char *zone_name);
+int ctsvc_db_deinit(const char *zone_name);
 
 int ctsvc_db_plugin_init();
 int ctsvc_db_plugin_deinit();
@@ -74,4 +74,4 @@ int ctsvc_required_write_permission(const char *view_uri);
 
 bool ctsvc_should_ab_access_control(const char *view_uri);
 
-#endif // __TIZEN_SOCIAL_CTSVC_DB_INIT_H__
+#endif /* __CTSVC_DB_INIT_H__ */
\ No newline at end of file
similarity index 70%
rename from native/ctsvc_db_plugin_activity.c
rename to server/db/ctsvc_db_plugin_activity.c
index 22048d2..8cc3abc 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_plugin_activity_photo_helper.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_record.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_activity_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_activity_update_record( contacts_record_h record );
-static int __ctsvc_db_activity_delete_record( int id );
-static int __ctsvc_db_activity_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_activity_insert_records(const contacts_list_h in_list, int **ds);
-//static int __ctsvc_db_activity_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_activity_delete_records( int ids[], int count);
+static int __ctsvc_db_activity_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_activity_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_activity_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_activity_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_activity_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_activity_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_activity = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_activity = {
        .delete_record = __ctsvc_db_activity_delete_record,
        .get_all_records = __ctsvc_db_activity_get_all_records,
        .get_records_with_query = __ctsvc_db_activity_get_records_with_query,
-       .insert_records = NULL, //__ctsvc_db_activity_insert_records,
-       .update_records = NULL, //__ctsvc_db_activity_update_records,
-       .delete_records = NULL, //__ctsvc_db_activity_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_activity_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int activity_id;
@@ -75,16 +72,16 @@ static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id
        RETVM_IF(activity->contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                "The contact_id(%d) does not exist", activity->contact_id);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "contacts_svc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id from %s WHERE contact_id = %d",
                                CTSVC_DB_VIEW_CONTACT, activity->contact_id);
 
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
-       if (CONTACTS_ERROR_NONE != ret ) {
-               ctsvc_end_trans(false);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact id (%d)", activity->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -95,13 +92,13 @@ static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id
                }
        }
 
-       ret = ctsvc_is_owner(addressbook_id);
+       ret = ctsvc_is_owner(zone_name, addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
                        CTS_ERR("Does not have permission of address_book (%d)", addressbook_id);
                else
                        CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -111,10 +108,10 @@ static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id
                        "VALUES(%d, ?, ?, %d, ?, ?)",
                        activity->contact_id, activity->timestamp);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare() Failed9(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -129,19 +126,19 @@ static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       activity_id = ctsvc_db_get_last_insert_id();
+       activity_id = ctsvc_db_get_last_insert_id(zone_name);
 
        ctsvc_stmt_finalize(stmt);
 
        if (activity->photos) {
                ret = contacts_list_get_count((contacts_list_h)activity->photos, &count);
-               if(CONTACTS_ERROR_NONE == ret && 0 < count) {
+               if (CONTACTS_ERROR_NONE == ret && 0 < count) {
                        ctsvc_activity_photo_s *photo = NULL;
                        contacts_record_h record = NULL;
 
@@ -149,22 +146,22 @@ static int __ctsvc_db_activity_insert_record( contacts_record_h record, int *id
                        do {
                                contacts_list_get_current_record_p((contacts_list_h)activity->photos, &record);
                                photo = (ctsvc_activity_photo_s*)record;
-                               ret = ctsvc_db_activity_photo_insert((contacts_record_h)photo, activity_id, NULL);
-                               if (CONTACTS_ERROR_DB == ret){
+                               ret = ctsvc_db_activity_photo_insert(zone_name, (contacts_record_h)photo, activity_id, NULL);
+                               if (CONTACTS_ERROR_DB == ret) {
                                        CTS_ERR("DB error : return (%d)", ret);
                                        break;
                                }
-                       }while(CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)activity->photos));
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)activity->photos));
                }
        }
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
        if (id)
                *id = activity_id;
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
        else
@@ -196,7 +193,7 @@ static int __ctsvc_db_activity_value_set(cts_stmt stmt, contacts_record_h *recor
 }
 
 
-static int __ctsvc_db_activity_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_activity_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        int ret;
@@ -207,12 +204,12 @@ static int __ctsvc_db_activity_get_record( int id, contacts_record_h* out_record
                                        "timestamp, service_operation, uri "
                                        "FROM "CTSVC_DB_VIEW_ACTIVITY" WHERE id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -223,69 +220,69 @@ static int __ctsvc_db_activity_get_record( int id, contacts_record_h* out_record
        __ctsvc_db_activity_value_set(stmt, &record);
        ctsvc_stmt_finalize(stmt);
 
-       ctsvc_db_activity_photo_get_records(id, record);
+       ctsvc_db_activity_photo_get_records(zone_name, id, record);
 
        *out_record = (contacts_record_h)record;
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_update_record( contacts_record_h record )
+static int __ctsvc_db_activity_update_record(const char *zone_name, contacts_record_h record)
 {
        CTS_ERR("Invalid operation : activity can not update, only insert/delete");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_activity_delete_record( int id )
+static int __ctsvc_db_activity_delete_record(const char *zone_name, int id)
 {
        int ret;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" "
                                "WHERE contact_id = (SELECT contact_id FROM "CTSVC_DB_VIEW_ACTIVITY" WHERE id = %d)", id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
-       if (CONTACTS_ERROR_NONE != ret ) {
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
+       if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : id (%d)", id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_is_owner(addressbook_id);
+       ret = ctsvc_is_owner(zone_name, addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
                        CTS_ERR("Does not have permission of address_book (%d)", addressbook_id);
                else
                        CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "DELETE FROM "CTS_TABLE_ACTIVITIES" WHERE id = %d", id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_get_all_records( int offset, int limit,
-       contacts_list_h* out_list )
+static int __ctsvc_db_activity_get_all_records(const char *zone_name, int offset, int limit,
+       contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -303,22 +300,22 @@ static int __ctsvc_db_activity_get_all_records( int offset, int limit,
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
                activity_id = ctsvc_stmt_get_int(stmt, 0);
-               ret = contacts_db_get_record(_contacts_activity._uri, activity_id, &record);
+               ret = ctsvc_db_get_record(zone_name, _contacts_activity._uri, activity_id, &record);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : contacts_db_get_record() Failed(%d)", ret);
+                       CTS_ERR("DB error : contacts_db_get_record() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -332,7 +329,7 @@ static int __ctsvc_db_activity_get_all_records( int offset, int limit,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_activity_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -355,25 +352,29 @@ static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, i
                        }
                }
        }
-       else
+       else {
+               s_query->projection_count = 0;
                had_activity_id = true;
+       }
 
-       if (!had_activity_id) {
-               unsigned int *temp = realloc(s_query->projection, s_query->projection_count+1);
-               RETVM_IF(NULL == temp, CONTACTS_ERROR_OUT_OF_MEMORY, "realloc() return NULL");
-               s_query->projection = temp;
+       if (false == had_activity_id) {
+               s_query->projection = realloc(s_query->projection, s_query->projection_count+1);
+               if (NULL == s_query->projection) {
+                       CTS_ERR("realloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
                s_query->projection[s_query->projection_count] = CTSVC_PROPERTY_ACTIVITY_ID;
                s_query->projection_count++;
        }
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -388,11 +389,11 @@ static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, i
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -412,10 +413,12 @@ static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, i
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(activity->source_name);
                                activity->source_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_STATUS:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(activity->status);
                                activity->status = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_TIMESTAMP:
@@ -423,17 +426,19 @@ static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, i
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_SERVICE_OPERATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(activity->service_operation);
                                activity->service_operation = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_URI:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(activity->uri);
                                activity->uri = SAFE_STRDUP(temp);
                                break;
                        default:
                                break;
                        }
                }
-               ctsvc_db_activity_photo_get_records(activity_id, record);
+               ctsvc_db_activity_photo_get_records(zone_name, activity_id, record);
 
                ctsvc_list_prepend(list, record);
        }
@@ -443,6 +448,3 @@ static int __ctsvc_db_activity_get_records_with_query( contacts_query_h query, i
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-//static int __ctsvc_db_activity_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_activity_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_activity_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 68%
rename from native/ctsvc_db_plugin_activity_photo.c
rename to server/db/ctsvc_db_plugin_activity_photo.c
index a25c77e..2328807 100644 (file)
@@ -18,9 +18,9 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_activity_photo_helper.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_list.h"
 
-static int __ctsvc_db_activity_photo_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_activity_photo_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_activity_photo_update_record( contacts_record_h record );
-static int __ctsvc_db_activity_photo_delete_record( int id );
-static int __ctsvc_db_activity_photo_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_activity_photo_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
+static int __ctsvc_db_activity_photo_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_activity_photo_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_activity_photo_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_activity_photo_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_activity_photo_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_activity_photo_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_activity_photo = {
        .is_query_only = false,
@@ -53,7 +53,7 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_activity_photo = {
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_activity_photo_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_activity_photo_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -63,18 +63,18 @@ static int __ctsvc_db_activity_photo_insert_record( contacts_record_h record, in
        RETVM_IF(NULL == activity_photo->photo_url, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : photo_url is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id from "CTSVC_DB_VIEW_CONTACT" "
                        "WHERE contact_id = (SELECT contact_id from "CTS_TABLE_ACTIVITIES" WHERE id = %d)", activity_photo->activity_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : activity_id (%d) is not exist", activity_photo->activity_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -85,26 +85,26 @@ static int __ctsvc_db_activity_photo_insert_record( contacts_record_h record, in
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to insert this activity_photo record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_activity_photo_insert(record, activity_photo->activity_id, id);
+       ret = ctsvc_db_activity_photo_insert(zone_name, record, activity_photo->activity_id, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_activity_photo_insert() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_activity_photo_insert() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_photo_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_activity_photo_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -119,12 +119,12 @@ static int __ctsvc_db_activity_photo_get_record( int id, contacts_record_h* out_
                        "WHERE id = %d",
                        id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -139,7 +139,7 @@ static int __ctsvc_db_activity_photo_get_record( int id, contacts_record_h* out_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_photo_update_record( contacts_record_h record )
+static int __ctsvc_db_activity_photo_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -148,9 +148,9 @@ static int __ctsvc_db_activity_photo_update_record( contacts_record_h record )
 
        RETVM_IF(NULL == activity_photo->photo_url, CONTACTS_ERROR_INVALID_PARAMETER, "photo_url is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
@@ -159,41 +159,41 @@ static int __ctsvc_db_activity_photo_update_record( contacts_record_h record )
                        "WHERE contact_id = (SELECT contact_id from "CTS_TABLE_ACTIVITIES" WHERE id = %d)",
                        activity_photo->activity_id);
 
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : activity_id (%d) is not exist", activity_photo->activity_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this activity_photo record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_activity_photo_update(record);
+       ret = ctsvc_db_activity_photo_update(zone_name, record);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_photo_delete_record( int id )
+static int __ctsvc_db_activity_photo_delete_record(const char *zone_name, int id)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
                return ret;
        }
 
@@ -202,33 +202,33 @@ static int __ctsvc_db_activity_photo_delete_record( int id )
                        "ON C.contact_id = A.contact_id AND A.id = P.activity_id "
                        "WHERE P.id = %d", id);
 
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : id (%d) is not exist", id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this activity_photo record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_activity_photo_delete(id);
+       ret = ctsvc_db_activity_photo_delete(zone_name, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_activity_photo_delete() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_activity_photo_delete() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_photo_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_activity_photo_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -248,13 +248,13 @@ static int __ctsvc_db_activity_photo_get_all_records( int offset, int limit, con
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -269,8 +269,8 @@ static int __ctsvc_db_activity_photo_get_all_records( int offset, int limit, con
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_activity_photo_get_records_with_query(contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_activity_photo_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -283,14 +283,14 @@ static int __ctsvc_db_activity_photo_get_records_with_query(contacts_query_h que
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -305,11 +305,11 @@ static int __ctsvc_db_activity_photo_get_records_with_query(contacts_query_h que
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -326,6 +326,7 @@ static int __ctsvc_db_activity_photo_get_records_with_query(contacts_query_h que
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_PHOTO_URL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(activity_photo->photo_url);
                                activity_photo->photo_url = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX:
@@ -18,8 +18,8 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_activity_photo_helper.h"
@@ -36,7 +36,7 @@ int ctsvc_db_activity_photo_get_value_from_stmt(cts_stmt stmt, contacts_record_h
        int start_count = 0;
 
        ret = contacts_record_create(_contacts_activity_photo._uri, (contacts_record_h *)&activity_photo);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        activity_photo->id = ctsvc_stmt_get_int(stmt, start_count++);
        activity_photo->activity_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -48,7 +48,7 @@ int ctsvc_db_activity_photo_get_value_from_stmt(cts_stmt stmt, contacts_record_h
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_activity_photo_insert(contacts_record_h record, int activity_id, int *id)
+int ctsvc_db_activity_photo_insert(const char *zone_name, contacts_record_h record, int activity_id, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -69,28 +69,28 @@ int ctsvc_db_activity_photo_insert(contacts_record_h record, int activity_id, in
                                        "VALUES(%d, ?, %d)",
                        activity_id, activity_photo->sort_index);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        sqlite3_bind_text(stmt, 1, activity_photo->photo_url, strlen(activity_photo->photo_url), SQLITE_STATIC);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_activity_photo_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_activity_photo_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_activity_photo_update(contacts_record_h record)
+int ctsvc_db_activity_photo_update(const char *zone_name, contacts_record_h record)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -100,20 +100,20 @@ int ctsvc_db_activity_photo_update(contacts_record_h record)
        ctsvc_activity_photo_s *activity_photo = (ctsvc_activity_photo_s*)record;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       RETVM_IF(!activity_photo->id, CONTACTS_ERROR_INVALID_PARAMETER, "activity_photo has no ID.");
+       RETVM_IF(0 == activity_photo->id, CONTACTS_ERROR_INVALID_PARAMETER, "activity_photo has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (activity_photo->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_ACTIVITY_PHOTOS" WHERE id = %d", activity_photo->id);
 
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_ACTIVITY_PHOTOS, activity_photo->id))) break;
-               ctsvc_set_activity_noti();
-               ctsvc_set_activity_photo_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_ACTIVITY_PHOTOS, activity_photo->id))) break;
+               ctsvc_set_activity_noti(zone_name);
+               ctsvc_set_activity_photo_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -127,24 +127,24 @@ int ctsvc_db_activity_photo_update(contacts_record_h record)
        return ret;
 }
 
-int ctsvc_db_activity_photo_delete(int id)
+int ctsvc_db_activity_photo_delete(const char *zone_name, int id)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_ACTIVITY_PHOTOS" WHERE id = %d", id);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       ctsvc_set_activity_noti();
-       ctsvc_set_activity_photo_noti();
+       ctsvc_set_activity_noti(zone_name);
+       ctsvc_set_activity_photo_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
 
-int ctsvc_db_activity_photo_get_records(int activity_id, contacts_record_h record_activity)
+int ctsvc_db_activity_photo_get_records(const char *zone_name, int activity_id, contacts_record_h record_activity)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        int ret;
@@ -155,13 +155,13 @@ int ctsvc_db_activity_photo_get_records(int activity_id, contacts_record_h recor
                                                "FROM "CTSVC_DB_VIEW_ACTIVITY_PHOTOS" WHERE activity_id = %d "
                                                "ORDER BY sort_index ASC", activity_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
 #define __CTSVC_DB_PLUGIN_ACTIVITY_PHOTO_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_activity_photo_insert(contacts_record_h record, int activity_id, int *id);
-int ctsvc_db_activity_photo_update(contacts_record_h record);
-int ctsvc_db_activity_photo_delete(int id);
+int ctsvc_db_activity_photo_insert(const char *zone_name, contacts_record_h record, int activity_id, int *id);
+int ctsvc_db_activity_photo_update(const char *zone_name, contacts_record_h record);
+int ctsvc_db_activity_photo_delete(const char *zone_name, int id);
 int ctsvc_db_activity_photo_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record);
-int ctsvc_db_activity_photo_get_records(int activity_id, contacts_record_h record_activity);
+int ctsvc_db_activity_photo_get_records(const char *zone_name, int activity_id, contacts_record_h record_activity);
 
-#endif // __CTSVC_DB_PLUGIN_ACTIVITY_PHOTO_HELPER_H__
\ No newline at end of file
+#endif /* __CTSVC_DB_PLUGIN_ACTIVITY_PHOTO_HELPER_H__ */
\ No newline at end of file
similarity index 70%
rename from native/ctsvc_db_plugin_address.c
rename to server/db/ctsvc_db_plugin_address.c
index 036a17b..b659020 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_plugin_address_helper.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-static int __ctsvc_db_address_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_address_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_address_update_record( contacts_record_h record );
-static int __ctsvc_db_address_delete_record( int id );
-static int __ctsvc_db_address_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_address_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_address_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_address_delete_records( int ids[], int count);
+static int __ctsvc_db_address_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_address_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_address_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_address_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_address_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_address_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_address = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_address = {
        .delete_record = __ctsvc_db_address_delete_record,
        .get_all_records = __ctsvc_db_address_get_all_records,
        .get_records_with_query = __ctsvc_db_address_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_address_insert_records,
-       .update_records = NULL,//__ctsvc_db_address_update_records,
-       .delete_records = NULL,//__ctsvc_db_address_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_address_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_address_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -70,17 +67,17 @@ static int __ctsvc_db_address_insert_record( contacts_record_h record, int *id )
                && NULL == address->country,
                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : address is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", address->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", address->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -91,35 +88,35 @@ static int __ctsvc_db_address_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this address record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_address_insert(record, address->contact_id, false, id);
+       ret = ctsvc_db_address_insert(zone_name, record, address->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(address->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, address->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_update_record( contacts_record_h record )
+static int __ctsvc_db_address_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -130,50 +127,50 @@ static int __ctsvc_db_address_update_record( contacts_record_h record )
                        NULL == address->locality && NULL == address->street && NULL == address->extended &&
                        NULL == address->country, CONTACTS_ERROR_INVALID_PARAMETER, "address is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", address->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", address->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this address record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_address_update(record, false);
+       ret = ctsvc_db_address_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("update record failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(address->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, address->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_delete_record( int id )
+static int __ctsvc_db_address_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -181,23 +178,23 @@ static int __ctsvc_db_address_delete_record( int id )
        int addressbook_id;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error :ctsvc_query_prepare Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -208,27 +205,27 @@ static int __ctsvc_db_address_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this address record : addresbook_id(%d)", addressbook_id);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_address_delete(id, false);
+       ret = ctsvc_db_address_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_address_delete() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_address_delete() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
 
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
@@ -236,7 +233,7 @@ static int __ctsvc_db_address_delete_record( int id )
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_address_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        int ret;
@@ -251,12 +248,12 @@ static int __ctsvc_db_address_get_record( int id, contacts_record_h* out_record
                                                "WHERE datatype=%d AND id = %d ",
                                                CTSVC_DATA_POSTAL, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/  != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -272,7 +269,7 @@ static int __ctsvc_db_address_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_address_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -295,13 +292,13 @@ static int __ctsvc_db_address_get_all_records( int offset, int limit, contacts_l
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -316,8 +313,8 @@ static int __ctsvc_db_address_get_all_records( int offset, int limit, contacts_l
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_address_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -330,14 +327,14 @@ static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, in
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -352,11 +349,11 @@ static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, in
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -379,34 +376,42 @@ static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_ADDRESS_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->label);
                                address->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_POSTBOX:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->pobox);
                                address->pobox = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_POSTAL_CODE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->postalcode);
                                address->postalcode = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_REGION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->region);
                                address->region = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_LOCALITY:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->locality);
                                address->locality = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_STREET:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->street);
                                address->street = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_COUNTRY:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->country);
                                address->country = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESS_EXTENDED:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(address->extended);
                                address->extended = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -421,7 +426,3 @@ static int __ctsvc_db_address_get_records_with_query( contacts_query_h query, in
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_address_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_address_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_address_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 82%
rename from native/ctsvc_db_plugin_address_helper.c
rename to server/db/ctsvc_db_plugin_address_helper.c
index e8079f8..8a2d7bd 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_address_helper.h"
@@ -34,7 +34,7 @@ int ctsvc_db_address_get_value_from_stmt(cts_stmt stmt, contacts_record_h *recor
        ctsvc_address_s *address;
 
        ret = contacts_record_create(_contacts_address._uri, (contacts_record_h *)&address);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        address->id = ctsvc_stmt_get_int(stmt, start_count++);
        address->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -61,7 +61,7 @@ int ctsvc_db_address_get_value_from_stmt(cts_stmt stmt, contacts_record_h *recor
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_address_reset_default(int address_id, int contact_id)
+static int __ctsvc_db_address_reset_default(const char *zone_name, int address_id, int contact_id)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -70,12 +70,12 @@ static int __ctsvc_db_address_reset_default(int address_id, int contact_id)
                        "UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 "
                                        "WHERE id != %d AND contact_id = %d AND datatype = %d",
                        address_id, contact_id, CTSVC_DATA_POSTAL);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-int ctsvc_db_address_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_address_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        int address_id;
@@ -96,8 +96,8 @@ int ctsvc_db_address_insert(contacts_record_h record, int contact_id, bool is_my
                                                "VALUES(%d, %d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?)",
                                contact_id, is_my_profile, CTSVC_DATA_POSTAL, address->is_default, address->type);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                if (address->label)
                        ctsvc_stmt_bind_text(stmt, 1, address->label);
@@ -118,28 +118,28 @@ int ctsvc_db_address_insert(contacts_record_h record, int contact_id, bool is_my
 
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return ret;
                }
-               address_id = ctsvc_db_get_last_insert_id();
+               address_id = ctsvc_db_get_last_insert_id(zone_name);
                if (id)
                        *id = address_id;
                ctsvc_stmt_finalize(stmt);
 
                if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_address.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                        if (address->is_default)
-                               __ctsvc_db_address_reset_default(address_id, contact_id);
+                               __ctsvc_db_address_reset_default(zone_name, address_id, contact_id);
                }
 
-               if (!is_my_profile)
-                       ctsvc_set_address_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_address_noti(zone_name);
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_address_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -158,19 +158,19 @@ int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile)
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", address->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_address.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (address->is_default)
-                       __ctsvc_db_address_reset_default(address->id, address->contact_id);
+                       __ctsvc_db_address_reset_default(zone_name, address->id, address->contact_id);
        }
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, address->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_address_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, address->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_address_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -184,7 +184,7 @@ int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_address_delete(int id, bool is_my_profile)
+int ctsvc_db_address_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -192,11 +192,11 @@ int ctsvc_db_address_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE datatype = %d AND id = %d",
                        CTSVC_DATA_POSTAL, id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_address_noti();
+       if (false == is_my_profile)
+               ctsvc_set_address_noti(zone_name);
 
        return ret;
 }
similarity index 69%
rename from native/ctsvc_db_plugin_address_helper.h
rename to server/db/ctsvc_db_plugin_address_helper.h
index 263e972..a4d2843 100644 (file)
 #define __CTSVC_DB_PLUGIN_ADDRESS_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_address_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_address_delete(int id, bool is_my_profile);
+int ctsvc_db_address_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_address_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_address_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_address_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_ADDRESS_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_ADDRESS_HELPER_H__ */
\ No newline at end of file
similarity index 67%
rename from native/ctsvc_db_plugin_addressbook.c
rename to server/db/ctsvc_db_plugin_addressbook.c
index 032be09..767049e 100644 (file)
  * limitations under the License.
  *
  */
-#ifdef CTS_MOBILE
 #include <account.h>
-#endif // CTS_MOBILE
-
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_person_helper.h"
-#include "ctsvc_person.h"
+#include "ctsvc_server_person.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
+#include "ctsvc_server_zone.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_addressbook_helper.h"
 
-static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* record );
-static int __ctsvc_db_addressbook_update_record( contacts_record_h record );
-static int __ctsvc_db_addressbook_delete_record( int id );
-static int __ctsvc_db_addressbook_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_addressbook_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_addressbook_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_addressbook_delete_records(int ids[], int count);
+static int __ctsvc_db_addressbook_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_addressbook_get_record(const char *zone_name, int id, contacts_record_h* record);
+static int __ctsvc_db_addressbook_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_addressbook_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_addressbook_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_addressbook_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_addressbook = {
        .is_query_only = false,
@@ -54,9 +49,9 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_addressbook = {
        .delete_record = __ctsvc_db_addressbook_delete_record,
        .get_all_records = __ctsvc_db_addressbook_get_all_records,
        .get_records_with_query = __ctsvc_db_addressbook_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_addressbook_insert_records,
-       .update_records = NULL,//__ctsvc_db_addressbook_update_records,
-       .delete_records = NULL,//__ctsvc_db_addressbook_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
@@ -71,7 +66,7 @@ static int __ctsvc_db_addressbook_value_set(cts_stmt stmt, contacts_record_h *re
        ctsvc_addressbook_s *addressbook;
 
        ret = contacts_record_create(_contacts_address_book._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        addressbook = (ctsvc_addressbook_s*)*record;
 
        i = 0;
@@ -84,7 +79,7 @@ static int __ctsvc_db_addressbook_value_set(cts_stmt stmt, contacts_record_h *re
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_addressbook_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -98,12 +93,12 @@ static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* out_rec
                                "SELECT addressbook_id, addressbook_name, account_id, mode, last_sync_ver "
                                "FROM "CTS_TABLE_ADDRESSBOOKS" WHERE addressbook_id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -115,7 +110,7 @@ static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* out_rec
 
        ctsvc_stmt_finalize(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_addressbook_value_set(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_addressbook_value_set(ALL) Fail(%d)", ret);
                return ret;
        }
 
@@ -125,7 +120,7 @@ static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* out_rec
 }
 
 
-static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_addressbook_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -138,17 +133,17 @@ static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *
        RETVM_IF(CTSVC_RECORD_ADDRESSBOOK != addressbook->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : record is invalid type(%d)", addressbook->base.r_type);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       // Can not insert addressbook which has same account_id
+       /* Can not insert addressbook which has same account_id */
        int addresbook_id;
        snprintf(query, sizeof(query),
                "SELECT addressbook_id FROM "CTS_TABLE_ADDRESSBOOKS" WHERE account_id = %d",
                addressbook->account_id);
-       ret = ctsvc_query_get_first_int_result(query, &addresbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addresbook_id);
        if (CONTACTS_ERROR_NO_DATA != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret) {
                        CTS_ERR("One addressbook which has account_id(%d) already exists", addressbook->account_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -158,20 +153,17 @@ static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *
                        return ret;
                }
        }
-#ifdef CTS_MOBILE
+
+       vsm_zone_h zone = ctsvc_server_zone_lookup_by_zone_name(zone_name);
+       vsm_zone_h zone_old = ctsvc_server_zone_join(zone);
+
        account_h account = NULL;
-       ret = account_connect();
-       if (ACCOUNT_ERROR_NONE != ret) {
-               CTS_ERR("account_connect Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               return CONTACTS_ERROR_SYSTEM;
-       }
-       // check account_id validation
+       /* check account_id validation */
        ret = account_create(&account);
        if (ACCOUNT_ERROR_NONE != ret) {
-               CTS_ERR("account_create() Failed(%d)", ret);
-               ctsvc_end_trans(false);
-               account_disconnect();
+               CTS_ERR("account_create() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               ctsvc_server_zone_join(zone_old);
                return CONTACTS_ERROR_SYSTEM;
        }
        ret = account_query_account_by_account_id(addressbook->account_id, &account);
@@ -179,32 +171,30 @@ static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *
                CTS_ERR("account_query_account_by_account_id Faild(%d) : account_id(%d)", ret, addressbook->account_id);
                ret = account_destroy(account);
                WARN_IF(ret != ACCOUNT_ERROR_NONE, "account_destroy Fail(%d)", ret);
-               ctsvc_end_trans(false);
-               account_disconnect();
+               ctsvc_end_trans(zone_name, false);
+               ctsvc_server_zone_join(zone_old);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
        ret = account_destroy(account);
        WARN_IF(ret != ACCOUNT_ERROR_NONE, "account_destroy Fail(%d)", ret);
 
-       ret = account_disconnect();
-       WARN_IF(ret != ACCOUNT_ERROR_NONE, "account_disconnect Fail(%d)", ret);
-#endif // CTS_MOBILE
+       ctsvc_server_zone_join(zone_old);
 
        snprintf(query, sizeof(query),
                        "INSERT INTO %s(addressbook_name, account_id, mode, smack_label) "
                        "VALUES(?, %d, %d, ?)",
                        CTS_TABLE_ADDRESSBOOKS, addressbook->account_id, addressbook->mode);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ctsvc_stmt_bind_text(stmt, 1, addressbook->name);
 
-       smack = ctsvc_get_client_smack_label();
+       smack = ctsvc_get_client_smack_label(zone_name);
        if (smack)
                ctsvc_stmt_bind_text(stmt, 2, smack);
 
@@ -212,38 +202,37 @@ static int __ctsvc_db_addressbook_insert_record( contacts_record_h record, int *
        do {
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
 
-               //int index = ctsvc_db_get_last_insert_id();
+               /* int index = ctsvc_db_get_last_insert_id(zone_name); */
                if (id)
-                       *id = ctsvc_db_get_last_insert_id();
+                       *id = ctsvc_db_get_last_insert_id(zone_name);
                ctsvc_stmt_finalize(stmt);
 
-               ctsvc_set_addressbook_noti();
-               ret = ctsvc_end_trans(true);
-               if(ret < CONTACTS_ERROR_NONE )
-               {
-                       CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               ctsvc_set_addressbook_noti(zone_name);
+               ret = ctsvc_end_trans(zone_name, true);
+               if (ret < CONTACTS_ERROR_NONE) {
+                       CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                        free(smack);
                        return ret;
                }
-               //addressbook->id = index;
+               /* addressbook->id = index; */
 
-               // SUCCESS
+               /* SUCCESS */
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
        /* ROLLBACK TRANSACTION */
-       ctsvc_end_trans(false);
+       ctsvc_end_trans(zone_name, false);
        free(smack);
        return ret;
 }
 
-static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
+static int __ctsvc_db_addressbook_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret = CONTACTS_ERROR_NONE;
        char* set = NULL;
@@ -257,16 +246,16 @@ static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
        RETVM_IF(CTSVC_RECORD_ADDRESSBOOK != addressbook->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : record is invalid type(%d)", addressbook->base.r_type);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_is_owner(addressbook->id);
+       ret = ctsvc_is_owner(zone_name, addressbook->id);
        if (CONTACTS_ERROR_NONE != ret) {
                if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
                        CTS_ERR("Does not have permission of address_book (%d)", addressbook->id);
                else
                        CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -279,9 +268,9 @@ static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
                        break;
 
                snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE addressbook_id = %d", CTS_TABLE_ADDRESSBOOKS, set, addressbook->id);
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        break;
                }
                if (bind_text) {
@@ -294,13 +283,13 @@ static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
                }
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
                ctsvc_stmt_finalize(stmt);
 
-               ctsvc_set_addressbook_noti();
+               ctsvc_set_addressbook_noti(zone_name);
        } while (0);
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
        CONTACTS_FREE(set);
@@ -312,34 +301,34 @@ static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
        }
 
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_addressbook_delete_record( int addressbook_id )
+static int __ctsvc_db_addressbook_delete_record(const char *zone_name, int addressbook_id)
 {
        CTS_FN_CALL;
 
        if (0 /*CTS_ADDRESSBOOK_INTERNAL*/ == addressbook_id)
-               return ctsvc_addressbook_reset_internal_addressbook();
+               return ctsvc_addressbook_reset_internal_addressbook(zone_name);
 
        char query[CTS_SQL_MAX_LEN] = {0};
-       int ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       int ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_is_owner(addressbook_id);
+       ret = ctsvc_is_owner(zone_name, addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
                        CTS_ERR("Does not have permission to delete address_book (%d)", addressbook_id);
                else
                        CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -348,49 +337,48 @@ static int __ctsvc_db_addressbook_delete_record( int addressbook_id )
 
        /* DOING JOB */
        do {
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
                        break;
                }
 
-               ret = ctsvc_db_change();
+               ret = ctsvc_db_change(zone_name);
                if (0 < ret) {
-                       ctsvc_set_my_profile_noti();
-                       ctsvc_set_contact_noti();
-                       // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();
-                       ctsvc_set_group_noti();
-                       ctsvc_set_addressbook_noti();
+                       ctsvc_set_my_profile_noti(zone_name);
+                       ctsvc_set_contact_noti(zone_name);
+                       /* person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti(zone_name); */
+                       ctsvc_set_group_noti(zone_name);
+                       ctsvc_set_addressbook_noti(zone_name);
                }
                else {
                        ret = CONTACTS_ERROR_NO_DATA;
                        break;
                }
 
-               ret = ctsvc_person_do_garbage_collection();
+               ret = ctsvc_person_do_garbage_collection(zone_name);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_person_garbagecollection() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_person_garbagecollection() Fail(%d)", ret);
                        break;
                }
 
-               ret = ctsvc_end_trans(true);
-               if (ret < CONTACTS_ERROR_NONE)
-               {
-                       CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               ret = ctsvc_end_trans(zone_name, true);
+               if (ret < CONTACTS_ERROR_NONE) {
+                       CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                        return ret;
                }
 
                return CONTACTS_ERROR_NONE;
 
-       } while(0);
+       } while (0);
 
-       ctsvc_end_trans(false);
+       ctsvc_end_trans(zone_name, false);
 
        return ret;
 }
 
-static int __ctsvc_db_addressbook_get_all_records( int offset, int limit,
-       contacts_list_h* out_list )
+static int __ctsvc_db_addressbook_get_all_records(const char *zone_name, int offset, int limit,
+       contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -411,14 +399,14 @@ static int __ctsvc_db_addressbook_get_all_records( int offset, int limit,
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -434,7 +422,7 @@ static int __ctsvc_db_addressbook_get_all_records( int offset, int limit,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_addressbook_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -447,14 +435,14 @@ static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -473,7 +461,7 @@ static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -487,6 +475,7 @@ static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query
                                break;
                        case CTSVC_PROPERTY_ADDRESSBOOK_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(addressbook->name);
                                addressbook->name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_ADDRESSBOOK_MODE:
@@ -509,19 +498,3 @@ static int __ctsvc_db_addressbook_get_records_with_query( contacts_query_h query
        return CONTACTS_ERROR_NONE;
 }
 
-#if 0
-static int __ctsvc_db_addressbook_insert_records(const contacts_list_h in_list, int **ids)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_addressbook_update_records(const contacts_list_h in_list)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_addressbook_delete_records(int ids[], int count)
-{
-       return CONTACTS_ERROR_NONE;
-}
-#endif
diff --git a/server/db/ctsvc_db_plugin_addressbook_helper.c b/server/db/ctsvc_db_plugin_addressbook_helper.c
new file mode 100644 (file)
index 0000000..9992adf
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_utils.h"
+#include "ctsvc_server_person.h"
+#include "ctsvc_notification.h"
+#include "ctsvc_db_access_control.h"
+#include "ctsvc_db_plugin_addressbook_helper.h"
+
+int ctsvc_addressbook_reset_internal_addressbook(const char *zone_name)
+{
+       CTS_FN_CALL;
+       char query[CTS_SQL_MIN_LEN] = {0};
+       int ret;
+       int version;
+
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+
+       ret = ctsvc_is_owner(zone_name, 0);
+       if (CONTACTS_ERROR_NONE != ret) {
+               if (CONTACTS_ERROR_PERMISSION_DENIED == ret)
+                       CTS_ERR("Does not have permission of address_book (0)");
+               else
+                       CTS_ERR("ctsvc_is_owner Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       version = ctsvc_get_next_ver(zone_name);
+       snprintf(query, sizeof(query),
+                       "UPDATE %s SET deleted = 1, person_id = 0, changed_ver=%d WHERE addressbook_id = %d",
+                       CTS_TABLE_CONTACTS, version, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
+
+       /* DOING JOB */
+       do {
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       break;
+               }
+
+               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
+                               CTS_TABLE_MY_PROFILES, 0);
+
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       break;
+               }
+
+               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
+                               CTS_TABLE_GROUPS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       break;
+               }
+
+               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
+                               CTS_TABLE_GROUP_DELETEDS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       break;
+               }
+
+               snprintf(query, sizeof(query), "DELETE FROM %s WHERE addressbook_id = %d",
+                               CTS_TABLE_DELETEDS, 0 /*CTS_ADDRESSBOOK_INTERNAL*/);
+               ret = ctsvc_query_exec(zone_name, query);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+                       break;
+               }
+
+               ret = ctsvc_person_do_garbage_collection(zone_name);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("DB error : ctsvc_person_garbagecollection() Fail(%d)", ret);
+                       break;
+               }
+
+               ctsvc_set_contact_noti(zone_name);
+               ctsvc_set_my_profile_noti(zone_name);
+               /* person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti(zone_name); */
+               ctsvc_set_group_noti(zone_name);
+               ret = ctsvc_end_trans(zone_name, true);
+               if (ret < CONTACTS_ERROR_NONE) {
+                       CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
+                       return ret;
+               }
+
+               return CONTACTS_ERROR_NONE;
+       } while (0);
+
+       /* ROLLBACK TRANSACTION */
+       ctsvc_end_trans(zone_name, false);
+
+       return ret;
+}
+
+int ctsvc_addressbook_delete(const char *zone_name, int account_id)
+{
+       CTS_FN_CALL;
+       int ret;
+       int addressbook_id = -1;
+       char query[CTS_SQL_MAX_LEN] = {0};
+       RETVM_IF(account_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Account_id(%d) is invalid", account_id);
+
+       /* delete addressbook whish has account_id */
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+
+       snprintf(query, sizeof(query), "SELECT addressbook_id FROM %s WHERE account_id = %d",
+                       CTS_TABLE_ADDRESSBOOKS, account_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       if (addressbook_id == 0) {
+               ret = ctsvc_addressbook_reset_internal_addressbook(zone_name);
+               if (ret == CONTACTS_ERROR_NONE)
+                       ret = ctsvc_end_trans(zone_name, true);
+               else
+                       ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       snprintf(query, sizeof(query), "DELETE FROM %s WHERE account_id = %d",
+                       CTS_TABLE_ADDRESSBOOKS, account_id);
+       ret = ctsvc_query_exec(zone_name, query);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       ret = ctsvc_db_change(zone_name);
+       if (0 < ret) {
+               ctsvc_set_my_profile_noti(zone_name);
+               ctsvc_set_contact_noti(zone_name);
+               /* person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti(zone_name); */
+               ctsvc_set_group_noti(zone_name);
+               ctsvc_set_addressbook_noti(zone_name);
+       }
+       else {
+               CTS_ERR("There is no addressbook which has account_id (%d)", account_id);
+               ctsvc_end_trans(zone_name, false);
+               return CONTACTS_ERROR_NO_DATA;
+       }
+
+       ret = ctsvc_person_do_garbage_collection(zone_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("DB error : ctsvc_person_garbagecollection() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       return ctsvc_end_trans(zone_name, true);
+}
+
similarity index 79%
rename from native/ctsvc_db_plugin_addressbook_helper.h
rename to server/db/ctsvc_db_plugin_addressbook_helper.h
index 23c6a6a..920a87d 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__
 #define __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__
 
-int ctsvc_addressbook_delete(int account_id);
-int ctsvc_addressbook_reset_internal_addressbook(void);
+int ctsvc_addressbook_delete(const char *zone_name, int account_id);
+int ctsvc_addressbook_reset_internal_addressbook(const char *zone_name);
 
-#endif // __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_db_plugin_company.c
rename to server/db/ctsvc_db_plugin_company.c
index f6c82f8..7c4513a 100644 (file)
@@ -21,9 +21,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_list.h"
 
-static int __ctsvc_db_company_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_company_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_company_update_record( contacts_record_h record );
-static int __ctsvc_db_company_delete_record( int id );
-static int __ctsvc_db_company_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_company_insert_records(const contacts_list_h in_list, int **ds);
-//static int __ctsvc_db_company_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_company_delete_records( int ids[], int count);
+static int __ctsvc_db_company_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_company_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_company_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_company_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_company_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_company_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_company = {
        .is_query_only = false,
@@ -51,16 +48,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_company = {
        .delete_record = __ctsvc_db_company_delete_record,
        .get_all_records = __ctsvc_db_company_get_all_records,
        .get_records_with_query = __ctsvc_db_company_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_company_insert_records,
-       .update_records = NULL,//__ctsvc_db_company_update_records,
-       .delete_records = NULL,//__ctsvc_db_company_delete_records
+       .insert_records = NULL, /* __ctsvc_db_company_insert_records, */
+       .update_records = NULL, /* __ctsvc_db_company_update_records, */
+       .delete_records = NULL, /* __ctsvc_db_company_delete_records, */
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_company_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_company_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -77,12 +74,12 @@ static int __ctsvc_db_company_get_record( int id, contacts_record_h* out_record
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_COMPANY);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -96,7 +93,7 @@ static int __ctsvc_db_company_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_company_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_company_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -108,17 +105,17 @@ static int __ctsvc_db_company_insert_record( contacts_record_h record, int *id )
                && NULL == company->location && NULL == company->description && NULL == company->phonetic_name,
                CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : company is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", company->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", company->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -129,40 +126,39 @@ static int __ctsvc_db_company_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this company record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_company_insert(record, company->contact_id, false, id);
+       ret = ctsvc_db_company_insert(zone_name, record, company->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(company->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
+       ctsvc_contact_update_display_name(zone_name, company->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
 
-       ret = ctsvc_db_contact_update_changed_time(company->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, company->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_company_update_record( contacts_record_h record )
+static int __ctsvc_db_company_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -174,48 +170,47 @@ static int __ctsvc_db_company_update_record( contacts_record_h record )
                        NULL == company->location &&    NULL == company->description && NULL == company->phonetic_name,
                        CONTACTS_ERROR_INVALID_PARAMETER, "company is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", company->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", company->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this company record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_company_update(record, company->contact_id, false);
+       ret = ctsvc_db_company_update(zone_name, record, company->contact_id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(company->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
+       ctsvc_contact_update_display_name(zone_name, company->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
 
-       ret = ctsvc_db_contact_update_changed_time(company->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, company->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
@@ -223,7 +218,7 @@ static int __ctsvc_db_company_update_record( contacts_record_h record )
 }
 
 
-static int __ctsvc_db_company_delete_record( int id )
+static int __ctsvc_db_company_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -231,26 +226,26 @@ static int __ctsvc_db_company_delete_record( int id )
        cts_stmt stmt;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -261,40 +256,39 @@ static int __ctsvc_db_company_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this company record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_company_delete(id, false);
+       ret = ctsvc_db_company_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
+       ctsvc_contact_update_display_name(zone_name, contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY);
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_company_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_company_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -317,13 +311,13 @@ static int __ctsvc_db_company_get_all_records( int offset, int limit, contacts_l
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -338,8 +332,8 @@ static int __ctsvc_db_company_get_all_records( int offset, int limit, contacts_l
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_company_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -352,14 +346,14 @@ static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, in
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -374,11 +368,11 @@ static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, in
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -398,42 +392,52 @@ static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_COMPANY_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->label);
                                company->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->name);
                                company->name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_DEPARTMENT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->department);
                                company->department = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_JOB_TITLE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->job_title);
                                company->job_title = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->assistant_name);
                                company->assistant_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_ROLE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->role);
                                company->role = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_LOGO:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->logo);
                                company->logo = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_LOCATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->location);
                                company->location = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_DESCRIPTION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->description);
                                company->description = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_COMPANY_PHONETIC_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(company->phonetic_name);
                                company->phonetic_name = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -448,7 +452,3 @@ static int __ctsvc_db_company_get_records_with_query( contacts_query_h query, in
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_company_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_company_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_company_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 78%
rename from native/ctsvc_db_plugin_company_helper.c
rename to server/db/ctsvc_db_plugin_company_helper.c
index 5dcb09b..822de71 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_company_helper.h"
@@ -55,7 +56,7 @@ static int __ctsvc_company_bind_stmt(cts_stmt stmt, ctsvc_company_s *company, in
                sqlite3_bind_text(stmt, start_cnt+7, company->assistant_name,
                        strlen(company->assistant_name), SQLITE_STATIC);
 
-       // skip logo here
+       /* skip logo here */
 
        if (company->location)
                sqlite3_bind_text(stmt, start_cnt+9, company->location,
@@ -70,7 +71,7 @@ static int __ctsvc_company_bind_stmt(cts_stmt stmt, ctsvc_company_s *company, in
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_company_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        int company_id = 0;
@@ -87,10 +88,10 @@ int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my
                        || company->assistant_name || company->logo || company->location || company->description
                        || company->phonetic_name) {
 
-               ret = ctsvc_db_get_next_id(CTS_TABLE_DATA);
+               ret = ctsvc_db_get_next_id(zone_name, CTS_TABLE_DATA);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_db_get_next_id() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_db_get_next_id() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
                company_id = ret;
@@ -101,22 +102,22 @@ int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my
                                        "VALUES(%d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                                        company_id, contact_id, is_my_profile, CTSVC_DATA_COMPANY);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                __ctsvc_company_bind_stmt(stmt, company, 1);
                if (company->logo) {
                        char image[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-                       ret = ctsvc_have_file_read_permission(company->logo);
+                       ret = ctsvc_have_file_read_permission(zone_name, company->logo);
                        if (ret != CONTACTS_ERROR_NONE) {
                                CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
                        ctsvc_utils_make_image_file_name(contact_id, company_id, company->logo, image, sizeof(image));
-                       ret = ctsvc_utils_copy_image(CTS_LOGO_IMAGE_LOCATION, company->logo, image);
+                       ret = ctsvc_utils_copy_image(zone_name, CTS_LOGO_IMAGE_LOCATION, company->logo, image);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("ctsvc_utils_copy_image() Failed(%d)", ret);
+                               CTS_ERR("ctsvc_utils_copy_image() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
@@ -125,7 +126,7 @@ int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my
 
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return ret;
                }
@@ -135,8 +136,8 @@ int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my
                if (id)
                        *id = company_id;
 
-               if (!is_my_profile)
-                       ctsvc_set_company_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_company_noti(zone_name);
        }
        return CONTACTS_ERROR_NONE;
 }
@@ -148,7 +149,7 @@ int ctsvc_db_company_get_value_from_stmt(cts_stmt stmt, contacts_record_h *recor
        ctsvc_company_s *company;
 
        ret = contacts_record_create(_contacts_company._uri, (contacts_record_h *)&company);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        company->id = ctsvc_stmt_get_int(stmt, start_count++);
        company->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -190,7 +191,7 @@ int ctsvc_db_company_get_value_from_stmt(cts_stmt stmt, contacts_record_h *recor
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_company_update(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile)
 {
        int ret = CONTACTS_ERROR_NONE;
        char* set = NULL;
@@ -200,13 +201,13 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
        ctsvc_company_s *company = (ctsvc_company_s*)record;
        cts_stmt stmt = NULL;
 
-       RETVM_IF(!company->id, CONTACTS_ERROR_INVALID_PARAMETER, "company of contact has no ID.");
+       RETVM_IF(0 == company->id, CONTACTS_ERROR_INVALID_PARAMETER, "company of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (company->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id, data8 FROM "CTS_TABLE_DATA" WHERE id = %d", company->id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (ret != 1) {
@@ -222,18 +223,20 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
                bool same = false;
                bool check_permission = false;
 
-               // delete current logo image
+               /* delete current logo image */
                if (logo) {
                        char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-                       snprintf(full_path, sizeof(full_path), "%s/%s", CTS_LOGO_IMAGE_LOCATION, logo);
-                       if (company->logo && strcmp(company->logo, full_path) == 0) {
+                       char root_path[CTSVC_PATH_MAX_LEN] = {0};
+                       ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+                       snprintf(full_path, sizeof(full_path), "%s/%s/%s", root_path, CTS_LOGO_IMAGE_LOCATION, logo);
+                       if (company->logo && STRING_EQUAL == strcmp(company->logo, full_path)) {
                                int index = _contacts_company.logo & 0x000000FF;
                                ((ctsvc_record_s *)record)->properties_flags[index] = 0;
                                same = true;
                        }
                        else {
                                if (company->logo) {
-                                       ret = ctsvc_have_file_read_permission(company->logo);
+                                       ret = ctsvc_have_file_read_permission(zone_name, company->logo);
                                        if (ret != CONTACTS_ERROR_NONE) {
                                                CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
                                                ctsvc_stmt_finalize(stmt);
@@ -243,16 +246,16 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
                                }
                                ret = unlink(full_path);
                                if (ret < 0) {
-                                       CTS_WARN("unlink Failed(%d)", errno);
+                                       CTS_WARN("unlink Fail(%d)", errno);
                                }
                        }
                }
 
-               // add new logo file
-               if (!same && company->logo) {
+               /* add new logo file */
+               if (false == same && company->logo) {
                        char dest[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
                        if (false == check_permission) {
-                               ret = ctsvc_have_file_read_permission(company->logo);
+                               ret = ctsvc_have_file_read_permission(zone_name, company->logo);
                                if (ret != CONTACTS_ERROR_NONE) {
                                        CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
                                        ctsvc_stmt_finalize(stmt);
@@ -260,9 +263,9 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
                                }
                        }
                        ctsvc_utils_make_image_file_name(contact_id, company->id, company->logo, dest, sizeof(dest));
-                       ret = ctsvc_utils_copy_image(CTS_LOGO_IMAGE_LOCATION, company->logo, dest);
+                       ret = ctsvc_utils_copy_image(zone_name, CTS_LOGO_IMAGE_LOCATION, company->logo, dest);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("cts_copy_file() Failed(%d)", ret);
+                               CTS_ERR("cts_copy_file() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
@@ -274,9 +277,9 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, company->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_company_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, company->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_company_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -290,7 +293,7 @@ int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my
        return ret;
 }
 
-int ctsvc_db_company_delete(int id, bool is_my_profile)
+int ctsvc_db_company_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -298,33 +301,40 @@ int ctsvc_db_company_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_COMPANY);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
-       if (!is_my_profile)
-               ctsvc_set_company_noti();
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
+       if (false == is_my_profile)
+               ctsvc_set_company_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-// Whenever deleting company record in data table, this function will be called
-// in order to delete company logo image file
+/*
+ * Whenever deleting company record in data table, this function will be called
+ * in order to delete company logo image file
+ */
 void ctsvc_db_company_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv)
 {
        int ret;
        const unsigned char* logo_path;
+       char *zone_name = NULL;
 
-       if (argc > 1) {
+       if (1 < argc) {
                sqlite3_result_null(context);
                return;
        }
        logo_path = sqlite3_value_text(argv[0]);
 
+       zone_name = sqlite3_user_data(context);
+       char root_path[CTSVC_PATH_MAX_LEN] = {0};
+       ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+
        if (logo_path) {
                char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-               snprintf(full_path, sizeof(full_path), "%s/%s", CTS_LOGO_IMAGE_LOCATION, logo_path);
+               snprintf(full_path, sizeof(full_path), "%s/%s/%s", root_path, CTS_LOGO_IMAGE_LOCATION, logo_path);
                ret = unlink(full_path);
                if (ret < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
        }
 
similarity index 72%
rename from native/ctsvc_db_plugin_company_helper.h
rename to server/db/ctsvc_db_plugin_company_helper.h
index e885d48..e3c1c7b 100644 (file)
 #define __CTSVC_DB_PLUGIN_COMPANY_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
 #define CTS_LOGO_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/logo"
 
-int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_company_delete(int id, bool is_my_profile);
+int ctsvc_db_company_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_company_update(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile);
+int ctsvc_db_company_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_company_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 void ctsvc_db_company_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv);
 
-#endif // __CTSVC_DB_PLUGIN_COMPANY_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_COMPANY_HELPER_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_db_plugin_contact.c
rename to server/db/ctsvc_db_plugin_contact.c
index 24c9a24..288b9f5 100644 (file)
  * limitations under the License.
  *
  */
-#include <sys/types.h>
-#include <sys/syscall.h>
 #include <fcntl.h>
 #include <unistd.h>
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_record.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_number_utils.h"
 #include "ctsvc_list.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_localize_ch.h"
-#include "ctsvc_group.h"
+#include "ctsvc_server_group.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_localize.h"
 #include "ctsvc_localize_utils.h"
-#include "ctsvc_person.h"
+#include "ctsvc_server_person.h"
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
 #include "ctsvc_db_access_control.h"
 
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_plugin_person_helper.h"
 
-static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_contact_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_contact_update_record( contacts_record_h record );
-static int __ctsvc_db_contact_delete_record( int id );
-static int __ctsvc_db_contact_replace_record( contacts_record_h record, int id );
+static int __ctsvc_db_contact_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_contact_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_contact_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_contact_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_contact_replace_record(const char *zone_name, contacts_record_h record, int id);
 
-static int __ctsvc_db_contact_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_contact_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_contact_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_contact_delete_records(int ids[], int count);
+static int __ctsvc_db_contact_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_contact_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_contact = {
        .is_query_only = false,
@@ -67,16 +62,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_contact = {
        .delete_record = __ctsvc_db_contact_delete_record,
        .get_all_records = __ctsvc_db_contact_get_all_records,
        .get_records_with_query = __ctsvc_db_contact_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_contact_insert_records,
-       .update_records = NULL,//__ctsvc_db_contact_update_records,
-       .delete_records = NULL,//__ctsvc_db_contact_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = __ctsvc_db_contact_replace_record,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_get_contact_base_info(int id, ctsvc_contact_s *contact)
+static int __ctsvc_db_get_contact_base_info(const char *zone_name, int id, ctsvc_contact_s *contact)
 {
        int ret;
        int i;
@@ -92,14 +87,14 @@ static int __ctsvc_db_get_contact_base_info(int id, ctsvc_contact_s *contact)
                                "uid, is_favorite, has_phonenumber, has_email, "
                                "sort_name, reverse_sort_name "
                                "FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d AND deleted = 0",
-                               ctsvc_get_display_column(), id);
+                               ctsvc_get_display_column(zone_name), id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -144,7 +139,7 @@ static int __ctsvc_db_get_contact_base_info(int id, ctsvc_contact_s *contact)
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_data(int id, ctsvc_contact_s *contact)
+static int __ctsvc_db_get_data(const char *zone_name, int id, ctsvc_contact_s *contact)
 {
        int ret;
        int datatype;
@@ -159,12 +154,12 @@ static int __ctsvc_db_get_data(int id, ctsvc_contact_s *contact)
                                        "WHERE data.contact_id = %d  AND is_my_profile = 0 "
                                        "ORDER BY is_default DESC", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE */!= ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
@@ -219,7 +214,7 @@ static int __ctsvc_db_get_data(int id, ctsvc_contact_s *contact)
                        break;
                }
 
-       }while(1 == ctsvc_stmt_step(stmt));
+       } while (1 == ctsvc_stmt_step(stmt));
 
        ctsvc_stmt_finalize(stmt);
 
@@ -227,7 +222,7 @@ static int __ctsvc_db_get_data(int id, ctsvc_contact_s *contact)
 
 }
 
-static inline int __ctsvc_get_contact_grouprel(int contact_id, ctsvc_contact_s *contact)
+static inline int __ctsvc_get_contact_grouprel(const char *zone_name, int contact_id, ctsvc_contact_s *contact)
 {
        CTS_FN_CALL;
        int ret;
@@ -240,8 +235,8 @@ static inline int __ctsvc_get_contact_grouprel(int contact_id, ctsvc_contact_s *
                "SELECT group_id, contact_id, group_name "
                        " FROM "CTSVC_DB_VIEW_GROUP_RELATION" WHERE contact_id = %d", contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        while (1 /*CTS_TRUE */ == ctsvc_stmt_step(stmt)) {
                contacts_record_create(_contacts_group_relation._uri, (contacts_record_h*)&grouprel);
@@ -262,7 +257,7 @@ static inline int __ctsvc_get_contact_grouprel(int contact_id, ctsvc_contact_s *
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_contact_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        contacts_record_h record;
@@ -273,23 +268,23 @@ static int __ctsvc_db_contact_get_record( int id, contacts_record_h* out_record
 
        contacts_record_create(_contacts_contact._uri, &record);
        contact = (ctsvc_contact_s *)record;
-       ret = __ctsvc_db_get_contact_base_info(id, contact);
+       ret = __ctsvc_db_get_contact_base_info(zone_name, id, contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_get_contact_base_info(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_get_contact_base_info(ALL) Fail(%d)", ret);
                contacts_record_destroy(record, true);
                return ret;
        }
 
-       ret = __ctsvc_db_get_data(id, contact);
+       ret = __ctsvc_db_get_data(zone_name, id, contact);
        if (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret) {
-               CTS_ERR("ctsvc_get_data_info Failed(%d)", ret);
+               CTS_ERR("ctsvc_get_data_info Fail(%d)", ret);
                contacts_record_destroy(record, true);
                return ret;
        }
 
-       ret = __ctsvc_get_contact_grouprel(id, contact);
+       ret = __ctsvc_get_contact_grouprel(zone_name, id, contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_get_group_relations Failed(%d)", ret);
+               CTS_ERR("ctsvc_get_group_relations Fail(%d)", ret);
                contacts_record_destroy(record, true);
                return ret;
        }
@@ -299,84 +294,84 @@ static int __ctsvc_db_contact_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_delete_record( int id )
+static int __ctsvc_db_contact_delete_record(const char *zone_name,  int id)
 {
-       return ctsvc_db_contact_delete(id);
+       return ctsvc_db_contact_delete(zone_name, id);
 }
 
-static inline int __ctsvc_contact_update_data(ctsvc_contact_s *contact)
+static inline int __ctsvc_contact_update_data(const char *zone_name, ctsvc_contact_s *contact)
 {
        int ret;
 
        if (contact->name) {
-               ret = ctsvc_contact_update_data_name((contacts_list_h)contact->name, contact->id, false);
+               ret = ctsvc_contact_update_data_name(zone_name, (contacts_list_h)contact->name, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_name() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_name() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->company) {
-               ret = ctsvc_contact_update_data_company((contacts_list_h)contact->company, contact->id, false);
+               ret = ctsvc_contact_update_data_company(zone_name, (contacts_list_h)contact->company, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_company() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_company() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->note) {
-               ret = ctsvc_contact_update_data_note((contacts_list_h)contact->note, contact->id, false);
+               ret = ctsvc_contact_update_data_note(zone_name, (contacts_list_h)contact->note, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_note() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_note() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->events) {
-               ret = ctsvc_contact_update_data_event((contacts_list_h)contact->events, contact->id, false);
+               ret = ctsvc_contact_update_data_event(zone_name, (contacts_list_h)contact->events, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_events() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_events() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->messengers) {
-               ret = ctsvc_contact_update_data_messenger((contacts_list_h)contact->messengers, contact->id, false);
+               ret = ctsvc_contact_update_data_messenger(zone_name, (contacts_list_h)contact->messengers, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_messengers() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_messengers() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->postal_addrs) {
-               ret = ctsvc_contact_update_data_address((contacts_list_h)contact->postal_addrs, contact->id, false);
+               ret = ctsvc_contact_update_data_address(zone_name, (contacts_list_h)contact->postal_addrs, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_address() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_address() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->urls) {
-               ret = ctsvc_contact_update_data_url((contacts_list_h)contact->urls, contact->id, false);
+               ret = ctsvc_contact_update_data_url(zone_name, (contacts_list_h)contact->urls, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_url() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_url() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->nicknames) {
-               ret = ctsvc_contact_update_data_nickname((contacts_list_h)contact->nicknames, contact->id, false);
+               ret = ctsvc_contact_update_data_nickname(zone_name, (contacts_list_h)contact->nicknames, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_nickname() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_nickname() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->numbers) {
                bool had_phonenumber;
-               ret = ctsvc_contact_update_data_number((contacts_list_h)contact->numbers, contact->id, false, &had_phonenumber);
+               ret = ctsvc_contact_update_data_number(zone_name, (contacts_list_h)contact->numbers, contact->id, false, &had_phonenumber);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_number() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_number() Fail(%d)", ret);
                        return ret;
                }
                contact->has_phonenumber = had_phonenumber;
@@ -384,42 +379,42 @@ static inline int __ctsvc_contact_update_data(ctsvc_contact_s *contact)
 
        if (contact->emails) {
                bool had_email;
-               ret = ctsvc_contact_update_data_email((contacts_list_h)contact->emails, contact->id, false, &had_email);
+               ret = ctsvc_contact_update_data_email(zone_name, (contacts_list_h)contact->emails, contact->id, false, &had_email);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_email() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_email() Fail(%d)", ret);
                        return ret;
                }
                contact->has_email = had_email;
        }
 
        if (contact->profiles) {
-               ret = ctsvc_contact_update_data_profile((contacts_list_h)contact->profiles, contact->id, false);
+               ret = ctsvc_contact_update_data_profile(zone_name, (contacts_list_h)contact->profiles, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_profile() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_profile() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->relationships) {
-               ret = ctsvc_contact_update_data_relationship((contacts_list_h)contact->relationships, contact->id, false);
+               ret = ctsvc_contact_update_data_relationship(zone_name, (contacts_list_h)contact->relationships, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_relationship() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_relationship() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->images) {
-               ret = ctsvc_contact_update_data_image((contacts_list_h)contact->images, contact->id, false);
+               ret = ctsvc_contact_update_data_image(zone_name, (contacts_list_h)contact->images, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_image() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_image() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (contact->extensions) {
-               ret = ctsvc_contact_update_data_extension((contacts_list_h)contact->extensions, contact->id, false);
+               ret = ctsvc_contact_update_data_extension(zone_name, (contacts_list_h)contact->extensions, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_extension() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_extension() Fail(%d)", ret);
                        return ret;
                }
        }
@@ -439,7 +434,7 @@ static void __ctsvc_contact_check_default_data(ctsvc_contact_s *contact)
                ctsvc_contact_check_default_address((contacts_list_h)contact->postal_addrs);
 }
 
-static inline int __ctsvc_contact_update_grouprel(int contact_id, contacts_list_h group_list)
+static inline int __ctsvc_contact_update_grouprel(const char *zone_name, int contact_id, contacts_list_h group_list)
 {
        CTS_FN_CALL;
        ctsvc_group_relation_s *grouprel;
@@ -451,15 +446,15 @@ static inline int __ctsvc_contact_update_grouprel(int contact_id, contacts_list_
 
        RETV_IF(NULL == group_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                grouprel = (ctsvc_group_relation_s *)cursor->data;
-               ret = ctsvc_group_remove_contact_in_transaction(grouprel->group_id, contact_id);
+               ret = ctsvc_group_remove_contact_in_transaction(zone_name, grouprel->group_id, contact_id);
                if (0 < ret)
                        rel_changed += ret;
        }
 
        ret = contacts_list_get_count(group_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(group_list);
@@ -470,12 +465,12 @@ static inline int __ctsvc_contact_update_grouprel(int contact_id, contacts_list_
 
                RETVM_IF(grouprel->group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "group_id(%d) invalid", grouprel->group_id);
                if (grouprel->group_id) {
-                       ret = ctsvc_group_add_contact_in_transaction(grouprel->group_id, contact_id);
-                       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_db_group_set_relation() Failed(%d)", ret);
+                       ret = ctsvc_group_add_contact_in_transaction(zone_name, grouprel->group_id, contact_id);
+                       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_db_group_set_relation() Fail(%d)", ret);
                        if (0 < ret)
                                rel_changed += ret;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(group_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(group_list));
 
        if (rel_changed)
                return rel_changed;
@@ -501,9 +496,9 @@ static bool __ctsvc_contact_check_token(char *src, char *dest, int len)
        return had;
 }
 
-// Make search data by number, email, nicknames, address, note, messenger, relationship, company
-static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact_s *contact,
-               char **search_name, char **search_number, char **search_data)
+/* Make search data by number, email, nicknames, address, note, messenger, relationship, company */
+static inline int __ctsvc_contact_make_search_data(ctsvc_contact_s *contact,
+               char **search_number, char **search_data)
 {
        int len = 0;
 
@@ -513,14 +508,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
        char *temp_data=NULL;
        int buf_size=0;
 
-       if (contact == NULL)
-               return CONTACTS_ERROR_NO_DATA;
-
-       RETV_IF(NULL == search_name, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == search_number, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == search_data, CONTACTS_ERROR_INVALID_PARAMETER);
-
-       ctsvc_contact_make_search_name(contact, search_name);
+       RETV_IF(NULL == contact, CONTACTS_ERROR_NO_DATA);
 
        if (contact->numbers) {
                contacts_list_h number_list = (contacts_list_h)contact->numbers;
@@ -528,19 +516,15 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(number_list);
                do {
                        contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number_record);
-                       if (NULL != number_record && number_record->cleaned) {
+                       if (number_record && number_record->cleaned) {
                                buf_size = SAFE_STRLEN(number) + SAFE_STRLEN(number_record->cleaned) + SAFE_STRLEN(number_record->normalized) + 3;
                                temp_number = calloc(1, buf_size);
                                if (NULL == temp_number) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
-                               if (NULL == temp_number) {
-                                       CTS_ERR("calloc() return NULL");
-                                       break;
-                               }
+
                                if (number)
                                        snprintf(temp_number, buf_size, "%s %s %s", SAFE_STR(number), number_record->cleaned, number_record->normalized);
                                else
@@ -548,7 +532,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(number);
                                number = temp_number;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
        }
 
        if (contact->emails) {
@@ -557,7 +541,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(email_list);
                do {
                        contacts_list_get_current_record_p(email_list, (contacts_record_h*)&email);
-                       if (NULL != email && email->email_addr) {
+                       if (email && email->email_addr) {
                                int len = strlen(email->email_addr);
                                char temp[len+1];
                                bool had = __ctsvc_contact_check_token(email->email_addr, temp, len);
@@ -565,12 +549,12 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + SAFE_STRLEN(email->email_addr) * (had?2:1) + 4;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
+
                                if (data)
                                        snprintf(temp_data, buf_size, "%s %s %s",data, email->email_addr, (had?temp:""));
                                else
@@ -578,7 +562,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(email_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(email_list));
        }
 
        if (contact->nicknames) {
@@ -587,7 +571,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(nickname_list);
                do {
                        contacts_list_get_current_record_p(nickname_list, (contacts_record_h*)&nickname);
-                       if (NULL != nickname && nickname->nickname) {
+                       if (nickname && nickname->nickname) {
                                int len = strlen(nickname->nickname);
                                char temp[len+1];
                                bool had = __ctsvc_contact_check_token(nickname->nickname, temp, len);
@@ -595,12 +579,12 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + SAFE_STRLEN(nickname->nickname) * (had?2:1) + 4;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
+
                                if (data)
                                        snprintf(temp_data, buf_size, "%s %s %s", data, nickname->nickname, (had?temp:""));
                                else
@@ -608,7 +592,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
        }
 
        if (contact->postal_addrs) {
@@ -617,7 +601,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(address_list);
                do {
                        contacts_list_get_current_record_p(address_list, (contacts_record_h*)&address);
-                       if (NULL != address) {
+                       if (address) {
                                bool had;
                                int str_len = SAFE_STRLEN(address->country)
                                                        + SAFE_STRLEN(address->pobox)
@@ -631,16 +615,15 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                                        + str_len * 2 + 16;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
 
                                char temp[str_len+1];
 
-                               if(data)
+                               if (data)
                                        len += snprintf(temp_data + len, buf_size - len, "%s ", data);
 
                                if (address->country) {
@@ -674,7 +657,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(address_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(address_list));
        }
 
        if (contact->note) {
@@ -683,7 +666,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(note_list);
                do {
                        contacts_list_get_current_record_p(note_list, (contacts_record_h*)&note);
-                       if (NULL != note && note->note) {
+                       if (note && note->note) {
                                int len = strlen(note->note);
                                char temp[len+1];
                                bool had = __ctsvc_contact_check_token(note->note, temp, len);
@@ -691,12 +674,12 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + SAFE_STRLEN(note->note) * (had?2:1) + 4;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
+
                                if (data)
                                        snprintf(temp_data, buf_size, "%s %s %s",data, note->note, (had?temp:""));
                                else
@@ -704,7 +687,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(note_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(note_list));
        }
 
        if (contact->messengers) {
@@ -713,7 +696,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(messenger_list);
                do {
                        contacts_list_get_current_record_p(messenger_list, (contacts_record_h*)&messenger);
-                       if (NULL != messenger && messenger->im_id) {
+                       if (messenger && messenger->im_id) {
                                int len = strlen(messenger->im_id);
                                char temp[len+1];
                                bool had = __ctsvc_contact_check_token(messenger->im_id, temp, len);
@@ -721,12 +704,12 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + SAFE_STRLEN(messenger->im_id) * (had?2:1) + 4;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
+
                                if (data)
                                        snprintf(temp_data, buf_size, "%s %s %s",data, messenger->im_id, (had?temp:""));
                                else
@@ -734,7 +717,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
        }
 
        if (contact->relationships) {
@@ -743,7 +726,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(relationship_list);
                do {
                        contacts_list_get_current_record_p(relationship_list, (contacts_record_h*)&relationship);
-                       if (NULL != relationship && relationship->name) {
+                       if (relationship && relationship->name) {
                                int len = strlen(relationship->name);
                                char temp[len+1];
                                bool had = __ctsvc_contact_check_token(relationship->name, temp, len);
@@ -751,10 +734,9 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + SAFE_STRLEN(relationship->name) * (had?2:1) + 4;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
 
@@ -765,7 +747,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
        }
 
        if (contact->company) {
@@ -774,7 +756,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                contacts_list_first(company_list);
                do {
                        contacts_list_get_current_record_p(company_list, (contacts_record_h*)&company);
-                       if (NULL != company) {
+                       if (company) {
                                bool had;
                                int str_len = SAFE_STRLEN(company->name)
                                                        + SAFE_STRLEN(company->department)
@@ -788,16 +770,15 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                buf_size = SAFE_STRLEN(data) + str_len * 2 + 18;
                                temp_data = calloc(1, buf_size);
                                if (NULL == temp_data) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(data);
                                        free(number);
-                                       free(*search_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
 
                                char temp[str_len+1];
 
-                               if(data)
+                               if (data)
                                        len += snprintf(temp_data + len, buf_size - len, "%s ", data);
                                if (company->name) {
                                        had = __ctsvc_contact_check_token(company->name, temp, SAFE_STRLEN(company->name));
@@ -835,7 +816,7 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
                                free(data);
                                data = temp_data;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(company_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(company_list));
        }
 
        *search_number = number;
@@ -845,24 +826,25 @@ static inline int __ctsvc_contact_make_search_data(int contact_id, ctsvc_contact
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_contact_s *contact)
+static inline int __ctsvc_contact_refresh_lookup_data(const char *zone_name, int contact_id, ctsvc_contact_s *contact)
 {
+       CTS_FN_CALL;
        int ret, len = 0, temp_len =0;
        char query[CTS_SQL_MAX_LEN] = {0};
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d",
                        CTS_TABLE_NAME_LOOKUP, contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d",
                        CTS_TABLE_PHONE_LOOKUP, contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                return ret;
        }
 
@@ -876,50 +858,51 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                char *temp_name = NULL;
                contacts_list_first(name_list);
                len = 0;
-               // name record of contact should be one
+               /* name record of contact should be one */
                do {
                        contacts_list_get_current_record_p(name_list, (contacts_record_h*)&name_record);
-                       if (NULL != name_record
+                       if (name_record
                                        && (name_record->last || name_record->first || name_record->addition || name_record->suffix)) {
                                char *normalized_name = NULL;
 
-                               ///////////////////////////////////////////////
-                               // Make reverse display name (Last name first)
-                               // Default                       : Prefix Last, First Middle(addition), Suffix
-                               // Korean, Chinese : Prefix LastMiddleFirstSuffix
-                               // Japanese              : Prefix Last Middle First Suffix
-                               // reverse sort name does not include prefix
-                               //      But, if there is only prefix, reverse sort_name is prefix
-                               //////////////////////////////////////////////
-                               // make display name
+                               /*
+                                * Make reverse display name (Last name first)
+                                * Default         : Prefix Last, First Middle(addition), Suffix
+                                * Korean, Chinese : Prefix LastMiddleFirstSuffix
+                                * Japanese        : Prefix Last Middle First Suffix
+                                * reverse sort name does not include prefix
+                                *      But, if there is only prefix, reverse sort_name is prefix
+                                */
+                               /* make display name */
                                temp_len = SAFE_STRLEN(name_record->first) + SAFE_STRLEN(name_record->addition)
                                                                        + SAFE_STRLEN(name_record->last)+ SAFE_STRLEN(name_record->suffix) + 1;
                                int reverse_lang_type = ctsvc_contact_get_name_language(name_record);
                                temp_name = calloc(1, temp_len);
                                if (NULL == temp_name) {
-                                       CTS_ERR("calloc() return NULL");
-                                       break;
+                                       CTS_ERR("calloc() Fail");
+                                       return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
+
                                if (reverse_lang_type == CTSVC_LANG_KOREAN ||
                                        reverse_lang_type == CTSVC_LANG_CHINESE ||
                                        reverse_lang_type == CTSVC_LANG_JAPANESE) {
-                                       if(name_record->last)
+                                       if (name_record->last)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->last);
-                                       if(name_record->addition)
+                                       if (name_record->addition)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->addition);
-                                       if(name_record->first)
+                                       if (name_record->first)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->first);
-                                       if(name_record->suffix)
+                                       if (name_record->suffix)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->suffix);
                                }
                                else {
-                                       if(name_record->last)
+                                       if (name_record->last)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->last);
-                                       if(name_record->first)
+                                       if (name_record->first)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->first);
-                                       if(name_record->addition)
+                                       if (name_record->addition)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->addition);
-                                       if(name_record->suffix)
+                                       if (name_record->suffix)
                                                len += snprintf(temp_name + len, temp_len - len, "%s", name_record->suffix);
                                }
 
@@ -928,9 +911,9 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                                                                "VALUES(%d, %d, ?, %d)",        CTS_TABLE_NAME_LOOKUP, name_record->id,
                                                                contact_id, 0);
 
-                               ret = ctsvc_query_prepare(query, &stmt);
+                               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                                if (NULL == stmt) {
-                                       CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                                        free(temp_name);
                                        free(normalized_name);
                                        return ret;
@@ -947,12 +930,12 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                                ctsvc_stmt_finalize(stmt);
 
                                if (CONTACTS_ERROR_NONE != ret) {
-                                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                                        return ret;
                                }
                                break;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(name_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(name_list));
        }
 
        if (contact->numbers) {
@@ -963,40 +946,40 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                len = 0;
                do {
                        contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number_record);
-                       if (NULL != number_record && number_record->number) {
+                       if (number_record && number_record->number) {
                                if (NULL == number_record->cleaned)
                                        continue;
 
-                               // actually phone_lookup minmatch is not used
+                               /* actually phone_lookup minmatch is not used */
                                snprintf(query, sizeof(query), "INSERT INTO %s(data_id, contact_id, number, min_match) "
                                                                "VALUES(%d, %d, ?, ?)", CTS_TABLE_PHONE_LOOKUP, number_record->id,
                                                                contact_id);
 
-                               ret = ctsvc_query_prepare(query, &stmt);
-                               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+                               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                                if (*number_record->cleaned)
                                        ctsvc_stmt_bind_text(stmt, 1, number_record->cleaned);
                                ret = ctsvc_stmt_step(stmt);
                                if (CONTACTS_ERROR_NONE != ret) {
-                                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                                        ctsvc_stmt_finalize(stmt);
                                        return ret;
                                }
-                               if (number_record->normalized && strcmp(number_record->cleaned, number_record->normalized) != 0) {
+                               if (number_record->normalized && STRING_EQUAL != strcmp(number_record->cleaned, number_record->normalized)) {
                                        ctsvc_stmt_reset(stmt);
                                        if (*number_record->normalized)
                                                ctsvc_stmt_bind_text(stmt, 1, number_record->normalized);
                                        ret = ctsvc_stmt_step(stmt);
                                        if (CONTACTS_ERROR_NONE != ret) {
-                                               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                                               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                                                ctsvc_stmt_finalize(stmt);
                                                return ret;
                                        }
                                }
                                ctsvc_stmt_finalize(stmt);
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
        }
 
        if (contact->nicknames) {
@@ -1006,16 +989,16 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                contacts_list_first(nickname_list);
                do {
                        contacts_list_get_current_record_p(nickname_list, (contacts_record_h*)&nickname);
-                       if (NULL != nickname && NULL != nickname->nickname) {
+                       if (nickname && nickname->nickname) {
                                char *normalized_nickname = NULL;
                                ctsvc_normalize_str(nickname->nickname, &normalized_nickname);
                                snprintf(query, sizeof(query), "INSERT INTO %s(data_id, contact_id, name, type) "
                                                                "VALUES(%d, %d, ?, %d)",        CTS_TABLE_NAME_LOOKUP, nickname->id,
                                                                contact_id,  0);
 
-                               ret = ctsvc_query_prepare(query, &stmt);
+                               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                                if (NULL == stmt) {
-                                       CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                                        free(normalized_nickname);
                                        return ret;
                                }
@@ -1030,17 +1013,17 @@ static inline int __ctsvc_contact_refresh_lookup_data(int contact_id, ctsvc_cont
                                ctsvc_stmt_finalize(stmt);
 
                                if (CONTACTS_ERROR_NONE != ret) {
-                                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                                        return ret;
                                }
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_contact_update_search_data(int contact_id)
+static inline int __ctsvc_contact_update_search_data(const char *zone_name, int contact_id, bool need_refresh_lookup_data)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -1050,32 +1033,43 @@ static inline int __ctsvc_contact_update_search_data(int contact_id)
        char *search_data = NULL;
        ctsvc_contact_s *contact = NULL;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = ctsvc_db_contact_get(contact_id, (contacts_record_h*)&contact);
+       ret = ctsvc_db_contact_get(zone_name, contact_id, (contacts_record_h*)&contact);
        if (CONTACTS_ERROR_NO_DATA == ret) {
                int r;
                snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d",
                                CTS_TABLE_SEARCH_INDEX, contact_id);
-               r = ctsvc_query_exec(query);
+               r = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != r) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", r);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", r);
+                       ctsvc_end_trans(zone_name, false);
                        return r;
                }
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        else if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_db_contact_get() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_db_contact_get() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       ret = ctsvc_contact_make_search_name(contact, &search_name);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_contact_make_search_name() Fail(%d)", ret);
+               contacts_record_destroy((contacts_record_h)contact, true);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = __ctsvc_contact_make_search_data(contact_id, contact, &search_name, &search_number, &search_data);
+       ret = __ctsvc_contact_make_search_data(contact, &search_number, &search_data);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_make_search_data() Failed(%d)", ret);
+               CTS_ERR("__ctsvc_contact_make_search_data() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
+               free(search_name);
                return ret;
        }
 
@@ -1084,11 +1078,11 @@ static inline int __ctsvc_contact_update_search_data(int contact_id)
                        "WHERE contact_id = %d",
                        CTS_TABLE_SEARCH_INDEX, contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                free(search_name);
                free(search_number);
                free(search_data);
@@ -1109,32 +1103,67 @@ static inline int __ctsvc_contact_update_search_data(int contact_id)
        free(search_data);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       // update phone_lookup, name_lookup
-       ret = __ctsvc_contact_refresh_lookup_data(contact_id, contact);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_refresh_lookup_data() Failed(%d)", ret);
-               contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
-               return ret;
+       if (need_refresh_lookup_data) {
+               /* update phone_lookup, name_lookup */
+               ret = __ctsvc_contact_refresh_lookup_data(zone_name, contact_id, contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("__ctsvc_contact_refresh_lookup_data() Fail(%d)", ret);
+                       contacts_record_destroy((contacts_record_h)contact, true);
+                       ctsvc_end_trans(zone_name, false);
+                       return ret;
+               }
        }
 
        contacts_record_destroy((contacts_record_h)contact, true);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_update_record( contacts_record_h record )
+static bool __ctsvc_list_check_dirty(ctsvc_list_s *list)
+{
+       if (list) {
+               if (list->deleted_records) {
+                       return true;
+               }
+               GList *c = NULL;
+               for (c=list->records;c;c=c->next) {
+                       ctsvc_record_s *s_record = c->data;
+                       int i;
+                       unsigned int property_info_count = 0;
+                       const property_info_s *property_info = ctsvc_view_get_all_property_infos(s_record->view_uri, &property_info_count);
+                       for (i=0;i<property_info_count;i++) {
+                               if (ctsvc_record_check_property_flag(s_record, property_info[i].property_id, CTSVC_PROPERTY_FLAG_DIRTY)) {
+                                       return true;
+                               }
+                       }
+               }
+       }
+       return false;
+}
+
+static bool __ctsvc_get_need_refresh_lookup_data(ctsvc_contact_s *contact)
+{
+       if (__ctsvc_list_check_dirty(contact->name))
+               return true;
+       if (__ctsvc_list_check_dirty(contact->numbers))
+               return true;
+       if (__ctsvc_list_check_dirty(contact->nicknames))
+               return true;
+       return false;
+}
+
+static int __ctsvc_db_contact_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret, len = 0;
        int rel_changed = 0;
@@ -1147,22 +1176,22 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
        bool is_invalid = false;
        int current_version = 0;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT changed_ver FROM "CTS_TABLE_CONTACTS" "
                "WHERE contact_id = %d AND deleted = 0", contact->id);
-       ret = ctsvc_query_get_first_int_result(query, &current_version);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &current_version);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("The index(%d) is Invalid. %d Record(s) is(are) found", contact->id, ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(contact->addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, contact->addressbook_id)) {
                CTS_ERR("Does not have permission to update this contact");
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
@@ -1170,47 +1199,50 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                is_invalid = true;
        __ctsvc_contact_check_default_data(contact);
 
-       //update data
-       ret = __ctsvc_contact_update_data(contact);
+       /* check lookup data is dirty */
+       bool need_update_lookup = __ctsvc_get_need_refresh_lookup_data(contact);
+
+       /* update data */
+       ret = __ctsvc_contact_update_data(zone_name, contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_update_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("__ctsvc_contact_update_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (contact->grouprelations) {
-               rel_changed = __ctsvc_contact_update_grouprel(contact->id, (contacts_list_h)contact->grouprelations);
+               rel_changed = __ctsvc_contact_update_grouprel(zone_name, contact->id, (contacts_list_h)contact->grouprelations);
                if (rel_changed < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("cts_update_contact_grouprel() Failed(%d)", rel_changed);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("cts_update_contact_grouprel() Fail(%d)", rel_changed);
+                       ctsvc_end_trans(zone_name, false);
                        return rel_changed;
                }
        }
 
-       //////////////////////////////////////////////////////////////////////
-       // this code will be removed.
+       /* thumbnail */
        if (contact->images) {
                int ret = CONTACTS_ERROR_NONE;
-               contacts_record_h record_image = NULL;
                int count = 0;
                ctsvc_image_s *image;
 
                contacts_list_get_count((contacts_list_h)contact->images, &count);
                if (count) {
                        contacts_list_first((contacts_list_h)contact->images);
-                       ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, &record_image);
-
-                       if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
-                               return CONTACTS_ERROR_DB;
-                       }
+                       do {
+                               ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, (contacts_record_h*)&image);
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       CTS_ERR("contacts_list_get_current_record_p() Fail(%d)", ret);
+                                       ctsvc_end_trans(zone_name, false);
+                                       return CONTACTS_ERROR_DB;
+                               }
 
-                       image = (ctsvc_image_s*)record_image;
+                               if (image->is_default)
+                                       break;
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)contact->images));
 
-                       if ((NULL == contact->image_thumbnail_path && NULL != image->path) ||
-                                       (NULL != contact->image_thumbnail_path && NULL == image->path) ||
-                                       (contact->image_thumbnail_path && image->path && 0 != strcmp(contact->image_thumbnail_path, image->path))) {
+                       if ((NULL == contact->image_thumbnail_path && image->path) ||
+                                       (contact->image_thumbnail_path && NULL == image->path) ||
+                                       (contact->image_thumbnail_path && image->path && (STRING_EQUAL != strcmp(contact->image_thumbnail_path, image->path)))) {
                                ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
 
                                if (ctsvc_contact_check_image_location(image->path))
@@ -1223,7 +1255,7 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                        free(contact->image_thumbnail_path);
                        contact->image_thumbnail_path = NULL;
                        bool is_changed = ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
-                       if ((!is_changed && !is_invalid) || (is_changed && !is_invalid)) {
+                       if ((false == is_changed && false == is_invalid) || (is_changed && false == is_invalid)) {
                                ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
                        }
                        else {
@@ -1234,14 +1266,11 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                        }
                }
        }
-       // this code will be removed.
-       //////////////////////////////////////////////////////////////////////
 
        if (is_invalid) {
                ctsvc_contact_s* temp_contact;
                contacts_record_create(_contacts_contact._uri, (contacts_record_h*)&temp_contact);
-               ret = __ctsvc_db_get_data(contact->id, temp_contact);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_db_get_data() Fail(%d)", ret);
+               ret = __ctsvc_db_get_data(zone_name, contact->id, temp_contact);
                ctsvc_contact_make_display_name(temp_contact);
 
                FREEandSTRDUP(contact->display_name, temp_contact->display_name);
@@ -1268,10 +1297,10 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                char query_set[CTS_SQL_MIN_LEN] = {0, };
                cts_stmt stmt = NULL;
 
-               version = ctsvc_get_next_ver();
+               version = ctsvc_get_next_ver(zone_name);
 
                ret = ctsvc_db_create_set_query(record, &set, &bind_text);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_db_create_set_query() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_db_create_set_query() Fail(%d)", ret);
 
                if (set && *set)
                        len = snprintf(query_set, sizeof(query_set), "%s, ", set);
@@ -1296,9 +1325,9 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
 
                snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE contact_id = %d", CTS_TABLE_CONTACTS, query_set, contact->id);
 
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        break;
                }
 
@@ -1312,7 +1341,7 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                }
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
@@ -1320,7 +1349,7 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
        } while (0);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
                CONTACTS_FREE(set);
                if (bind_text) {
@@ -1331,12 +1360,12 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                return ret;
        }
 
-       ctsvc_set_contact_noti();
+       ctsvc_set_contact_noti(zone_name);
        if (0 < rel_changed)
-               ctsvc_set_group_rel_noti();
+               ctsvc_set_group_rel_noti(zone_name);
 
-       __ctsvc_contact_update_search_data(contact->id);
-       ctsvc_db_update_person((contacts_record_h)contact);
+       __ctsvc_contact_update_search_data(zone_name, contact->id, need_update_lookup);
+       ctsvc_db_update_person(zone_name, (contacts_record_h)contact);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
        CONTACTS_FREE(set);
@@ -1346,13 +1375,13 @@ static int __ctsvc_db_contact_update_record( contacts_record_h record )
                g_slist_free(bind_text);
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_contact_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -1370,22 +1399,22 @@ static int __ctsvc_db_contact_get_all_records( int offset, int limit, contacts_l
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
                contact_id = ctsvc_stmt_get_int(stmt, 0);
-               ret = ctsvc_db_contact_get(contact_id, &record);
+               ret = ctsvc_db_contact_get(zone_name, contact_id, &record);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_db_contact_get() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_db_contact_get() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -1399,7 +1428,7 @@ static int __ctsvc_db_contact_get_all_records( int offset, int limit, contacts_l
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_get_changed_ver(int contact_id, ctsvc_contact_s *contact)
+static int __ctsvc_db_contact_get_changed_ver(const char *zone_name, int contact_id, ctsvc_contact_s *contact)
 {
        int ret;
        int version;
@@ -1408,13 +1437,13 @@ static int __ctsvc_db_contact_get_changed_ver(int contact_id, ctsvc_contact_s *c
        snprintf(query, sizeof(query),
                        "SELECT changed_ver FROM "CTS_TABLE_CONTACTS
                                " WHERE contact_id = %d AND deleted = 0", contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &version);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &version);
        if (CONTACTS_ERROR_NONE == ret)
                contact->changed_ver = version;
        return ret;
 }
 
-static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_contact_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -1438,25 +1467,30 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                        }
                }
        }
-       else
+       else {
+               s_query->projection_count = 0;
                had_contact_id = true;
+       }
+
+       if (false == had_contact_id) {
+               s_query->projection = realloc(s_query->projection, s_query->projection_count+1);
+               if (NULL == s_query->projection) {
+                       CTS_ERR("realloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
 
-       if (!had_contact_id) {
-               unsigned int *temp = realloc(s_query->projection, s_query->projection_count+1);
-               RETVM_IF(NULL == temp, CONTACTS_ERROR_OUT_OF_MEMORY, "realloc() return NULL");
-               s_query->projection = temp;
                s_query->projection[s_query->projection_count] = CTSVC_PROPERTY_CONTACT_ID;
                s_query->projection_count++;
        }
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -1475,7 +1509,7 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -1491,6 +1525,7 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->display_name);
                                contact->display_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
@@ -1501,12 +1536,14 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_CONTACT_RINGTONE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->ringtone_path);
                                contact->ringtone_path = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp && *temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                                       free(contact->image_thumbnail_path);
                                        contact->image_thumbnail_path = strdup(full_path);
                                }
                                break;
@@ -1524,14 +1561,17 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_CONTACT_UID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->uid);
                                contact->uid = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_VIBRATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->vibration);
                                contact->vibration = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->message_alert);
                                contact->message_alert = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
@@ -1544,26 +1584,26 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
                                break;
                        }
                }
-               // get changed_ver
-               ret = __ctsvc_db_contact_get_changed_ver(contact_id, contact);
+               /* get changed_ver */
+               ret = __ctsvc_db_contact_get_changed_ver(zone_name, contact_id, contact);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("__ctsvc_db_contact_get_changed_ver Failed(%d)", ret);
+                       CTS_ERR("__ctsvc_db_contact_get_changed_ver Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
 
-               ret = __ctsvc_db_get_data(contact_id, contact);
+               ret = __ctsvc_db_get_data(zone_name, contact_id, contact);
                if (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret) {
-                       CTS_ERR("ctsvc_get_data_info Failed(%d)", ret);
+                       CTS_ERR("ctsvc_get_data_info Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
 
-               ret = __ctsvc_get_contact_grouprel(contact_id, contact);
+               ret = __ctsvc_get_contact_grouprel(zone_name, contact_id, contact);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_get_group_relations Failed(%d)", ret);
+                       CTS_ERR("ctsvc_get_group_relations Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -1579,136 +1619,138 @@ static int __ctsvc_db_contact_get_records_with_query( contacts_query_h query, in
        return CONTACTS_ERROR_NONE;
 }
 
-//static int __ctsvc_db_contact_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_contact_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_contact_delete_records(int ids[], int count) { return CONTACTS_ERROR_NONE; }
+/*
+ * static int __ctsvc_db_contact_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
+ * static int __ctsvc_db_contact_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
+ * static int __ctsvc_db_contact_delete_records(int ids[], int count) { return CONTACTS_ERROR_NONE; }
+ */
 
-static int __ctsvc_contact_insert_data(ctsvc_contact_s *contact)
+static int __ctsvc_contact_insert_data(const char *zone_name, ctsvc_contact_s *contact)
 {
        int ret;
 
-       //Insert the name
+       /* Insert the name */
        if (contact->name) {
-               ret = ctsvc_contact_insert_data_name((contacts_list_h)contact->name, contact->id, false);
+               ret = ctsvc_contact_insert_data_name(zone_name, (contacts_list_h)contact->name, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_name() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_name() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the company
+       /* Insert the company */
        if (contact->company) {
-               ret = ctsvc_contact_insert_data_company((contacts_list_h)contact->company, contact->id, false);
+               ret = ctsvc_contact_insert_data_company(zone_name, (contacts_list_h)contact->company, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_company() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_company() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the events
+       /* Insert the events */
        if (contact->events) {
-               ret = ctsvc_contact_insert_data_event((contacts_list_h)contact->events, contact->id, false);
+               ret = ctsvc_contact_insert_data_event(zone_name, (contacts_list_h)contact->events, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_event() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_event() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the messengers
+       /* Insert the messengers */
        if (contact->messengers) {
-               ret = ctsvc_contact_insert_data_messenger((contacts_list_h)contact->messengers, contact->id, false);
+               ret = ctsvc_contact_insert_data_messenger(zone_name, (contacts_list_h)contact->messengers, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_messenger() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_messenger() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the postals
+       /* Insert the postals */
        if (contact->postal_addrs) {
-               ret = ctsvc_contact_insert_data_address((contacts_list_h)contact->postal_addrs, contact->id, false);
+               ret = ctsvc_contact_insert_data_address(zone_name, (contacts_list_h)contact->postal_addrs, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_postal() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_postal() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the Web addrs
+       /* Insert the Web addrs */
        if (contact->urls) {
-               ret = ctsvc_contact_insert_data_url((contacts_list_h)contact->urls, contact->id, false);
+               ret = ctsvc_contact_insert_data_url(zone_name, (contacts_list_h)contact->urls, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_web() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_web() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the Nick names
+       /* Insert the Nick names */
        if (contact->nicknames) {
-               ret = ctsvc_contact_insert_data_nickname((contacts_list_h)contact->nicknames, contact->id, false);
+               ret = ctsvc_contact_insert_data_nickname(zone_name, (contacts_list_h)contact->nicknames, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_nickname() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_nickname() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the numbers
+       /* Insert the numbers */
        if (contact->numbers) {
-               ret = ctsvc_contact_insert_data_number((contacts_list_h)contact->numbers, contact->id, false);
+               ret = ctsvc_contact_insert_data_number(zone_name, (contacts_list_h)contact->numbers, contact->id, false);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_contact_insert_data_number() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_number() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the emails
+       /* Insert the emails */
        if (contact->emails) {
-               ret = ctsvc_contact_insert_data_email((contacts_list_h)contact->emails, contact->id, false);
+               ret = ctsvc_contact_insert_data_email(zone_name, (contacts_list_h)contact->emails, contact->id, false);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_insert_contact_data_email() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_email() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the profile values
+       /* Insert the profile values */
        if (contact->profiles) {
-               ret = ctsvc_contact_insert_data_profile((contacts_list_h)contact->profiles, contact->id, false);
+               ret = ctsvc_contact_insert_data_profile(zone_name, (contacts_list_h)contact->profiles, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_contact_data_profile() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_contact_data_profile() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the relationship values
+       /* Insert the relationship values */
        if (contact->relationships) {
-               ret = ctsvc_contact_insert_data_relationship((contacts_list_h)contact->relationships, contact->id, false);
+               ret = ctsvc_contact_insert_data_relationship(zone_name, (contacts_list_h)contact->relationships, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_relationship() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_relationship() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the image values
+       /* Insert the image values */
        if (contact->images) {
-               ret = ctsvc_contact_insert_data_image((contacts_list_h)contact->images, contact->id, false);
+               ret = ctsvc_contact_insert_data_image(zone_name, (contacts_list_h)contact->images, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_image() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_image() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the note values
+       /* Insert the note values */
        if (contact->note) {
-               ret = ctsvc_contact_insert_data_note((contacts_list_h)contact->note, contact->id, false);
+               ret = ctsvc_contact_insert_data_note(zone_name, (contacts_list_h)contact->note, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_note() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_note() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the extensions values
+       /* Insert the extensions values */
        if (contact->extensions) {
-               ret = ctsvc_contact_insert_data_extension((contacts_list_h)contact->extensions, contact->id, false);
+               ret = ctsvc_contact_insert_data_extension(zone_name, (contacts_list_h)contact->extensions, contact->id, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_extension() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_extension() Fail(%d)", ret);
                        return ret;
                }
        }
@@ -1716,7 +1758,7 @@ static int __ctsvc_contact_insert_data(ctsvc_contact_s *contact)
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_contact_insert_search_data(int contact_id)
+static inline int __ctsvc_contact_insert_search_data(const char *zone_name, int contact_id, bool need_insert_lookup_data)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -1726,21 +1768,30 @@ static inline int __ctsvc_contact_insert_search_data(int contact_id)
        char *search_data = NULL;
        ctsvc_contact_s *contact = NULL;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "contacts_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "contacts_begin_trans() Fail(%d)", ret);
 
-       ret = ctsvc_db_contact_get(contact_id, (contacts_record_h*)&contact);
+       ret = ctsvc_db_contact_get(zone_name, contact_id, (contacts_record_h*)&contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_db_contact_get() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_db_contact_get() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = __ctsvc_contact_make_search_data(contact_id, contact, &search_name, &search_number, &search_data);
+       ret = ctsvc_contact_make_search_name(contact, &search_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_make_search_data() Failed(%d)", ret);
+               CTS_ERR("ctsvc_contact_make_search_name() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
+               return ret;
+       }
+
+       ret = __ctsvc_contact_make_search_data(contact, &search_number, &search_data);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("__ctsvc_contact_make_search_data() Fail(%d)", ret);
+               contacts_record_destroy((contacts_record_h)contact, true);
+               ctsvc_end_trans(zone_name, false);
+               free(search_name);
                return ret;
        }
 
@@ -1749,22 +1800,22 @@ static inline int __ctsvc_contact_insert_search_data(int contact_id)
                        "VALUES(%d, ?, ?, ?)",
                        CTS_TABLE_SEARCH_INDEX, contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                free(search_name);
                free(search_number);
                free(search_data);
                return ret;
        }
 
-       if(search_name)
+       if (search_name)
                ctsvc_stmt_bind_text(stmt, 1, search_name);
-       if(search_number)
+       if (search_number)
                ctsvc_stmt_bind_text(stmt, 2, search_number);
-       if(search_data)
+       if (search_data)
                ctsvc_stmt_bind_text(stmt, 3, search_data);
 
        ret = ctsvc_stmt_step(stmt);
@@ -1774,32 +1825,34 @@ static inline int __ctsvc_contact_insert_search_data(int contact_id)
        free(search_data);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                contacts_record_destroy((contacts_record_h)contact, true);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       // update phone_lookup, name_lookup
-       ret = __ctsvc_contact_refresh_lookup_data(contact_id, contact);
-       if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_refresh_lookup_data() Failed(%d)", ret);
-               contacts_record_destroy((contacts_record_h)contact, true);
-               ctsvc_end_trans(false);
-               return ret;
+       /* update phone_lookup, name_lookup */
+       if (need_insert_lookup_data) {
+               ret = __ctsvc_contact_refresh_lookup_data(zone_name, contact_id, contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("__ctsvc_contact_refresh_lookup_data() Failed(%d)", ret);
+                       contacts_record_destroy((contacts_record_h)contact, true);
+                       ctsvc_end_trans(zone_name, false);
+                       return ret;
+               }
        }
 
        contacts_record_destroy((contacts_record_h)contact, true);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_contact_insert_grouprel(int contact_id, contacts_list_h group_list)
+static inline int __ctsvc_contact_insert_grouprel(const char *zone_name, int contact_id, contacts_list_h group_list)
 {
        CTS_FN_CALL;
        ctsvc_group_relation_s *grouprel;
@@ -1809,7 +1862,7 @@ static inline int __ctsvc_contact_insert_grouprel(int contact_id, contacts_list_
 
        RETV_IF(NULL == group_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(group_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(group_list);
@@ -1820,12 +1873,12 @@ static inline int __ctsvc_contact_insert_grouprel(int contact_id, contacts_list_
 
                RETVM_IF(grouprel->group_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "group_id(%d) invalid", grouprel->group_id);
                if (grouprel->group_id) {
-                       ret = ctsvc_group_add_contact_in_transaction(grouprel->group_id, contact_id);
-                       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_db_group_set_relation() Failed(%d)", ret);
+                       ret = ctsvc_group_add_contact_in_transaction(zone_name, grouprel->group_id, contact_id);
+                       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_db_group_set_relation() Fail(%d)", ret);
                        if (0 < ret)
                                rel_changed += ret;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(group_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(group_list));
 
        if (rel_changed)
                return rel_changed;
@@ -1833,7 +1886,7 @@ static inline int __ctsvc_contact_insert_grouprel(int contact_id, contacts_list_
                return CONTACTS_ERROR_NONE;
 }
 
-inline static int __ctsvc_find_person_to_link_with_number(const char *number, int addressbook_id, int *person_id)
+inline static int __ctsvc_find_person_to_link_with_number(const char *zone_name, const char *number, int addressbook_id, int *person_id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -1846,24 +1899,22 @@ inline static int __ctsvc_find_person_to_link_with_number(const char *number, in
                char normal_num[sizeof(clean_num)+20];
                ret = ctsvc_normalize_number(clean_num, normal_num, sizeof(normal_num), true);
                char minmatch[sizeof(normal_num)+1];
-               if (0 < ret) {
+               if (0 < ret)
                        ret = ctsvc_get_minmatch_number(normal_num, minmatch, sizeof(minmatch), ctsvc_get_phonenumber_min_match_digit());
-                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_get_minmatch_number() Fail(%d)", ret);
-               }
 
                snprintf(query, sizeof(query),
                                "SELECT C.person_id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
                                "ON C.contact_id=D.contact_id AND D.datatype=%d AND C.deleted = 0 "
                                "AND C.addressbook_id <> %d AND D.is_my_profile = 0 "
                                "WHERE D.data4 = ?",
-                               // Below condition takes long time, so omit the condition
-                               // AND _NUMBER_COMPARE_(D.data5, ?, NULL, NULL)
+                               /* Below condition takes long time, so omit the condition */
+                               /* AND _NUMBER_COMPARE_(D.data5, ?, NULL, NULL) */
                                CTSVC_DATA_NUMBER, addressbook_id);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare fail(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare Fail(%d)", ret);
                ctsvc_stmt_bind_text(stmt, 1, minmatch);
-//             ctsvc_stmt_bind_text(stmt, 2, normal_num);
+               /* ctsvc_stmt_bind_text(stmt, 2, normal_num); */
                ret = ctsvc_stmt_step(stmt);
                if (1 == ret) {
                        *person_id = ctsvc_stmt_get_int(stmt, 0);
@@ -1880,7 +1931,7 @@ inline static int __ctsvc_find_person_to_link_with_number(const char *number, in
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-inline static int __ctsvc_find_person_to_link_with_email(const char *email_addr, int addressbook_id, int *person_id)
+inline static int __ctsvc_find_person_to_link_with_email(const char *zone_name, const char *email_addr, int addressbook_id, int *person_id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -1893,8 +1944,8 @@ inline static int __ctsvc_find_person_to_link_with_email(const char *email_addr,
                        "WHERE D.data3 = ?",
                        CTSVC_DATA_EMAIL, addressbook_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare fail(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare Fail(%d)", ret);
 
        ctsvc_stmt_bind_text(stmt, 1, email_addr);
        ret = ctsvc_stmt_step(stmt);
@@ -1912,7 +1963,7 @@ inline static int __ctsvc_find_person_to_link_with_email(const char *email_addr,
        return ret;
 }
 
-inline static int __ctsvc_find_person_to_link(contacts_record_h record, int addressbook_id, int *person_id)
+inline static int __ctsvc_find_person_to_link(const char *zone_name, contacts_record_h record, int addressbook_id, int *person_id)
 {
        int ret;
        ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
@@ -1920,22 +1971,22 @@ inline static int __ctsvc_find_person_to_link(contacts_record_h record, int addr
        ctsvc_email_s *email_data;
        GList *cursor;
 
-       for(cursor = contact->numbers->records;cursor;cursor=cursor->next) {
+       for (cursor = contact->numbers->records;cursor;cursor=cursor->next) {
                number_data = (ctsvc_number_s *)cursor->data;
-               if (number_data && number_data->number && number_data->number[0]){
-                       ret = __ctsvc_find_person_to_link_with_number(number_data->number, addressbook_id, person_id);
+               if (number_data && number_data->number && number_data->number[0]) {
+                       ret = __ctsvc_find_person_to_link_with_number(zone_name, number_data->number, addressbook_id, person_id);
 
-                       if (ret == CONTACTS_ERROR_NONE && *person_id > 0)
+                       if (ret == CONTACTS_ERROR_NONE && 0 < *person_id)
                                return ret;
                }
        }
 
-       for(cursor = contact->emails->records;cursor;cursor=cursor->next) {
+       for (cursor = contact->emails->records;cursor;cursor=cursor->next) {
                email_data = (ctsvc_email_s *)cursor->data;
-               if (email_data && email_data->email_addr && email_data->email_addr[0]){
-                       ret = __ctsvc_find_person_to_link_with_email(email_data->email_addr, addressbook_id, person_id);
+               if (email_data && email_data->email_addr && email_data->email_addr[0]) {
+                       ret = __ctsvc_find_person_to_link_with_email(zone_name, email_data->email_addr, addressbook_id, person_id);
 
-                       if (ret == CONTACTS_ERROR_NONE && *person_id > 0)
+                       if (ret == CONTACTS_ERROR_NONE && 0 < *person_id)
                                return ret;
                }
        }
@@ -1943,7 +1994,7 @@ inline static int __ctsvc_find_person_to_link(contacts_record_h record, int addr
        return CONTACTS_ERROR_NO_DATA;
 }
 
-static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
+static int __ctsvc_db_contact_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int version;
        int ret, person_id = 0;
@@ -1955,7 +2006,7 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
        int rel_changed = 0;
        cts_stmt stmt = NULL;
 
-       // These check should be done in client side
+       /* These check should be done in client side */
        RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER,
                                        "Invalid parameter : contact is NULL");
        RETVM_IF(contact->addressbook_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
@@ -1966,20 +2017,20 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
        if (contact->link_mode == CONTACTS_CONTACT_LINK_MODE_IGNORE_ONCE)
                auto_link_enabled = false;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       if (false == ctsvc_have_ab_write_permission(contact->addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, contact->addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d)",
                                        contact->addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_get_next_id(CTS_TABLE_CONTACTS);
+       ret = ctsvc_db_get_next_id(zone_name, CTS_TABLE_CONTACTS);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_db_get_next_id() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_db_get_next_id() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        contact->id = ret;
@@ -1989,45 +2040,44 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
        ctsvc_contact_make_display_name(contact);
        __ctsvc_contact_check_default_data(contact);
 
-       //Insert Data
-       ret = __ctsvc_contact_insert_data(contact);
+       /* check lookup data is dirty */
+       bool need_insert_lookup = __ctsvc_get_need_refresh_lookup_data(contact);
+
+       /* Insert Data */
+       ret = __ctsvc_contact_insert_data(zone_name, contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("cts_insert_contact_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("cts_insert_contact_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       //////////////////////////////////////////////////////////////////////
-       // this code will be removed.
+       /* thumbnail */
        free(contact->image_thumbnail_path);
        contact->image_thumbnail_path = NULL;
-
        if (contact->images) {
-               ctsvc_image_s *image;
                int count = 0;
+               ctsvc_image_s *image;
 
                contacts_list_get_count((contacts_list_h)contact->images, &count);
-
-               while (count) {
+               if (count) {
                        contacts_list_first((contacts_list_h)contact->images);
-                       ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, (contacts_record_h*)&image);
-                       if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
-                               return CONTACTS_ERROR_DB;
-                       }
+                       do {
+                               ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, (contacts_record_h*)&image);
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       CTS_ERR("contacts_list_get_current_record_p() Fail(%d)", ret);
+                                       ctsvc_end_trans(zone_name, false);
+                                       return CONTACTS_ERROR_DB;
+                               }
 
-                       if (image->path && image->is_default) {
-                               contact->image_thumbnail_path = strdup(image->path);
-                               break;
-                       }
-                       count--;
+                               if (image->path && image->is_default) {
+                                       contact->image_thumbnail_path = strdup(image->path);
+                                       break;
+                               }
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)contact->images));
                }
        }
-       // this code will be removed.
-       //////////////////////////////////////////////////////////////////////
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
 
        if (contact->person_id) {
                int id;
@@ -2035,39 +2085,39 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
                snprintf(query,sizeof(query),
                                        "SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" "
                                                "WHERE person_id = %d", contact->person_id);
-               ret = ctsvc_query_get_first_int_result(query, &id);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
                if (CONTACTS_ERROR_NONE != ret) {
                        CTS_ERR("Invalid person_id(%d)", contact->person_id);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
                auto_linked = true;
        }
        else if (auto_link_enabled) {
-               ret = __ctsvc_find_person_to_link((contacts_record_h)contact, contact->addressbook_id, &person_id);
-               CTS_DBG("__ctsvc_find_person_to_link return %d , person_id(%d)", ret, person_id);
-               if (ret == CONTACTS_ERROR_NONE && person_id > 0) {
+               ret = __ctsvc_find_person_to_link(zone_name, (contacts_record_h)contact, contact->addressbook_id, &person_id);
+               CTS_DBG("__ctsvc_find_person_to_link return %d, person_id(%d)", ret, person_id);
+               if (ret == CONTACTS_ERROR_NONE && 0 < person_id) {
                        contact->person_id = person_id;
                        auto_linked = true;
                }
                else {
-                       ret = ctsvc_db_insert_person((contacts_record_h)contact);
+                       ret = ctsvc_db_insert_person(zone_name, (contacts_record_h)contact);
                        CTS_DBG("ctsvc_db_insert_person return %d, person_id(%d)", ret, ret);
                        if (ret < CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_db_insert_person() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
+                               CTS_ERR("ctsvc_db_insert_person() Fail(%d)", ret);
+                               ctsvc_end_trans(zone_name, false);
                                return ret;
                        }
                        contact->person_id = ret;
                }
        }
        else {
-               ret = ctsvc_db_insert_person((contacts_record_h)contact);
+               ret = ctsvc_db_insert_person(zone_name, (contacts_record_h)contact);
                CTS_DBG("ctsvc_db_insert_person return %d, person_id(%d)", ret, ret);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_db_insert_person() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_db_insert_person() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
                contact->person_id = ret;
@@ -2085,13 +2135,13 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
                        "VALUES(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, ?, ?, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                        contact->id, contact->person_id, contact->addressbook_id, contact->is_favorite,
                        version, version, (int)time(NULL), contact->link_mode,
-                       (NULL !=contact->image_thumbnail_path)?version:0, contact->has_phonenumber, contact->has_email,
+                       (contact->image_thumbnail_path)?version:0, contact->has_phonenumber, contact->has_email,
                        contact->display_source_type, contact->display_name_language, contact->reverse_display_name_language);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -2120,62 +2170,61 @@ static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       //Insert group Info
+       /* Insert group Info */
        if (contact->grouprelations) {
-               rel_changed = __ctsvc_contact_insert_grouprel(contact->id, (contacts_list_h)contact->grouprelations);
+               rel_changed = __ctsvc_contact_insert_grouprel(zone_name, contact->id, (contacts_list_h)contact->grouprelations);
                if (rel_changed < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("__ctsvc_contact_insert_grouprel() Failed(%d)", rel_changed);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("__ctsvc_contact_insert_grouprel() Fail(%d)", rel_changed);
+                       ctsvc_end_trans(zone_name, false);
                        return rel_changed;
                }
        }
 
-       ret = __ctsvc_contact_insert_search_data(contact->id);
+       ret = __ctsvc_contact_insert_search_data(zone_name, contact->id, need_insert_lookup);
        if (ret != CONTACTS_ERROR_NONE) {
-               CTS_ERR("__ctsvc_contact_insert_search_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("__ctsvc_contact_insert_search_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // person aggregation when auto_linked
+       /* person aggregation when auto_linked */
        if (auto_linked)
-               ctsvc_person_aggregate(contact->person_id);
+               ctsvc_person_aggregate(zone_name, contact->person_id);
 
 #ifdef ENABLE_LOG_FEATURE
-       // update phonelog
+       /* update phonelog */
        if (contact->numbers) {
                int count;
                ret = contacts_list_get_count((contacts_list_h)contact->numbers, &count);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "contacts_list_get_count() Fail(%d)", ret);
                contacts_list_first((contacts_list_h)contact->numbers);
-               if (count > 0) {
+               if (0 < count) {
                        ctsvc_number_s *number_record;
                        do {
                                contacts_list_get_current_record_p((contacts_list_h)contact->numbers, (contacts_record_h*)&number_record);
                                if (number_record->number)
-                                       ctsvc_db_phone_log_update_person_id(number_record->number, -1, contact->person_id, false);
-                       } while(CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)contact->numbers));
+                                       ctsvc_db_phone_log_update_person_id(zone_name, number_record->number, -1, contact->person_id, false);
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)contact->numbers));
                }
        }
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        if (rel_changed)
-               ctsvc_set_group_rel_noti();
-       ctsvc_set_contact_noti();
+               ctsvc_set_group_rel_noti(zone_name);
+       ctsvc_set_contact_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_svc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_svc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_contact_replace_record( contacts_record_h record, int contact_id )
+static int __ctsvc_db_contact_replace_record(const char *zone_name, contacts_record_h record, int contact_id)
 {
        CTS_FN_CALL;
        int ret, len;
@@ -2187,23 +2236,23 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
        cts_stmt stmt = NULL;
        int version;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT addressbook_id, person_id FROM "CTS_TABLE_CONTACTS" "
                "WHERE contact_id = %d AND deleted = 0", contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB errror : ctsvc_query_prepare fail(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB errror : ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The contact_id(%d) is Invalid(%d)", contact_id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -2214,9 +2263,9 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
        person_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to replace this contact (addressbook_id : %d, contact_id : %d", addressbook_id, contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
@@ -2225,63 +2274,64 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
        ctsvc_contact_make_display_name(contact);
        __ctsvc_contact_check_default_data(contact);
 
-       //remove current child data
+       /* remove current child data */
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE contact_id = %d", contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = __ctsvc_contact_insert_data(contact);
+       ret = __ctsvc_contact_insert_data(zone_name, contact);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_contact_insert_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("__ctsvc_contact_insert_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       //remove current child data
+       /* remove current child data */
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_GROUP_RELATIONS" WHERE contact_id = %d", contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (contact->grouprelations) {
-               rel_changed = __ctsvc_contact_insert_grouprel(contact_id, (contacts_list_h)contact->grouprelations);
+               rel_changed = __ctsvc_contact_insert_grouprel(zone_name, contact_id, (contacts_list_h)contact->grouprelations);
                if (rel_changed < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("__ctsvc_contact_insert_grouprel() Failed(%d)", rel_changed);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("__ctsvc_contact_insert_grouprel() Fail(%d)", rel_changed);
+                       ctsvc_end_trans(zone_name, false);
                        return rel_changed;
                }
        }
 
-       //////////////////////////////////////////////////////////////////////
-       // this code will be removed.
+       /* thumbnail */
        if (contact->images) {
                int ret = CONTACTS_ERROR_NONE;
-               contacts_record_h record_image = NULL;
                int count = 0;
                ctsvc_image_s *image;
 
                contacts_list_get_count((contacts_list_h)contact->images, &count);
                if (count) {
                        contacts_list_first((contacts_list_h)contact->images);
-                       ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, &record_image);
+                       do {
+                               ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, (contacts_record_h*)&image);
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       CTS_ERR("contacts_list_get_current_record_p() Fail(%d)", ret);
+                                       ctsvc_end_trans(zone_name, false);
+                                       return CONTACTS_ERROR_DB;
+                               }
 
-                       if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
-                               return CONTACTS_ERROR_DB;
-                       }
+                               if (image->is_default)
+                                       break;
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)contact->images));
 
-                       image = (ctsvc_image_s*)record_image;
-                       if ((NULL == contact->image_thumbnail_path && NULL != image->path) ||
-                                       (NULL != contact->image_thumbnail_path && NULL == image->path) ||
-                                       (contact->image_thumbnail_path && image->path && 0 != strcmp(contact->image_thumbnail_path, image->path))) {
+                       if ((NULL == contact->image_thumbnail_path && image->path) ||
+                                       (contact->image_thumbnail_path && NULL == image->path) ||
+                                       (contact->image_thumbnail_path && image->path && STRING_EQUAL != strcmp(contact->image_thumbnail_path, image->path))) {
                                ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
 
                                if (ctsvc_contact_check_image_location(image->path))
@@ -2293,7 +2343,7 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
                else if (contact->image_thumbnail_path) {
                        free(contact->image_thumbnail_path);
                        contact->image_thumbnail_path = NULL;
-                       if (!ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY)) {
+                       if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY)) {
                                ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
                        }
                        else {
@@ -2304,19 +2354,18 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
                        }
                }
        }
-       // this code will be removed.
-       //////////////////////////////////////////////////////////////////////
-       version = ctsvc_get_next_ver();
+
+       version = ctsvc_get_next_ver(zone_name);
 
        len = snprintf(query, sizeof(query),
-                       "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d, changed_time=%d, "
-                                       "has_phonenumber=%d, has_email=%d , display_name=?, "
+                       "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d, changed_time=%d, is_favorite=%d, "
+                                       "has_phonenumber=%d, has_email=%d, display_name=?, "
                                        "reverse_display_name=?, display_name_source=%d, "
                                        "display_name_language=%d, reverse_display_name_language=%d, "
                                        "sort_name=?, reverse_sort_name=?, "
                                        "sortkey=?, reverse_sortkey=?, uid=?, ringtone_path=?, vibration=?, "
                                        "message_alert =?, image_thumbnail_path=?",
-                                       version, (int)time(NULL),
+                                       version, (int)time(NULL), contact->is_favorite,
                                        contact->has_phonenumber, contact->has_email,
                                        contact->display_source_type,
                                        contact->display_name_language, contact->reverse_display_name_language);
@@ -2326,10 +2375,10 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
 
        len += snprintf(query+len, sizeof(query)-len, " WHERE contact_id=%d", contact->id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -2358,21 +2407,21 @@ static int __ctsvc_db_contact_replace_record( contacts_record_h record, int cont
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       ctsvc_set_contact_noti();
+       ctsvc_set_contact_noti(zone_name);
        if (0 < rel_changed)
-               ctsvc_set_group_rel_noti();
+               ctsvc_set_group_rel_noti(zone_name);
 
-       __ctsvc_contact_update_search_data(contact->id);
-       ctsvc_db_update_person((contacts_record_h)contact);
+       __ctsvc_contact_update_search_data(zone_name, contact->id, true);
+       ctsvc_db_update_person(zone_name, (contacts_record_h)contact);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
 
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
similarity index 70%
rename from native/ctsvc_db_plugin_contact_helper.c
rename to server/db/ctsvc_db_plugin_contact_helper.c
index fed3aa0..e3ae4cc 100644 (file)
  *
  */
 #include <ctype.h>
-#include <sys/types.h>
-#include <sys/syscall.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include <vconf.h>
-#include <vconf-keys.h>
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_record.h"
 #include "ctsvc_normalize.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_localize.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_localize_ch.h"
 #include "ctsvc_db_plugin_image_helper.h"
 #include "ctsvc_db_plugin_extension_helper.h"
 
-#include "ctsvc_person.h"
-#include "ctsvc_group.h"
+#include "ctsvc_server_person.h"
+#include "ctsvc_server_group.h"
 
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
 
 #define CTSVC_CONTACT_INITIAL_DATA_MAX_LEN 128
 
-int ctsvc_contact_add_image_file(int parent_id, int img_id,
+int ctsvc_contact_add_image_file(const char *zone_name, int parent_id, int img_id,
                char *src_img, char *dest, int dest_size)
 {
        int ret;
@@ -80,21 +77,23 @@ int ctsvc_contact_add_image_file(int parent_id, int img_id,
                ext = "";
 
        lower_ext = strdup(ext);
-       RETVM_IF(NULL == lower_ext, CONTACTS_ERROR_OUT_OF_MEMORY, "strdup() return NULL");
-
        temp = lower_ext;
+       if (NULL == temp) {
+               CTS_ERR("strdup() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
        while (*temp) {
                *temp = tolower(*temp);
                temp++;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(dest, dest_size, "%d_%d-%d%s", parent_id, img_id, version, lower_ext);
        free(lower_ext);
 
-       ret = ctsvc_utils_copy_image(CTSVC_CONTACT_IMG_FULL_LOCATION, src_img, dest);
+       ret = ctsvc_utils_copy_image(zone_name, CTSVC_CONTACT_IMG_FULL_LOCATION, src_img, dest);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_utils_copy_image() Failed(%d)", ret);
+               CTS_ERR("ctsvc_utils_copy_image() Fail(%d)", ret);
                dest[0] = '\0';
                return ret;
        }
@@ -102,7 +101,7 @@ int ctsvc_contact_add_image_file(int parent_id, int img_id,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_contact_get_current_image_file(int image_id, char *dest, int dest_size)
+static int __ctsvc_contact_get_current_image_file(const char *zone_name, int image_id, char *dest, int dest_size)
 {
        int ret;
        cts_stmt stmt;
@@ -110,12 +109,12 @@ static int __ctsvc_contact_get_current_image_file(int image_id, char *dest, int
        char query[CTS_SQL_MIN_LEN] = {0};
 
        snprintf(query, sizeof(query), "SELECT data3 FROM %s WHERE id = %d", CTS_TABLE_DATA, image_id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("DB error: ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error: ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -125,14 +124,19 @@ static int __ctsvc_contact_get_current_image_file(int image_id, char *dest, int
 
        tmp_path = ctsvc_stmt_get_text(stmt, 0);
        if (tmp_path) {
-               snprintf(dest, dest_size, "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, tmp_path);
+               char root_path[CTSVC_PATH_MAX_LEN] = {0};
+               ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+               snprintf(dest, dest_size, "%s/%s/%s", root_path, CTSVC_CONTACT_IMG_FULL_LOCATION, tmp_path);
        }
        ctsvc_stmt_finalize(stmt);
        return CONTACTS_ERROR_NONE;
 }
 
-// check that the image file under location or not
-// we should check CTSVC_CONTACT_IMG_FULL_LOCATION, CTSVC_VCARD_IMAGE_LOCATION, CTS_GROUP_IMAGE_LOCATION, CTS_LOGO_IMAGE_LOCATION
+/*
+ * check that the image file under location or not
+ * we should check CTSVC_CONTACT_IMG_FULL_LOCATION, CTSVC_VCARD_IMAGE_LOCATION,
+ * CTS_GROUP_IMAGE_LOCATION, CTS_LOGO_IMAGE_LOCATION
+ */
 bool ctsvc_contact_check_image_location(const char *path)
 {
        int len;
@@ -149,76 +153,79 @@ bool ctsvc_contact_check_image_location(const char *path)
        if (len != strlen(CTSVC_CONTACT_IMG_FULL_LOCATION))
                return false;
 
-       if (strncmp(path, CTSVC_CONTACT_IMG_FULL_LOCATION, len) == 0)
+       if (STRING_EQUAL == strncmp(path, CTSVC_CONTACT_IMG_FULL_LOCATION, len))
                return true;
 
        return false;
 }
 
-int ctsvc_contact_update_image_file(int parent_id, int img_id,
+int ctsvc_contact_update_image_file(const char *zone_name, int parent_id, int img_id,
                char *src_img, char *dest_name, int dest_size)
 {
        int ret;
        char dest[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
 
-       ret = __ctsvc_contact_get_current_image_file(img_id, dest, sizeof(dest));
+       ret = __ctsvc_contact_get_current_image_file(zone_name, img_id, dest, sizeof(dest));
 
        WARN_IF(CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
-                       "__ctsvc_contact_get_current_image_file() Failed(%d)", ret);
+                       "__ctsvc_contact_get_current_image_file() Fail(%d)", ret);
        if (*dest) {
-               if (src_img && strcmp(dest, src_img) == 0) {
+               if (src_img && STRING_EQUAL == strcmp(dest, src_img)) {
                        snprintf(dest_name, dest_size, "%s", src_img + strlen(CTSVC_CONTACT_IMG_FULL_LOCATION) + 1);
                        return CONTACTS_ERROR_NONE;
                }
 
                ret = unlink(dest);
                if (ret < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
        }
 
        if (src_img) {
-               ret = ctsvc_contact_add_image_file(parent_id, img_id, src_img, dest_name, dest_size);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_add_image_file() Failed(%d)", ret);
+               ret = ctsvc_contact_add_image_file(zone_name, parent_id, img_id, src_img, dest_name, dest_size);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_add_image_file() Fail(%d)", ret);
        }
 
        return ret;
 }
 
-int ctsvc_db_contact_update_changed_time(int contact_id)
+int ctsvc_db_contact_update_changed_time(const char *zone_name, int contact_id)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
 
        snprintf(query, sizeof(query),
                        "UPDATE %s SET changed_ver=%d, changed_time=%d WHERE contact_id=%d AND deleted = 0",
-                       CTS_TABLE_CONTACTS, ctsvc_get_next_ver(), (int)time(NULL), contact_id);
+                       CTS_TABLE_CONTACTS, ctsvc_get_next_ver(zone_name), (int)time(NULL), contact_id);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       ctsvc_set_contact_noti();
+       ctsvc_set_contact_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_contact_delete_image_file_with_path(const unsigned char* image_path)
+int ctsvc_contact_delete_image_file_with_path(const char *zone_name, const unsigned char* image_path)
 {
        int ret;
 
+       char root_path[CTSVC_PATH_MAX_LEN] = {0};
+       ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+
        if (image_path) {
                char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-               snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, image_path);
+               snprintf(full_path, sizeof(full_path), "%s/%s/%s", root_path, CTSVC_CONTACT_IMG_FULL_LOCATION, image_path);
                ret = unlink(full_path);
                if (ret < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_contact_delete(int contact_id)
+int ctsvc_db_contact_delete(const char *zone_name, int contact_id)
 {
        CTS_FN_CALL;
        int ret, rel_changed;
@@ -229,25 +236,25 @@ int ctsvc_db_contact_delete(int contact_id)
        cts_stmt stmt = NULL;
        int version;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT addressbook_id, person_id "
                "FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d AND deleted = 0", contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -260,72 +267,73 @@ int ctsvc_db_contact_delete(int contact_id)
        ctsvc_stmt_finalize(stmt);
        stmt = NULL;
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this contact");
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(query, sizeof(query),
                        "UPDATE %s SET member_changed_ver=%d "
                                "WHERE group_id IN (SELECT group_id FROM %s WHERE contact_id = %d AND deleted = 0) ",
                                CTS_TABLE_GROUPS, version, CTS_TABLE_GROUP_RELATIONS, contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       rel_changed = ctsvc_db_change();
+       rel_changed = ctsvc_db_change(zone_name);
 
        snprintf(query, sizeof(query),
                        "UPDATE %s SET deleted = 1, person_id = 0, changed_ver=%d WHERE contact_id = %d",
                        CTS_TABLE_CONTACTS, version, contact_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "SELECT link_count FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", person_id);
-       ret = ctsvc_query_get_first_int_result(query, &link_count);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_get_first_int_result() Failed(%d)", ret);
-       // set dirty bit to person by trigger : person will be aggregated in ctsvc_person_aggregate
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &link_count);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_get_first_int_result() Fail(%d)", ret);
+       /*
+        * set dirty bit to person by trigger
+        * : person will be aggregated in ctsvc_person_aggregate
+        */
 
        if (1 < link_count) {
-               ctsvc_person_aggregate(person_id);
+               ctsvc_person_aggregate(zone_name, person_id);
 
 #ifdef ENABLE_LOG_FEATURE
-               // update phonelog
-               ctsvc_db_phone_log_update_person_id(NULL, person_id, -1, false);
-#endif // ENABLE_LOG_FEATURE
+               /* update phonelog */
+               ctsvc_db_phone_log_update_person_id(zone_name, NULL, person_id, -1, false);
+#endif /* ENABLE_LOG_FEATURE */
        }
        else
-               ctsvc_set_person_noti();
+               ctsvc_set_person_noti(zone_name);
 
-       ctsvc_set_contact_noti();
-       if (rel_changed > 0)
-               ctsvc_set_group_rel_noti();
+       ctsvc_set_contact_noti(zone_name);
+       if (0 < rel_changed)
+               ctsvc_set_group_rel_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static inline void __ctsvc_contact_get_initial(char *src, char *dest, int dest_size, bool pinyin )
+static inline void __ctsvc_contact_get_initial(char *src, char *dest, int dest_size, bool pinyin)
 {
        int i, j=0;
        bool bFirst = true;
        int len = strlen(src);
-       for(i = 0; i < len && j < (dest_size-1);)
-       {
+       for (i = 0; i < len && j < (dest_size-1);) {
                if (src[i] == ' ') {
                        bFirst=true;
                        i++;
@@ -334,7 +342,7 @@ static inline void __ctsvc_contact_get_initial(char *src, char *dest, int dest_s
                        int k;
                        for (k=0;k<char_len && j < (dest_size-1) ;k++)
                                dest[j++] = src[i++];
-                       if (!pinyin && j < (dest_size-1))
+                       if (false == pinyin && j < (dest_size-1))
                                dest[j++] = ' ';
                        bFirst = false;
                }
@@ -348,7 +356,7 @@ static inline void __ctsvc_remove_space(char *src, char *dest, int dest_size)
        int len = strlen(src);
        int i, j=0;
 
-       for(i=0; i < len && i < dest_size; i++) {
+       for (i=0; i < len && i < dest_size; i++) {
                if (src[i] && src[i] != ' ') {
                        dest[j] = src[i];
                        j++;
@@ -369,7 +377,8 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
        char *name = NULL;
        char *temp_name = NULL;
        int buf_size, ret;
-       RETV_IF(NULL == search_name, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       RETV_IF(NULL == contact, CONTACTS_ERROR_NO_DATA);
 
        if (contact->display_name) {
                if (ctsvc_has_chinese(contact->display_name)) {
@@ -380,14 +389,18 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                if (normalized_display_name) {
                                        buf_size = SAFE_STRLEN(normalized_display_name) + strlen(contact->sort_name) + 2;
                                        name = calloc(1, buf_size);
-                                       RETVM_IF(NULL == name, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+                                       if (NULL == name) {
+                                               CTS_ERR("calloc() Fail");
+                                               free(normalized_display_name);
+                                               return CONTACTS_ERROR_OUT_OF_MEMORY;
+                                       }
                                        snprintf(name, buf_size, "%s %s", normalized_display_name, contact->sort_name);
                                        free(normalized_display_name);
                                }
                        }
                        else {
                                char *langset = ctsvc_get_langset();
-                               if (strncmp(langset, "zh_CN", strlen("zh_CN")) == 0) {
+                               if (STRING_EQUAL == strncmp(langset, "zh_CN", strlen("zh_CN"))) {
                                        pinyin_name_s *pinyinname;
                                        int size, i, len;
 
@@ -396,7 +409,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                                int name_len = (CHINESE_PINYIN_SPELL_MAX_LEN*strlen(contact->display_name)+1) * sizeof(char);
                                                char *name_nospace = calloc(1, name_len);
                                                if (NULL == name_nospace) {
-                                                       CTS_ERR("calloc() return NULL");
+                                                       CTS_ERR("calloc() Fail");
                                                        ctsvc_pinyin_free(pinyinname, size);
                                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                                }
@@ -404,7 +417,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
 
                                                ctsvc_normalize_str(contact->display_name, &name);
                                                if (name) {
-                                                       for(i=0; i<size; i++) {
+                                                       for (i=0; i<size; i++) {
                                                                __ctsvc_remove_space(pinyinname[i].pinyin_name, name_nospace, name_len);
 
                                                                buf_size = SAFE_STRLEN(name)
@@ -414,13 +427,12 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                                                                                        + 4;
                                                                temp_name = calloc(1, buf_size);
                                                                if (NULL == temp_name) {
-                                                                       CTS_ERR("calloc() return NULL");
+                                                                       CTS_ERR("calloc() Fail");
                                                                        free(name_nospace);
                                                                        ctsvc_pinyin_free(pinyinname, size);
                                                                        free(name);
                                                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                                                }
-
                                                                snprintf(temp_name, buf_size, "%s %s %s %s",
                                                                                name, pinyinname[i].pinyin_name, name_nospace, pinyinname[i].pinyin_initial);
                                                                free(name);
@@ -429,19 +441,18 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                                }
 
                                                len = ctsvc_check_utf8(contact->display_name[0]);
-                                               for(i=len; i < strlen(contact->display_name); i+=len) {
+                                               for (i=len; i < strlen(contact->display_name); i+=len) {
                                                        len = ctsvc_check_utf8(contact->display_name[i]);
 
                                                        buf_size = SAFE_STRLEN(name) + SAFE_STRLEN(&contact->display_name[i]) + 2;
                                                        temp_name = calloc(1, buf_size);
                                                        if (NULL == temp_name) {
-                                                               CTS_ERR("calloc() return NULL");
+                                                               CTS_ERR("calloc() Fail");
                                                                free(name_nospace);
                                                                ctsvc_pinyin_free(pinyinname, size);
                                                                free(name);
                                                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                                                        }
-
                                                        snprintf(temp_name, buf_size, "%s %s", name, &contact->display_name[i]);
 
                                                        free(name);
@@ -461,7 +472,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                                        buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
                                                        name = calloc(1, buf_size);
                                                        if (NULL == name) {
-                                                               CTS_ERR("calloc() return NULL");
+                                                               CTS_ERR("calloc() Fail");
                                                                free(normalized_display_name);
                                                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                                                        }
@@ -481,11 +492,10 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                                buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
                                                name = calloc(1, buf_size);
                                                if (NULL == name) {
-                                                       CTS_ERR("calloc() return NULL");
+                                                       CTS_ERR("calloc() Fail");
                                                        free(normalized_display_name);
                                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                                }
-
                                                snprintf(name, buf_size, "%s %s", normalized_display_name, initial);
 
                                                free(normalized_display_name);
@@ -494,31 +504,31 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                        }
                }
                else if (ctsvc_has_korean(contact->display_name)) {
-                       // 'a가' should be searched by 'ㄱ'
+                       /* 'a가' should be searched by 'ㄱ' */
                        int count, i, j;
                        int full_len, chosung_len;
                        char *chosung = calloc(1, strlen(contact->display_name) * 5);
                        if (NULL == chosung) {
-                               CTS_ERR("calloc() return NULL");
+                               CTS_ERR("calloc() Fail");
                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
                        int total_len = strlen(contact->display_name);
 
-                       count = ctsvc_get_chosung(contact->display_name, chosung, strlen(contact->display_name) * 5 );
+                       count = ctsvc_get_chosung(contact->display_name, chosung, strlen(contact->display_name) * 5);
 
                        ctsvc_normalize_str(contact->display_name, &name);
 
-                       if (count > 0) {
-                               for(i=0, j=0; i < total_len; i+=full_len, j+=chosung_len) {
+                       if (0 < count) {
+                               for (i=0, j=0; i < total_len; i+=full_len, j+=chosung_len) {
                                        full_len = ctsvc_check_utf8(contact->display_name[i]);
                                        chosung_len = ctsvc_check_utf8(chosung[j]);
 
                                        buf_size = SAFE_STRLEN(name) + SAFE_STRLEN(&contact->display_name[i]) + SAFE_STRLEN(&chosung[j]) + 3;
                                        temp_name = calloc(1, buf_size);
                                        if (NULL == temp_name) {
-                                               CTS_ERR("calloc() return NULL");
-                                               free(name);
+                                               CTS_ERR("calloc() Fail");
                                                free(chosung);
+                                               free(name);
                                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                                        }
 
@@ -534,7 +544,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                        ctsvc_convert_japanese_to_hiragana(contact->display_name, &name);
                }
                else {
-                       // Insert 'ABO Â' for 'ÂBC'
+                       /* Insert 'ABO Â' for 'ÂBC' */
                        char initial[CTSVC_CONTACT_INITIAL_DATA_MAX_LEN] = {0,};
                        char *normalized_display_name=NULL;
 
@@ -544,7 +554,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
                                name = calloc(1, buf_size);
                                if (NULL == name) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(normalized_display_name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
@@ -555,7 +565,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                }
        }
 
-       // append phonetic name
+       /* append phonetic name */
        if (contact->name) {
                contacts_list_h name_list = (contacts_list_h)contact->name;
                ctsvc_name_s *name_record;
@@ -564,13 +574,13 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                int temp_len = 0;
 
                contacts_list_get_current_record_p(name_list, (contacts_record_h*)&name_record);
-               if (NULL != name_record) {
+               if (name_record) {
                        buf_size = SAFE_STRLEN(name_record->phonetic_first) + SAFE_STRLEN(name_record->phonetic_last) + SAFE_STRLEN(name_record->phonetic_middle);
-                       if (buf_size > 0) {
-                               buf_size += 3; // for space and null string
+                       if (0 < buf_size) {
+                               buf_size += 3; /* for space and null string */
                                phonetic = calloc(1, buf_size);
                                if (NULL == phonetic) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(name);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
@@ -592,7 +602,7 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
                                        buf_size = SAFE_STRLEN(name) + SAFE_STRLEN(phonetic) + 2;
                                        temp_name = calloc(1, buf_size);
                                        if (NULL == temp_name) {
-                                               CTS_ERR("calloc() return NULL");
+                                               CTS_ERR("calloc() Fail");
                                                free(phonetic);
                                                free(name);
                                                return CONTACTS_ERROR_OUT_OF_MEMORY;
@@ -615,14 +625,16 @@ int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name)
 static int __ctsvc_make_phonetic_name(ctsvc_name_s* name, char** phonetic, contacts_name_display_order_e order)
 {
        int len = SAFE_STRLEN(name->phonetic_first) + SAFE_STRLEN(name->phonetic_last) + SAFE_STRLEN(name->phonetic_middle);
-       if( len > 0 )
-       {
-               len += 3; // for space and null string
+       if (0 < len) {
+               len += 3; /* for space and null string */
                *phonetic = calloc(1, len);
-               RETVM_IF(NULL == *phonetic, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+               if (NULL == *phonetic) {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
 
                int temp_len = 0;
-               if ( order == CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST ) {
+               if (order == CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST) {
                        if (name->phonetic_first)
                                temp_len += snprintf(*phonetic, len, "%s", name->phonetic_first);
                        if (name->phonetic_middle) {
@@ -672,7 +684,7 @@ static inline int __ctsvc_get_sort_name_to_pinyin(const char *display_name, char
                int name_index = 0;
                int temp_index = 0;
 
-               while(1) {
+               while (1) {
                        int pinyin_len = 0;
                        int name_len = 0;
 
@@ -681,7 +693,7 @@ static inline int __ctsvc_get_sort_name_to_pinyin(const char *display_name, char
                                        temp[temp_index] = ' ';
                                        temp_index++;
                                        name_len = ctsvc_check_utf8(display_name[name_index]);
-                                       if (name_len > 0) {
+                                       if (0 < name_len) {
                                                memcpy(&(temp[temp_index]), &(display_name[name_index]), name_len);
                                                temp_index += name_len;
                                                name_index += name_len;
@@ -723,17 +735,15 @@ static inline int __ctsvc_get_sort_name_to_pinyin(const char *display_name, char
 
 void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
 {
-       int ret;
        char *sortkey = NULL;
        char *phonetic = NULL;
        int sort_type = -1;
 
        if (contact->display_source_type == CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME) {
-               if ( contact->name->count > 0 && contact->name->records != NULL
-                               && contact->name->records->data != NULL ) {
+               if (0 < contact->name->count && contact->name->records
+                               && contact->name->records->data) {
                        ctsvc_name_s *name = (ctsvc_name_s *)contact->name->records->data;
-                       ret = __ctsvc_make_phonetic_name(name, &phonetic, CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST);
-                       RETM_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_make_phonetic_name() Fail(%d)", ret);
+                       __ctsvc_make_phonetic_name(name, &phonetic, CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST);
                }
        }
 
@@ -744,13 +754,14 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
        else
                sort_type = CTSVC_SORT_OTHERS;
 
-       WARN_IF(sort_type < 0, "ctsvc_get_name_sort_type Failed(%d)", sort_type);
+       WARN_IF(sort_type < 0, "ctsvc_get_name_sort_type Fail(%d)", sort_type);
        char *langset = ctsvc_get_langset();
 
        switch (sort_type) {
        case CTSVC_SORT_CJK:
                {
-                       if (strncmp(langset, "zh_CN", strlen("zh_CN")) == 0) { // chinese to pinyin
+                       if (STRING_EQUAL == strncmp(langset, "zh_CN", strlen("zh_CN"))) {
+                               /* chinese to pinyin */
                                char *pinyin = NULL;
                                if (phonetic)
                                        __ctsvc_get_sort_name_to_pinyin(phonetic, &pinyin);
@@ -763,7 +774,7 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
                                        sort_type = CTSVC_SORT_WESTERN;
                                }
                        }
-                       else if (strncmp(langset, "ko_KR", strlen("ko_KR")) == 0) {
+                       else if (STRING_EQUAL == strncmp(langset, "ko_KR", strlen("ko_KR"))) {
                                        sort_type = CTSVC_SORT_KOREAN;
                        }
                }
@@ -781,7 +792,7 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
                }
        default:
                {
-                       if( phonetic )
+                       if (phonetic)
                                FREEandSTRDUP(contact->sort_name, phonetic);
                }
                break;
@@ -799,14 +810,15 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
        else
                contact->display_name_language = sort_type;
 
-       // check reverse sort_name, reverser_display_name_language
-       // make reverse phonetic name
+       /*
+        * check reverse sort_name, reverser_display_name_language
+        * make reverse phonetic name
+        */
        if (contact->display_source_type == CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME) {
-               if ( contact->name->count > 0 && contact->name->records != NULL
-                               && contact->name->records->data != NULL ) {
+               if (0 < contact->name->count && contact->name->records
+                               && contact->name->records->data) {
                        ctsvc_name_s *name = (ctsvc_name_s *)contact->name->records->data;
-                       ret = __ctsvc_make_phonetic_name(name, &phonetic, CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST);
-                       RETM_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_make_phonetic_name() Fail(%d)", ret);
+                       __ctsvc_make_phonetic_name(name, &phonetic, CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST);
                }
        }
 
@@ -817,13 +829,12 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
        else
                sort_type = CTSVC_SORT_OTHERS;
 
-       WARN_IF( sort_type < 0, "ctsvc_get_name_sort_type Failed(%d)", sort_type);
+       WARN_IF(sort_type < 0, "ctsvc_get_name_sort_type Fail(%d)", sort_type);
 
-       switch (sort_type)
-       {
+       switch (sort_type) {
        case CTSVC_SORT_CJK:
                {
-                       if (strncmp(langset, "zh_CN", strlen("zh_CN")) == 0) {
+                       if (STRING_EQUAL == strncmp(langset, "zh_CN", strlen("zh_CN"))) {
                                char *pinyin = NULL;
                                if (phonetic)
                                        __ctsvc_get_sort_name_to_pinyin(phonetic, &pinyin);
@@ -836,7 +847,7 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
                                        sort_type = CTSVC_SORT_WESTERN;
                                }
                        }
-                       else if (strncmp(langset, "ko_KR", strlen("ko_KR")) == 0) {
+                       else if (STRING_EQUAL == strncmp(langset, "ko_KR", strlen("ko_KR"))) {
                                        sort_type = CTSVC_SORT_KOREAN;
                        }
                }
@@ -854,7 +865,7 @@ void ctsvc_contact_make_sortkey(ctsvc_contact_s *contact)
                break;
        default:
                {
-                       if( phonetic )
+                       if (phonetic)
                                FREEandSTRDUP(contact->reverse_sort_name, phonetic);
                }
                break;
@@ -954,18 +965,21 @@ int ctsvc_contact_get_name_language(const ctsvc_name_s *name)
 
 char * __ctsvc_remove_first_space(char *src)
 {
-       if(src == NULL ||SAFE_STRLEN(src) == 0)
+       if (src == NULL ||SAFE_STRLEN(src) == 0)
                return NULL;
 
        int name_len = (SAFE_STRLEN(src)+1)*sizeof(char);
        char *name_nospace = NULL;
        name_nospace = calloc(1, name_len);
-       RETVM_IF(NULL == name_nospace, NULL, "calloc() return NULL");
+       if (NULL == name_nospace) {
+               CTS_ERR("calloc() Fail");
+               return NULL;
+       }
 
        int len = strlen(src);
        int i =0;
 
-       for(i=0; i < len && i < name_len; i++) {
+       for (i=0; i < len && i < name_len; i++) {
                if (src[i] && src[i] != ' ') {
                        strncpy(name_nospace, src+i, name_len);
                        break;
@@ -973,9 +987,11 @@ char * __ctsvc_remove_first_space(char *src)
        }
        return name_nospace;
 }
-// Make display_name, sort_name, sortkey of the contact by name record
-// If the contact record does not have name record,
-// we use company, nickname, number, email record in order
+/*
+ * Make display_name, sort_name, sortkey of the contact by name record
+ * If the contact record does not have name record,
+ * we use company, nickname, number, email record in order
+ */
 void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
 {
        int len;
@@ -1004,26 +1020,25 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
 
        contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID;
 
-       if ( contact->name->count > 0 && contact->name->records != NULL && contact->name->records->data != NULL )
-       {
+       if (0 < contact->name->count && contact->name->records && contact->name->records->data) {
                name = (ctsvc_name_s *)contact->name->records->data;
        }
 
-       if ( name && ( name->first || name->last || name->prefix || name->addition || name->suffix) ) {
+       if (name && (name->first || name->last || name->prefix || name->addition || name->suffix)) {
                int reverse_lang_type = -1;
                int display_len;
                int temp_display_len;
                char *display = NULL;
                char *temp_display = NULL;
 
-               ///////////////////////////////////////////////
-               // Make reverse display name (Last name first)
-               // Default         : Prefix Last, First Middle(addition), Suffix
-               // Korean, Chinese : Prefix LastMiddleFirstSuffix
-               // Japanese        : Prefix Last Middle First Suffix
-               // reverse sort name does not include prefix
-               //    But, if there is only prefix, reverse sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make reverse display name (Last name first)
+                * Default         : Prefix Last, First Middle(addition), Suffix
+                * Korean, Chinese : Prefix LastMiddleFirstSuffix
+                * Japanese        : Prefix Last Middle First Suffix
+                * reverse sort name does not include prefix
+                *    But, if there is only prefix, reverse sort_name is prefix
+                */
                temp_display_len = SAFE_STRLEN(name->first)
                                                + SAFE_STRLEN(name->addition)
                                                + SAFE_STRLEN(name->last)
@@ -1031,26 +1046,29 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                if (0 < temp_display_len) {
                        temp_display_len += 7;
                        temp_display = calloc(1, temp_display_len);
-                       RETM_IF(NULL == temp_display, "calloc() return NULL");
+                       if (NULL == temp_display) {
+                               CTS_ERR("calloc() Fail");
+                               return;
+                       }
                        len=0;
 
-                       // get language type
+                       /* get language type */
                        reverse_lang_type = ctsvc_contact_get_name_language(name);
-                       if(name->last) {
+                       if (name->last) {
                                char * temp = __ctsvc_remove_first_space(name->last);
                                len += snprintf(temp_display + len, temp_display_len - len, "%s", temp);
                                free(temp);
                                if (reverse_lang_type != CTSVC_LANG_KOREAN &&
                                                reverse_lang_type != CTSVC_LANG_CHINESE &&
                                                reverse_lang_type != CTSVC_LANG_JAPANESE) {
-                                       if(name->first || name->addition)
+                                       if (name->first || name->addition)
                                                len += snprintf(temp_display + len, temp_display_len - len, ",");
                                }
                        }
 
-                       if(reverse_lang_type == CTSVC_LANG_JAPANESE) {
-                               // make temp_display name Prefix - Last - Middle - First - Suffix
-                               if(name->addition) {
+                       if (reverse_lang_type == CTSVC_LANG_JAPANESE) {
+                               /* make temp_display name Prefix - Last - Middle - First - Suffix */
+                               if (name->addition) {
                                        char * temp = __ctsvc_remove_first_space(name->addition);
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
@@ -1058,7 +1076,7 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                        free(temp);
                                }
 
-                               if(name->first) {
+                               if (name->first) {
                                        char * temp = __ctsvc_remove_first_space(name->first);
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
@@ -1067,21 +1085,21 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                }
                        }
                        else if (reverse_lang_type == CTSVC_LANG_CHINESE || reverse_lang_type == CTSVC_LANG_KOREAN) {
-                               if(name->addition) {
+                               if (name->addition) {
                                        char * temp = __ctsvc_remove_first_space(name->addition);
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", temp);
                                        free(temp);
                                }
 
-                               if(name->first) {
+                               if (name->first) {
                                        char * temp = __ctsvc_remove_first_space(name->first);
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", temp);
                                        free(temp);
                                }
                        }
                        else {
-                               // make temp_display name Prefix - Last - First - Middle - Suffix
-                               if(name->first) {
+                               /* make temp_display name Prefix - Last - First - Middle - Suffix */
+                               if (name->first) {
                                        if (*temp_display) {
                                                if (reverse_lang_type < 0) {
                                                        reverse_lang_type = ctsvc_check_language_type(temp_display);
@@ -1096,7 +1114,7 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                        free(temp);
                                }
 
-                               if(name->addition) {
+                               if (name->addition) {
                                        if (*temp_display) {
                                                if (reverse_lang_type < 0) {
                                                        reverse_lang_type = ctsvc_check_language_type(temp_display);
@@ -1112,7 +1130,7 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                }
                        }
 
-                       if(name->suffix) {
+                       if (name->suffix) {
                                if (*temp_display) {
                                        if (reverse_lang_type < 0) {
                                                reverse_lang_type = ctsvc_check_language_type(temp_display);
@@ -1130,16 +1148,16 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                        }
                }
 
-               if(name->prefix && temp_display) {
+               if (name->prefix && temp_display) {
                        display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                        display = calloc(1, display_len);
                        if (NULL == display) {
-                               CTS_ERR("calloc() return NULL");
+                               CTS_ERR("calloc() Fail");
                                free(temp_display);
                                return;
                        }
                        char * temp = __ctsvc_remove_first_space(name->prefix);
-                       snprintf(display, display_len , "%s %s", temp, temp_display);
+                       snprintf(display, display_len, "%s %s", temp, temp_display);
                        free(temp);
                        contact->reverse_display_name = display;
                        contact->reverse_sort_name = temp_display;
@@ -1147,28 +1165,24 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                else if (temp_display) {
                        contact->reverse_display_name = temp_display;
                        contact->reverse_sort_name = strdup(temp_display);
-                       RETM_IF(NULL == contact->reverse_sort_name, "strdup() return NULL");
                }
                else if (name->prefix) {
                        contact->reverse_display_name = strdup(name->prefix);
-                       RETM_IF(NULL == contact->reverse_display_name, "strdup() return NULL");
                        contact->reverse_sort_name = strdup(name->prefix);
-                       RETM_IF(NULL == contact->reverse_sort_name, "strdup() return NULL");
                }
 
-               ///////////////////////////////////////////////
-               // Make display name (First name first)
-               // Default         : Prefix First Middle Last, Suffix
-               // Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
-               // Japanese        : Prefix First Middle Last Suffix
-               // sort name does not include prefix
-               //    But, if there is only prefix, sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make display name (First name first)
+                * Default         : Prefix First Middle Last, Suffix
+                * Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
+                * Japanese        : Prefix First Middle Last Suffix
+                * sort name does not include prefix
+                *    But, if there is only prefix, sort_name is prefix
+                */
                if (reverse_lang_type == CTSVC_LANG_KOREAN ||
                        reverse_lang_type == CTSVC_LANG_CHINESE ||
                        reverse_lang_type == CTSVC_LANG_JAPANESE) {
                        contact->display_name = strdup(contact->reverse_display_name);
-                       RETM_IF(NULL == contact->display_name, "strdup() return NULL");
                        contact->sort_name = SAFE_STRDUP(contact->reverse_sort_name);
                }
                else {
@@ -1180,18 +1194,21 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                                                + SAFE_STRLEN(name->suffix);
                        if (0 < temp_display_len) {
                                temp_display_len += 6;
-                               // make reverse_temp_display_name
+                               /* make reverse_temp_display_name */
                                temp_display = calloc(1, temp_display_len);
-                               RETM_IF(NULL == temp_display, "calloc() return NULL");
+                               if (NULL == temp_display) {
+                                       CTS_ERR("calloc() Fail");
+                                       return;
+                               }
                                len = 0;
 
-                               if(name->first) {
+                               if (name->first) {
                                        char * temp = __ctsvc_remove_first_space(name->first);
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", temp);
                                        free(temp);
                                }
 
-                               if(name->addition) {
+                               if (name->addition) {
                                        char * temp = __ctsvc_remove_first_space(name->addition);
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
@@ -1199,7 +1216,7 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                        free(temp);
                                }
 
-                               if(name->last) {
+                               if (name->last) {
                                        char * temp = __ctsvc_remove_first_space(name->last);
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
@@ -1207,7 +1224,7 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                        free(temp);
                                }
 
-                               if(name->suffix) {
+                               if (name->suffix) {
                                        if (*temp_display) {
                                                lang_type = ctsvc_check_language_type(temp_display);
                                                if (lang_type == CTSVC_LANG_JAPANESE)
@@ -1221,28 +1238,25 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                }
                        }
 
-                       if(name->prefix && temp_display) {
+                       if (name->prefix && temp_display) {
                                display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                                display = calloc(1, display_len);
                                if (NULL == display) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(temp_display);
                                        return;
                                }
-                               snprintf(display, display_len , "%s %s", name->prefix, temp_display);
+                               snprintf(display, display_len, "%s %s", name->prefix, temp_display);
                                contact->display_name = display;
                                contact->sort_name = temp_display;
                        }
                        else if (temp_display) {
                                contact->display_name = temp_display;
                                contact->sort_name = strdup(temp_display);
-                               RETM_IF(NULL == contact->sort_name, "strdup() return NULL");
                        }
                        else if (name->prefix) {
                                contact->display_name = strdup(name->prefix);
-                               RETM_IF(NULL == contact->display_name, "strdup() return NULL");
                                contact->sort_name = strdup(name->prefix);
-                               RETM_IF(NULL == contact->sort_name, "strdup() return NULL");
                        }
                }
 
@@ -1256,46 +1270,49 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                                ctsvc_company_s *company = (ctsvc_company_s *)cur->data;
                                if (company && company->name) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(contact->display_name, company->name);
+                                       contact->display_name = SAFE_STRDUP(company->name);
                                        contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY;
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                contact->nicknames && contact->nicknames->records) {
                        for (cur=contact->nicknames->records;cur;cur=cur->next) {
                                ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)cur->data;
                                if (nickname && nickname->nickname) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(contact->display_name, nickname->nickname);
+                                       free(contact->display_name);
+                                       contact->display_name = SAFE_STRDUP(nickname->nickname);
                                        contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME;
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                contact->numbers && contact->numbers->records) {
                        for (cur=contact->numbers->records;cur;cur=cur->next) {
                                ctsvc_number_s *number = (ctsvc_number_s *)cur->data;
                                if (number && number->number) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(contact->display_name, number->number);
+                                       free(contact->display_name);
+                                       contact->display_name = SAFE_STRDUP(number->number);
                                        contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER;
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                contact->emails && contact->emails->records) {
                        for (cur=contact->emails->records;cur;cur=cur->next) {
                                ctsvc_email_s *email = (ctsvc_email_s *)cur->data;
                                if (email && email->email_addr) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(contact->display_name, email->email_addr);
+                                       free(contact->display_name);
+                                       contact->display_name = SAFE_STRDUP(email->email_addr);
                                        contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL;
                                        break;
                                }
@@ -1303,17 +1320,17 @@ void ctsvc_contact_make_display_name(ctsvc_contact_s *contact)
                }
 
                if (ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY)) {
-                       FREEandSTRDUP(contact->reverse_display_name, contact->display_name);
-                       FREEandSTRDUP(contact->sort_name, contact->display_name);
-                       FREEandSTRDUP(contact->reverse_sort_name, contact->display_name);
+                       contact->reverse_display_name = SAFE_STRDUP(contact->display_name);
+                       contact->sort_name = SAFE_STRDUP(contact->display_name);
+                       contact->reverse_sort_name = SAFE_STRDUP(contact->display_name);
                }
                else {
-                       // Update as NULL
+                       /* Update as NULL */
                        ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
                }
        }
 
-       // make sortkey
+       /* make sortkey */
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY))
                ctsvc_contact_make_sortkey(contact);
 
@@ -1327,7 +1344,7 @@ int ctsvc_get_data_info_name(cts_stmt stmt, contacts_list_h name_list)
        contacts_record_h record;
 
        ret = contacts_list_get_count(name_list, &count);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_list_get_count is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_list_get_count Fail(%d)", ret);
        RETVM_IF (1 < count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : already had name");
 
        ctsvc_db_name_get_value_from_stmt(stmt, &record, 1);
@@ -1476,31 +1493,31 @@ bool ctsvc_contact_check_default_number(contacts_list_h number_list)
        RETV_IF(NULL == number_list, false);
 
        ret = contacts_list_get_count(number_list, &count);
-       if(CONTACTS_ERROR_NONE !=ret || 0 == count)
+       if (CONTACTS_ERROR_NONE !=ret || 0 == count)
                return false;
 
        contacts_list_first(number_list);
        do {
                contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number);
-               if (NULL != number && number->number && *number->number) {
+               if (number && number->number && *number->number) {
                        if (number->is_default && false == has_default)
                                has_default = true;
                        else if (has_default)
                                number->is_default = false;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
 
        if (false == has_default) {
                contacts_list_first(number_list);
                do {
                        contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number);
-                       if (NULL != number && number->number && *number->number) {
+                       if (number && number->number && *number->number) {
                                number->is_default = true;
                                ctsvc_record_set_property_flag((ctsvc_record_s *)number, _contacts_number.is_default, CTSVC_PROPERTY_FLAG_DIRTY);
                                has_default = true;
                                break;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
        }
        return has_default;
 }
@@ -1515,31 +1532,31 @@ bool ctsvc_contact_check_default_email(contacts_list_h email_list)
        RETV_IF(NULL == email_list, false);
 
        ret = contacts_list_get_count(email_list, &count);
-       if(CONTACTS_ERROR_NONE !=ret || 0 == count)
+       if (CONTACTS_ERROR_NONE !=ret || 0 == count)
                return false;
 
        contacts_list_first(email_list);
        do {
                contacts_list_get_current_record_p(email_list, (contacts_record_h*)&email);
-               if (NULL != email && email->email_addr && *email->email_addr) {
+               if (email && email->email_addr && *email->email_addr) {
                        if (email->is_default && false == has_default)
                                has_default = true;
                        else if (has_default)
                                email->is_default = false;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(email_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(email_list));
 
        if (false == has_default) {
                contacts_list_first(email_list);
                do {
                        contacts_list_get_current_record_p(email_list, (contacts_record_h*)&email);
-                       if (NULL != email && email->email_addr && *email->email_addr) {
+                       if (email && email->email_addr && *email->email_addr) {
                                email->is_default = true;
                                ctsvc_record_set_property_flag((ctsvc_record_s *)email, _contacts_email.is_default, CTSVC_PROPERTY_FLAG_DIRTY);
                                has_default = true;
                                break;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(email_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(email_list));
        }
        return has_default;
 }
@@ -1562,25 +1579,25 @@ bool ctsvc_contact_check_default_image(contacts_list_h image_list)
        contacts_list_first(image_list);
        do {
                contacts_list_get_current_record_p(image_list, (contacts_record_h*)&image);
-               if (NULL != image && image->path && *image->path) {
+               if (image && image->path && *image->path) {
                        if (image->is_default && false == has_default)
                                has_default = true;
                        else if (has_default)
                                image->is_default = false;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(image_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(image_list));
 
        if (false == has_default) {
                contacts_list_first(image_list);
                do {
                        contacts_list_get_current_record_p(image_list, (contacts_record_h*)&image);
-                       if (NULL != image && image->path && *image->path) {
+                       if (image && image->path && *image->path) {
                                image->is_default = true;
                                ctsvc_record_set_property_flag((ctsvc_record_s *)image, _contacts_image.is_default, CTSVC_PROPERTY_FLAG_DIRTY);
                                has_default = true;
                                break;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(image_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(image_list));
        }
        return CONTACTS_ERROR_NONE;
 }
@@ -1603,7 +1620,7 @@ bool ctsvc_contact_check_default_address(contacts_list_h address_list)
        contacts_list_first(address_list);
        do {
                contacts_list_get_current_record_p(address_list, (contacts_record_h*)&address);
-               if (NULL != address &&
+               if (address &&
                                                (address->pobox || address->postalcode || address->region || address->locality
                                                        || address->street || address->extended || address->country)) {
                        if (address->is_default && false == has_default)
@@ -1611,13 +1628,13 @@ bool ctsvc_contact_check_default_address(contacts_list_h address_list)
                        else if (has_default)
                                address->is_default = false;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(address_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(address_list));
 
        if (false == has_default) {
                contacts_list_first(address_list);
                do {
                        contacts_list_get_current_record_p(address_list, (contacts_record_h*)&address);
-                       if (NULL != address &&
+                       if (address &&
                                                (address->pobox || address->postalcode || address->region || address->locality
                                                        || address->street || address->extended || address->country)) {
                                address->is_default = true;
@@ -1625,12 +1642,12 @@ bool ctsvc_contact_check_default_address(contacts_list_h address_list)
                                has_default = true;
                                break;
                        }
-               }while(CONTACTS_ERROR_NONE == contacts_list_next(address_list));
+               } while (CONTACTS_ERROR_NONE == contacts_list_next(address_list));
        }
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_contact_update_data_name(contacts_list_h name_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_name(const char *zone_name, contacts_list_h name_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1640,9 +1657,9 @@ int ctsvc_contact_update_data_name(contacts_list_h name_list, int contact_id, bo
        GList *cursor;
        RETV_IF(NULL == name_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                name = (ctsvc_name_s *)cursor->data;
-               ctsvc_db_name_delete(name->id, is_my_profile);
+               ctsvc_db_name_delete(zone_name, name->id, is_my_profile);
        }
 
        contacts_list_first(name_list);
@@ -1652,12 +1669,12 @@ int ctsvc_contact_update_data_name(contacts_list_h name_list, int contact_id, bo
                if (0 < name->id) {
                        if (name->first || name->last || name->addition || name->prefix || name->suffix
                                        || name->phonetic_first || name->phonetic_middle || name->phonetic_last)
-                               ret = ctsvc_db_name_update(record, is_my_profile);
+                               ret = ctsvc_db_name_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_name_delete(name->id, is_my_profile);
+                               ret = ctsvc_db_name_delete(zone_name, name->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_name_insert(record, contact_id, is_my_profile, NULL);
+                       ret = ctsvc_db_name_insert(zone_name, record, contact_id, is_my_profile, NULL);
                if (CONTACTS_ERROR_DB == ret)
                        CTS_ERR("DB error : return(%d)", ret);
        }
@@ -1665,7 +1682,7 @@ int ctsvc_contact_update_data_name(contacts_list_h name_list, int contact_id, bo
        return ret;
 }
 
-int ctsvc_contact_update_data_company(contacts_list_h company_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_company(const char *zone_name, contacts_list_h company_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1677,13 +1694,13 @@ int ctsvc_contact_update_data_company(contacts_list_h company_list, int contact_
 
        RETV_IF(NULL == company_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                company = (ctsvc_company_s *)cursor->data;
-               ctsvc_db_company_delete(company->id, is_my_profile);
+               ctsvc_db_company_delete(zone_name, company->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(company_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(company_list);
@@ -1694,22 +1711,22 @@ int ctsvc_contact_update_data_company(contacts_list_h company_list, int contact_
                        if (company->name || company->department || company->job_title || company->role
                                || company->assistant_name || company->logo || company->location || company->description
                                || company->phonetic_name)
-                               ret = ctsvc_db_company_update(record, contact_id, is_my_profile);
+                               ret = ctsvc_db_company_update(zone_name, record, contact_id, is_my_profile);
                        else
-                               ret = ctsvc_db_company_delete(company->id, is_my_profile);
+                               ret = ctsvc_db_company_delete(zone_name, company->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_company_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_company_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(company_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(company_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_note(contacts_list_h note_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_note(const char *zone_name, contacts_list_h note_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1721,13 +1738,13 @@ int ctsvc_contact_update_data_note(contacts_list_h note_list, int contact_id, bo
 
        RETV_IF(NULL == note_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                note = (ctsvc_note_s *)cursor->data;
-               ctsvc_db_note_delete(note->id, is_my_profile);
+               ctsvc_db_note_delete(zone_name, note->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(note_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(note_list);
@@ -1736,22 +1753,22 @@ int ctsvc_contact_update_data_note(contacts_list_h note_list, int contact_id, bo
                note = (ctsvc_note_s*)record;
                if (0 < note->id) {
                        if (note->note)
-                               ret = ctsvc_db_note_update(record, is_my_profile);
+                               ret = ctsvc_db_note_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_note_delete(note->id, is_my_profile);
+                               ret = ctsvc_db_note_delete(zone_name, note->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_note_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_note_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(note_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(note_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_event(contacts_list_h event_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_event(const char *zone_name, contacts_list_h event_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1763,13 +1780,13 @@ int ctsvc_contact_update_data_event(contacts_list_h event_list, int contact_id,
 
        RETV_IF(NULL == event_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                event = (ctsvc_event_s *)cursor->data;
-               ctsvc_db_event_delete(event->id, is_my_profile);
+               ctsvc_db_event_delete(zone_name, event->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(event_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(event_list);
@@ -1777,23 +1794,23 @@ int ctsvc_contact_update_data_event(contacts_list_h event_list, int contact_id,
                contacts_list_get_current_record_p(event_list, &record);
                event = (ctsvc_event_s*)record;
                if (0 < event->id) {
-                       if (event->date > 0)
-                               ret = ctsvc_db_event_update(record, is_my_profile);
+                       if (0 < event->date)
+                               ret = ctsvc_db_event_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_event_delete(event->id, is_my_profile);
+                               ret = ctsvc_db_event_delete(zone_name, event->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_event_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_event_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(event_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(event_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_messenger(contacts_list_h messenger_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_messenger(const char *zone_name, contacts_list_h messenger_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1805,13 +1822,13 @@ int ctsvc_contact_update_data_messenger(contacts_list_h messenger_list, int cont
 
        RETV_IF(NULL == messenger_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                messenger = (ctsvc_messenger_s *)cursor->data;
-               ctsvc_db_messenger_delete(messenger->id, is_my_profile);
+               ctsvc_db_messenger_delete(zone_name, messenger->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(messenger_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(messenger_list);
@@ -1820,22 +1837,22 @@ int ctsvc_contact_update_data_messenger(contacts_list_h messenger_list, int cont
                messenger = (ctsvc_messenger_s*)record;
                if (0 < messenger->id) {
                        if (messenger->im_id)
-                               ret = ctsvc_db_messenger_update(record, is_my_profile);
+                               ret = ctsvc_db_messenger_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_messenger_delete(messenger->id, is_my_profile);
+                               ret = ctsvc_db_messenger_delete(zone_name, messenger->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_messenger_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_messenger_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_address(contacts_list_h address_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_address(const char *zone_name, contacts_list_h address_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1847,13 +1864,13 @@ int ctsvc_contact_update_data_address(contacts_list_h address_list, int contact_
 
        RETV_IF(NULL == address_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                address = (ctsvc_address_s *)cursor->data;
-               ctsvc_db_address_delete(address->id, is_my_profile);
+               ctsvc_db_address_delete(zone_name, address->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(address_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(address_list);
@@ -1863,22 +1880,22 @@ int ctsvc_contact_update_data_address(contacts_list_h address_list, int contact_
                if (0 < address->id) {
                        if (address->pobox || address->postalcode || address->region || address->locality
                                || address->street || address->extended || address->country)
-                               ret = ctsvc_db_address_update(record, is_my_profile);
+                               ret = ctsvc_db_address_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_address_delete(address->id, is_my_profile);
+                               ret = ctsvc_db_address_delete(zone_name, address->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_address_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_address_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(address_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(address_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_url(contacts_list_h url_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_url(const char *zone_name, contacts_list_h url_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1890,13 +1907,13 @@ int ctsvc_contact_update_data_url(contacts_list_h url_list, int contact_id, bool
 
        RETV_IF(NULL == url_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                url = (ctsvc_url_s *)cursor->data;
-               ctsvc_db_url_delete(url->id, is_my_profile);
+               ctsvc_db_url_delete(zone_name, url->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(url_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(url_list);
@@ -1905,22 +1922,22 @@ int ctsvc_contact_update_data_url(contacts_list_h url_list, int contact_id, bool
                url = (ctsvc_url_s*)record;
                if (0 < url->id) {
                        if (url->url)
-                               ret = ctsvc_db_url_update(record, is_my_profile);
+                               ret = ctsvc_db_url_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_url_delete(url->id, is_my_profile);
+                               ret = ctsvc_db_url_delete(zone_name, url->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_url_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_url_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(url_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(url_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_profile(contacts_list_h profile_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_profile(const char *zone_name, contacts_list_h profile_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1932,12 +1949,12 @@ int ctsvc_contact_update_data_profile(contacts_list_h profile_list, int contact_
 
        RETV_IF(NULL == profile_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                profile = (ctsvc_profile_s *)cursor->data;
-               ctsvc_db_profile_delete(profile->id, is_my_profile);
+               ctsvc_db_profile_delete(zone_name, profile->id, is_my_profile);
        }
        ret = contacts_list_get_count(profile_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(profile_list);
@@ -1946,22 +1963,22 @@ int ctsvc_contact_update_data_profile(contacts_list_h profile_list, int contact_
                profile = (ctsvc_profile_s*)record;
                if (0 < profile->id) {
                        if (profile->text)
-                               ret = ctsvc_db_profile_update(record, is_my_profile);
+                               ret = ctsvc_db_profile_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_profile_delete(profile->id, is_my_profile);
+                               ret = ctsvc_db_profile_delete(zone_name, profile->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_profile_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_profile_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(profile_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(profile_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_relationship(contacts_list_h relationship_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_relationship(const char *zone_name, contacts_list_h relationship_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -1973,13 +1990,13 @@ int ctsvc_contact_update_data_relationship(contacts_list_h relationship_list, in
 
        RETV_IF(NULL == relationship_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                relationship = (ctsvc_relationship_s *)cursor->data;
-               ctsvc_db_relationship_delete(relationship->id, is_my_profile);
+               ctsvc_db_relationship_delete(zone_name, relationship->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(relationship_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(relationship_list);
@@ -1988,22 +2005,22 @@ int ctsvc_contact_update_data_relationship(contacts_list_h relationship_list, in
                relationship = (ctsvc_relationship_s*)record;
                if (0 < relationship->id) {
                        if (relationship->name)
-                               ret = ctsvc_db_relationship_update(record, is_my_profile);
+                               ret = ctsvc_db_relationship_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_relationship_delete(relationship->id, is_my_profile);
+                               ret = ctsvc_db_relationship_delete(zone_name, relationship->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_relationship_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_relationship_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_image(contacts_list_h image_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_image(const char *zone_name, contacts_list_h image_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2015,13 +2032,13 @@ int ctsvc_contact_update_data_image(contacts_list_h image_list, int contact_id,
 
        RETV_IF(NULL == image_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                image = (ctsvc_image_s *)cursor->data;
-               ctsvc_db_image_delete(image->id, is_my_profile);
+               ctsvc_db_image_delete(zone_name, image->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(image_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(image_list);
@@ -2031,23 +2048,23 @@ int ctsvc_contact_update_data_image(contacts_list_h image_list, int contact_id,
                if (CTSVC_PROPERTY_FLAG_DIRTY & image->base.property_flag) {
                        if (0 < image->id) {
                                if (image->path)
-                                       ret = ctsvc_db_image_update(record, contact_id, is_my_profile);
+                                       ret = ctsvc_db_image_update(zone_name, record, contact_id, is_my_profile);
                                else
-                                       ret = ctsvc_db_image_delete(image->id, is_my_profile);
+                                       ret = ctsvc_db_image_delete(zone_name, image->id, is_my_profile);
                        }
                        else
-                               ret = ctsvc_db_image_insert(record, contact_id, is_my_profile, NULL);
+                               ret = ctsvc_db_image_insert(zone_name, record, contact_id, is_my_profile, NULL);
                }
-               if (CONTACTS_ERROR_DB == ret){
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(image_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(image_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_nickname(contacts_list_h nickname_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_nickname(const char *zone_name, contacts_list_h nickname_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2059,13 +2076,13 @@ int ctsvc_contact_update_data_nickname(contacts_list_h nickname_list, int contac
 
        RETV_IF(NULL == nickname_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                nickname = (ctsvc_nickname_s *)cursor->data;
-               ctsvc_db_nickname_delete(nickname->id, is_my_profile);
+               ctsvc_db_nickname_delete(zone_name, nickname->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(nickname_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(nickname_list);
@@ -2074,22 +2091,22 @@ int ctsvc_contact_update_data_nickname(contacts_list_h nickname_list, int contac
                nickname = (ctsvc_nickname_s*)record;
                if (0 < nickname->id) {
                        if (nickname->nickname)
-                               ret = ctsvc_db_nickname_update(record, is_my_profile);
+                               ret = ctsvc_db_nickname_update(zone_name, record, is_my_profile);
                        else
-                               ret = ctsvc_db_nickname_delete(nickname->id, is_my_profile);
+                               ret = ctsvc_db_nickname_delete(zone_name, nickname->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_nickname_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_nickname_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_extension(contacts_list_h extension_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_update_data_extension(const char *zone_name, contacts_list_h extension_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2101,13 +2118,13 @@ int ctsvc_contact_update_data_extension(contacts_list_h extension_list, int cont
 
        RETV_IF(NULL == extension_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                extension = (ctsvc_extension_s *)cursor->data;
-               ctsvc_db_extension_delete(extension->id, is_my_profile);
+               ctsvc_db_extension_delete(zone_name, extension->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(extension_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(extension_list);
@@ -2118,22 +2135,22 @@ int ctsvc_contact_update_data_extension(contacts_list_h extension_list, int cont
                        if (extension->data2 || extension->data3 || extension->data4 || extension->data5
                                || extension->data6 || extension->data7 || extension->data8 || extension->data9
                                || extension->data10 || extension->data11 || extension->data12)
-                               ret = ctsvc_db_extension_update(record);
+                               ret = ctsvc_db_extension_update(zone_name, record);
                        else
-                               ret = ctsvc_db_extension_delete(extension->id, is_my_profile);
+                               ret = ctsvc_db_extension_delete(zone_name, extension->id, is_my_profile);
                }
                else
-                       ret = ctsvc_db_extension_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_extension_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(extension_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(extension_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_data_number(contacts_list_h number_list,
+int ctsvc_contact_update_data_number(const char *zone_name, contacts_list_h number_list,
        int contact_id, bool is_my_profile, bool *had_phonenumber)
 {
        CTS_FN_CALL;
@@ -2148,13 +2165,13 @@ int ctsvc_contact_update_data_number(contacts_list_h number_list,
 
        RETV_IF(NULL == number_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                number = (ctsvc_number_s *)cursor->data;
-               ctsvc_db_number_delete(number->id, is_my_profile);
+               ctsvc_db_number_delete(zone_name, number->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(number_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(number_list);
@@ -2163,27 +2180,27 @@ int ctsvc_contact_update_data_number(contacts_list_h number_list,
                number = (ctsvc_number_s*)record;
                if (0 < number->id) {
                        if (number->number) {
-                               ret = ctsvc_db_number_update(record, is_my_profile);
+                               ret = ctsvc_db_number_update(zone_name, record, is_my_profile);
                                had = true;
                        }
                        else
-                               ret = ctsvc_db_number_delete(number->id, is_my_profile);
+                               ret = ctsvc_db_number_delete(zone_name, number->id, is_my_profile);
                }
                else if (number->number) {
-                       ret = ctsvc_db_number_insert(record, contact_id, is_my_profile, NULL);
+                       ret = ctsvc_db_number_insert(zone_name, record, contact_id, is_my_profile, NULL);
                        had = true;
                }
                if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
 
        *had_phonenumber = had;
        return ret;
 }
 
-int ctsvc_contact_update_data_email(contacts_list_h email_list,
+int ctsvc_contact_update_data_email(const char *zone_name, contacts_list_h email_list,
        int contact_id, bool is_my_profile, bool *had_email)
 {
        CTS_FN_CALL;
@@ -2198,13 +2215,13 @@ int ctsvc_contact_update_data_email(contacts_list_h email_list,
 
        RETV_IF(NULL == email_list, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+       for (cursor = list->deleted_records;cursor;cursor=cursor->next) {
                email = (ctsvc_email_s *)cursor->data;
-               ctsvc_db_email_delete(email->id, is_my_profile);
+               ctsvc_db_email_delete(zone_name, email->id, is_my_profile);
        }
 
        ret = contacts_list_get_count(email_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(email_list);
@@ -2214,27 +2231,27 @@ int ctsvc_contact_update_data_email(contacts_list_h email_list,
 
                if (0 < email->id) {
                        if (email->email_addr) {
-                               ret = ctsvc_db_email_update(record, is_my_profile);
+                               ret = ctsvc_db_email_update(zone_name, record, is_my_profile);
                                had = true;
                        }
                        else
-                               ret = ctsvc_db_email_delete(email->id, is_my_profile);
+                               ret = ctsvc_db_email_delete(zone_name, email->id, is_my_profile);
                }
                else if (email->email_addr) {
-                       ret = ctsvc_db_email_insert(record, contact_id, is_my_profile, NULL);
+                       ret = ctsvc_db_email_insert(zone_name, record, contact_id, is_my_profile, NULL);
                        had = true;
                }
-               if (CONTACTS_ERROR_DB == ret){
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : return (%d)", ret);
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(email_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(email_list));
 
        *had_email = had;
        return ret;
 }
 
-int ctsvc_contact_insert_data_name(contacts_list_h name_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_name(const char *zone_name, contacts_list_h name_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2244,15 +2261,15 @@ int ctsvc_contact_insert_data_name(contacts_list_h name_list, int contact_id, bo
        contacts_list_first(name_list);
        contacts_list_get_current_record_p(name_list, &record);
        if (record) {
-               ret = ctsvc_db_name_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_name_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_name_insert");
                }
        }
        return ret;
 }
 
-int ctsvc_contact_insert_data_number(contacts_list_h number_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_number(const char *zone_name, contacts_list_h number_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2261,23 +2278,23 @@ int ctsvc_contact_insert_data_number(contacts_list_h number_list, int contact_id
 
        RETV_IF(NULL == number_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(number_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(number_list);
        do {
                contacts_list_get_current_record_p(number_list, &record);
-               ret = ctsvc_db_number_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_number_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_number_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(number_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_email(contacts_list_h email_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_email(const char *zone_name, contacts_list_h email_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2286,23 +2303,23 @@ int ctsvc_contact_insert_data_email(contacts_list_h email_list, int contact_id,
 
        RETV_IF(NULL == email_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(email_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(email_list);
        do {
                contacts_list_get_current_record_p(email_list, &record);
-               ret = ctsvc_db_email_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_email_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_email_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(email_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(email_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_profile(contacts_list_h profile_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_profile(const char *zone_name, contacts_list_h profile_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2311,23 +2328,23 @@ int ctsvc_contact_insert_data_profile(contacts_list_h profile_list, int contact_
 
        RETV_IF(NULL == profile_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(profile_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(profile_list);
        do {
                contacts_list_get_current_record_p(profile_list, &record);
-               ret = ctsvc_db_profile_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_profile_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_profile_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(profile_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(profile_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_company(contacts_list_h company_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_company(const char *zone_name, contacts_list_h company_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2336,23 +2353,23 @@ int ctsvc_contact_insert_data_company(contacts_list_h company_list, int contact_
 
        RETV_IF(NULL == company_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(company_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(company_list);
        do {
                contacts_list_get_current_record_p(company_list, &record);
-               ret = ctsvc_db_company_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_company_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_company_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(company_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(company_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_note(contacts_list_h note_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_note(const char *zone_name, contacts_list_h note_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2361,24 +2378,24 @@ int ctsvc_contact_insert_data_note(contacts_list_h note_list, int contact_id, bo
 
        RETV_IF(NULL == note_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(note_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(note_list);
        do {
                contacts_list_get_current_record_p(note_list, &record);
                if (record) {
-                       ret = ctsvc_db_note_insert(record, contact_id, is_my_profile, NULL);
-                       if (CONTACTS_ERROR_DB == ret){
+                       ret = ctsvc_db_note_insert(zone_name, record, contact_id, is_my_profile, NULL);
+                       if (CONTACTS_ERROR_DB == ret) {
                                CTS_ERR("DB error : ctsvc_db_note_insert");
                                break;
                        }
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(note_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(note_list));
        return ret;
 }
 
-int ctsvc_contact_insert_data_event(contacts_list_h event_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_event(const char *zone_name, contacts_list_h event_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2387,23 +2404,23 @@ int ctsvc_contact_insert_data_event(contacts_list_h event_list, int contact_id,
 
        RETV_IF(NULL == event_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(event_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(event_list);
        do {
                contacts_list_get_current_record_p(event_list, &record);
-               ret = ctsvc_db_event_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_event_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_event_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(event_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(event_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_messenger(contacts_list_h messenger_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_messenger(const char *zone_name, contacts_list_h messenger_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2412,23 +2429,23 @@ int ctsvc_contact_insert_data_messenger(contacts_list_h messenger_list, int cont
 
        RETV_IF(NULL == messenger_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(messenger_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(messenger_list);
        do {
                contacts_list_get_current_record_p(messenger_list, &record);
-               ret = ctsvc_db_messenger_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_messenger_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_messenger_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(messenger_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_address(contacts_list_h address_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_address(const char *zone_name, contacts_list_h address_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2437,23 +2454,23 @@ int ctsvc_contact_insert_data_address(contacts_list_h address_list, int contact_
 
        RETV_IF(NULL == address_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(address_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(address_list);
        do {
                contacts_list_get_current_record_p(address_list, &record);
-               ret = ctsvc_db_address_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_address_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_address_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(address_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(address_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_url(contacts_list_h url_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_url(const char *zone_name, contacts_list_h url_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2462,23 +2479,23 @@ int ctsvc_contact_insert_data_url(contacts_list_h url_list, int contact_id, bool
 
        RETV_IF(NULL == url_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(url_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(url_list);
        do {
                contacts_list_get_current_record_p(url_list, &record);
-               ret = ctsvc_db_url_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_url_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_url_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(url_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(url_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_nickname(contacts_list_h nickname_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_nickname(const char *zone_name, contacts_list_h nickname_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2487,23 +2504,23 @@ int ctsvc_contact_insert_data_nickname(contacts_list_h nickname_list, int contac
 
        RETV_IF(NULL == nickname_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(nickname_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(nickname_list);
        do {
                contacts_list_get_current_record_p(nickname_list, &record);
-               ret = ctsvc_db_nickname_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_nickname_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_nickname_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_relationship(contacts_list_h relationship_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_relationship(const char *zone_name, contacts_list_h relationship_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2512,23 +2529,23 @@ int ctsvc_contact_insert_data_relationship(contacts_list_h relationship_list, in
 
        RETV_IF(NULL == relationship_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(relationship_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(relationship_list);
        do {
                contacts_list_get_current_record_p(relationship_list, &record);
-               ret = ctsvc_db_relationship_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_relationship_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_relationship_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(relationship_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_image(contacts_list_h image_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_image(const char *zone_name, contacts_list_h image_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2537,23 +2554,23 @@ int ctsvc_contact_insert_data_image(contacts_list_h image_list, int contact_id,
 
        RETV_IF(NULL == image_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(image_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(image_list);
        do {
                contacts_list_get_current_record_p(image_list, &record);
-               ret = ctsvc_db_image_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_image_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_image_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(image_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(image_list));
 
        return ret;
 }
 
-int ctsvc_contact_insert_data_extension(contacts_list_h extension_list, int contact_id, bool is_my_profile)
+int ctsvc_contact_insert_data_extension(const char *zone_name, contacts_list_h extension_list, int contact_id, bool is_my_profile)
 {
        CTS_FN_CALL;
        int ret = CONTACTS_ERROR_NONE;
@@ -2562,28 +2579,28 @@ int ctsvc_contact_insert_data_extension(contacts_list_h extension_list, int cont
 
        RETV_IF(NULL == extension_list, CONTACTS_ERROR_INVALID_PARAMETER);
        ret = contacts_list_get_count(extension_list, &count);
-       if(0 == count)
+       if (0 == count)
                return CONTACTS_ERROR_NONE;
 
        contacts_list_first(extension_list);
        do {
                contacts_list_get_current_record_p(extension_list, &record);
-               ret = ctsvc_db_extension_insert(record, contact_id, is_my_profile, NULL);
-               if (CONTACTS_ERROR_DB == ret){
+               ret = ctsvc_db_extension_insert(zone_name, record, contact_id, is_my_profile, NULL);
+               if (CONTACTS_ERROR_DB == ret) {
                        CTS_ERR("DB error : ctsvc_db_extension_insert");
                        break;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(extension_list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(extension_list));
 
        return ret;
 }
 
-int ctsvc_contact_update_display_name(int contact_id, contacts_display_name_source_type_e changed_record_type)
+int ctsvc_contact_update_display_name(const char *zone_name, int contact_id, contacts_display_name_source_type_e changed_record_type)
 {
        int ret = CONTACTS_ERROR_NONE;
        int display_name_type;
        contacts_record_h record;
-       ret = ctsvc_db_contact_get(contact_id, (contacts_record_h*)&record);
+       ret = ctsvc_db_contact_get(zone_name, contact_id, (contacts_record_h*)&record);
        RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_db_contact_get Fail(%d)", ret);
        contacts_record_get_int(record, _contacts_contact.display_source_type, &display_name_type);
 
@@ -2601,11 +2618,11 @@ int ctsvc_contact_update_display_name(int contact_id, contacts_display_name_sour
                                "changed_ver=%d, changed_time=%d  WHERE contact_id=%d",
                                contact->display_source_type,
                                contact->display_name_language, contact->reverse_display_name_language,
-                               ctsvc_get_next_ver(), (int)time(NULL), contact_id);
+                               ctsvc_get_next_ver(zone_name), (int)time(NULL), contact_id);
 
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        contacts_record_destroy(record, true);
                        return ret;
                }
@@ -2624,7 +2641,7 @@ int ctsvc_contact_update_display_name(int contact_id, contacts_display_name_sour
                        ctsvc_stmt_bind_text(stmt, 6, contact->reverse_sortkey);
 
                ret = ctsvc_stmt_step(stmt);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
 
                ctsvc_stmt_finalize(stmt);
        }
@@ -2634,8 +2651,8 @@ int ctsvc_contact_update_display_name(int contact_id, contacts_display_name_sour
 }
 
 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_contact;
-int ctsvc_db_contact_get( int id, contacts_record_h* out_record )
+int ctsvc_db_contact_get(const char *zone_name, int id, contacts_record_h* out_record)
 {
-       return ctsvc_db_plugin_contact.get_record(id, out_record);
+       return ctsvc_db_plugin_contact.get_record(zone_name, id, out_record);
 }
 
diff --git a/server/db/ctsvc_db_plugin_contact_helper.h b/server/db/ctsvc_db_plugin_contact_helper.h
new file mode 100644 (file)
index 0000000..f0ecf77
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__
+#define __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__
+
+#include "ctsvc_struct.h"
+#include "ctsvc_db_sqlite.h"
+
+int ctsvc_contact_add_image_file(const char *zone_name, int parent_id, int img_id,
+               char *src_img, char *dest_name, int dest_size);
+int ctsvc_contact_update_image_file(const char *zone_name, int parent_id, int img_id,
+               char *src_img, char *dest_name, int dest_size);
+int ctsvc_contact_delete_image_file_with_path(const char *zone_name, const unsigned char* image_path);
+
+void ctsvc_contact_make_display_name(ctsvc_contact_s *contact);
+int ctsvc_contact_make_search_name(ctsvc_contact_s *contact, char **search_name);
+int ctsvc_contact_get_name_language(const ctsvc_name_s *name);
+
+int ctsvc_db_contact_update_changed_time(const char *zone_name, int contact_id);
+int ctsvc_contact_update_display_name(const char *zone_name, int contact_id, contacts_display_name_source_type_e changed_record_type);
+
+int ctsvc_db_contact_delete(const char *zone_name, int contact_id);
+int ctsvc_db_contact_get(const char *zone_name, int id, contacts_record_h* out_record);
+
+int ctsvc_get_data_info_name(cts_stmt stmt, contacts_list_h name_list);
+int ctsvc_get_data_info_event(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_number(cts_stmt stmt, contacts_list_h number_list);
+int ctsvc_get_data_info_email(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_address(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_messenger(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_note(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_company(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_profile(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_relationship(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_image(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_url(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_nickname(cts_stmt stmt, contacts_list_h list);
+int ctsvc_get_data_info_extension(cts_stmt stmt, contacts_list_h list);
+
+bool ctsvc_contact_check_default_number(contacts_list_h number_list);
+bool ctsvc_contact_check_default_email(contacts_list_h email_list);
+bool ctsvc_contact_check_default_address(contacts_list_h address_list);
+bool ctsvc_contact_check_default_image(contacts_list_h image_list);
+bool ctsvc_contact_check_image_location(const char *path);
+
+int ctsvc_contact_update_data_name(const char *zone_name, contacts_list_h name_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_company(const char *zone_name, contacts_list_h company_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_note(const char *zone_name, contacts_list_h note_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_event(const char *zone_name, contacts_list_h event_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_messenger(const char *zone_name, contacts_list_h messenger_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_address(const char *zone_name, contacts_list_h address_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_url(const char *zone_name, contacts_list_h url_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_profile(const char *zone_name, contacts_list_h profile_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_relationship(const char *zone_name, contacts_list_h relationship_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_image(const char *zone_name, contacts_list_h image_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_nickname(const char *zone_name, contacts_list_h nickname_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_extension(const char *zone_name, contacts_list_h extension_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_update_data_number(const char *zone_name, contacts_list_h number_list, int contact_id, bool is_my_profile, bool *had_phonenumber);
+int ctsvc_contact_update_data_email(const char *zone_name, contacts_list_h email_list, int contact_id, bool is_my_profile, bool *had_email);
+
+int ctsvc_contact_insert_data_name(const char *zone_name, contacts_list_h name_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_number(const char *zone_name, contacts_list_h number_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_email(const char *zone_name, contacts_list_h email_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_profile(const char *zone_name, contacts_list_h profile_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_company(const char *zone_name, contacts_list_h company_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_note(const char *zone_name, contacts_list_h note_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_event(const char *zone_name, contacts_list_h event_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_messenger(const char *zone_name, contacts_list_h messenger_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_address(const char *zone_name, contacts_list_h address_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_url(const char *zone_name, contacts_list_h url_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_nickname(const char *zone_name, contacts_list_h nickname_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_relationship(const char *zone_name, contacts_list_h relationship_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_image(const char *zone_name, contacts_list_h image_list, int contact_id, bool is_my_profile);
+int ctsvc_contact_insert_data_extension(const char *zone_name, contacts_list_h extension_list, int contact_id, bool is_my_profile);
+
+#endif /* __CTSVC_DB_PLUGIN_CONTACT_HELPER_H__ */
\ No newline at end of file
similarity index 62%
rename from native/ctsvc_db_plugin_email.c
rename to server/db/ctsvc_db_plugin_email.c
index b27e594..f0d5d33 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_list.h"
 
-static int __ctsvc_db_email_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_email_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_email_update_record( contacts_record_h record );
-static int __ctsvc_db_email_delete_record( int id );
-static int __ctsvc_db_email_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_email_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_email_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_email_delete_records( int ids[], int count);
+static int __ctsvc_db_email_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_email_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_email_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_email_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_email_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_email_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_email = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_email = {
        .delete_record = __ctsvc_db_email_delete_record,
        .get_all_records = __ctsvc_db_email_get_all_records,
        .get_records_with_query = __ctsvc_db_email_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_email_insert_records,
-       .update_records = NULL,//__ctsvc_db_email_update_records,
-       .delete_records = NULL,//__ctsvc_db_email_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_email_get_person_default_email(int person_id)
+static int __ctsvc_db_email_get_person_default_email(const char *zone_name, int person_id)
 {
        int ret;
        int default_email_id;
@@ -68,13 +65,13 @@ static int __ctsvc_db_email_get_person_default_email(int person_id)
                "SELECT id FROM "CTSVC_DB_VIEW_CONTACT" c, "CTS_TABLE_DATA" d "
                "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
                person_id, CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_get_first_int_result(query, &default_email_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_email_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_email_id;
 }
 
-static int __ctsvc_db_email_update_person_has_email(int person_id, bool has_email)
+static int __ctsvc_db_email_update_person_has_email(const char *zone_name, int person_id, bool has_email)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -83,12 +80,12 @@ static int __ctsvc_db_email_update_person_has_email(int person_id, bool has_emai
                        "UPDATE "CTS_TABLE_PERSONS" SET has_email = %d WHERE person_id = %d",
                        has_email, person_id);
 
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_email_update_default(int email_id, int contact_id, bool is_default, bool is_primary_default)
+static int __ctsvc_db_email_update_default(const char *zone_name, int email_id, int contact_id, bool is_default, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -96,13 +93,13 @@ static int __ctsvc_db_email_update_default(int email_id, int contact_id, bool is
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_default = %d, is_primary_default = %d WHERE id = %d",
                        is_default, is_primary_default, email_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
 
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_email_get_default_email_id(int contact_id)
+static int __ctsvc_db_email_get_default_email_id(const char *zone_name, int contact_id)
 {
        int ret;
        int email_id = 0;
@@ -110,13 +107,13 @@ static int __ctsvc_db_email_get_default_email_id(int contact_id)
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
                        CTSVC_DATA_EMAIL, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &email_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &email_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return email_id;
 }
 
-static int __ctsvc_db_email_get_primary_default_email_id(int contact_id)
+static int __ctsvc_db_email_get_primary_default_email_id(const char *zone_name, int contact_id)
 {
        int ret;
        int email_id = 0;
@@ -124,13 +121,13 @@ static int __ctsvc_db_email_get_primary_default_email_id(int contact_id)
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_primary_default=1",
                        CTSVC_DATA_EMAIL, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &email_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &email_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return email_id;
 }
 
-static int __ctsvc_db_email_get_primary_default_contact_id(int person_id)
+static int __ctsvc_db_email_get_primary_default_contact_id(const char *zone_name, int person_id)
 {
        int ret;
        int default_contact_id;
@@ -140,13 +137,13 @@ static int __ctsvc_db_email_get_primary_default_contact_id(int person_id)
                        "SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
                        "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
                        person_id, CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_contact_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_contact_id;
 }
 
-static int __ctsvc_db_email_set_primary_default(int email_id, bool is_primary_default)
+static int __ctsvc_db_email_set_primary_default(const char *zone_name, int email_id, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -154,12 +151,12 @@ static int __ctsvc_db_email_set_primary_default(int email_id, bool is_primary_de
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default = %d WHERE id = %d",
                        is_primary_default, email_id);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_email_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_email_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id = 0;
@@ -171,26 +168,26 @@ static int __ctsvc_db_email_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == email->email_addr, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : email is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", email->contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                else
@@ -200,61 +197,60 @@ static int __ctsvc_db_email_insert_record( contacts_record_h record, int *id )
        person_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this email record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       old_default_email_id = __ctsvc_db_email_get_default_email_id(email->contact_id);
+       old_default_email_id = __ctsvc_db_email_get_default_email_id(zone_name, email->contact_id);
        if (0 == old_default_email_id)
                email->is_default = true;
 
-       ret = ctsvc_db_email_insert(record, email->contact_id, false, id);
+       ret = ctsvc_db_email_insert(zone_name, record, email->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_CONTACTS" SET has_email = %d, changed_ver = %d, changed_time = %d "
                        "WHERE contact_id = %d",
-                       1, ctsvc_get_next_ver(), (int)time(NULL), email->contact_id);
+                       1, ctsvc_get_next_ver(zone_name), (int)time(NULL), email->contact_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (email->is_default) {
                int primary_default_contact_id = 0;
 
-               __ctsvc_db_email_update_person_has_email(person_id, true);
+               __ctsvc_db_email_update_person_has_email(zone_name, person_id, true);
 
-               primary_default_contact_id = __ctsvc_db_email_get_primary_default_contact_id(person_id);
+               primary_default_contact_id = __ctsvc_db_email_get_primary_default_contact_id(zone_name, person_id);
                if (0 == primary_default_contact_id || email->contact_id == primary_default_contact_id)
-                       __ctsvc_db_email_set_primary_default(*id, true);
+                       __ctsvc_db_email_set_primary_default(zone_name, *id, true);
 
-               ctsvc_contact_update_display_name(email->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
+               ctsvc_contact_update_display_name(zone_name, email->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_email_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -270,12 +266,12 @@ static int __ctsvc_db_email_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_EMAIL);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -290,7 +286,7 @@ static int __ctsvc_db_email_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_update_record( contacts_record_h record )
+static int __ctsvc_db_email_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -298,61 +294,60 @@ static int __ctsvc_db_email_update_record( contacts_record_h record )
        ctsvc_email_s *email = (ctsvc_email_s *)record;
        RETVM_IF(NULL == email->email_addr, CONTACTS_ERROR_INVALID_PARAMETER, "email is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", email->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", email->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this email record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_email_update(record, false);
+       ret = ctsvc_db_email_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("update record failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (email->is_default) {
                int old_primary_default_email_id = 0;
-               old_primary_default_email_id = __ctsvc_db_email_get_primary_default_email_id(email->contact_id);
+               old_primary_default_email_id = __ctsvc_db_email_get_primary_default_email_id(zone_name, email->contact_id);
                if (old_primary_default_email_id)
-                       __ctsvc_db_email_set_primary_default(email->id, true);
+                       __ctsvc_db_email_set_primary_default(zone_name, email->id, true);
        }
-       ctsvc_contact_update_display_name(email->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
+       ctsvc_contact_update_display_name(zone_name, email->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
 
-       ret = ctsvc_db_contact_update_changed_time(email->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, email->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_delete_record( int id )
+static int __ctsvc_db_email_delete_record(const char *zone_name, int id)
 {
        int ret;
        int email_id;
@@ -365,9 +360,9 @@ static int __ctsvc_db_email_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
                return ret;
        }
 
@@ -375,18 +370,18 @@ static int __ctsvc_db_email_delete_record( int id )
                        "SELECT contact_id, person_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                        "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -397,23 +392,23 @@ static int __ctsvc_db_email_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 2);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this email record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT is_default, is_primary_default FROM "CTS_TABLE_DATA" WHERE id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -423,57 +418,57 @@ static int __ctsvc_db_email_delete_record( int id )
        is_primary_default = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       ret = ctsvc_db_email_delete(id, false);
+       ret = ctsvc_db_email_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
                        CTSVC_DATA_EMAIL, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &email_id);
-       if (0 < ret )
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &email_id);
+       if (0 < ret)
                has_email = true;
 
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_CONTACTS" SET has_email = %d, changed_ver = %d, changed_time = %d "
                        "WHERE contact_id = %d",
-                       has_email, ctsvc_get_next_ver(), (int)time(NULL), contact_id);
+                       has_email, ctsvc_get_next_ver(zone_name), (int)time(NULL), contact_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (is_default) {
 
                if (email_id) {
-                       __ctsvc_db_email_update_default(email_id, contact_id, is_default, is_primary_default);
+                       __ctsvc_db_email_update_default(zone_name, email_id, contact_id, is_default, is_primary_default);
                }
                else if (is_primary_default) {
                        int default_email_id = 0;
-                       default_email_id = __ctsvc_db_email_get_person_default_email(person_id);
+                       default_email_id = __ctsvc_db_email_get_person_default_email(zone_name, person_id);
                        if (default_email_id)
-                               __ctsvc_db_email_set_primary_default(default_email_id, true);
+                               __ctsvc_db_email_set_primary_default(zone_name, default_email_id, true);
                        else
-                               __ctsvc_db_email_update_person_has_email(person_id, false);
+                               __ctsvc_db_email_update_person_has_email(zone_name, person_id, false);
                }
-               ctsvc_contact_update_display_name(contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
+               ctsvc_contact_update_display_name(zone_name, contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL);
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_email_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -495,13 +490,13 @@ static int __ctsvc_db_email_get_all_records( int offset, int limit, contacts_lis
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -516,8 +511,8 @@ static int __ctsvc_db_email_get_all_records( int offset, int limit, contacts_lis
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_email_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -530,14 +525,14 @@ static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -552,11 +547,11 @@ static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -576,10 +571,12 @@ static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_EMAIL_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(email->label);
                                email->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EMAIL_EMAIL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(email->email_addr);
                                email->email_addr = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EMAIL_IS_DEFAULT:
@@ -597,7 +594,3 @@ static int __ctsvc_db_email_get_records_with_query( contacts_query_h query, int
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_email_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_email_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_email_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 76%
rename from native/ctsvc_db_plugin_email_helper.c
rename to server/db/ctsvc_db_plugin_email_helper.c
index 4f4c7e8..da10225 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_email_helper.h"
@@ -34,7 +34,7 @@ int ctsvc_db_email_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        ctsvc_email_s *email;
 
        ret = contacts_record_create(_contacts_email._uri, (contacts_record_h *)&email);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        email->id = ctsvc_stmt_get_int(stmt, start_count++);
        email->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -49,7 +49,7 @@ int ctsvc_db_email_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_email_reset_default(int email_id, int contact_id)
+static int __ctsvc_db_email_reset_default(const char *zone_name, int email_id, int contact_id)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -58,12 +58,12 @@ static int __ctsvc_db_email_reset_default(int email_id, int contact_id)
                        "UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 "
                                        "WHERE id != %d AND contact_id = %d AND datatype = %d",
                        email_id, contact_id, CTSVC_DATA_EMAIL);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-int ctsvc_db_email_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_email_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        int email_id;
@@ -82,8 +82,8 @@ int ctsvc_db_email_insert(contacts_record_h record, int contact_id, bool is_my_p
                                                                        "VALUES(%d, %d, %d, %d, %d, ?, ?)",
                        contact_id, is_my_profile, CTSVC_DATA_EMAIL, email->is_default, email->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (email->label)
                ctsvc_stmt_bind_text(stmt, 1, email->label);
@@ -92,28 +92,28 @@ int ctsvc_db_email_insert(contacts_record_h record, int contact_id, bool is_my_p
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       email_id = ctsvc_db_get_last_insert_id();
+       email_id = ctsvc_db_get_last_insert_id(zone_name);
        if (id)
                *id = email_id;
        ctsvc_stmt_finalize(stmt);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_email.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (email->is_default)
-                       __ctsvc_db_email_reset_default(email_id, contact_id);
+                       __ctsvc_db_email_reset_default(zone_name, email_id, contact_id);
        }
 
-       if (!is_my_profile)
-               ctsvc_set_email_noti();
+       if (false == is_my_profile)
+               ctsvc_set_email_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_email_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -123,24 +123,24 @@ int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile)
        ctsvc_email_s *email = (ctsvc_email_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!email->id, CONTACTS_ERROR_INVALID_PARAMETER, "email of contact has no ID.");
+       RETVM_IF(0 == email->id, CONTACTS_ERROR_INVALID_PARAMETER, "email of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (email->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", email->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_email.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (email->is_default)
-                       __ctsvc_db_email_reset_default(email->id, email->contact_id);
+                       __ctsvc_db_email_reset_default(zone_name, email->id, email->contact_id);
        }
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, email->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_email_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, email->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_email_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -154,7 +154,7 @@ int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_email_delete(int id, bool is_my_profile)
+int ctsvc_db_email_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -162,10 +162,10 @@ int ctsvc_db_email_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_EMAIL);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
-       if (!is_my_profile)
-               ctsvc_set_email_noti();
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
+       if (false == is_my_profile)
+               ctsvc_set_email_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_email_helper.h
rename to server/db/ctsvc_db_plugin_email_helper.h
index 298b539..9097775 100644 (file)
 #define __CTSVC_DB_PLUGIN_EMAIL_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_email_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_email_delete(int id, bool is_my_profile);
+int ctsvc_db_email_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_email_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_email_delete(const char *zone_name, int id, bool is_my_profile);
 
 int ctsvc_db_email_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_EMAIL_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_EMAIL_HELPER_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_db_plugin_event.c
rename to server/db/ctsvc_db_plugin_event.c
index f46d411..38e28f4 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_event_helper.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_event_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_event_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_event_update_record( contacts_record_h record );
-static int __ctsvc_db_event_delete_record( int id );
-static int __ctsvc_db_event_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_event_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_event_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_event_delete_records( int ids[], int count);
+static int __ctsvc_db_event_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_event_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_event_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_event_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_event_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_event_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_event = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_event = {
        .delete_record = __ctsvc_db_event_delete_record,
        .get_all_records = __ctsvc_db_event_get_all_records,
        .get_records_with_query = __ctsvc_db_event_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_event_insert_records,
-       .update_records = NULL,//__ctsvc_db_event_update_records,
-       .delete_records = NULL,//__ctsvc_db_event_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_event_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_event_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -68,17 +65,17 @@ static int __ctsvc_db_event_insert_record( contacts_record_h record, int *id )
        RETVM_IF(event->date <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : event date(%d)", event->date);
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", event->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", event->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -89,38 +86,37 @@ static int __ctsvc_db_event_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this event record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_event_insert(record, event->contact_id, false, id);
+       ret = ctsvc_db_event_insert(zone_name, record, event->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(event->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, event->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_event_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_event_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -136,12 +132,12 @@ static int __ctsvc_db_event_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_EVENT);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -156,61 +152,60 @@ static int __ctsvc_db_event_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_event_update_record( contacts_record_h record )
+static int __ctsvc_db_event_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", event->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", event->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this event record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_event_update(record, false);
+       ret = ctsvc_db_event_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("update record failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // TODO ; contact display event update
-       ret = ctsvc_db_contact_update_changed_time(event->contact_id);
+       /* TODO ; contact display event update */
+       ret = ctsvc_db_contact_update_changed_time(zone_name, event->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_event_delete_record( int id )
+static int __ctsvc_db_event_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -218,26 +213,26 @@ static int __ctsvc_db_event_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -248,38 +243,37 @@ static int __ctsvc_db_event_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this event record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_event_delete(id, false);
+       ret = ctsvc_db_event_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_event_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_event_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -301,13 +295,13 @@ static int __ctsvc_db_event_get_all_records( int offset, int limit, contacts_lis
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -322,8 +316,8 @@ static int __ctsvc_db_event_get_all_records( int offset, int limit, contacts_lis
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_event_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -336,14 +330,14 @@ static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -358,11 +352,11 @@ static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -382,6 +376,7 @@ static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_EVENT_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(event->label);
                                event->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EVENT_DATE:
@@ -405,7 +400,3 @@ static int __ctsvc_db_event_get_records_with_query( contacts_query_h query, int
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_event_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_event_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_event_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 77%
rename from native/ctsvc_db_plugin_event_helper.c
rename to server/db/ctsvc_db_plugin_event_helper.c
index 20572f6..c473019 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_event_helper.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
 
-int ctsvc_db_event_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_event_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
        char query[CTS_SQL_MAX_LEN] = {0};
        ctsvc_event_s *event = (ctsvc_event_s *)record;
 
-       // These check should be done in client side
+       /* These check should be done in client side */
        RETV_IF(event->date <= 0, CONTACTS_ERROR_NONE);
        RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : contact_id(%d) is mandatory field to insert event record", event->contact_id);
@@ -45,8 +45,8 @@ int ctsvc_db_event_insert(contacts_record_h record, int contact_id, bool is_my_p
                "INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3, data4, data5) "
                                                                        "VALUES(%d, %d, %d, %d, ?, ?, ?, %d)",
                        contact_id, is_my_profile, CTSVC_DATA_EVENT, event->type, event->is_leap_month);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (event->label)
                ctsvc_stmt_bind_text(stmt, 1, event->label);
@@ -55,19 +55,19 @@ int ctsvc_db_event_insert(contacts_record_h record, int contact_id, bool is_my_p
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-//     event->id = ctsvc_db_get_last_insert_id();
+       /* event->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
 
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_event_noti();
+       if (false == is_my_profile)
+               ctsvc_set_event_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
@@ -80,11 +80,11 @@ int ctsvc_db_event_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        char *temp;
 
        ret = contacts_record_create(_contacts_event._uri, (contacts_record_h *)&event);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        event->id = ctsvc_stmt_get_int(stmt, start_count++);
        event->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
-       start_count++;  // skip is default
+       start_count++; /* skip is default */
        event->type = ctsvc_stmt_get_int(stmt, start_count++);
        temp = ctsvc_stmt_get_text(stmt, start_count++);
        event->label = SAFE_STRDUP(temp);
@@ -97,7 +97,7 @@ int ctsvc_db_event_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_event_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -107,19 +107,19 @@ int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile)
        ctsvc_event_s *event = (ctsvc_event_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!event->id, CONTACTS_ERROR_INVALID_PARAMETER, "event of contact has no ID.");
+       RETVM_IF(0 == event->id, CONTACTS_ERROR_INVALID_PARAMETER, "event of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (event->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", event->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, event->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_event_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, event->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_event_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -133,7 +133,7 @@ int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_event_delete(int id, bool is_my_profile)
+int ctsvc_db_event_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -141,11 +141,11 @@ int ctsvc_db_event_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_EVENT);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_event_noti();
+       if (false == is_my_profile)
+               ctsvc_set_event_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_event_helper.h
rename to server/db/ctsvc_db_plugin_event_helper.h
index e5bf6bd..57ddce6 100644 (file)
 #define __CTSVC_DB_PLUGIN_EVENT_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_event_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_event_delete(int id, bool is_my_profile);
+int ctsvc_db_event_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_event_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_event_delete(const char *zone_name, int id, bool is_my_profile);
 
 int ctsvc_db_event_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_EVENT_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_EVENT_HELPER_H__ */
\ No newline at end of file
similarity index 69%
rename from native/ctsvc_db_plugin_extension.c
rename to server/db/ctsvc_db_plugin_extension.c
index 9006586..f7292e1 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_extension_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_extension_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_extension_update_record( contacts_record_h record );
-static int __ctsvc_db_extension_delete_record( int id );
-static int __ctsvc_db_extension_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_extension_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_extension_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_extension_delete_records( int ids[], int count);
+static int __ctsvc_db_extension_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_extension_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_extension_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_extension_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_extension_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_extension_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_extension = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_extension = {
        .delete_record = __ctsvc_db_extension_delete_record,
        .get_all_records = __ctsvc_db_extension_get_all_records,
        .get_records_with_query = __ctsvc_db_extension_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_extension_insert_records,
-       .update_records = NULL,//__ctsvc_db_extension_update_records,
-       .delete_records = NULL,//__ctsvc_db_extension_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_extension_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_extension_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -71,17 +68,17 @@ static int __ctsvc_db_extension_insert_record( contacts_record_h record, int *id
                        && NULL == extension->data11 && NULL == extension->data12,
                        CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", extension->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", extension->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -92,38 +89,37 @@ static int __ctsvc_db_extension_insert_record( contacts_record_h record, int *id
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this extension record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_extension_insert(record, extension->contact_id, false, id);
+       ret = ctsvc_db_extension_insert(zone_name, record, extension->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(extension->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, extension->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_extension_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_extension_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -140,12 +136,12 @@ static int __ctsvc_db_extension_get_record( int id, contacts_record_h* out_recor
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_EXTENSION);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -160,7 +156,7 @@ static int __ctsvc_db_extension_get_record( int id, contacts_record_h* out_recor
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_extension_update_record( contacts_record_h record )
+static int __ctsvc_db_extension_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -172,53 +168,52 @@ static int __ctsvc_db_extension_update_record( contacts_record_h record )
                        NULL == extension->data8 && NULL == extension->data9 && NULL == extension->data10 &&
                        NULL == extension->data11 && NULL == extension->data12, CONTACTS_ERROR_INVALID_PARAMETER, "extension is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", extension->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", extension->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this extension record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_extension_update(record);
+       ret = ctsvc_db_extension_update(zone_name, record);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("update record failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(extension->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, extension->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_extension_delete_record( int id )
+static int __ctsvc_db_extension_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -226,26 +221,26 @@ static int __ctsvc_db_extension_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -256,38 +251,37 @@ static int __ctsvc_db_extension_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this extension record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_extension_delete(id, false);
+       ret = ctsvc_db_extension_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_extension_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_extension_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -310,13 +304,13 @@ static int __ctsvc_db_extension_get_all_records( int offset, int limit, contacts
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -331,8 +325,8 @@ static int __ctsvc_db_extension_get_all_records( int offset, int limit, contacts
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_extension_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -345,14 +339,14 @@ static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query,
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -367,11 +361,11 @@ static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query,
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -391,46 +385,57 @@ static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA2:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data2);
                                extension->data2 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA3:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data3);
                                extension->data3 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA4:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data4);
                                extension->data4 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA5:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data5);
                                extension->data5 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA6:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data6);
                                extension->data6 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA7:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data7);
                                extension->data7 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA8:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data8);
                                extension->data8 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA9:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data9);
                                extension->data9 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA10:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data10);
                                extension->data10 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA11:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data11);
                                extension->data11 = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_EXTENSION_DATA12:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(extension->data12);
                                extension->data12 = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -445,7 +450,3 @@ static int __ctsvc_db_extension_get_records_with_query( contacts_query_h query,
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_extension_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_extension_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_extension_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 85%
rename from native/ctsvc_db_plugin_extension_helper.c
rename to server/db/ctsvc_db_plugin_extension_helper.c
index 762dbb1..fbf4a44 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_extension_helper.h"
@@ -35,7 +35,7 @@ int ctsvc_db_extension_get_value_from_stmt(cts_stmt stmt, contacts_record_h *rec
        ctsvc_extension_s *extension;
 
        ret = contacts_record_create(_contacts_extension._uri, (contacts_record_h *)&extension);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        extension->id = ctsvc_stmt_get_int(stmt, start_count++);
        extension->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -95,7 +95,7 @@ static inline int __ctsvc_extension_bind_stmt(cts_stmt stmt, ctsvc_extension_s *
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_extension_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_extension_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -116,31 +116,31 @@ int ctsvc_db_extension_insert(contacts_record_h record, int contact_id, bool is_
                                                                "VALUES(%d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                                                contact_id, is_my_profile, CTSVC_DATA_EXTENSION, extension->data1);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                __ctsvc_extension_bind_stmt(stmt, extension, 1);
 
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return ret;
                }
 
-//             extension->id = ctsvc_db_get_last_insert_id();
+               /* extension->id = ctsvc_db_get_last_insert_id(zone_name); */
                if (id)
-                       *id = ctsvc_db_get_last_insert_id();
+                       *id = ctsvc_db_get_last_insert_id(zone_name);
                ctsvc_stmt_finalize(stmt);
 
-               if (!is_my_profile)
-                       ctsvc_set_data_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_data_noti(zone_name);
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_extension_update(contacts_record_h record)
+int ctsvc_db_extension_update(const char *zone_name, contacts_record_h record)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -150,17 +150,17 @@ int ctsvc_db_extension_update(contacts_record_h record)
        ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!extension->id, CONTACTS_ERROR_INVALID_PARAMETER, "extension of contact has no ID.");
+       RETVM_IF(0 == extension->id, CONTACTS_ERROR_INVALID_PARAMETER, "extension of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (extension->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", extension->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, extension->id))) break;
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, extension->id))) break;
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -173,7 +173,7 @@ int ctsvc_db_extension_update(contacts_record_h record)
        return ret;
 }
 
-int ctsvc_db_extension_delete(int id, bool is_my_profile)
+int ctsvc_db_extension_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -181,11 +181,11 @@ int ctsvc_db_extension_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_EXTENSION);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_data_noti();
+       if (false == is_my_profile)
+               ctsvc_set_data_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_extension_helper.h
rename to server/db/ctsvc_db_plugin_extension_helper.h
index e876f1a..71f8bbf 100644 (file)
 #define __CTSVC_DB_PLUGIN_EXTENSION_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_extension_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_extension_update(contacts_record_h record);
-int ctsvc_db_extension_delete(int id, bool is_my_profile);
+int ctsvc_db_extension_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_extension_update(const char *zone_name, contacts_record_h record);
+int ctsvc_db_extension_delete(const char *zone_name, int id, bool is_my_profile);
 
 int ctsvc_db_extension_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_EXTENSION_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_EXTENSION_HELPER_H__ */
\ No newline at end of file
similarity index 70%
rename from native/ctsvc_db_plugin_group.c
rename to server/db/ctsvc_db_plugin_group.c
index ba81ba4..7500392 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_group_helper.h"
 
-static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_group_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_group_update_record( contacts_record_h record );
-static int __ctsvc_db_group_delete_record( int id );
-static int __ctsvc_db_group_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_group_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_group_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_group_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_group_delete_records( int ids[], int count);
+static int __ctsvc_db_group_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_group_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_group_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_group_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_group_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_group_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_group = {
        .is_query_only = false,
@@ -50,16 +48,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_group = {
        .delete_record = __ctsvc_db_group_delete_record,
        .get_all_records = __ctsvc_db_group_get_all_records,
        .get_records_with_query = __ctsvc_db_group_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_group_insert_records,
-       .update_records = NULL,//__ctsvc_db_group_update_records,
-       .delete_records = NULL,//__ctsvc_db_group_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static double __ctsvc_db_group_get_next_group_prio(void)
+static double __ctsvc_db_group_get_next_group_prio(const char *zone_name)
 {
        int ret;
        double prio = 0.0;
@@ -68,8 +66,8 @@ static double __ctsvc_db_group_get_next_group_prio(void)
 
        snprintf(query, sizeof(query), "SELECT MAX(group_prio) FROM "CTS_TABLE_GROUPS" ");
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/  == ret)
@@ -79,7 +77,7 @@ static double __ctsvc_db_group_get_next_group_prio(void)
        return prio + 1.0;
 }
 
-static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_group_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int ver;
@@ -94,18 +92,18 @@ static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == group->name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : The name of record is empty.");
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF( ret < CONTACTS_ERROR_NONE, ret,  "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret,  "DB error : ctsvc_begin_trans() Fail(%d)", ret);
 
-       if (false == ctsvc_have_ab_write_permission(group->addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, group->addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d)",
                                        group->addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       group_prio = __ctsvc_db_group_get_next_group_prio();
-       group->id = ctsvc_db_get_next_id(CTS_TABLE_GROUPS);
+       group_prio = __ctsvc_db_group_get_next_group_prio(zone_name);
+       group->id = ctsvc_db_get_next_id(zone_name, CTS_TABLE_GROUPS);
        if (id)
                *id = group->id;
 
@@ -115,16 +113,16 @@ static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id )
                        "VALUES(%d, %d, ?, ?, ?, ?, ?, ?, ?, ?, %d, %lf)",
                        group->id, group->addressbook_id, group->is_read_only, group_prio);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ctsvc_stmt_bind_text(stmt, 1, group->name);
 
-       ver = ctsvc_get_next_ver();
+       ver = ctsvc_get_next_ver(zone_name);
 
        ctsvc_stmt_bind_int(stmt, 2, ver);
        ctsvc_stmt_bind_int(stmt, 3, ver);
@@ -136,22 +134,22 @@ static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id )
        if (group->message_alert)
                ctsvc_stmt_bind_text(stmt, 6, group->message_alert);
 
-       if(group->image_thumbnail_path) {
+       if (group->image_thumbnail_path) {
                char image[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-               ret = ctsvc_have_file_read_permission(group->image_thumbnail_path);
+               ret = ctsvc_have_file_read_permission(zone_name, group->image_thumbnail_path);
                if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
                ctsvc_utils_make_image_file_name(0, group->id, group->image_thumbnail_path, image, sizeof(image));
-               ret = ctsvc_utils_copy_image(CTS_GROUP_IMAGE_LOCATION, group->image_thumbnail_path, image);
+               ret = ctsvc_utils_copy_image(zone_name, CTS_GROUP_IMAGE_LOCATION, group->image_thumbnail_path, image);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_utils_copy_image() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_utils_copy_image() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
@@ -165,26 +163,26 @@ static int __ctsvc_db_group_insert_record( contacts_record_h record, int *id )
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_group_noti();
+       ctsvc_set_group_noti(zone_name);
 
        ctsvc_stmt_finalize(stmt);
 
-       ret = ctsvc_end_trans(true);
-       if(ret < CONTACTS_ERROR_NONE ) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_group_update_record( contacts_record_h record )
+static int __ctsvc_db_group_update_record(const char *zone_name, contacts_record_h record)
 {
        int addressbook_id = 0;
        int ret = CONTACTS_ERROR_NONE;
@@ -205,24 +203,24 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
        RETVM_IF(NULL == group->name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : The name of group is empty.");
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, is_read_only, image_thumbnail_path FROM %s WHERE group_id = %d",
                        CTS_TABLE_GROUPS, group->id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret) {
                        CTS_ERR("DB error : The group record(%d) is Invalid(%d)", group->id, ret);
                        return CONTACTS_ERROR_NO_DATA;
@@ -239,15 +237,15 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
 
        if (is_read_only && ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_group.name, CTSVC_PROPERTY_FLAG_DIRTY)) {
                CTS_ERR("Can not change the group name. It is a read-only group (group_id : %d)", group->id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                free(image);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d, group_id : %d)",
                                        addressbook_id, group->id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                free(image);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
@@ -255,22 +253,24 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)group, _contacts_group.image_path, CTSVC_PROPERTY_FLAG_DIRTY)) {
                bool same = false;
                bool check_permission = 0;
-               // delete current image
+               /* delete current image */
                if (image) {
                        char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-                       snprintf(full_path, sizeof(full_path), "%s/%s", CTS_GROUP_IMAGE_LOCATION, image);
+                       char root_path[CTSVC_PATH_MAX_LEN] = {0};
+                       ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+                       snprintf(full_path, sizeof(full_path), "%s/%s/%s", root_path, CTS_GROUP_IMAGE_LOCATION, image);
 
-                       if (group->image_thumbnail_path && strcmp(group->image_thumbnail_path, full_path) == 0) {
+                       if (group->image_thumbnail_path && STRING_EQUAL == strcmp(group->image_thumbnail_path, full_path)) {
                                int index = _contacts_group.image_path & 0x000000FF;
                                ((ctsvc_record_s *)record)->properties_flags[index] = 0;
                                same = true;
                        }
                        else {
                                if (group->image_thumbnail_path) {
-                                       ret = ctsvc_have_file_read_permission(group->image_thumbnail_path);
+                                       ret = ctsvc_have_file_read_permission(zone_name, group->image_thumbnail_path);
                                        if (ret != CONTACTS_ERROR_NONE) {
                                                CTS_ERR("Your module does not have read permission of the image file()");
-                                               ctsvc_end_trans(false);
+                                               ctsvc_end_trans(zone_name, false);
                                                free(image);
                                                return ret;
                                        }
@@ -278,28 +278,28 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
                                }
                                ret = unlink(full_path);
                                if (ret < 0) {
-                                       CTS_WARN("unlink Failed(%d)", errno);
+                                       CTS_WARN("unlink Fail(%d)", errno);
                                }
                        }
                }
 
-               // add new image file
-               if (!same && group->image_thumbnail_path) {
+               /* add new image file */
+               if (false == same && group->image_thumbnail_path) {
                        char dest[CTS_SQL_MAX_LEN] = {0};
                        if (false == check_permission) {
-                               ret = ctsvc_have_file_read_permission(group->image_thumbnail_path);
+                               ret = ctsvc_have_file_read_permission(zone_name, group->image_thumbnail_path);
                                if (ret != CONTACTS_ERROR_NONE) {
                                        CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
-                                       ctsvc_end_trans(false);
+                                       ctsvc_end_trans(zone_name, false);
                                        free(image);
                                        return ret;
                                }
                        }
                        ctsvc_utils_make_image_file_name(0, group->id, group->image_thumbnail_path, dest, sizeof(dest));
-                       ret = ctsvc_utils_copy_image(CTS_GROUP_IMAGE_LOCATION, group->image_thumbnail_path, dest);
+                       ret = ctsvc_utils_copy_image(zone_name, CTS_GROUP_IMAGE_LOCATION, group->image_thumbnail_path, dest);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("cts_copy_file() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
+                               CTS_ERR("cts_copy_file() Fail(%d)", ret);
+                               ctsvc_end_trans(zone_name, false);
                                free(image);
                                return ret;
                        }
@@ -318,12 +318,12 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
                if (NULL == set || '\0' == *set)
                        break;
-               snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d ", set, ctsvc_get_next_ver());
+               snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d ", set, ctsvc_get_next_ver(zone_name));
 
                snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE group_id = %d", CTS_TABLE_GROUPS, query_set, group->id);
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        break;
                }
                if (bind_text) {
@@ -336,13 +336,13 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
                }
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
                ctsvc_stmt_finalize(stmt);
 
-               ctsvc_set_group_noti();
+               ctsvc_set_group_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -354,81 +354,81 @@ static int __ctsvc_db_group_update_record( contacts_record_h record )
        }
 
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_group_delete_record( int id )
+static int __ctsvc_db_group_delete_record(const char *zone_name, int id)
 {
        int ret;
        int count = 0;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM %s WHERE group_id = %d",
                        CTS_TABLE_GROUPS, id);
 
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
-       if ( ret < CONTACTS_ERROR_NONE) {
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
+       if (ret < CONTACTS_ERROR_NONE) {
                CTS_ERR("DB error : The id(%d) is Invalid(%d)", id, addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d, group_id : %d)",
                                        addressbook_id, id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query),
                                "SELECT COUNT(contact_id) FROM "CTS_TABLE_GROUP_RELATIONS" WHERE group_id = %d", id);
-       ret = ctsvc_query_get_first_int_result(query, &count);
-       if ( ret < CONTACTS_ERROR_NONE) {
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &count);
+       if (ret < CONTACTS_ERROR_NONE) {
                CTS_ERR("DB error : ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE group_id=%d AND is_read_only=0",
                        CTS_TABLE_GROUPS, id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_change();
+       ret = ctsvc_db_change(zone_name);
        if (ret <= 0) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_NO_DATA;
        }
 
-       ctsvc_get_next_ver();
+       ctsvc_get_next_ver(zone_name);
 
-       ctsvc_set_group_noti();
-       if (count > 0) {
-               ctsvc_set_group_rel_noti();
-               ctsvc_set_contact_noti();
-               ctsvc_set_person_noti();
+       ctsvc_set_group_noti(zone_name);
+       if (0 < count) {
+               ctsvc_set_group_rel_noti(zone_name);
+               ctsvc_set_contact_noti(zone_name);
+               ctsvc_set_person_noti(zone_name);
        }
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
 
@@ -444,7 +444,7 @@ static int __ctsvc_db_group_value_set(cts_stmt stmt, contacts_record_h *record)
        char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
 
        ret = contacts_record_create(_contacts_group._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        group = (ctsvc_group_s*)*record;
 
        i = 0;
@@ -470,7 +470,7 @@ static int __ctsvc_db_group_value_set(cts_stmt stmt, contacts_record_h *record)
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_group_get_record( int id, contacts_record_h *out_record )
+static int __ctsvc_db_group_get_record(const char *zone_name, int id, contacts_record_h *out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -485,12 +485,12 @@ static int __ctsvc_db_group_get_record( int id, contacts_record_h *out_record )
                                "ringtone_path, vibration, message_alert, image_thumbnail_path "
                                "FROM "CTS_TABLE_GROUPS" WHERE group_id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -502,7 +502,7 @@ static int __ctsvc_db_group_get_record( int id, contacts_record_h *out_record )
 
        ctsvc_stmt_finalize(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_group_value_set(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_group_value_set(ALL) Fail(%d)", ret);
                return ret;
        }
        *out_record = record;
@@ -510,7 +510,7 @@ static int __ctsvc_db_group_get_record( int id, contacts_record_h *out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_group_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_group_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -532,14 +532,14 @@ static int __ctsvc_db_group_get_all_records( int offset, int limit, contacts_lis
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -556,8 +556,8 @@ static int __ctsvc_db_group_get_all_records( int offset, int limit, contacts_lis
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_group_get_records_with_query( contacts_query_h query,
-       int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_group_get_records_with_query(const char *zone_name, contacts_query_h query,
+       int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -571,14 +571,14 @@ static int __ctsvc_db_group_get_records_with_query( contacts_query_h query,
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -588,17 +588,15 @@ static int __ctsvc_db_group_get_records_with_query( contacts_query_h query,
                group = (ctsvc_group_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -615,29 +613,35 @@ static int __ctsvc_db_group_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_GROUP_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group->name);
                                group->name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_GROUP_RINGTONE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group->ringtone_path);
                                group->ringtone_path = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_GROUP_IMAGE:
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTS_GROUP_IMAGE_LOCATION, temp);
+                                       free(group->image_thumbnail_path);
                                        group->image_thumbnail_path = strdup(full_path);
                                }
                                break;
                        case CTSVC_PROPERTY_GROUP_VIBRATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group->vibration);
                                group->vibration = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_GROUP_MESSAGE_ALERT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group->message_alert);
                                group->message_alert = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_GROUP_EXTRA_DATA:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group->extra_data);
                                group->extra_data = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_GROUP_IS_READ_ONLY:
@@ -657,8 +661,4 @@ static int __ctsvc_db_group_get_records_with_query( contacts_query_h query,
        return CONTACTS_ERROR_NONE;
 }
 
-//static int __ctsvc_db_group_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_group_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_group_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
-
 
similarity index 67%
rename from native/ctsvc_db_plugin_group_helper.c
rename to server/db/ctsvc_db_plugin_group_helper.c
index 9a5a552..ad0fb4d 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_zone.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_plugin_group_helper.h"
 
-// Whenever deleting group, this function will be called
-// in order to deleting group image file
+/*
+ * Whenever deleting group, this function will be called
+ * in order to deleting group image file
+ */
 void ctsvc_db_group_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv)
 {
        int ret;
        const unsigned char* path;
+       char *zone_name = NULL;
 
-       if (argc > 1) {
+       if (1 < argc) {
                sqlite3_result_null(context);
                return;
        }
        path = sqlite3_value_text(argv[0]);
 
+       zone_name = sqlite3_user_data(context);
+       char root_path[CTSVC_PATH_MAX_LEN] = {0};
+       ctsvc_zone_get_root_path(zone_name, root_path, sizeof(root_path));
+
        if (path) {
                char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
-               snprintf(full_path, sizeof(full_path), "%s/%s", CTS_GROUP_IMAGE_LOCATION, path);
+               snprintf(full_path, sizeof(full_path), "%s/%s/%s", root_path, CTS_GROUP_IMAGE_LOCATION, path);
                ret = unlink(full_path);
                if (ret < 0) {
-                       CTS_WARN("unlink Failed(%d)", errno);
+                       CTS_WARN("unlink Fail(%d)", errno);
                }
        }
 
similarity index 92%
rename from native/ctsvc_db_plugin_group_helper.h
rename to server/db/ctsvc_db_plugin_group_helper.h
index 2000884..8883b36 100644 (file)
 #define __CTSVC_DB_PLUGIN_GROUP_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
 #define CTS_GROUP_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/group"
 
 void ctsvc_db_group_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv);
 
-#endif // __CTSVC_DB_PLUGIN_GROUP_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_GROUP_HELPER_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_db_plugin_grouprelation.c
rename to server/db/ctsvc_db_plugin_grouprelation.c
index f832376..7f9527e 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_record.h"
 #include "ctsvc_db_access_control.h"
 
-static int __ctsvc_db_grouprelation_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_grouprelation_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_grouprelation_update_record( contacts_record_h record );
-static int __ctsvc_db_grouprelation_delete_record( int id );
-static int __ctsvc_db_grouprelation_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_grouprelation_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_grouprelation_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_grouprelation_delete_records( int ids[], int count);
+static int __ctsvc_db_grouprelation_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_grouprelation_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_grouprelation_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_grouprelation_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_grouprelation_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_grouprelation_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_grouprelation = {
        .is_query_only = false,
@@ -46,40 +43,40 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_grouprelation = {
        .delete_record = __ctsvc_db_grouprelation_delete_record,
        .get_all_records = __ctsvc_db_grouprelation_get_all_records,
        .get_records_with_query = __ctsvc_db_grouprelation_get_records_with_query,
-       .insert_records = NULL, //__ctsvc_db_grouprelation_insert_records,
-       .update_records = NULL, //__ctsvc_db_grouprelation_update_records,
-       .delete_records = NULL, //__ctsvc_db_grouprelation_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_grouprelation_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_grouprelation_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        CTS_ERR("Please use the contacts_group_add_contact()");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_grouprelation_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_grouprelation_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        CTS_ERR("Not support get group-relation");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_grouprelation_update_record( contacts_record_h record )
+static int __ctsvc_db_grouprelation_update_record(const char *zone_name, contacts_record_h record)
 {
        CTS_ERR("Not support update group-relation");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_grouprelation_delete_record( int id )
+static int __ctsvc_db_grouprelation_delete_record(const char *zone_name, int id)
 {
        CTS_ERR("Please use the contacts_group_remove_contact()");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_grouprelation_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_grouprelation_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -98,13 +95,13 @@ static int __ctsvc_db_grouprelation_get_all_records( int offset, int limit, cont
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -129,8 +126,8 @@ static int __ctsvc_db_grouprelation_get_all_records( int offset, int limit, cont
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h query,
-               int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_grouprelation_get_records_with_query(const char *zone_name, contacts_query_h query,
+               int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -143,14 +140,14 @@ static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h que
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -160,17 +157,15 @@ static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h que
                group_relation = (ctsvc_group_relation_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -191,6 +186,7 @@ static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h que
                                break;
                        case CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(group_relation->group_name);
                                group_relation->group_name = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -205,7 +201,3 @@ static int __ctsvc_db_grouprelation_get_records_with_query( contacts_query_h que
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_grouprelation_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_grouprelation_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_grouprelation_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 64%
rename from native/ctsvc_db_plugin_image.c
rename to server/db/ctsvc_db_plugin_image.c
index 540950c..0cb62a1 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_image_helper.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_image_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_image_update_record( contacts_record_h record );
-static int __ctsvc_db_image_delete_record( int id );
-static int __ctsvc_db_image_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_image_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_image_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_image_delete_records( int ids[], int count);
+static int __ctsvc_db_image_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_image_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_image_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_image_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_image_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_image_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_image = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_image = {
        .delete_record = __ctsvc_db_image_delete_record,
        .get_all_records = __ctsvc_db_image_get_all_records,
        .get_records_with_query = __ctsvc_db_image_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_image_insert_records,
-       .update_records = NULL,//__ctsvc_db_image_update_records,
-       .delete_records = NULL,//__ctsvc_db_image_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_image_get_default_image_id(int contact_id)
+static int __ctsvc_db_image_get_default_image_id(const char *zone_name, int contact_id)
 {
        int ret;
        int image_id = 0;
@@ -66,13 +63,13 @@ static int __ctsvc_db_image_get_default_image_id(int contact_id)
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
                        CTSVC_DATA_IMAGE, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &image_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &image_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return image_id;
 }
 
-static int __ctsvc_db_image_set_primary_default(int image_id, bool is_primary_default)
+static int __ctsvc_db_image_set_primary_default(const char *zone_name, int image_id, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -80,12 +77,12 @@ static int __ctsvc_db_image_set_primary_default(int image_id, bool is_primary_de
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default = %d WHERE id = %d",
                        is_primary_default, image_id);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_image_set_default(int image_id, int contact_id, bool is_default, bool is_primary_default)
+static int __ctsvc_db_image_set_default(const char *zone_name, int image_id, int contact_id, bool is_default, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -93,13 +90,13 @@ static int __ctsvc_db_image_set_default(int image_id, int contact_id, bool is_de
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_default = %d, is_primary_default = %d WHERE id = %d",
                        is_default, is_primary_default, image_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
 
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_image_get_primary_default_image_id(int person_id)
+static int __ctsvc_db_image_get_primary_default_image_id(const char *zone_name, int person_id)
 {
        int ret;
        int default_image_id;
@@ -109,13 +106,13 @@ static int __ctsvc_db_image_get_primary_default_image_id(int person_id)
                        "SELECT id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
                        "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
                        person_id, CTSVC_DATA_IMAGE);
-       ret = ctsvc_query_get_first_int_result(query, &default_image_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_image_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_image_id;
 }
 
-static int __ctsvc_db_image_get_primary_default_contact_id(int person_id)
+static int __ctsvc_db_image_get_primary_default_contact_id(const char *zone_name, int person_id)
 {
        int ret;
        int default_contact_id;
@@ -125,13 +122,13 @@ static int __ctsvc_db_image_get_primary_default_contact_id(int person_id)
                        "SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
                        "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
                        person_id, CTSVC_DATA_IMAGE);
-       ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_contact_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_contact_id;
 }
 
-static int __ctsvc_db_image_update_contact_image(int contact_id, const char *image_path)
+static int __ctsvc_db_image_update_contact_image(const char *zone_name, int contact_id, const char *image_path)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -139,21 +136,21 @@ static int __ctsvc_db_image_update_contact_image(int contact_id, const char *ima
 
        snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_CONTACTS" SET image_thumbnail_path=? WHERE contact_id = %d", contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (image_path)
                ctsvc_stmt_bind_text(stmt, 1, image_path);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
 
        ctsvc_stmt_finalize(stmt);
 
        return ret;
 }
 
-static int __ctsvc_db_image_update_person_image(int person_id, const char *image_path)
+static int __ctsvc_db_image_update_person_image(const char *zone_name, int person_id, const char *image_path)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -161,21 +158,21 @@ static int __ctsvc_db_image_update_person_image(int person_id, const char *image
 
        snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id = %d", person_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (image_path)
                ctsvc_stmt_bind_text(stmt, 1, image_path);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
 
        ctsvc_stmt_finalize(stmt);
 
        return ret;
 }
 
-static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_image_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int len = 0;
        int ret;
@@ -190,26 +187,26 @@ static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == image->path, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : image path is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", image->contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (ret == CONTACTS_ERROR_NONE)
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                else
@@ -220,24 +217,24 @@ static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id )
        person_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this image record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       old_default_image_id = __ctsvc_db_image_get_default_image_id(image->contact_id);
+       old_default_image_id = __ctsvc_db_image_get_default_image_id(zone_name, image->contact_id);
        if (0 == old_default_image_id)
                image->is_default = true;
 
-       ret = ctsvc_db_image_insert(record, image->contact_id, false, id);
+       ret = ctsvc_db_image_insert(zone_name, record, image->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        len = snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d ",
                        version, (int)time(NULL), version);
@@ -247,40 +244,39 @@ static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id )
 
        snprintf(query + len, sizeof(query) - len, " WHERE contact_id = %d", image->contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (image->is_default)
                ctsvc_stmt_bind_text(stmt, 1, image->path);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
        ctsvc_stmt_finalize(stmt);
 
        if (image->is_default) {
                int primary_default_contact_id;
 
-               primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(person_id);
+               primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(zone_name, person_id);
                if (primary_default_contact_id == 0 || primary_default_contact_id == image->contact_id) {
-                       __ctsvc_db_image_set_primary_default(*id, true);
-                       __ctsvc_db_image_update_person_image(person_id, image->path);
+                       __ctsvc_db_image_set_primary_default(zone_name, *id, true);
+                       __ctsvc_db_image_update_person_image(zone_name, person_id, image->path);
                }
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_image_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -296,12 +292,12 @@ static int __ctsvc_db_image_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_IMAGE);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -316,7 +312,7 @@ static int __ctsvc_db_image_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_update_record( contacts_record_h record )
+static int __ctsvc_db_image_update_record(const char *zone_name, contacts_record_h record)
 {
        int len = 0;
        int ret;
@@ -328,26 +324,26 @@ static int __ctsvc_db_image_update_record( contacts_record_h record )
        cts_stmt stmt = NULL;
        RETVM_IF(NULL == image->path, CONTACTS_ERROR_INVALID_PARAMETER, "path is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", image->contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -357,20 +353,20 @@ static int __ctsvc_db_image_update_record( contacts_record_h record )
        person_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this image record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_image_update(record, image->contact_id, false);
+       ret = ctsvc_db_image_update(zone_name, record, image->contact_id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        len = snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d ",
                        version, (int)time(NULL), version);
@@ -380,39 +376,38 @@ static int __ctsvc_db_image_update_record( contacts_record_h record )
 
        snprintf(query + len, sizeof(query) - len, " WHERE contact_id = %d", image->contact_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (image->is_default)
                ctsvc_stmt_bind_text(stmt, 1, image->path);
 
        ret = ctsvc_stmt_step(stmt);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
        ctsvc_stmt_finalize(stmt);
 
        if (image->is_default) {
                int primary_default_contact_id;
-               primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(image->contact_id);
+               primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(zone_name, image->contact_id);
                if (image->contact_id == primary_default_contact_id) {
-                       __ctsvc_db_image_set_primary_default(image->id, true);
-                       __ctsvc_db_image_update_person_image(person_id, image->path);
+                       __ctsvc_db_image_set_primary_default(zone_name, image->id, true);
+                       __ctsvc_db_image_update_person_image(zone_name, person_id, image->path);
                }
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_delete_record( int id )
+static int __ctsvc_db_image_delete_record(const char *zone_name, int id)
 {
        int ret;
        int version;
@@ -425,26 +420,26 @@ static int __ctsvc_db_image_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, person_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                        "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -456,27 +451,27 @@ static int __ctsvc_db_image_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 2);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this image record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT is_default, is_primary_default FROM "CTS_TABLE_DATA" WHERE id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -487,24 +482,24 @@ static int __ctsvc_db_image_delete_record( int id )
        is_primary_default = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       ret = ctsvc_db_image_delete(id, false);
+       ret = ctsvc_db_image_delete(zone_name, id, false);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d "
                        "WHERE contact_id = %d",
                        version, (int)time(NULL), version, contact_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -512,39 +507,37 @@ static int __ctsvc_db_image_delete_record( int id )
                snprintf(query, sizeof(query),
                                "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
                                CTSVC_DATA_IMAGE, contact_id);
-               ret = ctsvc_query_get_first_int_result(query, &image_id);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &image_id);
 
                if (image_id) {
-                       __ctsvc_db_image_set_default(image_id, contact_id, is_default, is_primary_default);
+                       __ctsvc_db_image_set_default(zone_name, image_id, contact_id, is_default, is_primary_default);
                }
                else {
-                       __ctsvc_db_image_update_contact_image(contact_id, NULL);
+                       __ctsvc_db_image_update_contact_image(zone_name, contact_id, NULL);
                        if (is_primary_default) {
                                int default_img_id = 0;
-                               default_img_id = __ctsvc_db_image_get_primary_default_image_id(person_id);
+                               default_img_id = __ctsvc_db_image_get_primary_default_image_id(zone_name, person_id);
                                if (default_img_id)
-                                       __ctsvc_db_image_set_primary_default(default_img_id, true);
+                                       __ctsvc_db_image_set_primary_default(zone_name, default_img_id, true);
                                else
-                                       __ctsvc_db_image_update_person_image(person_id, NULL);
+                                       __ctsvc_db_image_update_person_image(zone_name, person_id, NULL);
                        }
                }
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_image_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -566,13 +559,13 @@ static int __ctsvc_db_image_get_all_records( int offset, int limit, contacts_lis
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -587,8 +580,8 @@ static int __ctsvc_db_image_get_all_records( int offset, int limit, contacts_lis
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_image_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -601,14 +594,14 @@ static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -623,11 +616,11 @@ static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -647,15 +640,16 @@ static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_IMAGE_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(image->label);
                                image->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_IMAGE_PATH:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(image->path);
                                image->path = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_IMAGE_IS_DEFAULT:
-                               temp = ctsvc_stmt_get_text(stmt, i);
-                               image->is_default = SAFE_STRDUP(temp);
+                               image->is_default = ctsvc_stmt_get_int(stmt, i);
                                break;
                        default:
                                break;
@@ -669,7 +663,3 @@ static int __ctsvc_db_image_get_records_with_query( contacts_query_h query, int
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_image_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_image_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_image_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 72%
rename from native/ctsvc_db_plugin_image_helper.c
rename to server/db/ctsvc_db_plugin_image_helper.c
index 2905f6f..55d0e57 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_image_helper.h"
@@ -36,7 +36,7 @@ int ctsvc_db_image_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        ctsvc_image_s *image;
 
        ret = contacts_record_create(_contacts_image._uri, (contacts_record_h *)&image);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        image->id = ctsvc_stmt_get_int(stmt, start_count++);
        image->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -64,7 +64,7 @@ static inline int __ctsvc_image_bind_stmt(cts_stmt stmt, ctsvc_image_s *image, i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_image_reset_default(int image_id, int contact_id)
+static int __ctsvc_db_image_reset_default(const char *zone_name, int image_id, int contact_id)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -72,12 +72,12 @@ static int __ctsvc_db_image_reset_default(int image_id, int contact_id)
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_default=0, is_primary_default=0 WHERE id != %d AND contact_id = %d AND datatype=%d",
                        image_id, contact_id, CTSVC_DATA_IMAGE);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_image_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        int image_id;
@@ -86,20 +86,20 @@ int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_p
        char image_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
        ctsvc_image_s *image = (ctsvc_image_s *)record;
 
-       // These check should be done in client side
+       /* These check should be done in client side */
        RETV_IF(NULL == image->path, CONTACTS_ERROR_NONE);
        RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : contact_id(%d) is mandatory field to insert image record", image->contact_id);
        RETVM_IF(0 < image->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : id(%d), This record is already inserted", image->id);
 
-       ret = ctsvc_have_file_read_permission(image->path);
-       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_have_file_read_permission fail(%d)", ret);
+       ret = ctsvc_have_file_read_permission(zone_name, image->path);
+       RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "ctsvc_have_file_read_permission Fail(%d)", ret);
 
-       image_id = ctsvc_db_get_next_id(CTS_TABLE_DATA);
-       ret = ctsvc_contact_add_image_file(contact_id, image_id, image->path, image_path, sizeof(image_path));
+       image_id = ctsvc_db_get_next_id(zone_name, CTS_TABLE_DATA);
+       ret = ctsvc_contact_add_image_file(zone_name, contact_id, image_id, image->path, image_path, sizeof(image_path));
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_contact_add_image_file() Failed(%d)", ret);
+               CTS_ERR("ctsvc_contact_add_image_file() Fail(%d)", ret);
                return ret;
        }
        free(image->path);
@@ -110,35 +110,35 @@ int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_p
                        "VALUES(%d, %d, %d, %d, %d, %d, %d, ?, ?)",
                        image_id, contact_id, is_my_profile, CTSVC_DATA_IMAGE, image->is_default, image->is_default, image->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        __ctsvc_image_bind_stmt(stmt, image, 1);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //image->id = ctsvc_db_get_last_insert_id();
+       /* image->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
                *id = image_id;
        ctsvc_stmt_finalize(stmt);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_image.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (image->is_default)
-                       __ctsvc_db_image_reset_default(image_id, contact_id);
+                       __ctsvc_db_image_reset_default(zone_name, image_id, contact_id);
        }
 
-       if (!is_my_profile)
-               ctsvc_set_image_noti();
+       if (false == is_my_profile)
+               ctsvc_set_image_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_image_update(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -148,26 +148,26 @@ int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_p
        ctsvc_image_s *image = (ctsvc_image_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!image->id, CONTACTS_ERROR_INVALID_PARAMETER, "image of contact has no ID.");
+       RETVM_IF(0 == image->id, CONTACTS_ERROR_INVALID_PARAMETER, "image of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (image->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", image->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_image.path, CTSVC_PROPERTY_FLAG_DIRTY)) {
                char image_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
                if (image->path) {
-                       ret = ctsvc_have_file_read_permission(image->path);
+                       ret = ctsvc_have_file_read_permission(zone_name, image->path);
                        if (ret != CONTACTS_ERROR_NONE) {
                                CTS_ERR("ctsvc_have_file_read_permission Fail(%d)", ret);
                                return ret;
                        }
                }
 
-               ret = ctsvc_contact_update_image_file(contact_id, image->id, image->path, image_path, sizeof(image_path));
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_update_image_file() Failed(%d)", ret);
+               ret = ctsvc_contact_update_image_file(zone_name, contact_id, image->id, image->path, image_path, sizeof(image_path));
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_update_image_file() Fail(%d)", ret);
 
                if (*image_path) {
                        free(image->path);
@@ -177,14 +177,14 @@ int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_p
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_image.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (image->is_default)
-                       __ctsvc_db_image_reset_default(image->id, contact_id);
+                       __ctsvc_db_image_reset_default(zone_name, image->id, contact_id);
        }
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, image->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_image_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, image->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_image_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -197,7 +197,7 @@ int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_p
        return ret;
 }
 
-int ctsvc_db_image_delete(int id, bool is_my_profile)
+int ctsvc_db_image_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -205,31 +205,35 @@ int ctsvc_db_image_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_IMAGE);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_image_noti();
+       if (false == is_my_profile)
+               ctsvc_set_image_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-// Whenever deleting image recode in data table, this funcion will be called
-// in order to delete the image file
+/*
+ * Whenever deleting image recode in data table, this funcion will be called
+ * in order to delete the image file
+ */
 void ctsvc_db_image_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv)
 {
        int ret;
        const unsigned char* image_path;
+       char *zone_name = NULL;
 
-       if (argc > 1) {
+       if (1 < argc) {
                sqlite3_result_null(context);
                return;
        }
        image_path = sqlite3_value_text(argv[0]);
 
-       ret = ctsvc_contact_delete_image_file_with_path(image_path);
+       zone_name = sqlite3_user_data(context);
+       ret = ctsvc_contact_delete_image_file_with_path(zone_name, image_path);
        WARN_IF (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
-                       "ctsvc_contact_delete_image_file_with_path Failed(%d)", ret);
+                       "ctsvc_contact_delete_image_file_with_path Fail(%d)", ret);
 
        return;
 }
similarity index 71%
rename from native/ctsvc_db_plugin_image_helper.h
rename to server/db/ctsvc_db_plugin_image_helper.h
index 6a6daac..24fb9c1 100644 (file)
 #define __CTSVC_DB_PLUGIN_IMAGE_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_image_delete(int id, bool is_my_profile);
+int ctsvc_db_image_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_image_update(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile);
+int ctsvc_db_image_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_image_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 void ctsvc_db_image_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv);
 
-#endif // __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__ */
\ No newline at end of file
similarity index 66%
rename from native/ctsvc_db_plugin_messenger.c
rename to server/db/ctsvc_db_plugin_messenger.c
index f3e7cfd..1b2f651 100644 (file)
@@ -18,9 +18,9 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_list.h"
 
-static int __ctsvc_db_messenger_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_messenger_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_messenger_update_record( contacts_record_h record );
-static int __ctsvc_db_messenger_delete_record( int id );
-static int __ctsvc_db_messenger_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_messenger_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_messenger_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_messenger_delete_records( int ids[], int count);
+static int __ctsvc_db_messenger_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_messenger_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_messenger_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_messenger_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_messenger_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_messenger_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_messenger = {
        .is_query_only = false,
@@ -48,16 +45,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_messenger = {
        .delete_record = __ctsvc_db_messenger_delete_record,
        .get_all_records = __ctsvc_db_messenger_get_all_records,
        .get_records_with_query = __ctsvc_db_messenger_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_messenger_insert_records,
-       .update_records = NULL,//__ctsvc_db_messenger_update_records,
-       .delete_records = NULL,//__ctsvc_db_messenger_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_messenger_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_messenger_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -67,17 +64,17 @@ static int __ctsvc_db_messenger_insert_record( contacts_record_h record, int *id
        RETVM_IF(NULL == messenger->im_id, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : messenger id is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", messenger->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", messenger->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -88,38 +85,37 @@ static int __ctsvc_db_messenger_insert_record( contacts_record_h record, int *id
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this messenger record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_messenger_insert(record, messenger->contact_id, false, id);
+       ret = ctsvc_db_messenger_insert(zone_name, record, messenger->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(messenger->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, messenger->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_messenger_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_messenger_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -135,12 +131,12 @@ static int __ctsvc_db_messenger_get_record( int id, contacts_record_h* out_recor
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_MESSENGER);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -155,7 +151,7 @@ static int __ctsvc_db_messenger_get_record( int id, contacts_record_h* out_recor
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_messenger_update_record( contacts_record_h record )
+static int __ctsvc_db_messenger_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -163,53 +159,52 @@ static int __ctsvc_db_messenger_update_record( contacts_record_h record )
        ctsvc_messenger_s *messenger = (ctsvc_messenger_s *)record;
        RETVM_IF(NULL == messenger->im_id, CONTACTS_ERROR_INVALID_PARAMETER, "im_id is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", messenger->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", messenger->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this messenger record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_messenger_update(record, false);
+       ret = ctsvc_db_messenger_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(messenger->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, messenger->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_messenger_delete_record( int id )
+static int __ctsvc_db_messenger_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -217,26 +212,26 @@ static int __ctsvc_db_messenger_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -247,38 +242,37 @@ static int __ctsvc_db_messenger_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this messenger record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_messenger_delete(id, false);
+       ret = ctsvc_db_messenger_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_messenger_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_messenger_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -300,13 +294,13 @@ static int __ctsvc_db_messenger_get_all_records( int offset, int limit, contacts
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -321,8 +315,8 @@ static int __ctsvc_db_messenger_get_all_records( int offset, int limit, contacts
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_messenger_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -335,14 +329,14 @@ static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query,
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -357,11 +351,11 @@ static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query,
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -381,10 +375,12 @@ static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_MESSENGER_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(messenger->label);
                                messenger->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_MESSENGER_IM_ID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(messenger->im_id);
                                messenger->im_id = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -400,6 +396,3 @@ static int __ctsvc_db_messenger_get_records_with_query( contacts_query_h query,
        return CONTACTS_ERROR_NONE;
 }
 
-//static int __ctsvc_db_messenger_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_messenger_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_messenger_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 78%
rename from native/ctsvc_db_plugin_messenger_helper.c
rename to server/db/ctsvc_db_plugin_messenger_helper.c
index c8018ad..0ea6c82 100644 (file)
@@ -18,8 +18,8 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_messenger_helper.h"
@@ -34,7 +34,7 @@ int ctsvc_db_messenger_get_value_from_stmt(cts_stmt stmt, contacts_record_h *rec
        ctsvc_messenger_s *messenger;
 
        ret = contacts_record_create(_contacts_messenger._uri, (contacts_record_h *)&messenger);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        messenger->id = ctsvc_stmt_get_int(stmt, start_count++);
        messenger->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -49,7 +49,7 @@ int ctsvc_db_messenger_get_value_from_stmt(cts_stmt stmt, contacts_record_h *rec
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_messenger_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_messenger_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -67,8 +67,8 @@ int ctsvc_db_messenger_insert(contacts_record_h record, int contact_id, bool is_
                                        "VALUES(%d, %d, %d, %d, ?, ?)",
                        contact_id, is_my_profile, CTSVC_DATA_MESSENGER, messenger->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (messenger->label)
                sqlite3_bind_text(stmt, 1, messenger->label,
@@ -79,23 +79,23 @@ int ctsvc_db_messenger_insert(contacts_record_h record, int contact_id, bool is_
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //messenger->id = ctsvc_db_get_last_insert_id();
+       //messenger->id = ctsvc_db_get_last_insert_id(zone_name);
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_messenger_noti();
+       if (false == is_my_profile)
+               ctsvc_set_messenger_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_messenger_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -105,19 +105,19 @@ int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile)
        ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       RETVM_IF(!messenger->id, CONTACTS_ERROR_INVALID_PARAMETER, "messenger of contact has no ID.");
+       RETVM_IF(0 == messenger->id, CONTACTS_ERROR_INVALID_PARAMETER, "messenger of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (messenger->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", messenger->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, messenger->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_messenger_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, messenger->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_messenger_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -131,7 +131,7 @@ int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_messenger_delete(int id, bool is_my_profile)
+int ctsvc_db_messenger_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -139,11 +139,11 @@ int ctsvc_db_messenger_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_MESSENGER);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_messenger_noti();
+       if (false == is_my_profile)
+               ctsvc_set_messenger_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 69%
rename from native/ctsvc_db_plugin_messenger_helper.h
rename to server/db/ctsvc_db_plugin_messenger_helper.h
index f7e3671..e73235f 100644 (file)
 #define __CTSVC_DB_PLUGIN_MESSENGER_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_messenger_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_messenger_delete(int id, bool is_my_profile);
+int ctsvc_db_messenger_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_messenger_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_messenger_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_messenger_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_MESSENGER_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_MESSENGER_HELPER_H__ */
\ No newline at end of file
similarity index 64%
rename from native/ctsvc_db_plugin_my_profile.c
rename to server/db/ctsvc_db_plugin_my_profile.c
index 81e810f..4bbb806 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_record.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_list.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_localize_ch.h"
-#include "ctsvc_group.h"
+#include "ctsvc_server_group.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_db_access_control.h"
 
 #define CTSVC_MY_PROFILE_DISPLAY_NAME_MAX_LEN 1024
 
-static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_my_profile_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_my_profile_update_record( contacts_record_h record );
-static int __ctsvc_db_my_profile_delete_record( int id );
+static int __ctsvc_db_my_profile_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_my_profile_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_my_profile_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_my_profile_delete_record(const char *zone_name, int id);
 
-static int __ctsvc_db_my_profile_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
+static int __ctsvc_db_my_profile_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_my_profile_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_my_profile = {
        .is_query_only = false,
@@ -66,7 +66,7 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_my_profile = {
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_get_my_profile_base_info(int id, ctsvc_my_profile_s *my_profile)
+static int __ctsvc_db_get_my_profile_base_info(const char *zone_name, int id, ctsvc_my_profile_s *my_profile)
 {
        int ret;
        int i;
@@ -77,15 +77,15 @@ static int __ctsvc_db_get_my_profile_base_info(int id, ctsvc_my_profile_s *my_pr
 
        snprintf(query, sizeof(query),
                        "SELECT my_profile_id, addressbook_id, changed_time, %s, image_thumbnail_path, uid "
-                               "FROM "CTS_TABLE_MY_PROFILES" WHERE my_profile_id = %d AND deleted = 0",
-                               ctsvc_get_display_column(), id);
+                       "FROM "CTS_TABLE_MY_PROFILES" WHERE my_profile_id = %d AND deleted = 0",
+                       ctsvc_get_display_column(zone_name), id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -111,7 +111,7 @@ static int __ctsvc_db_get_my_profile_base_info(int id, ctsvc_my_profile_s *my_pr
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_my_profile_get_data(int id, ctsvc_my_profile_s *my_profile)
+static int __ctsvc_db_my_profile_get_data(const char *zone_name, int id, ctsvc_my_profile_s *my_profile)
 {
        int ret;
        int datatype;
@@ -123,12 +123,12 @@ static int __ctsvc_db_my_profile_get_data(int id, ctsvc_my_profile_s *my_profile
                                        "data3, data4, data5, data6, data7, data8, data9, data10, data11, data12 "
                                        "FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND is_my_profile = 1", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE */!= ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
@@ -183,7 +183,7 @@ static int __ctsvc_db_my_profile_get_data(int id, ctsvc_my_profile_s *my_profile
                        break;
                }
 
-       }while(1 /*CTS_TRUE*/ == ctsvc_stmt_step(stmt));
+       } while (1 /*CTS_TRUE*/ == ctsvc_stmt_step(stmt));
 
        ctsvc_stmt_finalize(stmt);
 
@@ -191,7 +191,7 @@ static int __ctsvc_db_my_profile_get_data(int id, ctsvc_my_profile_s *my_profile
 
 }
 
-static int __ctsvc_db_my_profile_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_my_profile_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        contacts_record_h record;
@@ -202,16 +202,16 @@ static int __ctsvc_db_my_profile_get_record( int id, contacts_record_h* out_reco
 
        contacts_record_create(_contacts_my_profile._uri, &record);
        my_profile = (ctsvc_my_profile_s *)record;
-       ret = __ctsvc_db_get_my_profile_base_info(id, my_profile);
+       ret = __ctsvc_db_get_my_profile_base_info(zone_name, id, my_profile);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("cts_get_main_contacts_info(ALL) Failed(%d)", ret);
+               CTS_ERR("cts_get_main_contacts_info(ALL) Fail(%d)", ret);
                contacts_record_destroy(record, true);
                return ret;
        }
 
-       ret = __ctsvc_db_my_profile_get_data(id, my_profile);
+       ret = __ctsvc_db_my_profile_get_data(zone_name, id, my_profile);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_my_profile_get_data Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_my_profile_get_data Fail(%d)", ret);
                contacts_record_destroy(record, true);
                return ret;
        }
@@ -221,166 +221,165 @@ static int __ctsvc_db_my_profile_get_record( int id, contacts_record_h* out_reco
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_my_profile_delete_record( int id )
+static int __ctsvc_db_my_profile_delete_record(const char *zone_name, int id)
 {
        CTS_FN_CALL;
        int ret;
        int addressbook_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT addressbook_id FROM "CTSVC_DB_VIEW_MY_PROFILE" WHERE my_profile_id = %d", id);
-       ret  = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret  = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_get_first_int_result Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this contact");
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_MY_PROFILES" "
-                                       "SET deleted = 1, changed_ver = %d WHERE my_profile_id = %d", ctsvc_get_next_ver(), id);
-       ret = ctsvc_query_exec(query);
+                                       "SET deleted = 1, changed_ver = %d WHERE my_profile_id = %d", ctsvc_get_next_ver(zone_name), id);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_my_profile_noti();
+       ctsvc_set_my_profile_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_my_profile_update_data(ctsvc_my_profile_s *my_profile)
+static inline int __ctsvc_my_profile_update_data(const char *zone_name, ctsvc_my_profile_s *my_profile)
 {
        int ret;
 
        if (my_profile->name) {
-               ret = ctsvc_contact_update_data_name((contacts_list_h)my_profile->name, my_profile->id, true);
+               ret = ctsvc_contact_update_data_name(zone_name, (contacts_list_h)my_profile->name, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_name() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_name() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->company) {
-               ret = ctsvc_contact_update_data_company((contacts_list_h)my_profile->company, my_profile->id, true);
+               ret = ctsvc_contact_update_data_company(zone_name, (contacts_list_h)my_profile->company, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_company() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_company() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->note) {
-               ret = ctsvc_contact_update_data_note((contacts_list_h)my_profile->note, my_profile->id, true);
+               ret = ctsvc_contact_update_data_note(zone_name, (contacts_list_h)my_profile->note, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_note() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_note() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->events) {
-               ret = ctsvc_contact_update_data_event((contacts_list_h)my_profile->events, my_profile->id, true);
+               ret = ctsvc_contact_update_data_event(zone_name, (contacts_list_h)my_profile->events, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_events() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_events() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->messengers) {
-               ret = ctsvc_contact_update_data_messenger((contacts_list_h)my_profile->messengers, my_profile->id, true);
+               ret = ctsvc_contact_update_data_messenger(zone_name, (contacts_list_h)my_profile->messengers, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_messengers() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_messengers() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->postal_addrs) {
-               ret = ctsvc_contact_update_data_address((contacts_list_h)my_profile->postal_addrs, my_profile->id, true);
+               ret = ctsvc_contact_update_data_address(zone_name, (contacts_list_h)my_profile->postal_addrs, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_address() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_address() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->urls) {
-               ret = ctsvc_contact_update_data_url((contacts_list_h)my_profile->urls, my_profile->id, true);
+               ret = ctsvc_contact_update_data_url(zone_name, (contacts_list_h)my_profile->urls, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_url() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_url() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->nicknames) {
-               ret = ctsvc_contact_update_data_nickname((contacts_list_h)my_profile->nicknames, my_profile->id, true);
+               ret = ctsvc_contact_update_data_nickname(zone_name, (contacts_list_h)my_profile->nicknames, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_nickname() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_nickname() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->numbers) {
                bool had_phonenumber;
-               ret = ctsvc_contact_update_data_number((contacts_list_h)my_profile->numbers, my_profile->id, true, &had_phonenumber);
+               ret = ctsvc_contact_update_data_number(zone_name, (contacts_list_h)my_profile->numbers, my_profile->id, true, &had_phonenumber);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_number() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_number() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->emails) {
                bool had_email;
-               ret = ctsvc_contact_update_data_email((contacts_list_h)my_profile->emails, my_profile->id, true, &had_email);
+               ret = ctsvc_contact_update_data_email(zone_name, (contacts_list_h)my_profile->emails, my_profile->id, true, &had_email);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_email() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_email() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->profiles) {
-               ret = ctsvc_contact_update_data_profile((contacts_list_h)my_profile->profiles, my_profile->id, true);
+               ret = ctsvc_contact_update_data_profile(zone_name, (contacts_list_h)my_profile->profiles, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_profile() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_profile() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->relationships) {
-               ret = ctsvc_contact_update_data_relationship((contacts_list_h)my_profile->relationships, my_profile->id, true);
+               ret = ctsvc_contact_update_data_relationship(zone_name, (contacts_list_h)my_profile->relationships, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_relationship() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_relationship() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->images) {
-               ret = ctsvc_contact_update_data_image((contacts_list_h)my_profile->images, my_profile->id, true);
+               ret = ctsvc_contact_update_data_image(zone_name, (contacts_list_h)my_profile->images, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_image() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_image() Fail(%d)", ret);
                        return ret;
                }
        }
 
        if (my_profile->extensions) {
-               ret = ctsvc_contact_update_data_extension((contacts_list_h)my_profile->extensions, my_profile->id, true);
+               ret = ctsvc_contact_update_data_extension(zone_name, (contacts_list_h)my_profile->extensions, my_profile->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_update_data_extension() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_update_data_extension() Fail(%d)", ret);
                        return ret;
                }
        }
@@ -406,7 +405,7 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
        free(my_profile->reverse_display_name);
        my_profile->reverse_display_name = NULL;
 
-       if (my_profile->name->count > 0 && my_profile->name->records != NULL && my_profile->name->records->data != NULL) {
+       if (0 < my_profile->name->count && my_profile->name->records && my_profile->name->records->data) {
                name = (ctsvc_name_s *)my_profile->name->records->data;
        }
 
@@ -417,14 +416,14 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                int temp_display_len;
                char *temp_display = NULL;
 
-               ///////////////////////////////////////////////
-               // Make reverse display name (Last name first)
-               // Default         : Prefix Last, First Middle(addition), Suffix
-               // Korean, Chinese : Prefix LastFirstMiddleSuffix
-               // Japanese        : Prefix Last Middle First Suffix
-               // reverse sort name does not include prefix
-               //    But, if there is only prefix, reverse sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make reverse display name (Last name first)
+                * Default         : Prefix Last, First Middle(addition), Suffix
+                * Korean, Chinese : Prefix LastFirstMiddleSuffix
+                * Japanese        : Prefix Last Middle First Suffix
+                * reverse sort name does not include prefix
+                *    But, if there is only prefix, reverse sort_name is prefix
+                */
                temp_display_len = SAFE_STRLEN(name->first)
                                                + SAFE_STRLEN(name->addition)
                                                + SAFE_STRLEN(name->last)
@@ -432,7 +431,10 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                if (0 < temp_display_len) {
                        temp_display_len += 7;
                        temp_display = calloc(1, temp_display_len);
-                       RETM_IF(NULL == temp_display, "calloc() return NULL");
+                       if (NULL == temp_display) {
+                               CTS_ERR("calloc() Fail");
+                               return;
+                       }
                        len=0;
 
                        if (name->last) {
@@ -445,7 +447,7 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                if (reverse_lang_type != CTSVC_LANG_KOREAN &&
                                        reverse_lang_type != CTSVC_LANG_CHINESE &&
                                        reverse_lang_type != CTSVC_LANG_JAPANESE) {
-                                       if(name->first || name->addition)
+                                       if (name->first || name->addition)
                                                len += snprintf(temp_display + len, temp_display_len - len, ",");
                                }
                        }
@@ -462,15 +464,15 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                }
                        }
 
-                       if(reverse_lang_type == CTSVC_LANG_JAPANESE) {
-                               // make temp_display name Prefix - Last - Middle - First - Suffix
-                               if(name->addition) {
+                       if (reverse_lang_type == CTSVC_LANG_JAPANESE) {
+                               /* make temp_display name Prefix - Last - Middle - First - Suffix */
+                               if (name->addition) {
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->addition);
                                }
 
-                               if(name->first) {
+                               if (name->first) {
                                        if (*temp_display)
                                                len += snprintf(temp_display + len, temp_display_len - len, " ");
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->first);
@@ -520,16 +522,15 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                        }
                }
 
-               if(name->prefix && temp_display) {
+               if (name->prefix && temp_display) {
                        display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                        display = calloc(1, display_len);
                        if (NULL == display) {
-                               CTS_ERR("calloc() return NULL");
+                               CTS_ERR("calloc() Fail");
                                free(temp_display);
                                return;
                        }
-
-                       snprintf(display, display_len , "%s %s", name->prefix, temp_display);
+                       snprintf(display, display_len, "%s %s", name->prefix, temp_display);
                        my_profile->reverse_display_name = display;
                        free(temp_display);
                }
@@ -538,17 +539,16 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                }
                else if (name->prefix) {
                        my_profile->reverse_display_name = strdup(name->prefix);
-                       RETM_IF(NULL == my_profile->reverse_display_name, "strdup() return NULL");
                }
 
-               ///////////////////////////////////////////////
-               // Make display name (First name first)
-               // Default         : Prefix First Middle Last, Suffix
-               // Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
-               // Japanese        : Prefix First Middle Last Suffix
-               // sort name does not include prefix
-               //    But, if there is only prefix, sort_name is prefix
-               //////////////////////////////////////////////
+               /*
+                * Make display name (First name first)
+                * Default         : Prefix First Middle Last, Suffix
+                * Korean, Chinese : Prefix LastFirstMiddleSuffix (Same as reverse display name)
+                * Japanese        : Prefix First Middle Last Suffix
+                * sort name does not include prefix
+                *    But, if there is only prefix, sort_name is prefix
+                */
                if (reverse_lang_type == CTSVC_LANG_KOREAN ||
                        reverse_lang_type == CTSVC_LANG_CHINESE)
                        my_profile->display_name = SAFE_STRDUP(my_profile->reverse_display_name);
@@ -561,9 +561,12 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                                                + SAFE_STRLEN(name->suffix);
                        if (0 < temp_display_len) {
                                temp_display_len += 6;
-                               // make reverse_temp_display_name
+                               /* make reverse_temp_display_name */
                                temp_display = calloc(1, temp_display_len);
-                               RETM_IF(NULL == temp_display, "calloc() return NULL");
+                               if (NULL == temp_display) {
+                                       CTS_ERR("calloc() Fail");
+                                       return;
+                               }
                                len = 0;
 
                                if (name->first) {
@@ -584,7 +587,7 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                        len += snprintf(temp_display + len, temp_display_len - len, "%s", name->last);
                                }
 
-                               if(name->suffix) {
+                               if (name->suffix) {
                                        if (*temp_display) {
                                                lang_type = ctsvc_check_language_type(temp_display);
                                                if (lang_type == CTSVC_LANG_JAPANESE)
@@ -600,11 +603,11 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                display_len = SAFE_STRLEN(name->prefix) + temp_display_len + 2;
                                display = calloc(1, display_len);
                                if (NULL == display) {
-                                       CTS_ERR("calloc() return NULL");
+                                       CTS_ERR("calloc() Fail");
                                        free(temp_display);
                                        return;
                                }
-                               snprintf(display, display_len , "%s %s", name->prefix, temp_display);
+                               snprintf(display, display_len, "%s %s", name->prefix, temp_display);
                                my_profile->display_name = display;
                                free(temp_display);
                        }
@@ -613,7 +616,6 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                        }
                        else if (name->prefix) {
                                my_profile->display_name = strdup(name->prefix);
-                               RETM_IF(NULL == my_profile->display_name, "strdup() return NULL");
                        }
                }
 
@@ -626,53 +628,56 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
                                ctsvc_company_s *company = (ctsvc_company_s *)cur->data;
                                if (company && company->name) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(my_profile->display_name, company->name);
+                                       my_profile->display_name = SAFE_STRDUP(company->name);
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                my_profile->nicknames && my_profile->nicknames->records) {
                        for (cur=my_profile->nicknames->records;cur;cur=cur->next) {
                                ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)cur->data;
                                if (nickname && nickname->nickname) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(my_profile->display_name, nickname->nickname);
+                                       free(my_profile->display_name);
+                                       my_profile->display_name = SAFE_STRDUP(nickname->nickname);
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                my_profile->numbers && my_profile->numbers->records) {
                        for (cur=my_profile->numbers->records;cur;cur=cur->next) {
                                ctsvc_number_s *number = (ctsvc_number_s *)cur->data;
                                if (number && number->number) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(my_profile->display_name, number->number);
+                                       free(my_profile->display_name);
+                                       my_profile->display_name = SAFE_STRDUP(number->number);
                                        break;
                                }
                        }
                }
 
-               if (!ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
+               if (false == ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY) &&
                                my_profile->emails && my_profile->emails->records) {
                        for (cur=my_profile->emails->records;cur;cur=cur->next) {
                                ctsvc_email_s *email = (ctsvc_email_s *)cur->data;
                                if (email && email->email_addr) {
                                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
-                                       FREEandSTRDUP(my_profile->display_name, email->email_addr);
+                                       free(my_profile->display_name);
+                                       my_profile->display_name = SAFE_STRDUP(email->email_addr);
                                        break;
                                }
                        }
                }
 
                if (ctsvc_record_check_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY)) {
-                       FREEandSTRDUP(my_profile->reverse_display_name, my_profile->display_name);
+                       my_profile->reverse_display_name = SAFE_STRDUP(my_profile->display_name);
                }
                else {
-                       // Update as NULL
+                       /* Update as NULL */
                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
                }
        }
@@ -680,7 +685,7 @@ static void __ctsvc_make_my_profile_display_name(ctsvc_my_profile_s *my_profile)
 }
 
 
-static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
+static int __ctsvc_db_my_profile_update_record(const char *zone_name, contacts_record_h record)
 {
        int id;
        int ret;
@@ -690,59 +695,60 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
        GSList *bind_text = NULL;
        GSList *cursor = NULL;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT my_profile_id FROM "CTSVC_DB_VIEW_MY_PROFILE" WHERE my_profile_id = %d", my_profile->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("The index(%d) is Invalid. %d Record(s) is(are) found", my_profile->id, ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(my_profile->addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, my_profile->addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d)",
                                        my_profile->addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        __ctsvc_make_my_profile_display_name(my_profile);
        __ctsvc_my_profile_check_default_data(my_profile);
 
-       //update data
-       ret = __ctsvc_my_profile_update_data(my_profile);
+       /* update data */
+       ret = __ctsvc_my_profile_update_data(zone_name, my_profile);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_my_profile_update_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("__ctsvc_my_profile_update_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       //////////////////////////////////////////////////////////////////////
-       // this code will be removed.
+       /* thumbnail */
        if (my_profile->images) {
                int ret = CONTACTS_ERROR_NONE;
-               contacts_record_h record_image = NULL;
                int count = 0;
                ctsvc_image_s *image;
 
                contacts_list_get_count((contacts_list_h)my_profile->images, &count);
                if (count) {
                        contacts_list_first((contacts_list_h)my_profile->images);
-                       ret = contacts_list_get_current_record_p((contacts_list_h)my_profile->images, &record_image);
+                       do {
+                               ret = contacts_list_get_current_record_p((contacts_list_h)my_profile->images, (contacts_record_h*)&image);
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       CTS_ERR("contacts_list_get_current_record_p() Fail(%d)", ret);
+                                       ctsvc_end_trans(zone_name, false);
+                                       return CONTACTS_ERROR_DB;
+                               }
 
-                       if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
-                               return CONTACTS_ERROR_DB;
-                       }
+                               if (image->is_default)
+                                       break;
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)my_profile->images));
 
-                       image = (ctsvc_image_s*)record_image;
-                       if ((NULL == my_profile->image_thumbnail_path && NULL != image->path) ||
-                                       (NULL != my_profile->image_thumbnail_path && NULL == image->path) ||
-                                       (my_profile->image_thumbnail_path && image->path && 0 != strcmp(my_profile->image_thumbnail_path, image->path))) {
+                       if ((NULL == my_profile->image_thumbnail_path && image->path) ||
+                                       (my_profile->image_thumbnail_path && NULL == image->path) ||
+                                       (my_profile->image_thumbnail_path && image->path && STRING_EQUAL != strcmp(my_profile->image_thumbnail_path, image->path))) {
                                ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
 
                                if (ctsvc_contact_check_image_location(image->path))
@@ -757,8 +763,6 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
                        ctsvc_record_set_property_flag((ctsvc_record_s *)my_profile, _contacts_my_profile.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
                }
        }
-       // this code will be removed.
-       //////////////////////////////////////////////////////////////////////
 
        do {
                int len = 0;
@@ -767,10 +771,10 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
                char query_set[CTS_SQL_MIN_LEN] = {0, };
                cts_stmt stmt = NULL;
 
-               version = ctsvc_get_next_ver();
+               version = ctsvc_get_next_ver(zone_name);
 
                ret = ctsvc_db_create_set_query(record, &set, &bind_text);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_db_create_set_query() Failed(%d)", ret);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_db_create_set_query() Fail(%d)", ret);
 
                if (set && *set)
                        len = snprintf(query_set, sizeof(query_set), "%s, ", set);
@@ -785,9 +789,9 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
 
                snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE my_profile_id = %d", CTS_TABLE_MY_PROFILES, query_set, my_profile->id);
 
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        break;
                }
 
@@ -802,7 +806,7 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
 
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
@@ -817,15 +821,15 @@ static int __ctsvc_db_my_profile_update_record( contacts_record_h record )
                g_slist_free(bind_text);
        }
 
-       ctsvc_set_my_profile_noti();
+       ctsvc_set_my_profile_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_my_profile_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_my_profile_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -843,22 +847,22 @@ static int __ctsvc_db_my_profile_get_all_records( int offset, int limit, contact
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
                my_profile_id = ctsvc_stmt_get_int(stmt, 0);
-               ret = contacts_db_get_record(_contacts_my_profile._uri, my_profile_id, &record);
+               ret = ctsvc_db_get_record(zone_name, _contacts_my_profile._uri, my_profile_id, &record);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : contacts_db_get_record() Failed(%d)", ret);
+                       CTS_ERR("DB error : contacts_db_get_record() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -872,7 +876,7 @@ static int __ctsvc_db_my_profile_get_all_records( int offset, int limit, contact
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_my_profile_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -896,25 +900,29 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
                        }
                }
        }
-       else
+       else {
+               s_query->projection_count = 0;
                had_my_profile_id = true;
+       }
 
-       if (!had_my_profile_id) {
-               unsigned int *temp = realloc(s_query->projection, s_query->projection_count+1);
-               RETVM_IF(NULL == temp, CONTACTS_ERROR_OUT_OF_MEMORY, "realloc() return NULL");
-               s_query->projection = temp;
+       if (false == had_my_profile_id) {
+               s_query->projection = realloc(s_query->projection, s_query->projection_count+1);
+               if (NULL == s_query->projection) {
+                       CTS_ERR("realloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
                s_query->projection[s_query->projection_count] = CTSVC_PROPERTY_MY_PROFILE_ID;
                s_query->projection_count++;
        }
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -933,7 +941,7 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -949,6 +957,7 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(my_profile->display_name);
                                my_profile->display_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID:
@@ -958,6 +967,7 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                                       free(my_profile->image_thumbnail_path);
                                        my_profile->image_thumbnail_path = strdup(full_path);
                                }
                                break;
@@ -966,15 +976,16 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_MY_PROFILE_UID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(my_profile->uid);
                                my_profile->uid = SAFE_STRDUP(temp);
                                break;
                        default:
                                break;
                        }
                }
-               ret = __ctsvc_db_my_profile_get_data(my_profile_id, my_profile);
+               ret = __ctsvc_db_my_profile_get_data(zone_name, my_profile_id, my_profile);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("__ctsvc_db_my_profile_get_data Failed(%d)", ret);
+                       CTS_ERR("__ctsvc_db_my_profile_get_data Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -990,136 +1001,132 @@ static int __ctsvc_db_my_profile_get_records_with_query( contacts_query_h query,
        return CONTACTS_ERROR_NONE;
 }
 
-//static int __ctsvc_db_my_profile_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_my_profile_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_my_profile_delete_records(int ids[], int count) { return CONTACTS_ERROR_NONE; }
-
-static int __ctsvc_my_profile_insert_data(ctsvc_my_profile_s *contact)
+static int __ctsvc_my_profile_insert_data(const char *zone_name, ctsvc_my_profile_s *contact)
 {
        int ret;
 
-       //Insert the name
+       /* Insert the name */
        if (contact->name) {
-               ret = ctsvc_contact_insert_data_name((contacts_list_h)contact->name, contact->id, true);
+               ret = ctsvc_contact_insert_data_name(zone_name, (contacts_list_h)contact->name, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_name() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_name() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the company
+       /* Insert the company */
        if (contact->company) {
-               ret = ctsvc_contact_insert_data_company((contacts_list_h)contact->company, contact->id, true);
+               ret = ctsvc_contact_insert_data_company(zone_name, (contacts_list_h)contact->company, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_company() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_company() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the events
+       /* Insert the events */
        if (contact->events) {
-               ret = ctsvc_contact_insert_data_event((contacts_list_h)contact->events, contact->id, true);
+               ret = ctsvc_contact_insert_data_event(zone_name, (contacts_list_h)contact->events, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_event() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_event() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the messengers
+       /* Insert the messengers */
        if (contact->messengers) {
-               ret = ctsvc_contact_insert_data_messenger((contacts_list_h)contact->messengers, contact->id, true);
+               ret = ctsvc_contact_insert_data_messenger(zone_name, (contacts_list_h)contact->messengers, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_messenger() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_messenger() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the postals
+       /* Insert the postals */
        if (contact->postal_addrs) {
-               ret = ctsvc_contact_insert_data_address((contacts_list_h)contact->postal_addrs, contact->id, true);
+               ret = ctsvc_contact_insert_data_address(zone_name, (contacts_list_h)contact->postal_addrs, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_postal() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_postal() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the Web addrs
+       /* Insert the Web addrs */
        if (contact->urls) {
-               ret = ctsvc_contact_insert_data_url((contacts_list_h)contact->urls, contact->id, true);
+               ret = ctsvc_contact_insert_data_url(zone_name, (contacts_list_h)contact->urls, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_web() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_web() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the Nick names
+       /* Insert the Nick names */
        if (contact->nicknames) {
-               ret = ctsvc_contact_insert_data_nickname((contacts_list_h)contact->nicknames, contact->id, true);
+               ret = ctsvc_contact_insert_data_nickname(zone_name, (contacts_list_h)contact->nicknames, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_nickname() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_nickname() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the numbers
+       /* Insert the numbers */
        if (contact->numbers) {
-               ret = ctsvc_contact_insert_data_number((contacts_list_h)contact->numbers, contact->id, true);
+               ret = ctsvc_contact_insert_data_number(zone_name, (contacts_list_h)contact->numbers, contact->id, true);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_contact_insert_data_number() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_number() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the emails
+       /* Insert the emails */
        if (contact->emails) {
-               ret = ctsvc_contact_insert_data_email((contacts_list_h)contact->emails, contact->id, true);
+               ret = ctsvc_contact_insert_data_email(zone_name, (contacts_list_h)contact->emails, contact->id, true);
                if (ret < CONTACTS_ERROR_NONE) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_email() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_email() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the profile values
+       /* Insert the profile values */
        if (contact->profiles) {
-               ret = ctsvc_contact_insert_data_profile((contacts_list_h)contact->profiles, contact->id, true);
+               ret = ctsvc_contact_insert_data_profile(zone_name, (contacts_list_h)contact->profiles, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_insert_my_profile_data_profile() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_insert_my_profile_data_profile() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the relationship values
+       /* Insert the relationship values */
        if (contact->relationships) {
-               ret = ctsvc_contact_insert_data_relationship((contacts_list_h)contact->relationships, contact->id, true);
+               ret = ctsvc_contact_insert_data_relationship(zone_name, (contacts_list_h)contact->relationships, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_relationship() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_relationship() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the image values
+       /* Insert the image values */
        if (contact->images) {
-               ret = ctsvc_contact_insert_data_image((contacts_list_h)contact->images, contact->id, true);
+               ret = ctsvc_contact_insert_data_image(zone_name, (contacts_list_h)contact->images, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_image() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_image() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the note values
+       /* Insert the note values */
        if (contact->note) {
-               ret = ctsvc_contact_insert_data_note((contacts_list_h)contact->note, contact->id, true);
+               ret = ctsvc_contact_insert_data_note(zone_name, (contacts_list_h)contact->note, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_note() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_note() Fail(%d)", ret);
                        return ret;
                }
        }
 
-       //Insert the extensions values
+       /* Insert the extensions values */
        if (contact->extensions) {
-               ret = ctsvc_contact_insert_data_extension((contacts_list_h)contact->extensions, contact->id, true);
+               ret = ctsvc_contact_insert_data_extension(zone_name, (contacts_list_h)contact->extensions, contact->id, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_contact_insert_data_extension() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_contact_insert_data_extension() Fail(%d)", ret);
                        return ret;
                }
        }
@@ -1127,7 +1134,7 @@ static int __ctsvc_my_profile_insert_data(ctsvc_my_profile_s *contact)
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *id)
+static int __ctsvc_db_my_profile_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        CTS_FN_CALL;
        int ret;
@@ -1137,7 +1144,7 @@ static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *i
        ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s*)record;
        cts_stmt stmt;
 
-       // These check should be done in client side
+       /* These check should be done in client side */
        RETVM_IF(NULL == my_profile, CONTACTS_ERROR_INVALID_PARAMETER,
                                        "Invalid parameter : my_profile is NULL");
        RETVM_IF(my_profile->addressbook_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
@@ -1145,24 +1152,24 @@ static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *i
        RETVM_IF(0 < my_profile->id, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : id(%d), This record is already inserted", my_profile->id);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       if (false == ctsvc_have_ab_write_permission(my_profile->addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, my_profile->addressbook_id)) {
                CTS_ERR("ctsvc_have_ab_write_permission fail : does not have permission(addressbook_id : %d)",
                                        my_profile->addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_MY_PROFILES" WHERE addressbook_id = %d AND deleted = 1", my_profile->addressbook_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        WARN_IF(CONTACTS_ERROR_NONE != ret, "Delete deleted my_profile of addressbook(%d) failed", my_profile->addressbook_id);
 
-       ret = ctsvc_db_get_next_id(CTS_TABLE_MY_PROFILES);
+       ret = ctsvc_db_get_next_id(zone_name, CTS_TABLE_MY_PROFILES);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_db_get_next_id() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_db_get_next_id() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        my_profile->id = ret;
@@ -1172,45 +1179,41 @@ static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *i
        __ctsvc_make_my_profile_display_name(my_profile);
        __ctsvc_my_profile_check_default_data(my_profile);
 
-       //Insert Data
-       ret = __ctsvc_my_profile_insert_data(my_profile);
+       /* Insert Data */
+       ret = __ctsvc_my_profile_insert_data(zone_name, my_profile);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("cts_insert_my_profile_data() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("cts_insert_my_profile_data() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       //////////////////////////////////////////////////////////////////////
-       // this code will be removed.
+       /* thumbnail */
        free(my_profile->image_thumbnail_path);
        my_profile->image_thumbnail_path = NULL;
-
        if (my_profile->images) {
-               ctsvc_image_s *image;
                int count = 0;
+               ctsvc_image_s *image;
 
                contacts_list_get_count((contacts_list_h)my_profile->images, &count);
-
-               while (count) {
+               if (count) {
                        contacts_list_first((contacts_list_h)my_profile->images);
-                       ret = contacts_list_get_current_record_p((contacts_list_h)my_profile->images, (contacts_record_h*)&image);
-                       if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
-                               return CONTACTS_ERROR_DB;
-                       }
+                       do {
+                               ret = contacts_list_get_current_record_p((contacts_list_h)my_profile->images, (contacts_record_h*)&image);
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       CTS_ERR("contacts_list_get_current_record_p() Fail(%d)", ret);
+                                       ctsvc_end_trans(zone_name, false);
+                                       return CONTACTS_ERROR_DB;
+                               }
 
-                       if (image->path && image->is_default) {
-                               my_profile->image_thumbnail_path = strdup(image->path);
-                               break;
-                       }
-                       count--;
+                               if (image->path && image->is_default) {
+                                       my_profile->image_thumbnail_path = strdup(image->path);
+                                       break;
+                               }
+                       } while (CONTACTS_ERROR_NONE == contacts_list_next((contacts_list_h)my_profile->images));
                }
        }
-       // this code will be removed.
-       //////////////////////////////////////////////////////////////////////
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
 
        snprintf(query, sizeof(query),
                "INSERT INTO "CTS_TABLE_MY_PROFILES"(my_profile_id, addressbook_id, "
@@ -1219,10 +1222,10 @@ static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *i
                        "VALUES(%d, %d, %d, %d, %d, ?, ?, ?, ?)",
                        my_profile->id, my_profile->addressbook_id, version, version, (int)time(NULL));
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -1237,17 +1240,17 @@ static int __ctsvc_db_my_profile_insert_record( contacts_record_h record, int *i
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       ctsvc_set_my_profile_noti();
+       ctsvc_set_my_profile_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_svc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_svc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 65%
rename from native/ctsvc_db_plugin_name.c
rename to server/db/ctsvc_db_plugin_name.c
index 131fa5e..04e9eea 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_name_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_name_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_name_update_record( contacts_record_h record );
-static int __ctsvc_db_name_delete_record( int id );
-static int __ctsvc_db_name_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_name_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_name_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_name_delete_records( int ids[], int count);
+static int __ctsvc_db_name_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_name_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_name_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_name_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_name_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_name_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_name = {
        .is_query_only = false,
@@ -50,16 +47,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_name = {
        .delete_record = __ctsvc_db_name_delete_record,
        .get_all_records = __ctsvc_db_name_get_all_records,
        .get_records_with_query = __ctsvc_db_name_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_name_insert_records,
-       .update_records = NULL,//__ctsvc_db_name_update_records,
-       .delete_records = NULL,//__ctsvc_db_name_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_name_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_name_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int name_id = 0;
@@ -67,17 +64,17 @@ static int __ctsvc_db_name_insert_record( contacts_record_h record, int *id )
        char query[CTS_SQL_MAX_LEN] = {0};
        ctsvc_name_s *name = (ctsvc_name_s *)record;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", name->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", name->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -88,49 +85,48 @@ static int __ctsvc_db_name_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this name record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND datatype=%d", name->contact_id, CTSVC_DATA_NAME);
-       ret = ctsvc_query_get_first_int_result(query, &name_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &name_id);
        if (name_id) {
                CTS_ERR("name_id (%d) is exist", name_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
-       ret = ctsvc_db_name_insert(record, name->contact_id, false, id);
+       ret = ctsvc_db_name_insert(zone_name, record, name->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(name->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
+       ctsvc_contact_update_display_name(zone_name, name->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
 
-       ret = ctsvc_db_contact_update_changed_time(name->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, name->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_name_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_name_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -147,12 +143,12 @@ static int __ctsvc_db_name_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_NAME);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -166,7 +162,7 @@ static int __ctsvc_db_name_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_name_update_record( contacts_record_h record )
+static int __ctsvc_db_name_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -177,48 +173,47 @@ static int __ctsvc_db_name_update_record( contacts_record_h record )
                        NULL == name->prefix && NULL == name->suffix && NULL == name->phonetic_first &&
                        NULL == name->phonetic_middle && NULL == name->phonetic_last, CONTACTS_ERROR_INVALID_PARAMETER, "name is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", name->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", name->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this name record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_name_update(record, false);
+       ret = ctsvc_db_name_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(name->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
+       ctsvc_contact_update_display_name(zone_name, name->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
 
-       ret = ctsvc_db_contact_update_changed_time(name->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, name->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
@@ -226,7 +221,7 @@ static int __ctsvc_db_name_update_record( contacts_record_h record )
 }
 
 
-static int __ctsvc_db_name_delete_record( int id )
+static int __ctsvc_db_name_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -234,26 +229,26 @@ static int __ctsvc_db_name_delete_record( int id )
        cts_stmt stmt = NULL;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                        "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -264,40 +259,39 @@ static int __ctsvc_db_name_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this name record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_name_delete(id, false);
+       ret = ctsvc_db_name_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
+       ctsvc_contact_update_display_name(zone_name, contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME);
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_name_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_name_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -320,13 +314,13 @@ static int __ctsvc_db_name_get_all_records( int offset, int limit, contacts_list
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error :         ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error :         ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -342,8 +336,8 @@ static int __ctsvc_db_name_get_all_records( int offset, int limit, contacts_list
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_name_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -356,14 +350,14 @@ static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int o
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -378,11 +372,11 @@ static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int o
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       ifCONTACTS_ERROR_NONE !=  ret)
+                       if (CONTACTS_ERROR_NONE !=  ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -399,34 +393,42 @@ static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int o
                                break;
                        case CTSVC_PROPERTY_NAME_FIRST:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->first);
                                name->first = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_LAST:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->last);
                                name->last = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_ADDITION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->addition);
                                name->addition = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_SUFFIX:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->suffix);
                                name->suffix = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_PREFIX:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->prefix);
                                name->prefix = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_PHONETIC_FIRST:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->phonetic_first);
                                name->phonetic_first = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->phonetic_middle);
                                name->phonetic_middle = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NAME_PHONETIC_LAST:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(name->phonetic_last);
                                name->phonetic_last = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -441,7 +443,3 @@ static int __ctsvc_db_name_get_records_with_query( contacts_query_h query, int o
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_name_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_name_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_name_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 85%
rename from native/ctsvc_db_plugin_name_helper.c
rename to server/db/ctsvc_db_plugin_name_helper.c
index abaa864..8d3c4c5 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_name_helper.h"
 #include "ctsvc_record.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_notification.h"
 
 enum{
@@ -39,20 +39,26 @@ enum{
 static inline void __ctsvc_make_name_lookup(int op_code, const char *name_first,
                const char *name_last, char **name_lookup)
 {
-       if (name_first && !name_last)
+       if (name_first && NULL == name_last)
                *name_lookup = SAFE_STRDUP(name_first);
-       else if (!name_first && name_last)
+       else if (NULL == name_first && name_last)
                *name_lookup = SAFE_STRDUP(name_last);
        else {
                if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == op_code) {
                        *name_lookup = calloc(1, SAFE_STRLEN(name_first) + SAFE_STRLEN(name_last) + 3);
-                       RETM_IF(NULL == *name_lookup, "calloc() return NULL");
+                       if (NULL == *name_lookup) {
+                               CTS_ERR("calloc() Fail");
+                               return;
+                       }
                        snprintf(*name_lookup, SAFE_STRLEN(name_first) + SAFE_STRLEN(name_last) + 3, "%s %c%s",
                                        SAFE_STR(name_first), 0x7E, SAFE_STR(name_last));
                }
                else {
                        *name_lookup = calloc(1, SAFE_STRLEN(name_first) + SAFE_STRLEN(name_last) + 5);
-                       RETM_IF(NULL == *name_lookup, "calloc() return NULL");
+                       if (NULL == *name_lookup) {
+                               CTS_ERR("calloc() Fail");
+                               return;
+                       }
                        snprintf(*name_lookup, SAFE_STRLEN(name_first) + SAFE_STRLEN(name_last) + 5, "%s,%c %c%s",
                                        SAFE_STR(name_last), 0x7E, 0x7E, SAFE_STR(name_first));
                }
@@ -103,26 +109,26 @@ static int __ctsvc_normalize_name(ctsvc_name_s *src, char *dest[])
 
        if (src->first) {
                ret = ctsvc_normalize_str(src->first, &dest[CTSVC_NN_FIRST]);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_normalize_str() Failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_normalize_str() Fail(%d)", ret);
                language_type = ret;
        }
 
        if (src->last) {
                ret = ctsvc_normalize_str(src->last, &dest[CTSVC_NN_LAST]);
-               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_normalize_str() Failed(%d)", ret);
+               RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_normalize_str() Fail(%d)", ret);
                if (language_type < ret)
                        language_type = ret;
        }
        return language_type;
 }
 
-int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_name_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret, len = 0;
        cts_stmt stmt = NULL;
        ctsvc_name_s *name = (ctsvc_name_s*)record;
        char query[CTS_SQL_MAX_LEN]={0};
-       char *normal_name[CTSVC_NN_MAX]={NULL}; //insert name search info
+       char *normal_name[CTSVC_NN_MAX]={NULL}; /* insert name search info */
        char *temp_normal_first = NULL;
        char *temp_normal_last = NULL;
        int len_normal_first = 0;
@@ -137,14 +143,16 @@ int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_pr
 
        if (name->first || name->last || name->addition || name->prefix || name->suffix
                || name->phonetic_first || name->phonetic_middle || name->phonetic_last) {
-               // If name record already exists, delete current name record
-               // If user update record with out-of-date record, name record can be two
+               /*
+                * If name record already exists, delete current name record
+                * If user update record with out-of-date record, name record can be two
+                */
                snprintf(query, sizeof(query),
                                "DELETE FROM "CTS_TABLE_DATA" "
                                                "WHERE contact_id = %d AND datatype=%d "
                                                                        "AND is_my_profile = %d",
                                                contact_id, CTSVC_DATA_NAME, is_my_profile);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
                        CTS_ERR("ctsvc_query_exec Faild(%d)", ret);
                        return ret;
@@ -156,11 +164,11 @@ int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_pr
                                                "VALUES(%d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                                contact_id, is_my_profile, CTSVC_DATA_NAME);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                ret = __ctsvc_normalize_name(name, normal_name);
-               WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_normalize_name() Failed(%d)", ret);
+               WARN_IF(ret < CONTACTS_ERROR_NONE, "__ctsvc_normalize_name() Fail(%d)", ret);
 
                switch (ret) {
                case CTSVC_LANG_KOREAN:
@@ -212,22 +220,22 @@ int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_pr
 
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return ret;
                }
 
-               //name->id = ctsvc_db_get_last_insert_id();
+               /* name->id = ctsvc_db_get_last_insert_id(zone_name); */
                if (id)
-                       *id = ctsvc_db_get_last_insert_id();
+                       *id = ctsvc_db_get_last_insert_id(zone_name);
                name->contact_id = contact_id;
                ctsvc_stmt_finalize(stmt);
 
-               if (!is_my_profile)
-                       ctsvc_set_name_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_name_noti(zone_name);
        }
 
-       // update search index table
+       /* update search index table */
        return CONTACTS_ERROR_NONE;
 }
 
@@ -239,7 +247,7 @@ int ctsvc_db_name_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        ctsvc_name_s *name;
 
        ret = contacts_record_create(_contacts_name._uri, (contacts_record_h *)&name);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        name->id = ctsvc_stmt_get_int(stmt, start_count++);
        name->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -271,7 +279,7 @@ int ctsvc_db_name_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_name_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int ret, len=0;
        int id;
@@ -285,12 +293,12 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
        char *temp_normal_last = NULL;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       RETVM_IF(!name->id, CONTACTS_ERROR_INVALID_PARAMETER, "name of contact has no ID.");
+       RETVM_IF(0 == name->id, CONTACTS_ERROR_INVALID_PARAMETER, "name of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (name->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", name->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        tmp_first = name->first;
@@ -298,7 +306,7 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
 
        ret = __ctsvc_normalize_name(name, normal_name);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("cts_normalize_name() Failed(%d)", ret);
+               CTS_ERR("cts_normalize_name() Fail(%d)", ret);
                return ret;
        }
 
@@ -318,12 +326,12 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
        case CTSVC_LANG_ENGLISH:
        default:
                if (normal_name[CTSVC_NN_FIRST] && normal_name[CTSVC_NN_FIRST][0])
-                       temp_normal_first = normal_name[CTSVC_NN_FIRST];
+                       temp_normal_first = SAFE_STRDUP(normal_name[CTSVC_NN_FIRST]);
                else
                        name->first = NULL;
 
                if (normal_name[CTSVC_NN_LAST] && normal_name[CTSVC_NN_LAST][0])
-                       temp_normal_last = normal_name[CTSVC_NN_LAST];
+                       temp_normal_last = SAFE_STRDUP(normal_name[CTSVC_NN_LAST]);
                else
                        name->last = NULL;
                break;
@@ -345,6 +353,8 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
        __ctsvc_make_name_lookup(CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST,
                                                                temp_normal_first, temp_normal_last, &name->reverse_lookup);
 
+       free(temp_normal_first);
+       free(temp_normal_last);
        free(normal_name[CTSVC_NN_FIRST]);
        free(normal_name[CTSVC_NN_LAST]);
 
@@ -355,10 +365,10 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
                                set, name->is_default, name->language_type);
                bind_text = g_slist_append(bind_text, strdup(SAFE_STR(name->lookup)));
                bind_text = g_slist_append(bind_text, strdup(SAFE_STR(name->reverse_lookup)));
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(query_set, bind_text, CTS_TABLE_DATA, name->id))) break;
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, query_set, bind_text, CTS_TABLE_DATA, name->id))) break;
 
-               if (!is_my_profile)
-                       ctsvc_set_name_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_name_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -372,18 +382,18 @@ int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_name_delete(int id, bool is_my_profile)
+int ctsvc_db_name_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d", id);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_name_noti();
+       if (false == is_my_profile)
+               ctsvc_set_name_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_name_helper.h
rename to server/db/ctsvc_db_plugin_name_helper.h
index f73f940..4fbc7c5 100644 (file)
 #define __CTSVC_DB_PLUGIN_NAME_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_name_delete(int id, bool is_my_profile);
+int ctsvc_db_name_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_name_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_name_delete(const char *zone_name, int id, bool is_my_profile);
 
 int ctsvc_db_name_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_NAME_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_NAME_HELPER_H__ */
\ No newline at end of file
similarity index 63%
rename from native/ctsvc_db_plugin_nickname.c
rename to server/db/ctsvc_db_plugin_nickname.c
index 004c3f2..45e9b99 100644 (file)
@@ -18,9 +18,9 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_nickname_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_nickname_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_nickname_update_record( contacts_record_h record );
-static int __ctsvc_db_nickname_delete_record( int id );
-static int __ctsvc_db_nickname_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_nickname_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_nickname_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_nickname_delete_records( int ids[], int count);
+static int __ctsvc_db_nickname_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_nickname_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_nickname_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_nickname_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_nickname_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_nickname_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_nickname = {
        .is_query_only = false,
@@ -48,16 +45,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_nickname = {
        .delete_record = __ctsvc_db_nickname_delete_record,
        .get_all_records = __ctsvc_db_nickname_get_all_records,
        .get_records_with_query = __ctsvc_db_nickname_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_nickname_insert_records,
-       .update_records = NULL,//__ctsvc_db_nickname_update_records,
-       .delete_records = NULL,//__ctsvc_db_nickname_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_nickname_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_nickname_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -67,17 +64,17 @@ static int __ctsvc_db_nickname_insert_record( contacts_record_h record, int *id
        RETVM_IF(NULL == nickname->nickname, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : nickname is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", nickname->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", nickname->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -88,40 +85,39 @@ static int __ctsvc_db_nickname_insert_record( contacts_record_h record, int *id
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this nickname record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_nickname_insert(record, nickname->contact_id, false, id);
+       ret = ctsvc_db_nickname_insert(zone_name, record, nickname->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(nickname->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
+       ctsvc_contact_update_display_name(zone_name, nickname->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
 
-       ret = ctsvc_db_contact_update_changed_time(nickname->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, nickname->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_nickname_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_nickname_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -137,12 +133,12 @@ static int __ctsvc_db_nickname_get_record( int id, contacts_record_h* out_record
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_NICKNAME);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -157,7 +153,7 @@ static int __ctsvc_db_nickname_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_nickname_update_record( contacts_record_h record )
+static int __ctsvc_db_nickname_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -165,56 +161,55 @@ static int __ctsvc_db_nickname_update_record( contacts_record_h record )
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)record;
        RETVM_IF(NULL == nickname->nickname, CONTACTS_ERROR_INVALID_PARAMETER, "nickname is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", nickname->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", nickname->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this nickname record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_nickname_update(record, false);
+       ret = ctsvc_db_nickname_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(nickname->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
+       ctsvc_contact_update_display_name(zone_name, nickname->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
 
-       ret = ctsvc_db_contact_update_changed_time(nickname->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, nickname->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
 
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_nickname_delete_record( int id )
+static int __ctsvc_db_nickname_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -222,26 +217,26 @@ static int __ctsvc_db_nickname_delete_record( int id )
        cts_stmt stmt;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -252,40 +247,39 @@ static int __ctsvc_db_nickname_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this nickname record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_nickname_delete(id, false);
+       ret = ctsvc_db_nickname_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_contact_update_display_name(contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
+       ctsvc_contact_update_display_name(zone_name, contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME);
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_nickname_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_nickname_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -307,13 +301,13 @@ static int __ctsvc_db_nickname_get_all_records( int offset, int limit, contacts_
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -328,8 +322,8 @@ static int __ctsvc_db_nickname_get_all_records( int offset, int limit, contacts_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_nickname_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -342,14 +336,14 @@ static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, i
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -364,11 +358,11 @@ static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, i
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -385,6 +379,7 @@ static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, i
                                break;
                        case CTSVC_PROPERTY_NICKNAME_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(nickname->nickname);
                                nickname->nickname = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -399,7 +394,3 @@ static int __ctsvc_db_nickname_get_records_with_query( contacts_query_h query, i
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_nickname_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_nickname_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_nickname_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 77%
rename from native/ctsvc_db_plugin_nickname_helper.c
rename to server/db/ctsvc_db_plugin_nickname_helper.c
index b2b214c..52d4634 100644 (file)
@@ -18,8 +18,8 @@
  */
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_nickname_helper.h"
@@ -34,7 +34,7 @@ int ctsvc_db_nickname_get_value_from_stmt(cts_stmt stmt, contacts_record_h *reco
        ctsvc_nickname_s *nickname;
 
        ret = contacts_record_create(_contacts_nickname._uri, (contacts_record_h *)&nickname);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        nickname->id = ctsvc_stmt_get_int(stmt, start_count++);
        nickname->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -48,7 +48,7 @@ int ctsvc_db_nickname_get_value_from_stmt(cts_stmt stmt, contacts_record_h *reco
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_nickname_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_nickname_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -66,8 +66,8 @@ int ctsvc_db_nickname_insert(contacts_record_h record, int contact_id, bool is_m
                                                                        "VALUES(%d, %d, %d, %d, ?, ?)",
                        contact_id, is_my_profile, CTSVC_DATA_NICKNAME, nickname->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (nickname->label)
                ctsvc_stmt_bind_text(stmt, 1, nickname->label);
@@ -76,22 +76,22 @@ int ctsvc_db_nickname_insert(contacts_record_h record, int contact_id, bool is_m
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //nickname->id = ctsvc_db_get_last_insert_id();
+       /* nickname->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_nickname_noti();
+       if (false == is_my_profile)
+               ctsvc_set_nickname_noti(zone_name);
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_nickname_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -101,19 +101,19 @@ int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile)
        ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!nickname->id, CONTACTS_ERROR_INVALID_PARAMETER, "nickname of contact has no ID.");
+       RETVM_IF(0 == nickname->id, CONTACTS_ERROR_INVALID_PARAMETER, "nickname of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (nickname->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", nickname->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, nickname->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_nickname_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, nickname->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_nickname_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -126,7 +126,7 @@ int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_nickname_delete(int id, bool is_my_profile)
+int ctsvc_db_nickname_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -134,11 +134,11 @@ int ctsvc_db_nickname_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_NICKNAME);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_nickname_noti();
+       if (false == is_my_profile)
+               ctsvc_set_nickname_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 69%
rename from native/ctsvc_db_plugin_nickname_helper.h
rename to server/db/ctsvc_db_plugin_nickname_helper.h
index 0041f9e..fe6d850 100644 (file)
 #define __CTSVC_DB_PLUGIN_NICKNAME_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_nickname_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_nickname_delete(int id, bool is_my_profile);
+int ctsvc_db_nickname_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_nickname_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_nickname_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_nickname_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_NICKNAME_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_NICKNAME_HELPER_H__ */
\ No newline at end of file
similarity index 64%
rename from native/ctsvc_db_plugin_note.c
rename to server/db/ctsvc_db_plugin_note.c
index 620e595..f18856c 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_note_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_note_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_note_update_record( contacts_record_h record );
-static int __ctsvc_db_note_delete_record( int id );
-static int __ctsvc_db_note_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_note_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_note_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_note_delete_records( int ids[], int count);
+static int __ctsvc_db_note_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_note_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_note_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_note_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_note_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_note_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_note = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_note = {
        .delete_record = __ctsvc_db_note_delete_record,
        .get_all_records = __ctsvc_db_note_get_all_records,
        .get_records_with_query = __ctsvc_db_note_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_note_insert_records,
-       .update_records = NULL,//__ctsvc_db_note_update_records,
-       .delete_records = NULL,//__ctsvc_db_note_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_note_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_note_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -74,12 +71,12 @@ static int __ctsvc_db_note_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_NOTE);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -93,7 +90,7 @@ static int __ctsvc_db_note_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_note_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_note_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -103,17 +100,17 @@ static int __ctsvc_db_note_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == note->note, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : note is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", note->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", note->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -124,38 +121,37 @@ static int __ctsvc_db_note_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this note record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_note_insert(record, note->contact_id, false, id);
+       ret = ctsvc_db_note_insert(zone_name, record, note->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(note->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, note->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_note_update_record( contacts_record_h record )
+static int __ctsvc_db_note_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -164,47 +160,46 @@ static int __ctsvc_db_note_update_record( contacts_record_h record )
 
        RETVM_IF(NULL == note->note, CONTACTS_ERROR_INVALID_PARAMETER, "note is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", note->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", note->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this note record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_note_update(record, false);
+       ret = ctsvc_db_note_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // TODO ; contact display note update
-       ret = ctsvc_db_contact_update_changed_time(note->contact_id);
+       /* TODO ; contact display note update */
+       ret = ctsvc_db_contact_update_changed_time(zone_name, note->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
@@ -212,7 +207,7 @@ static int __ctsvc_db_note_update_record( contacts_record_h record )
 }
 
 
-static int __ctsvc_db_note_delete_record( int id )
+static int __ctsvc_db_note_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -220,26 +215,26 @@ static int __ctsvc_db_note_delete_record( int id )
        cts_stmt stmt;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -250,39 +245,38 @@ static int __ctsvc_db_note_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this note record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_note_delete(id, false);
+       ret = ctsvc_db_note_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // TODO ; contact name update
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       /* TODO ; contact name update */
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_note_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_note_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -305,13 +299,13 @@ static int __ctsvc_db_note_get_all_records( int offset, int limit, contacts_list
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -326,8 +320,8 @@ static int __ctsvc_db_note_get_all_records( int offset, int limit, contacts_list
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_note_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -340,14 +334,14 @@ static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int o
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -362,11 +356,11 @@ static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int o
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -383,6 +377,7 @@ static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int o
                                break;
                        case CTSVC_PROPERTY_NOTE_NOTE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(note->note);
                                note->note = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -397,7 +392,3 @@ static int __ctsvc_db_note_get_records_with_query( contacts_query_h query, int o
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_note_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_note_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_note_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 77%
rename from native/ctsvc_db_plugin_note_helper.c
rename to server/db/ctsvc_db_plugin_note_helper.c
index d82b45e..4870955 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_note_helper.h"
@@ -35,7 +35,7 @@ int ctsvc_db_note_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        ctsvc_note_s *note;
 
        ret = contacts_record_create(_contacts_note._uri, (contacts_record_h *)&note);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        note->id = ctsvc_stmt_get_int(stmt, start_count++);
        note->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -49,7 +49,7 @@ int ctsvc_db_note_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record,
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_note_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_note_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -66,28 +66,28 @@ int ctsvc_db_note_insert(contacts_record_h record, int contact_id, bool is_my_pr
                "INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data3) "
                                        "VALUES(%d, %d, %d, ?)", contact_id, is_my_profile, CTSVC_DATA_NOTE);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        sqlite3_bind_text(stmt, 1, note->note,
                        strlen(note->note), SQLITE_STATIC);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_note_noti();
+       if (false == is_my_profile)
+               ctsvc_set_note_noti(zone_name);
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_note_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -97,20 +97,20 @@ int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile)
        ctsvc_note_s *note = (ctsvc_note_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!note->id, CONTACTS_ERROR_INVALID_PARAMETER, "note of contact has no ID.");
+       RETVM_IF(0 == note->id, CONTACTS_ERROR_INVALID_PARAMETER, "note of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (note->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", note->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, note->id))) break;
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, note->id))) break;
 
-               if (!is_my_profile)
-                       ctsvc_set_messenger_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_messenger_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -124,7 +124,7 @@ int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_note_delete(int id, bool is_my_profile)
+int ctsvc_db_note_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -132,11 +132,11 @@ int ctsvc_db_note_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_NOTE);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_note_noti();
+       if (false == is_my_profile)
+               ctsvc_set_note_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_note_helper.h
rename to server/db/ctsvc_db_plugin_note_helper.h
index 1fa1ef0..9469c63 100644 (file)
 #define __CTSVC_DB_PLUGIN_NOTE_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_note_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_note_delete(int id, bool is_my_profile);
+int ctsvc_db_note_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_note_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_note_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_note_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_NOTE_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_NOTE_HELPER_H__ */
\ No newline at end of file
similarity index 62%
rename from native/ctsvc_db_plugin_number.c
rename to server/db/ctsvc_db_plugin_number.c
index d8eb653..6bef2bd 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_list.h"
 
-static int __ctsvc_db_number_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_number_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_number_update_record( contacts_record_h record );
-static int __ctsvc_db_number_delete_record( int id );
-static int __ctsvc_db_number_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_number_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_number_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_number_delete_records( int ids[], int count);
+static int __ctsvc_db_number_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_number_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_number_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_number_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_number_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_number_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_number = {
        .is_query_only = false,
@@ -50,16 +47,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_number = {
        .delete_record = __ctsvc_db_number_delete_record,
        .get_all_records = __ctsvc_db_number_get_all_records,
        .get_records_with_query = __ctsvc_db_number_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_number_insert_records,
-       .update_records = NULL,//__ctsvc_db_number_update_records,
-       .delete_records = NULL,//__ctsvc_db_number_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_number_get_person_default_number(int person_id)
+static int __ctsvc_db_number_get_person_default_number(const char *zone_name, int person_id)
 {
        int ret;
        int default_number_id;
@@ -69,14 +66,14 @@ static int __ctsvc_db_number_get_person_default_number(int person_id)
                "SELECT id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
                "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
                person_id, CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_get_first_int_result(query, &default_number_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_number_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_number_id;
 }
 
 
-static int __ctsvc_db_number_update_person_has_phonenumber(int person_id, bool has_phonenumber)
+static int __ctsvc_db_number_update_person_has_phonenumber(const char *zone_name, int person_id, bool has_phonenumber)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -85,12 +82,12 @@ static int __ctsvc_db_number_update_person_has_phonenumber(int person_id, bool h
                        "UPDATE "CTS_TABLE_PERSONS" SET has_phonenumber = %d WHERE person_id = %d",
                        has_phonenumber, person_id);
 
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_number_get_default_number_id(int contact_id)
+static int __ctsvc_db_number_get_default_number_id(const char *zone_name, int contact_id)
 {
        int ret;
        int number_id = 0;
@@ -98,13 +95,13 @@ static int __ctsvc_db_number_get_default_number_id(int contact_id)
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
                        CTSVC_DATA_NUMBER, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &number_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &number_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return number_id;
 }
 
-static int __ctsvc_db_number_update_default(int number_id, int contact_id, bool is_default, bool is_primary_default)
+static int __ctsvc_db_number_update_default(const char *zone_name, int number_id, int contact_id, bool is_default, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -112,13 +109,13 @@ static int __ctsvc_db_number_update_default(int number_id, int contact_id, bool
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_default = %d, is_primary_default = %d WHERE id = %d",
                        is_default, is_primary_default, number_id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
 
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_number_get_primary_default(int contact_id)
+static int __ctsvc_db_number_get_primary_default(const char *zone_name, int contact_id)
 {
        int ret;
        int number_id = 0;
@@ -126,13 +123,13 @@ static int __ctsvc_db_number_get_primary_default(int contact_id)
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_primary_default=%d",
                        CTSVC_DATA_NUMBER, contact_id, 1);
-       ret = ctsvc_query_get_first_int_result(query, &number_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &number_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return number_id;
 }
 
-static int __ctsvc_db_number_get_primary_default_contact_id(int person_id)
+static int __ctsvc_db_number_get_primary_default_contact_id(const char *zone_name, int person_id)
 {
        int ret;
        int default_contact_id;
@@ -142,14 +139,14 @@ static int __ctsvc_db_number_get_primary_default_contact_id(int person_id)
                        "SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
                        "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
                        person_id, CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &default_contact_id);
        if (CONTACTS_ERROR_NONE != ret)
                return 0;
        return default_contact_id;
 }
 
 
-static int __ctsvc_db_number_set_primary_default(int number_id, bool is_primary_default)
+static int __ctsvc_db_number_set_primary_default(const char *zone_name, int number_id, bool is_primary_default)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -157,12 +154,12 @@ static int __ctsvc_db_number_set_primary_default(int number_id, bool is_primary_
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default = %d WHERE id = %d",
                        is_primary_default, number_id);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-static int __ctsvc_db_number_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_number_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int person_id;
@@ -174,26 +171,26 @@ static int __ctsvc_db_number_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == number->number, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : number is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", number->contact_id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA)
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                else
@@ -203,60 +200,59 @@ static int __ctsvc_db_number_insert_record( contacts_record_h record, int *id )
        person_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this number record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       old_default_number_id = __ctsvc_db_number_get_default_number_id(number->contact_id);
+       old_default_number_id = __ctsvc_db_number_get_default_number_id(zone_name, number->contact_id);
        if (0 == old_default_number_id)
                number->is_default = true;
 
-       ret = ctsvc_db_number_insert(record, number->contact_id, false, id);
+       ret = ctsvc_db_number_insert(zone_name, record, number->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_CONTACTS" SET has_phonenumber = %d, changed_ver = %d, changed_time = %d "
                        "WHERE contact_id = %d",
-                       1, ctsvc_get_next_ver(), (int)time(NULL), number->contact_id);
+                       1, ctsvc_get_next_ver(zone_name), (int)time(NULL), number->contact_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (number->is_default) {
                int primary_default_contact_id = 0;
-               __ctsvc_db_number_update_person_has_phonenumber(person_id, true);
+               __ctsvc_db_number_update_person_has_phonenumber(zone_name, person_id, true);
 
-               primary_default_contact_id = __ctsvc_db_number_get_primary_default_contact_id(person_id);
+               primary_default_contact_id = __ctsvc_db_number_get_primary_default_contact_id(zone_name, person_id);
                if (0 == primary_default_contact_id || number->contact_id == primary_default_contact_id)
-                       __ctsvc_db_number_set_primary_default(*id, true);
+                       __ctsvc_db_number_set_primary_default(zone_name, *id, true);
 
-               ctsvc_contact_update_display_name(number->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
+               ctsvc_contact_update_display_name(zone_name, number->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_number_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_number_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        int ret;
@@ -266,12 +262,12 @@ static int __ctsvc_db_number_get_record( int id, contacts_record_h* out_record )
                "SELECT id, contact_id, is_default, data1, data2, data3, data4, data5, data6 "
                                "FROM "CTSVC_DB_VIEW_NUMBER" WHERE id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -285,7 +281,7 @@ static int __ctsvc_db_number_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_number_update_record( contacts_record_h record )
+static int __ctsvc_db_number_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -293,61 +289,60 @@ static int __ctsvc_db_number_update_record( contacts_record_h record )
        ctsvc_number_s *number = (ctsvc_number_s *)record;
        RETVM_IF(NULL == number->number, CONTACTS_ERROR_INVALID_PARAMETER, "number is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", number->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", number->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this number record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_number_update(record, false);
+       ret = ctsvc_db_number_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (number->is_default) {
                int old_primary_default_number_id = 0;
-               old_primary_default_number_id = __ctsvc_db_number_get_primary_default(number->contact_id);
+               old_primary_default_number_id = __ctsvc_db_number_get_primary_default(zone_name, number->contact_id);
                if (old_primary_default_number_id)
-                       __ctsvc_db_number_set_primary_default(number->id, true);
+                       __ctsvc_db_number_set_primary_default(zone_name, number->id, true);
        }
-       ctsvc_contact_update_display_name(number->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
+       ctsvc_contact_update_display_name(zone_name, number->contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
 
-       ret = ctsvc_db_contact_update_changed_time(number->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, number->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_number_delete_record( int id )
+static int __ctsvc_db_number_delete_record(const char *zone_name, int id)
 {
        int ret;
        int number_id;
@@ -360,9 +355,9 @@ static int __ctsvc_db_number_delete_record( int id )
        bool has_phonenumber = false;
        cts_stmt stmt = NULL;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
@@ -370,18 +365,18 @@ static int __ctsvc_db_number_delete_record( int id )
                        "SELECT contact_id, person_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                        "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -393,22 +388,22 @@ static int __ctsvc_db_number_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 2);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this number record : addresbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT is_default, is_primary_default FROM "CTS_TABLE_DATA" WHERE id = %d", id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -418,57 +413,57 @@ static int __ctsvc_db_number_delete_record( int id )
        is_primary_default = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       ret = ctsvc_db_number_delete(id, false);
+       ret = ctsvc_db_number_delete(zone_name, id, false);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
                        CTSVC_DATA_NUMBER, contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &number_id);
-       if ( 0 < ret )
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &number_id);
+       if (0 < ret)
                has_phonenumber = true;
 
        snprintf(query, sizeof(query),
                "UPDATE "CTS_TABLE_CONTACTS" SET has_phonenumber = %d, changed_ver = %d, changed_time = %d "
                        "WHERE contact_id = %d",
-                       has_phonenumber, ctsvc_get_next_ver(), (int)time(NULL), contact_id);
+                       has_phonenumber, ctsvc_get_next_ver(zone_name), (int)time(NULL), contact_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (is_default) {
                if (number_id) {
-                       __ctsvc_db_number_update_default(number_id, contact_id, is_default, is_primary_default);
+                       __ctsvc_db_number_update_default(zone_name, number_id, contact_id, is_default, is_primary_default);
                }
                else if (is_primary_default) {
                        int default_number_id = 0;
-                       default_number_id = __ctsvc_db_number_get_person_default_number(person_id);
+                       default_number_id = __ctsvc_db_number_get_person_default_number(zone_name, person_id);
                        if (default_number_id)
-                               __ctsvc_db_number_set_primary_default(default_number_id, true);
+                               __ctsvc_db_number_set_primary_default(zone_name, default_number_id, true);
                        else
-                               __ctsvc_db_number_update_person_has_phonenumber(person_id, false);
+                               __ctsvc_db_number_update_person_has_phonenumber(zone_name, person_id, false);
                }
-               ctsvc_contact_update_display_name(contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
+               ctsvc_contact_update_display_name(zone_name, contact_id, CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER);
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_number_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_number_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -490,8 +485,8 @@ static int __ctsvc_db_number_get_all_records( int offset, int limit, contacts_li
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
@@ -511,8 +506,8 @@ static int __ctsvc_db_number_get_all_records( int offset, int limit, contacts_li
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_number_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -525,14 +520,14 @@ static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -547,11 +542,11 @@ static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -574,14 +569,17 @@ static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_NUMBER_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(number->label);
                                number->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NUMBER_NUMBER:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(number->number);
                                number->number = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_NUMBER_NUMBER_FILTER:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(number->lookup);
                                number->lookup = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -596,7 +594,3 @@ static int __ctsvc_db_number_get_records_with_query( contacts_query_h query, int
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_number_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_number_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_number_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 75%
rename from native/ctsvc_db_plugin_number_helper.c
rename to server/db/ctsvc_db_plugin_number_helper.c
index 21f33c2..4593fc5 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_db_plugin_number_helper.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_localize_utils.h"
 
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
 
-static int __ctsvc_db_number_reset_default(int number_id, int contact_id)
+static int __ctsvc_db_number_reset_default(const char *zone_name, int number_id, int contact_id)
 {
        int ret;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -43,12 +43,12 @@ static int __ctsvc_db_number_reset_default(int number_id, int contact_id)
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 WHERE id != %d AND contact_id = %d AND datatype = %d",
                        number_id, contact_id, CTSVC_DATA_NUMBER);
-       ret = ctsvc_query_exec(query);
-       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
        return ret;
 }
 
-int ctsvc_db_number_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_number_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        int number_id;
@@ -67,8 +67,8 @@ int ctsvc_db_number_insert(contacts_record_h record, int contact_id, bool is_my_
                                                                        "VALUES(%d, %d, %d, %d, %d, ?, ?, ?, ?, ?)",
                        contact_id, is_my_profile, CTSVC_DATA_NUMBER, number->is_default, number->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (number->label)
                ctsvc_stmt_bind_text(stmt, 1, number->label);
@@ -92,34 +92,34 @@ int ctsvc_db_number_insert(contacts_record_h record, int contact_id, bool is_my_
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       number_id = ctsvc_db_get_last_insert_id();
+       number_id = ctsvc_db_get_last_insert_id(zone_name);
        if (id)
                *id = number_id;
        ctsvc_stmt_finalize(stmt);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_number.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (number->is_default)
-                       __ctsvc_db_number_reset_default(number_id, contact_id);
+                       __ctsvc_db_number_reset_default(zone_name, number_id, contact_id);
        }
 
-       if (!is_my_profile) {
+       if (false == is_my_profile) {
 #ifdef ENABLE_LOG_FEATURE
-               // updata phonelog
+               /* updata phonelog */
                int person_id = -1;
                snprintf(query, sizeof(query),
                                "SELECT person_id, data3 FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_DATA" "
                                                                                "ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
                                                                                "WHERE data.id = %d", number_id);
-               ret = ctsvc_query_get_first_int_result(query, &person_id);
-               if (person_id > 0)
-                       ctsvc_db_phone_log_update_person_id(number->number, -1, person_id, false);
-#endif // ENABLE_LOG_FEATURE
-               ctsvc_set_number_noti();
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &person_id);
+               if (0 < person_id)
+                       ctsvc_db_phone_log_update_person_id(zone_name, number->number, -1, person_id, false);
+#endif /* ENABLE_LOG_FEATURE */
+               ctsvc_set_number_noti(zone_name);
        }
        return CONTACTS_ERROR_NONE;
 }
@@ -132,7 +132,7 @@ int ctsvc_db_number_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record
        ctsvc_number_s *number;
 
        ret = contacts_record_create(_contacts_number._uri, (contacts_record_h *)&number);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        number->id = ctsvc_stmt_get_int(stmt, start_count++);
        number->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -143,17 +143,17 @@ int ctsvc_db_number_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record
        temp = ctsvc_stmt_get_text(stmt, start_count++);
        number->number = SAFE_STRDUP(temp);
        temp = ctsvc_stmt_get_text(stmt, start_count++);
-       number->lookup = SAFE_STRDUP(temp);                     // data4 : minmatch
+       number->lookup = SAFE_STRDUP(temp);         /* data4 : minmatch */
        temp = ctsvc_stmt_get_text(stmt, start_count++);
-       number->normalized = SAFE_STRDUP(temp); // data5 : normalized number
+       number->normalized = SAFE_STRDUP(temp);     /* data5 : normalized number */
        temp = ctsvc_stmt_get_text(stmt, start_count++);
-       number->cleaned = SAFE_STRDUP(temp);            // data6 : cleaned number
+       number->cleaned = SAFE_STRDUP(temp);        /* data6 : cleaned number */
 
        *record = (contacts_record_h)number;
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_number_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -164,24 +164,24 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
        char query[CTS_SQL_MAX_LEN] = {0};
 
 #ifdef ENABLE_LOG_FEATURE
-       // for updating phonelog
+       /* for updating phonelog */
        char *pre_number = NULL;
        int person_id = -1;
        cts_stmt stmt = NULL;
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-       RETVM_IF(!number->id, CONTACTS_ERROR_INVALID_PARAMETER, "number of contact has no ID.");
+       RETVM_IF(0 == number->id, CONTACTS_ERROR_INVALID_PARAMETER, "number of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (number->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY),
                                CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", number->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_number.is_default, CTSVC_PROPERTY_FLAG_DIRTY)) {
                if (number->is_default)
-                       __ctsvc_db_number_reset_default(number->id, number->contact_id);
+                       __ctsvc_db_number_reset_default(zone_name, number->id, number->contact_id);
        }
 
        do {
@@ -191,13 +191,13 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
                        char query_set[CTS_SQL_MAX_LEN] = {0};
 
 #ifdef ENABLE_LOG_FEATURE
-                       // updata phonelog
+                       /* updata phonelog */
                        snprintf(query, sizeof(query),
                                        "SELECT person_id, data3 FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_DATA" "
                                                                                        "ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
                                                                                        "WHERE data.id = %d", number->id);
-                       ret = ctsvc_query_prepare(query, &stmt);
-                       if (stmt != NULL) {
+                       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+                       if (stmt) {
                                ret = ctsvc_stmt_step(stmt);
                                if (ret == 1) {
                                        person_id = ctsvc_stmt_get_int(stmt, 0);
@@ -208,7 +208,7 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
                        }
                        else
                                WARN("ctsvc_query_prepare fail (%d)", ret);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
                        char clean_num[SAFE_STRLEN(number->number) + 1];
                        ret = ctsvc_clean_number(number->number, clean_num, sizeof(clean_num), true);
@@ -235,13 +235,13 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
 #ifdef ENABLE_LOG_FEATURE
                if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_PROPERTY_FLAG_DIRTY)) {
                        if (person_id <= 0) {
-                               // updata phonelog
+                               /* updata phonelog */
                                snprintf(query, sizeof(query),
                                                "SELECT person_id, data3 FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_DATA" "
                                                                                                "ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
                                                                                                "WHERE data.id = %d", number->id);
-                               ret = ctsvc_query_prepare(query, &stmt);
-                               if (stmt != NULL) {
+                               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+                               if (stmt) {
                                        ret = ctsvc_stmt_step(stmt);
                                        if (ret == 1) {
                                                person_id = ctsvc_stmt_get_int(stmt, 0);
@@ -254,21 +254,21 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
                                        WARN("ctsvc_query_prepare fail (%d)", ret);
                        }
                }
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, number->id))) break;
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, number->id))) break;
 
-               if (!is_my_profile)
-                       ctsvc_set_number_noti();
+               if (false == is_my_profile)
+                       ctsvc_set_number_noti(zone_name);
 
 #ifdef ENABLE_LOG_FEATURE
-               // update phone log
-               if (person_id > 0 && pre_number != NULL)
-                       ctsvc_db_phone_log_update_person_id(pre_number, person_id, -1, false);
-               if (person_id > 0)
-                       ctsvc_db_phone_log_update_person_id(number->number, -1, person_id, false);
+               /* update phone log */
+               if (0 < person_id && pre_number)
+                       ctsvc_db_phone_log_update_person_id(zone_name, pre_number, person_id, -1, false);
+               if (0 < person_id)
+                       ctsvc_db_phone_log_update_person_id(zone_name, number->number, -1, person_id, false);
                ctsvc_stmt_finalize(stmt);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -282,13 +282,13 @@ int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_number_delete(int id, bool is_my_profile)
+int ctsvc_db_number_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
 
 #ifdef ENABLE_LOG_FEATURE
-       // for updating phonelog
+       /* for updating phonelog */
        char *pre_number = NULL;
        int person_id = -1;
        cts_stmt stmt = NULL;
@@ -297,8 +297,8 @@ int ctsvc_db_number_delete(int id, bool is_my_profile)
                        "SELECT person_id, data3 FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_DATA" "
                                                                        "ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
                                                                        "WHERE data.id = %d", id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       if (stmt != NULL) {
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       if (stmt) {
                ret = ctsvc_stmt_step(stmt);
                if (ret == 1) {
                        person_id = ctsvc_stmt_get_int(stmt, 0);
@@ -309,29 +309,29 @@ int ctsvc_db_number_delete(int id, bool is_my_profile)
        }
        else
                WARN("ctsvc_query_prepare fail (%d)", ret);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_NUMBER);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
 #ifdef ENABLE_LOG_FEATURE
                ctsvc_stmt_finalize(stmt);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
                return ret;
        }
 
 #ifdef ENABLE_LOG_FEATURE
-       // update phone log
-       if (person_id > 0 && pre_number != NULL)
-               ctsvc_db_phone_log_update_person_id(pre_number, person_id, -1, false);
+       /* update phone log */
+       if (0 < person_id && pre_number)
+               ctsvc_db_phone_log_update_person_id(zone_name, pre_number, person_id, -1, false);
        ctsvc_stmt_finalize(stmt);
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
-       if (!is_my_profile)
-               ctsvc_set_number_noti();
+       if (false == is_my_profile)
+               ctsvc_set_number_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_number_helper.h
rename to server/db/ctsvc_db_plugin_number_helper.h
index 4991391..63d5207 100644 (file)
 #define __CTSVC_DB_PLUGIN_NUMBER_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_number_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_number_delete(int id, bool is_my_profile);
+int ctsvc_db_number_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_number_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_number_delete(const char *zone_name, int id, bool is_my_profile);
 
 int ctsvc_db_number_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_NUMBER_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_NUMBER_HELPER_H__ */
\ No newline at end of file
similarity index 70%
rename from native/ctsvc_db_plugin_person.c
rename to server/db/ctsvc_db_plugin_person.c
index c486488..09ce290 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_plugin_person_helper.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_record.h"
 #include "ctsvc_server_change_subject.h"
 #endif
 
-static int __ctsvc_db_person_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_person_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_person_update_record( contacts_record_h record );
-static int __ctsvc_db_person_delete_record( int id );
-static int __ctsvc_db_person_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_person_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_person_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_person_delete_records(int ids[], int count);
+static int __ctsvc_db_person_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_person_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_person_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_person_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_person_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_person_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_person = {
        .is_query_only = false,
@@ -53,22 +50,22 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_person = {
        .delete_record = __ctsvc_db_person_delete_record,
        .get_all_records = __ctsvc_db_person_get_all_records,
        .get_records_with_query = __ctsvc_db_person_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_person_insert_records,
-       .update_records = NULL,//__ctsvc_db_person_update_records,
-       .delete_records = NULL,//__ctsvc_db_person_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_person_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_person_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        CTS_ERR("Can not insert person record directly");
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-static int __ctsvc_db_person_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_person_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -96,14 +93,14 @@ static int __ctsvc_db_person_get_record( int id, contacts_record_h* out_record )
                        "LEFT JOIN "CTS_TABLE_CONTACTS" "
                        "ON (name_contact_id = contacts.contact_id AND contacts.deleted = 0) "
                        "WHERE persons.person_id = %d",
-                       ctsvc_get_display_column(), ctsvc_get_sort_name_column(), id);
+                       ctsvc_get_display_column(zone_name), ctsvc_get_sort_name_column(zone_name), id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
-       if1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+       if (1 /*CTS_TRUE*/ != ret) {
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -113,8 +110,8 @@ static int __ctsvc_db_person_get_record( int id, contacts_record_h* out_record )
        ret = ctsvc_db_person_create_record_from_stmt(stmt, &record);
        ctsvc_stmt_finalize(stmt);
 
-       if(CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_db_person_create_record_from_stmt() Failed(%d)", ret);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("ctsvc_db_person_create_record_from_stmt() Fail(%d)", ret);
                return ret;
        }
 
@@ -122,7 +119,7 @@ static int __ctsvc_db_person_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_person_update_record( contacts_record_h record )
+static int __ctsvc_db_person_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret, i, len;
        int person_id;
@@ -139,45 +136,45 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
        RETV_IF(NULL == person, CONTACTS_ERROR_INVALID_PARAMETER);
        RETV_IF(person->person_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT person_id FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", person->person_id);
-       ret = ctsvc_query_get_first_int_result(query, &person_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &person_id);
        if (ret != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)person, _contacts_person.display_contact_id, CTSVC_PROPERTY_FLAG_DIRTY)) {
-               // check name_contact_id validation
+               /* check name_contact_id validation */
                char *temp;
                char check_query[CTS_SQL_MIN_LEN] = {0};
                snprintf(check_query, sizeof(check_query), "SELECT contact_id, %s FROM "CTS_TABLE_CONTACTS
                                " WHERE person_id = %d AND contact_id = %d AND deleted = 0",
-                               ctsvc_get_display_column(), person->person_id, person->name_contact_id);
-               ret = ctsvc_query_prepare(check_query, &stmt);
+                               ctsvc_get_display_column(zone_name), person->person_id, person->name_contact_id);
+               ret = ctsvc_query_prepare(zone_name, check_query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
                ret = ctsvc_stmt_step(stmt);
-               if ( 1 != ret) {
-                       if ( CONTACTS_ERROR_NONE == ret) {
+               if (1 != ret) {
+                       if (CONTACTS_ERROR_NONE == ret) {
                                CTS_ERR("Invalid parameter : the name_contact_id(%d) is not linked with person_id(%d)",
                                        person->name_contact_id, person->person_id);
                                ctsvc_stmt_finalize(stmt);
-                               ctsvc_end_trans(false);
+                               ctsvc_end_trans(zone_name, false);
                                return CONTACTS_ERROR_INVALID_PARAMETER;
                        }
                        else {
-                               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
-                               ctsvc_end_trans(false);
+                               ctsvc_end_trans(zone_name, false);
                                return ret;
                        }
                }
@@ -187,18 +184,18 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                ctsvc_stmt_finalize(stmt);
        }
 
-       // update favorite
+       /* update favorite */
        index_favorite = CTSVC_PROPERTY_PERSON_IS_FAVORITE & 0x000000FF;
        if (person->base.properties_flags &&
-                       CTSVC_PROPERTY_FLAG_DIRTY == person->base.properties_flags[index_favorite]) {
-               ret = ctsvc_db_person_set_favorite(person->person_id, person->is_favorite, true);
+                               ctsvc_record_check_property_flag((ctsvc_record_s *)person, index_favorite, CTSVC_PROPERTY_FLAG_DIRTY)) {
+               ret = ctsvc_db_person_set_favorite(zone_name, person->person_id, person->is_favorite, true);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_db_person_set_favorite() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_db_person_set_favorite() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
-               person->base.properties_flags[index_favorite] = 0;
-               ctsvc_set_contact_noti();
+               person->base.properties_flags[index_favorite] &= 0xFFFFFFFD; /* remove dirty bit */
+               ctsvc_set_contact_noti(zone_name);
        }
 
        do {
@@ -210,12 +207,13 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
                if (NULL == set || '\0' == *set)
                        break;
-               snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d", set, ctsvc_get_next_ver());
+               len = snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d", set, ctsvc_get_next_ver(zone_name));
+
                snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE person_id = %d", CTS_TABLE_PERSONS, query_set, person->person_id);
 
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                if (NULL == stmt) {
-                       CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                        break;
                }
 
@@ -229,7 +227,7 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                }
                ret = ctsvc_stmt_step(stmt);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        break;
                }
@@ -237,7 +235,7 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
        } while (0);
 
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
                CONTACTS_FREE(set);
                if (bind_text) {
@@ -248,7 +246,7 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                return ret;
        }
 
-       len = snprintf(contact_query, sizeof(contact_query), "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d ", ctsvc_get_next_ver());
+       len = snprintf(contact_query, sizeof(contact_query), "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d ", ctsvc_get_next_ver(zone_name));
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)person, _contacts_person.ringtone_path, CTSVC_PROPERTY_FLAG_DIRTY))
                len += snprintf(contact_query + len, sizeof(contact_query) - len, ", ringtone_path=? ");
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)person, _contacts_person.vibration, CTSVC_PROPERTY_FLAG_DIRTY))
@@ -257,10 +255,10 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                len += snprintf(contact_query + len, sizeof(contact_query) - len, ", message_alert=? ");
        snprintf(contact_query+len, sizeof(contact_query)-len, " WHERE person_id=%d AND deleted = 0", person->person_id);
 
-       ret = ctsvc_query_prepare(contact_query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, contact_query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
                CONTACTS_FREE(set);
                if (bind_text) {
@@ -290,9 +288,9 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
                CONTACTS_FREE(set);
                if (bind_text) {
@@ -312,7 +310,7 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                g_slist_free(bind_text);
        }
 
-       // update person display_name
+       /* update person display_name */
        if (display_name) {
                char *temp = NULL;
                person->display_name = SAFE_STRDUP(display_name);
@@ -321,20 +319,20 @@ static int __ctsvc_db_person_update_record( contacts_record_h record )
                        person->display_name_index = strdup(temp);
 
                free(temp);
-               // TODO : update name primary_default??
+               /* TODO : update name primary_default?? */
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 #ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_UPDATED, person->person_id);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_UPDATED, person->person_id);
 #endif
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_person_delete_record( int id )
+static int __ctsvc_db_person_delete_record(const char *zone_name, int id)
 {
        int ret, rel_changed;
        int person_id;
@@ -343,19 +341,19 @@ static int __ctsvc_db_person_delete_record( int id )
        int *addressbook_ids = NULL;
        int count;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT person_id FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", id);
-       ret = ctsvc_query_get_first_int_result(query, &person_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &person_id);
        if (ret != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_GROUPS" SET member_changed_ver=%d "
                                "WHERE group_id IN (SELECT distinct group_id "
@@ -363,23 +361,23 @@ static int __ctsvc_db_person_delete_record( int id )
                                                                        "ON C.contact_id=R.contact_id AND R.deleted = 0 AND C.deleted = 0 "
                                                                        "WHERE person_id = %d)",
                                version, id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       rel_changed = ctsvc_db_change();
+       rel_changed = ctsvc_db_change(zone_name);
 
-       ret = ctsvc_get_write_permitted_addressbook_ids(&addressbook_ids, &count);
+       ret = ctsvc_get_write_permitted_addressbook_ids(zone_name, &addressbook_ids, &count);
        if (CONTACTS_ERROR_INTERNAL == ret) {
-               CTS_ERR("ctsvc_get_write_permitted_addressbook_ids() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_get_write_permitted_addressbook_ids() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (addressbook_ids && count > 0) {
+       if (addressbook_ids && 0 < count) {
                int i;
                int len = snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_CONTACTS" SET deleted = 1, person_id = 0, changed_ver = %d "
@@ -387,58 +385,61 @@ static int __ctsvc_db_person_delete_record( int id )
                                version, id);
 
                for (i=0;i<count;i++) {
-                       if(i == 0)
+                       if (i == 0)
                                len += snprintf(query+len, sizeof(query) + len, "addressbook_id = %d ", addressbook_ids[i]);
                        else
                                len += snprintf(query+len, sizeof(query) + len, "OR addressbook_id = %d ", addressbook_ids[i]);
                }
-               len += snprintf(query+len, sizeof(query)-len, " ) ");
+               len += snprintf(query+len, sizeof(query)-len, ") ");
 
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        free(addressbook_ids);
                        return ret;
                }
        }
        free(addressbook_ids);
 
-       // access control logic should be enabled
+       /* access control logic should be enabled */
        snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_CONTACTS" SET person_id = 0, changed_ver = %d WHERE person_id = %d",
                        version, id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       // images are deleted by db trigger callback function in ctsvc_db_image_delete_callback
+       /*
+        * images are deleted by db trigger callback function
+        * in ctsvc_db_image_delete_callback
+        */
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", id);
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_contact_noti();
-       ctsvc_set_person_noti();
-       if (rel_changed > 0)
-               ctsvc_set_group_rel_noti();
+       ctsvc_set_contact_noti(zone_name);
+       ctsvc_set_person_noti(zone_name);
+       if (0 < rel_changed)
+               ctsvc_set_group_rel_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_person_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_person_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -462,9 +463,9 @@ static int __ctsvc_db_person_get_all_records( int offset, int limit, contacts_li
                                "has_email, "
                                "is_favorite "
                "FROM "CTSVC_DB_VIEW_PERSON,
-                       ctsvc_get_display_column(), ctsvc_get_sort_name_column());
+                       ctsvc_get_display_column(zone_name), ctsvc_get_sort_name_column(zone_name));
 
-       len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", ctsvc_get_sort_column());
+       len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", ctsvc_get_sort_column(zone_name));
 
        if (0 != limit) {
                len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
@@ -472,21 +473,21 @@ static int __ctsvc_db_person_get_all_records( int offset, int limit, contacts_li
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
                ret = ctsvc_db_person_create_record_from_stmt(stmt, &record);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("DB error : ctsvc_db_person_create_record_from_stmt() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_db_person_create_record_from_stmt() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -501,7 +502,7 @@ static int __ctsvc_db_person_get_all_records( int offset, int limit, contacts_li
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_person_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -515,14 +516,14 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -532,17 +533,15 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
                person = (ctsvc_person_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -556,10 +555,12 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_PERSON_DISPLAY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->display_name);
                                person->display_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->display_name_index);
                                person->display_name_index = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID:
@@ -567,12 +568,14 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_PERSON_RINGTONE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->ringtone_path);
                                person->ringtone_path = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp && *temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                                       free(person->image_thumbnail_path);
                                        person->image_thumbnail_path = strdup(full_path);
                                }
                                break;
@@ -590,18 +593,22 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
                                break;
                        case CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->addressbook_ids);
                                person->addressbook_ids = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_VIBRATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->vibration);
                                person->vibration = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_STATUS:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->status);
                                person->status = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PERSON_MESSAGE_ALERT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(person->message_alert);
                                person->message_alert = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -618,19 +625,3 @@ static int __ctsvc_db_person_get_records_with_query( contacts_query_h query, int
        return CONTACTS_ERROR_NONE;
 }
 
-#if 0
-static int __ctsvc_db_person_insert_records(const contacts_list_h in_list, int **ids)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_person_update_records(const contacts_list_h in_list)
-{
-       return CONTACTS_ERROR_NONE;
-}
-
-static int __ctsvc_db_person_delete_records(int ids[], int count)
-{
-       return CONTACTS_ERROR_NONE;
-}
-#endif
old mode 100755 (executable)
new mode 100644 (file)
similarity index 75%
rename from native/ctsvc_db_plugin_person_helper.c
rename to server/db/ctsvc_db_plugin_person_helper.c
index fb543b6..f3ba620
  * limitations under the License.
  *
  */
-#include <vconf.h>
-#include <vconf-keys.h>
-
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_person_helper.h"
 #include "ctsvc_localize.h"
 #include "ctsvc_localize_utils.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
@@ -47,7 +44,7 @@ int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsig
        person = (ctsvc_person_s*)*record;
 
        int i;
-       for(i=0;i<projection_count;i++) {
+       for (i=0;i<projection_count;i++) {
                char *temp;
                int property_id = projection[i];
 
@@ -57,10 +54,12 @@ int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsig
                        break;
                case CTSVC_PROPERTY_PERSON_DISPLAY_NAME:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->display_name);
                        person->display_name = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->display_name_index);
                        person->display_name_index = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID:
@@ -68,25 +67,30 @@ int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsig
                        break;
                case CTSVC_PROPERTY_PERSON_RINGTONE:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->ringtone_path);
                        person->ringtone_path = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
                        temp = ctsvc_stmt_get_text(stmt, i);
                        if (temp && *temp) {
                                snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                               free(person->image_thumbnail_path);
                                person->image_thumbnail_path = strdup(full_path);
                        }
                        break;
                case CTSVC_PROPERTY_PERSON_VIBRATION:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->vibration);
                        person->vibration = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_MESSAGE_ALERT:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->message_alert);
                        person->message_alert = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_STATUS:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->status);
                        person->status = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_IS_FAVORITE:
@@ -103,17 +107,16 @@ int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsig
                        break;
                case CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS:
                        temp = ctsvc_stmt_get_text(stmt, i);
+                       free(person->addressbook_ids);
                        person->addressbook_ids = SAFE_STRDUP(temp);
                        break;
                case CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY:
                        {
-                       // TODO: Fixme (BS)
+                       /* TODO: Fixme (BS) */
                                int value = ctsvc_stmt_get_int(stmt, i);
-                               value++; // fix warning
+                               value++; /* fix warning */
                        }
                        break;
-                       //      ASSERT_NOT_REACHED("Invalid parameter : property_id(0x%0x) is not supported in projection value(person)", property_id);
-                       // return CONTACTS_ERROR_INVALID_PARAMETER;
                default:
                        ASSERT_NOT_REACHED("Invalid parameter : property_id(0x%0x) is not supported in value(person)", property_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -128,13 +131,15 @@ int ctsvc_db_person_create_record_from_stmt_with_query(cts_stmt stmt, contacts_q
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        ctsvc_query_s *s_query = (ctsvc_query_s *)query;
 
-       if (0 == s_query->projection_count)
-       {
-               unsigned int *projection = malloc(sizeof(unsigned int)*s_query->property_count);
-               RETVM_IF(NULL == projection, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (0 == s_query->projection_count) {
                int i;
-               for(i=0;i<s_query->property_count;i++)
-               {
+               unsigned int *projection = malloc(sizeof(unsigned int)*s_query->property_count);
+               if (NULL == projection) {
+                       CTS_ERR("malloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+
+               for (i=0;i<s_query->property_count;i++) {
                        projection[i] = s_query->properties[i].property_id;
                }
 
@@ -158,7 +163,7 @@ int ctsvc_db_person_create_record_from_stmt(cts_stmt stmt, contacts_record_h *re
 
        i = 0;
        ret = contacts_record_create(_contacts_person._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        person = (ctsvc_person_s *)*record;
        person->person_id = ctsvc_stmt_get_int(stmt, i++);
 
@@ -209,7 +214,7 @@ inline static const char* __ctsvc_get_image_filename(const char* src)
        return src+pos;
 }
 
-int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate)
+int ctsvc_db_person_set_favorite(const char *zone_name, int person_id, bool set, bool propagate)
 {
        int ret;
        double prio = 0.0;
@@ -220,15 +225,15 @@ int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate)
                snprintf(query, sizeof(query),
                        "SELECT MAX(favorite_prio) FROM "CTS_TABLE_FAVORITES);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                ret = ctsvc_stmt_step(stmt);
                if (1 /*CTS_TRUE*/ == ret) {
                        prio = ctsvc_stmt_get_dbl(stmt, 0);
                }
                else if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        return ret;
                }
@@ -243,9 +248,9 @@ int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate)
                        "DELETE FROM "CTS_TABLE_FAVORITES" WHERE person_id = %d", person_id);
        }
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                return ret;
        }
 
@@ -253,9 +258,9 @@ int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate)
                snprintf(query, sizeof(query),
                                "UPDATE "CTS_TABLE_CONTACTS" SET is_favorite = %d "
                                        "WHERE person_id=%d AND deleted = 0", set?1:0, person_id);
-               ret = ctsvc_query_exec(query);
+               ret = ctsvc_query_exec(zone_name, query);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
                        return ret;
                }
        }
@@ -263,7 +268,7 @@ int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate)
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_insert_person(contacts_record_h record)
+int ctsvc_db_insert_person(const char *zone_name, contacts_record_h record)
 {
        int ret, index;
        cts_stmt stmt = NULL;
@@ -277,14 +282,14 @@ int ctsvc_db_insert_person(contacts_record_h record)
                "WHERE contact_id=%d "
                "ORDER BY timestamp DESC LIMIT 1",
                CTS_TABLE_ACTIVITIES, contact->id);
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (1 == ctsvc_stmt_step(stmt))
                status = SAFE_STRDUP(ctsvc_stmt_get_text(stmt, 0));
        ctsvc_stmt_finalize(stmt);
 
-       version = ctsvc_get_next_ver();
+       version = ctsvc_get_next_ver(zone_name);
        snprintf(query, sizeof(query),
                "INSERT INTO "CTS_TABLE_PERSONS"(name_contact_id, created_ver, changed_ver, "
                        "has_phonenumber, has_email, ringtone_path, vibration, message_alert, status, "
@@ -293,31 +298,31 @@ int ctsvc_db_insert_person(contacts_record_h record)
                        contact->id, version, version,
                        contact->has_phonenumber, contact->has_email, contact->addressbook_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                free(status);
                return ret;
        }
-       if(contact->ringtone_path)
+       if (contact->ringtone_path)
                ctsvc_stmt_bind_text(stmt, 1, contact->ringtone_path);
-       if(contact->vibration)
+       if (contact->vibration)
                ctsvc_stmt_bind_text(stmt, 2, contact->vibration);
-       if(contact->message_alert)
+       if (contact->message_alert)
                ctsvc_stmt_bind_text(stmt, 3, contact->message_alert);
-       if(status)
+       if (status)
                ctsvc_stmt_bind_text(stmt, 4, status);
-       if(contact->image_thumbnail_path)
+       if (contact->image_thumbnail_path)
                ctsvc_stmt_bind_text(stmt, 5, __ctsvc_get_image_filename(contact->image_thumbnail_path));
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                free(status);
                return ret;
        }
-       index = ctsvc_db_get_last_insert_id();
+       index = ctsvc_db_get_last_insert_id(zone_name);
 
        ctsvc_stmt_finalize(stmt);
 
@@ -325,32 +330,32 @@ int ctsvc_db_insert_person(contacts_record_h record)
                "UPDATE "CTS_TABLE_DATA" SET is_primary_default = 1 "
                        "WHERE is_default = 1 AND contact_id = %d  AND is_my_profile = 0", contact->id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec Failed(%d)", ret);
+               CTS_ERR("ctsvc_query_exec Fail(%d)", ret);
                free(status);
                return ret;
        }
 
-       // set favorite
+       /* set favorite */
        if (contact->is_favorite) {
-               ret = ctsvc_db_person_set_favorite(index, contact->is_favorite, false);
+               ret = ctsvc_db_person_set_favorite(zone_name, index, contact->is_favorite, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_db_person_set_favorite() Failed(%d)", ret);
+                       CTS_ERR("ctsvc_db_person_set_favorite() Fail(%d)", ret);
                        return ret;
                }
        }
 
        free(status);
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 #ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_INSERTED, index);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_INSERTED, index);
 #endif
 
        return index;
 }
 
-static inline int __ctsvc_db_update_person_default(int person_id, int datatype)
+static inline int __ctsvc_db_update_person_default(const char *zone_name, int person_id, int datatype)
 {
        int ret, data_id;
        cts_stmt stmt = NULL;
@@ -364,16 +369,16 @@ static inline int __ctsvc_db_update_person_default(int person_id, int datatype)
                "WHERE C.person_id=%d AND D.datatype=%d AND is_primary_default=1 AND D.is_my_profile = 0",
                person_id, datatype);
 
-       ret = ctsvc_query_get_first_int_result(query, &data_id);
-       if (CONTACTS_ERROR_NO_DATA == ret ) {
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &data_id);
+       if (CONTACTS_ERROR_NO_DATA == ret) {
                snprintf(query, sizeof(query),
                        "SELECT D.id, D.data3 FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
                        "ON C.contact_id = D.contact_id AND C.deleted = 0 "
                        "WHERE C.person_id=%d AND D.datatype=%d AND D.is_default=1 AND D.is_my_profile = 0 ORDER BY D.id",
                        person_id, datatype);
 
-               ret = ctsvc_query_prepare(query, &stmt);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                ret = ctsvc_stmt_step(stmt);
                if (1 == ret) {
@@ -383,9 +388,9 @@ static inline int __ctsvc_db_update_person_default(int person_id, int datatype)
                                        "UPDATE "CTS_TABLE_DATA" SET is_primary_default=1 WHERE id=%d"
                                        ,data_id);
 
-                       ret = ctsvc_query_exec(query);
+                       ret = ctsvc_query_exec(zone_name, query);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("ctsvc_query_exec Failed(%d)", ret);
+                               CTS_ERR("ctsvc_query_exec Fail(%d)", ret);
                                ctsvc_stmt_finalize(stmt);
                                return ret;
                        }
@@ -398,14 +403,14 @@ static inline int __ctsvc_db_update_person_default(int person_id, int datatype)
                        if (image_thumbnail_path) {
                                snprintf(query, sizeof(query),
                                                "UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id=%d", person_id);
-                               ret = ctsvc_query_prepare(query, &stmt);
-                               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+                               ret = ctsvc_query_prepare(zone_name, query, &stmt);
+                               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
                                ctsvc_stmt_bind_text(stmt, 1, image_thumbnail_path);
                                ret = ctsvc_stmt_step(stmt);
                                ctsvc_stmt_finalize(stmt);
                                free(image_thumbnail_path);
                                if (CONTACTS_ERROR_NONE != ret) {
-                                       CTS_ERR("ctsvc_stmt_step Failed(%d)", ret);
+                                       CTS_ERR("ctsvc_stmt_step Fail(%d)", ret);
                                        return ret;
                                }
                        }
@@ -418,7 +423,7 @@ static inline int __ctsvc_db_update_person_default(int person_id, int datatype)
        return CONTACTS_ERROR_NONE;
 }
 
-static bool __ctsvc_get_has_column(int person_id, const char *culumn)
+static bool __ctsvc_get_has_column(const char *zone_name, int person_id, const char *culumn)
 {
        int ret;
        int contact_count = 0;
@@ -429,7 +434,7 @@ static bool __ctsvc_get_has_column(int person_id, const char *culumn)
                                "WHERE person_id=%d AND %s=1 AND deleted = 0",
                                person_id, culumn);
 
-       ret = ctsvc_query_get_first_int_result(query, &contact_count);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &contact_count);
        RETV_IF(CONTACTS_ERROR_NONE != ret, false);
 
        if (contact_count)
@@ -437,7 +442,7 @@ static bool __ctsvc_get_has_column(int person_id, const char *culumn)
        return false;
 }
 
-static int __ctsvc_get_thumbnail_contact_id(int person_id)
+static int __ctsvc_get_thumbnail_contact_id(const char *zone_name, int person_id)
 {
        int ret;
        int contact_id = 0;
@@ -448,12 +453,12 @@ static int __ctsvc_get_thumbnail_contact_id(int person_id)
                        "ON C.contact_id = D.contact_id AND C.deleted = 0 "
                        "WHERE C.person_id=%d AND D.datatype=%d AND is_primary_default=1 AND D.is_my_profile = 0",
                        person_id, CTSVC_DATA_IMAGE);
-       ret = ctsvc_query_get_first_int_result(query, &contact_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &contact_id);
        RETV_IF(CONTACTS_ERROR_NONE != ret, -1);
        return contact_id;
 }
 
-int ctsvc_db_update_person(contacts_record_h record)
+int ctsvc_db_update_person(const char *zone_name, contacts_record_h record)
 {
        int ret, i=1, len=0;
        cts_stmt stmt = NULL;
@@ -464,20 +469,20 @@ int ctsvc_db_update_person(contacts_record_h record)
        int person_id = 0;
        int is_favorite = 0;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_NUMBER);
-       __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_EMAIL);
-       __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_IMAGE);
+       __ctsvc_db_update_person_default(zone_name, contact->person_id, CTSVC_DATA_NUMBER);
+       __ctsvc_db_update_person_default(zone_name, contact->person_id, CTSVC_DATA_EMAIL);
+       __ctsvc_db_update_person_default(zone_name, contact->person_id, CTSVC_DATA_IMAGE);
 
-       has_phonenumber = __ctsvc_get_has_column(contact->person_id, "has_phonenumber");
-       has_email = __ctsvc_get_has_column(contact->person_id, "has_email");
-       thumbnail_contact_id = __ctsvc_get_thumbnail_contact_id(contact->person_id);
+       has_phonenumber = __ctsvc_get_has_column(zone_name, contact->person_id, "has_phonenumber");
+       has_email = __ctsvc_get_has_column(zone_name, contact->person_id, "has_email");
+       thumbnail_contact_id = __ctsvc_get_thumbnail_contact_id(zone_name, contact->person_id);
 
        len = snprintf(query, sizeof(query),
                        "UPDATE "CTS_TABLE_PERSONS" SET changed_ver=%d, has_phonenumber=%d, has_email=%d ",
-                       ctsvc_get_next_ver(), has_phonenumber, has_email);
+                       ctsvc_get_next_ver(zone_name), has_phonenumber, has_email);
 
        if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, _contacts_contact.ringtone_path, CTSVC_PROPERTY_FLAG_DIRTY))
                len += snprintf(query+len, sizeof(query)-len, ", ringtone_path=?");
@@ -492,10 +497,10 @@ int ctsvc_db_update_person(contacts_record_h record)
        snprintf(query+len, sizeof(query)-len,
                        " WHERE person_id=%d", contact->person_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
@@ -523,75 +528,74 @@ int ctsvc_db_update_person(contacts_record_h record)
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ctsvc_stmt_finalize(stmt);
 
-       // update favorite
+       /* update favorite */
        snprintf(query, sizeof(query),
                        "SELECT is_favorite FROM "CTS_TABLE_CONTACTS" WHERE contact_id =%d ", contact->id);
-       ret = ctsvc_query_get_first_int_result(query, &is_favorite);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &is_favorite);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT person_id FROM "CTS_TABLE_FAVORITES" WHERE person_id =%d ", contact->person_id);
-       ret = ctsvc_query_get_first_int_result(query, &person_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &person_id);
        if (CONTACTS_ERROR_NO_DATA == ret && is_favorite) {
-               ret = ctsvc_db_person_set_favorite(contact->person_id, true, false);
+               ret = ctsvc_db_person_set_favorite(zone_name, contact->person_id, true, false);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_db_person_set_favorite() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_db_person_set_favorite() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
        }
-       else if (CONTACTS_ERROR_NONE == ret && !is_favorite) {
+       else if (CONTACTS_ERROR_NONE == ret && false == is_favorite) {
                snprintf(query, sizeof(query),
                        "SELECT person_id FROM "CTS_TABLE_CONTACTS" WHERE person_id =%d AND is_favorite = 1", contact->person_id);
-               ret = ctsvc_query_get_first_int_result(query, &person_id);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &person_id);
                if (CONTACTS_ERROR_NO_DATA == ret) {
-                       ret = ctsvc_db_person_set_favorite(contact->person_id, false, false);
+                       ret = ctsvc_db_person_set_favorite(zone_name, contact->person_id, false, false);
                        if (CONTACTS_ERROR_NONE != ret) {
-                               CTS_ERR("ctsvc_db_person_set_favorite() Failed(%d)", ret);
-                               ctsvc_end_trans(false);
+                               CTS_ERR("ctsvc_db_person_set_favorite() Fail(%d)", ret);
+                               ctsvc_end_trans(zone_name, false);
                                return ret;
                        }
                }
                else if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d)", ret);
-                       ctsvc_end_trans(false);
+                       CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
        }
        else if (ret < CONTACTS_ERROR_NONE && CONTACTS_ERROR_NO_DATA != ret) {
-               CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
 #ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_UPDATED, contact->person_id);
+       ctsvc_change_subject_add_changed_person_id(zone_name, CONTACTS_CHANGE_UPDATED, contact->person_id);
 #endif
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-// This function will return group letter of the person
+/* This function will return group letter of the person */
 void ctsvc_db_normalize_str_callback(sqlite3_context * context,
                int argc, sqlite3_value ** argv)
 {
@@ -615,7 +619,7 @@ void ctsvc_db_normalize_str_callback(sqlite3_context * context,
                        char *dest = NULL;
                        ret = ctsvc_normalize_index(display_name, &dest);
                        if (ret < CONTACTS_ERROR_NONE) {
-                               CTS_ERR("ctsvc_normalize_index() Failed(%d)", ret);
+                               CTS_ERR("ctsvc_normalize_index() Fail(%d)", ret);
                                sqlite3_result_null(context);
                                return;
                        }
old mode 100755 (executable)
new mode 100644 (file)
similarity index 79%
rename from native/ctsvc_db_plugin_person_helper.h
rename to server/db/ctsvc_db_plugin_person_helper.h
index 40efc68..eb7593b
 #define __CTSVC_DB_PLUGIN_PERSON_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
 #define ADDRESSBOOK_ID_DELIM   " "
 
-int ctsvc_db_insert_person(contacts_record_h contact);
-int ctsvc_db_update_person(contacts_record_h contact);
+int ctsvc_db_insert_person(const char *zone_name, contacts_record_h contact);
+int ctsvc_db_update_person(const char *zone_name, contacts_record_h contact);
 int ctsvc_db_person_create_record_from_stmt(cts_stmt stmt, contacts_record_h *record);
 int ctsvc_db_person_create_record_from_stmt_with_query(cts_stmt stmt, contacts_query_h query, contacts_record_h *record);
 int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsigned int *projection, int projection_count, contacts_record_h *record);
 void ctsvc_db_normalize_str_callback(sqlite3_context * context,        int argc, sqlite3_value ** argv);
-int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate);
+int ctsvc_db_person_set_favorite(const char *zone_name, int person_id, bool set, bool propagate);
 
-#endif // __CTSVC_DB_PLUGIN_PERSON_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_PERSON_HELPER_H__ */
\ No newline at end of file
similarity index 71%
rename from native/ctsvc_db_plugin_phonelog.c
rename to server/db/ctsvc_db_plugin_phonelog.c
index 8f372b9..fbd4c02 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_number_utils.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_record.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_notification.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_localize_utils.h"
-#include "ctsvc_phonelog.h"
+#include "ctsvc_server_phonelog.h"
 
 #ifdef _CONTACTS_IPC_SERVER
 #include "ctsvc_server_change_subject.h"
-#ifdef ENABLE_SIM_FEATURE
 #include "ctsvc_server_sim.h"
-#include "ctsvc_server_utils.h"
-#endif // ENABLE_SIM_FEATURE
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
 
-static int __ctsvc_db_phonelog_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_phonelog_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_phonelog_update_record( contacts_record_h record );
-static int __ctsvc_db_phonelog_delete_record( int id );
-static int __ctsvc_db_phonelog_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_phonelog_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_phonelog_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_phonelog_delete_records( int ids[], int count);
+static int __ctsvc_db_phonelog_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_phonelog_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_phonelog_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_phonelog_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_phonelog_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_phonelog_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_phonelog = {
        .is_query_only = false,
@@ -61,9 +55,9 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_phonelog = {
        .delete_record = __ctsvc_db_phonelog_delete_record,
        .get_all_records = __ctsvc_db_phonelog_get_all_records,
        .get_records_with_query = __ctsvc_db_phonelog_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_phonelog_insert_records,
-       .update_records = NULL,//__ctsvc_db_phonelog_update_records,
-       .delete_records = NULL,//__ctsvc_db_phonelog_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
@@ -78,7 +72,7 @@ static int __ctsvc_db_phonelog_value_set(cts_stmt stmt, contacts_record_h *recor
        ctsvc_phonelog_s *phonelog;
 
        ret = contacts_record_create(_contacts_phone_log._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        phonelog = (ctsvc_phonelog_s*)*record;
 
        i = 0;
@@ -92,14 +86,12 @@ static int __ctsvc_db_phonelog_value_set(cts_stmt stmt, contacts_record_h *recor
        temp = ctsvc_stmt_get_text(stmt, i++);
        phonelog->extra_data2 = SAFE_STRDUP(temp);
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
        phonelog->sim_slot_no = ctsvc_server_sim_get_sim_slot_no_by_info_id(ctsvc_stmt_get_int(stmt, i++));
-#endif // ENABLE_SIM_FEATURE
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_phonelog_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -113,12 +105,12 @@ static int __ctsvc_db_phonelog_get_record( int id, contacts_record_h* out_record
                        "SELECT id, number, person_id, log_type, log_time, data1, data2, sim_id "
                        "FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -130,7 +122,7 @@ static int __ctsvc_db_phonelog_get_record( int id, contacts_record_h* out_record
 
        ctsvc_stmt_finalize(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_phonelog_value_set(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_phonelog_value_set(ALL) Fail(%d)", ret);
                return ret;
        }
 
@@ -139,7 +131,7 @@ static int __ctsvc_db_phonelog_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_update_record( contacts_record_h record )
+static int __ctsvc_db_phonelog_update_record(const char *zone_name, contacts_record_h record)
 {
        int phonelog_id;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -157,27 +149,27 @@ static int __ctsvc_db_phonelog_update_record( contacts_record_h record )
                        "Invalid parameter : the type is can not updated(%d)", phonelog->log_type);
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (phonelog->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", phonelog->id);
-       ret = ctsvc_query_get_first_int_result(query, &phonelog_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &phonelog_id);
        if (ret != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_PHONELOGS, phonelog->id))) break;
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_PHONELOGS, phonelog->id))) break;
 
-               if (ctsvc_db_change()) {
-                       ctsvc_set_phonelog_noti();
+               if (ctsvc_db_change(zone_name)) {
+                       ctsvc_set_phonelog_noti(zone_name);
 
 #ifdef _CONTACTS_IPC_SERVER
-                       ctsvc_change_subject_add_changed_phone_log_id(CONTACTS_CHANGE_UPDATED, phonelog->id);
+                       ctsvc_change_subject_add_changed_phone_log_id(zone_name, CONTACTS_CHANGE_UPDATED, phonelog->id);
 #endif
                }
        } while (0);
@@ -190,54 +182,53 @@ static int __ctsvc_db_phonelog_update_record( contacts_record_h record )
                g_slist_free(bind_text);
        }
 
-       ret = ctsvc_end_trans(true);
-       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_delete_record( int id )
+static int __ctsvc_db_phonelog_delete_record(const char *zone_name, int id)
 {
        int ret;
        int phonelog_id;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", id);
-       ret = ctsvc_query_get_first_int_result(query, &phonelog_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &phonelog_id);
        if (ret != CONTACTS_ERROR_NONE) {
                CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE id = %d",
                        CTS_TABLE_PHONELOGS, id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ctsvc_set_phonelog_noti();
+       ctsvc_set_phonelog_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_get_all_records( int offset, int limit,
-               contacts_list_h* out_list )
+static int __ctsvc_db_phonelog_get_all_records(const char *zone_name, int offset, int limit,
+               contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -255,14 +246,14 @@ static int __ctsvc_db_phonelog_get_all_records( int offset, int limit,
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -278,8 +269,8 @@ static int __ctsvc_db_phonelog_get_all_records( int offset, int limit,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_phonelog_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -292,14 +283,14 @@ static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, i
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -309,17 +300,15 @@ static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, i
                phonelog = (ctsvc_phonelog_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -336,6 +325,7 @@ static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, i
                                break;
                        case CTSVC_PROPERTY_PHONELOG_ADDRESS:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(phonelog->address);
                                phonelog->address = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PHONELOG_LOG_TIME:
@@ -349,13 +339,12 @@ static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, i
                                break;
                        case CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(phonelog->extra_data2);
                                phonelog->extra_data2 = SAFE_STRDUP(temp);
                                break;
-#ifdef ENABLE_SIM_FEATURE
                        case CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO:
                                phonelog->sim_slot_no = ctsvc_server_sim_get_sim_slot_no_by_info_id(ctsvc_stmt_get_int(stmt, i));
                                break;
-#endif // ENABLE_SIM_FEATURE
                        default:
                                break;
                        }
@@ -370,11 +359,7 @@ static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, i
 
        return CONTACTS_ERROR_NONE;
 }
-//static int __ctsvc_db_phonelog_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_phonelog_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_phonelog_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
-
-static int __ctsvc_db_phonelog_increase_outgoing_count(ctsvc_phonelog_s *phonelog)
+static int __ctsvc_db_phonelog_increase_outgoing_count(const char *zone_name, ctsvc_phonelog_s *phonelog, int log_id)
 {
        int ret;
        int id;
@@ -394,7 +379,7 @@ static int __ctsvc_db_phonelog_increase_outgoing_count(ctsvc_phonelog_s *phonelo
                        "SELECT person_id FROM %s WHERE person_id = %d and usage_type = %d ",
                        CTS_TABLE_CONTACT_STAT, phonelog->person_id, type);
 
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        if (CONTACTS_ERROR_NO_DATA == ret) {
                snprintf(query, sizeof(query),
                                "INSERT INTO %s(person_id, usage_type, times_used) VALUES(%d, %d, 1)",
@@ -406,13 +391,13 @@ static int __ctsvc_db_phonelog_increase_outgoing_count(ctsvc_phonelog_s *phonelo
                                CTS_TABLE_CONTACT_STAT, phonelog->person_id, type);
        }
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+               ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int  __ctsvc_db_phonelog_insert(ctsvc_phonelog_s *phonelog, int *id)
+static int  __ctsvc_db_phonelog_insert(const char *zone_name, ctsvc_phonelog_s *phonelog, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -427,8 +412,8 @@ static int  __ctsvc_db_phonelog_insert(ctsvc_phonelog_s *phonelog, int *id)
                        "VALUES(?, ?, ?, ?, ?, %d, %d, %d, ?, ?)",
                        phonelog->log_type, phonelog->log_time, phonelog->extra_data1);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (phonelog->address) {
                ctsvc_stmt_bind_text(stmt, 1, phonelog->address);
@@ -443,7 +428,6 @@ static int  __ctsvc_db_phonelog_insert(ctsvc_phonelog_s *phonelog, int *id)
                                        char minmatch[sizeof(normal_num) + 1];
                                        ctsvc_stmt_bind_copy_text(stmt, 2, normal_num, strlen(normal_num));
                                        ret = ctsvc_get_minmatch_number(normal_num, minmatch, sizeof(minmatch), ctsvc_get_phonenumber_min_match_digit());
-                                       WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_get_minmatch_number() Fail(%d)", ret);
                                        ctsvc_stmt_bind_copy_text(stmt, 3, minmatch, strlen(minmatch));
                                }
                        }
@@ -456,35 +440,33 @@ static int  __ctsvc_db_phonelog_insert(ctsvc_phonelog_s *phonelog, int *id)
        if (phonelog->extra_data2)
                ctsvc_stmt_bind_text(stmt, 6, phonelog->extra_data2);
 
-#ifdef ENABLE_SIM_FEATURE
-       if (phonelog->sim_slot_no >= 0) {
+       if (0 <= phonelog->sim_slot_no) {
                int sim_info_id;
                sim_info_id = ctsvc_server_sim_get_info_id_by_sim_slot_no(phonelog->sim_slot_no);
-               if (sim_info_id > 0)
+               if (0 < sim_info_id)
                        ctsvc_stmt_bind_int(stmt, 7, sim_info_id);
        }
        else
-#endif // ENABLE_SIM_FEATURE
                ctsvc_stmt_bind_int(stmt, 7, -1);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       // update phonelog
-       ctsvc_db_phone_log_update_person_id(phonelog->address, phonelog->person_id, -1, false);
+       /* update phonelog */
+       ctsvc_db_phone_log_update_person_id(zone_name, phonelog->address, phonelog->person_id, -1, false);
 
-       ctsvc_set_phonelog_noti();
+       ctsvc_set_phonelog_noti(zone_name);
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_phonelog_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_phonelog_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        ctsvc_phonelog_s *phonelog = (ctsvc_phonelog_s *)record;
@@ -493,29 +475,29 @@ static int __ctsvc_db_phonelog_insert_record( contacts_record_h record, int *id
        RETVM_IF(phonelog->id, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : The phone_log has ID(%d)", phonelog->id);
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       ret = __ctsvc_db_phonelog_insert(phonelog, id);
+       ret = __ctsvc_db_phonelog_insert(zone_name, phonelog, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_phonelog_insert() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("__ctsvc_db_phonelog_insert() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        if (0 < phonelog->person_id) {
-               ret = __ctsvc_db_phonelog_increase_outgoing_count(phonelog);
-               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_db_phonelog_increase_outgoing_count() Failed(%d)", ret);
+               ret = __ctsvc_db_phonelog_increase_outgoing_count(zone_name, phonelog, *id);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "__ctsvc_db_phonelog_increase_outgoing_count() Fail(%d)", ret);
        }
 
 #ifdef _CONTACTS_IPC_SERVER
-       // add id for subscribe
-       ctsvc_change_subject_add_changed_phone_log_id(CONTACTS_CHANGE_INSERTED, *id);
+       /* add id for subscribe */
+       ctsvc_change_subject_add_changed_phone_log_id(zone_name, CONTACTS_CHANGE_INSERTED, *id);
 #endif
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE) {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        return CONTACTS_ERROR_NONE;
similarity index 67%
rename from native/ctsvc_db_plugin_profile.c
rename to server/db/ctsvc_db_plugin_profile.c
index b0d6cb7..239ee1b 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_list.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_profile_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_profile_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_profile_update_record( contacts_record_h record );
-static int __ctsvc_db_profile_delete_record( int id );
-static int __ctsvc_db_profile_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_profile_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_profile_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_profile_delete_records( int ids[], int count);
+static int __ctsvc_db_profile_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_profile_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_profile_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_profile_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_profile_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_profile_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_profile = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_profile = {
        .delete_record = __ctsvc_db_profile_delete_record,
        .get_all_records = __ctsvc_db_profile_get_all_records,
        .get_records_with_query = __ctsvc_db_profile_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_profile_insert_records,
-       .update_records = NULL,//__ctsvc_db_profile_update_records,
-       .delete_records = NULL,//__ctsvc_db_profile_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_profile_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_profile_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -68,17 +65,17 @@ static int __ctsvc_db_profile_insert_record( contacts_record_h record, int *id )
        RETVM_IF(NULL == profile->text, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : profile text is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", profile->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", profile->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -89,38 +86,37 @@ static int __ctsvc_db_profile_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this profile record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_profile_insert(record, profile->contact_id, false, id);
+       ret = ctsvc_db_profile_insert(zone_name, record, profile->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(profile->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, profile->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_profile_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_profile_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -137,12 +133,12 @@ static int __ctsvc_db_profile_get_record( int id, contacts_record_h* out_record
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_PROFILE);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -157,7 +153,7 @@ static int __ctsvc_db_profile_get_record( int id, contacts_record_h* out_record
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_profile_update_record( contacts_record_h record )
+static int __ctsvc_db_profile_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -165,53 +161,52 @@ static int __ctsvc_db_profile_update_record( contacts_record_h record )
        ctsvc_profile_s *profile = (ctsvc_profile_s *)record;
        RETVM_IF(NULL == profile->text, CONTACTS_ERROR_INVALID_PARAMETER, "profile text is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", profile->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", profile->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this profile record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_profile_update(record, false);
+       ret = ctsvc_db_profile_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(profile->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, profile->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_profile_delete_record( int id )
+static int __ctsvc_db_profile_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -219,26 +214,26 @@ static int __ctsvc_db_profile_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare Fail(%d", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -249,38 +244,37 @@ static int __ctsvc_db_profile_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this profile record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_profile_delete(id, false);
+       ret = ctsvc_db_profile_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_profile_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_profile_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -303,13 +297,13 @@ static int __ctsvc_db_profile_get_all_records( int offset, int limit, contacts_l
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -324,8 +318,8 @@ static int __ctsvc_db_profile_get_all_records( int offset, int limit, contacts_l
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_profile_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -338,14 +332,14 @@ static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, in
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -360,11 +354,11 @@ static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, in
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -381,10 +375,12 @@ static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_PROFILE_UID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->uid);
                                profile->uid = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_TEXT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->text);
                                profile->text = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_ORDER:
@@ -392,26 +388,32 @@ static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, in
                                break;
                        case CTSVC_PROPERTY_PROFILE_SERVICE_OPERATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->service_operation);
                                profile->service_operation = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_MIME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->mime);
                                profile->mime = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_APP_ID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->app_id);
                                profile->app_id = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_URI:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->uri);
                                profile->uri = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_CATEGORY:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->category);
                                profile->category = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_PROFILE_EXTRA_DATA:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(profile->extra_data);
                                profile->extra_data = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -426,7 +428,3 @@ static int __ctsvc_db_profile_get_records_with_query( contacts_query_h query, in
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_profile_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_profile_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_profile_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 82%
rename from native/ctsvc_db_plugin_profile_helper.c
rename to server/db/ctsvc_db_plugin_profile_helper.c
index 7a19f40..3850c20 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_profile_helper.h"
@@ -35,7 +35,7 @@ int ctsvc_db_profile_get_value_from_stmt(cts_stmt stmt, contacts_record_h *recor
        ctsvc_profile_s *profile;
 
        ret = contacts_record_create(_contacts_profile._uri, (contacts_record_h *)&profile);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        profile->id = ctsvc_stmt_get_int(stmt, start_count++);
        profile->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -86,7 +86,7 @@ static inline int __ctsvc_profile_bind_stmt(cts_stmt stmt, ctsvc_profile_s *prof
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_profile_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_profile_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -105,31 +105,31 @@ int ctsvc_db_profile_insert(contacts_record_h record, int contact_id, bool is_my
                                "VALUES(%d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                                contact_id, is_my_profile, CTSVC_DATA_PROFILE);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        __ctsvc_profile_bind_stmt(stmt, profile, 1);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //profile->id = ctsvc_db_get_last_insert_id();
+       /* profile->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_profile_noti();
+       if (false == is_my_profile)
+               ctsvc_set_profile_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 
 }
 
-int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_profile_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -139,20 +139,20 @@ int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile)
        ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!profile->id, CONTACTS_ERROR_INVALID_PARAMETER, "profile of contact has no ID.");
+       RETVM_IF(0 == profile->id, CONTACTS_ERROR_INVALID_PARAMETER, "profile of contact has no ID.");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", profile->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (profile->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, profile->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_profile_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, profile->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_profile_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -167,7 +167,7 @@ int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile)
 }
 
 
-int ctsvc_db_profile_delete(int id, bool is_my_profile)
+int ctsvc_db_profile_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -175,11 +175,11 @@ int ctsvc_db_profile_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_PROFILE);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_profile_noti();
+       if (false == is_my_profile)
+               ctsvc_set_profile_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 69%
rename from native/ctsvc_db_plugin_profile_helper.h
rename to server/db/ctsvc_db_plugin_profile_helper.h
index 8c05e49..6e15ed0 100644 (file)
 #define __CTSVC_DB_PLUGIN_PROFILE_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_profile_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_profile_delete(int id, bool is_my_profile);
+int ctsvc_db_profile_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_profile_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_profile_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_profile_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_PROFILE_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_PROFILE_HELPER_H__ */
\ No newline at end of file
similarity index 65%
rename from native/ctsvc_db_plugin_relationship.c
rename to server/db/ctsvc_db_plugin_relationship.c
index 4684101..467776f 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_relationship_helper.h"
 #include "ctsvc_notification.h"
 
 
-static int __ctsvc_db_relationship_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_relationship_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_relationship_update_record( contacts_record_h record );
-static int __ctsvc_db_relationship_delete_record( int id );
-static int __ctsvc_db_relationship_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_relationship_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_relationship_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_relationship_delete_records( int ids[], int count);
+static int __ctsvc_db_relationship_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_relationship_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_relationship_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_relationship_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_relationship_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_relationship_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_relationship = {
        .is_query_only = false,
@@ -50,16 +47,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_relationship = {
        .delete_record = __ctsvc_db_relationship_delete_record,
        .get_all_records = __ctsvc_db_relationship_get_all_records,
        .get_records_with_query = __ctsvc_db_relationship_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_relationship_insert_records,
-       .update_records = NULL,//__ctsvc_db_relationship_update_records,
-       .delete_records = NULL,//__ctsvc_db_relationship_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_relationship_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_relationship_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -69,17 +66,17 @@ static int __ctsvc_db_relationship_insert_record( contacts_record_h record, int
        RETVM_IF(NULL == relationship->name, CONTACTS_ERROR_INVALID_PARAMETER,
                "Invalid parameter : relationship name is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", relationship->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", relationship->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -90,38 +87,37 @@ static int __ctsvc_db_relationship_insert_record( contacts_record_h record, int
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this relationship record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_relationship_insert(record, relationship->contact_id, false, id);
+       ret = ctsvc_db_relationship_insert(zone_name, record, relationship->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(relationship->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, relationship->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_relationship_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_relationship_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -137,12 +133,12 @@ static int __ctsvc_db_relationship_get_record( int id, contacts_record_h* out_re
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_RELATIONSHIP);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -157,7 +153,7 @@ static int __ctsvc_db_relationship_get_record( int id, contacts_record_h* out_re
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_relationship_update_record( contacts_record_h record )
+static int __ctsvc_db_relationship_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -165,53 +161,52 @@ static int __ctsvc_db_relationship_update_record( contacts_record_h record )
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
        RETVM_IF(NULL == relationship->name, CONTACTS_ERROR_INVALID_PARAMETER, "name is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", relationship->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", relationship->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this relationship record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_relationship_update(record, false);
+       ret = ctsvc_db_relationship_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(relationship->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, relationship->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_relationship_delete_record( int id )
+static int __ctsvc_db_relationship_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -219,26 +214,26 @@ static int __ctsvc_db_relationship_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -249,38 +244,37 @@ static int __ctsvc_db_relationship_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this relationship record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_relationship_delete(id, false);
+       ret = ctsvc_db_relationship_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_relationship_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_relationship_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -302,13 +296,13 @@ static int __ctsvc_db_relationship_get_all_records( int offset, int limit, conta
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -323,8 +317,8 @@ static int __ctsvc_db_relationship_get_all_records( int offset, int limit, conta
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_relationship_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -337,14 +331,14 @@ static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h quer
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -359,11 +353,11 @@ static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h quer
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -383,10 +377,12 @@ static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h quer
                                break;
                        case CTSVC_PROPERTY_RELATIONSHIP_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(relationship->label);
                                relationship->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_RELATIONSHIP_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(relationship->name);
                                relationship->name = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -401,7 +397,3 @@ static int __ctsvc_db_relationship_get_records_with_query( contacts_query_h quer
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_relationship_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_relationship_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_relationship_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_relationship_helper.h"
@@ -35,7 +35,7 @@ int ctsvc_db_relationship_get_value_from_stmt(cts_stmt stmt, contacts_record_h *
        ctsvc_relationship_s *relationship;
 
        ret = contacts_record_create(_contacts_relationship._uri, (contacts_record_h *)&relationship);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        relationship->id = ctsvc_stmt_get_int(stmt, start_count++);
        relationship->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -59,14 +59,14 @@ static inline int __ctsvc_relationship_bind_stmt(cts_stmt stmt, ctsvc_relationsh
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_relationship_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_relationship_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
        char query[CTS_SQL_MAX_LEN] = {0};
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
 
-       // These check should be done in client side
+       /* These check should be done in client side */
        RETV_IF(NULL == relationship->name, CONTACTS_ERROR_NONE);
        RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : contact_id(%d) is mandatory field to insert relationship record", relationship->contact_id);
@@ -78,30 +78,30 @@ int ctsvc_db_relationship_insert(contacts_record_h record, int contact_id, bool
                                                                        "VALUES(%d, %d, %d, %d, ?, ?)",
                                        contact_id, is_my_profile, CTSVC_DATA_RELATIONSHIP, relationship->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        __ctsvc_relationship_bind_stmt(stmt, relationship, 1);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //relationship->id = ctsvc_db_get_last_insert_id();
+       /* relationship->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_relationship_noti();
+       if (false == is_my_profile)
+               ctsvc_set_relationship_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_relationship_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -111,19 +111,19 @@ int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile)
        ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       RETVM_IF(!relationship->id, CONTACTS_ERROR_INVALID_PARAMETER, "relationship of contact has no ID.");
+       RETVM_IF(0 == relationship->id, CONTACTS_ERROR_INVALID_PARAMETER, "relationship of contact has no ID.");
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", relationship->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (relationship->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, relationship->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_relationship_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, relationship->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_relationship_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -138,7 +138,7 @@ int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile)
 }
 
 
-int ctsvc_db_relationship_delete(int id, bool is_my_profile)
+int ctsvc_db_relationship_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -146,11 +146,11 @@ int ctsvc_db_relationship_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_RELATIONSHIP);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_relationship_noti();
+       if (false == is_my_profile)
+               ctsvc_set_relationship_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 #define __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_relationship_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_relationship_delete(int id, bool is_my_profile);
+int ctsvc_db_relationship_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_relationship_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_relationship_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_relationship_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__ */
\ No newline at end of file
diff --git a/server/db/ctsvc_db_plugin_sdn.c b/server/db/ctsvc_db_plugin_sdn.c
new file mode 100644 (file)
index 0000000..3fb21a9
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
+#include "ctsvc_list.h"
+#include "ctsvc_db_plugin_sdn.h"
+#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
+#include "ctsvc_record.h"
+#include "ctsvc_notification.h"
+#include "ctsvc_server_utils.h"
+
+static int __ctsvc_db_sdn_get_record(const char *zone_name, int id, contacts_record_h* record);
+static int __ctsvc_db_sdn_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_sdn_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
+
+ctsvc_db_plugin_info_s ctsvc_db_plugin_sdn = {
+       .is_query_only = false,
+       .insert_record = NULL,
+       .get_record = __ctsvc_db_sdn_get_record,
+       .update_record = NULL,
+       .delete_record = NULL,
+       .get_all_records = __ctsvc_db_sdn_get_all_records,
+       .get_records_with_query = __ctsvc_db_sdn_get_records_with_query,
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
+       .get_count = NULL,
+       .get_count_with_query = NULL,
+       .replace_record = NULL,
+       .replace_records = NULL,
+};
+
+static int __ctsvc_db_sdn_value_set(cts_stmt stmt, contacts_record_h *record)
+{
+       int i;
+       int ret;
+       char *temp;
+       ctsvc_sdn_s *sdn;
+
+       ret = contacts_record_create(_contacts_sdn._uri, record);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
+       sdn = (ctsvc_sdn_s*)*record;
+
+       i = 0;
+       sdn->id = ctsvc_stmt_get_int(stmt, i++);
+       temp = ctsvc_stmt_get_text(stmt, i++);
+       sdn->name = SAFE_STRDUP(temp);
+       temp = ctsvc_stmt_get_text(stmt, i++);
+       sdn->number = SAFE_STRDUP(temp);
+       sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i++);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_db_sdn_get_record(const char *zone_name, int id, contacts_record_h* out_record)
+{
+       RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
+
+       int ret;
+       cts_stmt stmt = NULL;
+       char query[CTS_SQL_MAX_LEN] = {0};
+       contacts_record_h record;
+
+       RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
+       *out_record = NULL;
+
+       snprintf(query, sizeof(query),
+                               "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN" WHERE id = %d", id);
+
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
+
+       ret = ctsvc_stmt_step(stmt);
+       if (1 /*CTS_TRUE*/ != ret) {
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
+               ctsvc_stmt_finalize(stmt);
+               if (CONTACTS_ERROR_NONE == ret)
+                       return CONTACTS_ERROR_NO_DATA;
+               else
+                       return ret;
+       }
+
+       ret = __ctsvc_db_sdn_value_set(stmt, &record);
+
+       ctsvc_stmt_finalize(stmt);
+       if (CONTACTS_ERROR_NONE != ret) {
+               CTS_ERR("__ctsvc_db_sdn_value_set(ALL) Fail(%d)", ret);
+               return ret;
+       }
+
+       *out_record = record;
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_db_sdn_get_all_records(const char *zone_name, int offset, int limit,
+       contacts_list_h* out_list)
+{
+       RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
+
+       int ret;
+       int len;
+       cts_stmt stmt;
+       char query[CTS_SQL_MAX_LEN] = {0};
+       contacts_list_h list;
+
+       len = snprintf(query, sizeof(query),
+                               "SELECT id, name, number, sim_slot_no FROM "CTS_TABLE_SDN);
+
+       if (0 != limit) {
+               len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
+               if (0 < offset)
+                       len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
+       }
+
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
+
+       contacts_list_create(&list);
+       while ((ret = ctsvc_stmt_step(stmt))) {
+               contacts_record_h record;
+               if (1 != ret) {
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
+                       ctsvc_stmt_finalize(stmt);
+                       contacts_list_destroy(list, true);
+                       return ret;
+               }
+               __ctsvc_db_sdn_value_set(stmt, &record);
+
+               ctsvc_list_prepend(list, record);
+       }
+       ctsvc_stmt_finalize(stmt);
+       ctsvc_list_reverse(list);
+
+       *out_list = (contacts_list_h)list;
+       return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_db_sdn_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list)
+{
+       RETVM_IF(false == ctsvc_server_have_telephony_feature(), CONTACTS_ERROR_NOT_SUPPORTED, "Telephony feature disabled");
+
+       int ret;
+       int i;
+       int field_count;
+       ctsvc_query_s *s_query;
+       cts_stmt stmt;
+       contacts_list_h list;
+       ctsvc_sdn_s *sdn;
+
+       RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
+       s_query = (ctsvc_query_s *)query;
+
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
+
+       contacts_list_create(&list);
+       while ((ret = ctsvc_stmt_step(stmt))) {
+               contacts_record_h record;
+               if (1 != ret) {
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
+                       ctsvc_stmt_finalize(stmt);
+                       contacts_list_destroy(list, true);
+                       return ret;
+               }
+
+               contacts_record_create(_contacts_sdn._uri, &record);
+               sdn = (ctsvc_sdn_s*)record;
+               if (0 == s_query->projection_count)
+                       field_count = s_query->property_count;
+               else {
+                       field_count = s_query->projection_count;
+
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
+                               ASSERT_NOT_REACHED("To set projection is failed.\n");
+                       }
+               }
+
+               for (i=0;i<field_count;i++) {
+                       char *temp;
+                       int property_id;
+                       if (0 == s_query->projection_count)
+                               property_id = s_query->properties[i].property_id;
+                       else
+                               property_id = s_query->projection[i];
+
+                       switch(property_id) {
+                       case CTSVC_PROPERTY_SDN_ID:
+                               sdn->id = ctsvc_stmt_get_int(stmt, i);
+                               break;
+                       case CTSVC_PROPERTY_SDN_NAME:
+                               temp = ctsvc_stmt_get_text(stmt, i);
+                               free(sdn->name);
+                               sdn->name = SAFE_STRDUP(temp);
+                               break;
+                       case CTSVC_PROPERTY_SDN_NUMBER:
+                               temp = ctsvc_stmt_get_text(stmt, i);
+                               free(sdn->number);
+                               sdn->number = SAFE_STRDUP(temp);
+                               break;
+                       case CTSVC_PROPERTY_SDN_SIM_SLOT_NO:
+                               sdn->sim_slot_no = ctsvc_stmt_get_int(stmt, i);
+                               break;
+                       default:
+                               break;
+                       }
+               }
+               ctsvc_list_prepend(list, record);
+       }
+       ctsvc_stmt_finalize(stmt);
+       ctsvc_list_reverse(list);
+
+       *out_list = (contacts_list_h)list;
+
+       return CONTACTS_ERROR_NONE;
+}
+
similarity index 95%
rename from native/ctsvc_db_plugin_sdn.h
rename to server/db/ctsvc_db_plugin_sdn.h
index 0b29b7d..0437b50 100644 (file)
@@ -21,4 +21,4 @@
 #define __CTSVC_DB_PLUGIN_SDN_H__
 
 
-#endif // __CTSVC_DB_PLUGIN_SDN_H__
+#endif /* __CTSVC_DB_PLUGIN_SDN_H__ */
\ No newline at end of file
similarity index 82%
rename from native/ctsvc_db_plugin_simple_contact.c
rename to server/db/ctsvc_db_plugin_simple_contact.c
index 7f1ea94..06f5cf3 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_db_init.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_plugin_person_helper.h"
 #include "ctsvc_db_plugin_contact_helper.h"
@@ -33,9 +33,9 @@
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-static int __ctsvc_db_simple_contact_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_simple_contact_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
+static int __ctsvc_db_simple_contact_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_simple_contact_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_simple_contact_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_simple_contact = {
        .is_query_only = false,
@@ -63,7 +63,7 @@ static int __ctsvc_db_simple_contact_value_set(cts_stmt stmt, contacts_record_h
        char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
 
        ret = contacts_record_create(_contacts_simple_contact._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        contact = (ctsvc_simple_contact_s*)*record;
 
        i = 0;
@@ -96,7 +96,7 @@ static int __ctsvc_db_simple_contact_value_set(cts_stmt stmt, contacts_record_h
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_simple_contact_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_simple_contact_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -111,14 +111,14 @@ static int __ctsvc_db_simple_contact_get_record( int id, contacts_record_h* out_
                                        "display_name_source, image_thumbnail_path, "
                                        "ringtone_path, vibration, message_alert, uid, is_favorite, has_phonenumber, has_email "
                                        "FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d AND deleted = 0",
-                                       ctsvc_get_display_column(), id);
+                                       ctsvc_get_display_column(zone_name), id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -130,7 +130,7 @@ static int __ctsvc_db_simple_contact_get_record( int id, contacts_record_h* out_
 
        ctsvc_stmt_finalize(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_simple_contact_value_set(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_simple_contact_value_set(ALL) Fail(%d)", ret);
                return ret;
        }
 
@@ -139,8 +139,8 @@ static int __ctsvc_db_simple_contact_get_record( int id, contacts_record_h* out_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_simple_contact_get_all_records( int offset, int limit,
-       contacts_list_h* out_list )
+static int __ctsvc_db_simple_contact_get_all_records(const char *zone_name, int offset, int limit,
+       contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -152,7 +152,7 @@ static int __ctsvc_db_simple_contact_get_all_records( int offset, int limit,
                        "SELECT contact_id, addressbook_id, person_id, changed_time, "
                                "%s, display_name_source, image_thumbnail_path, "
                                "ringtone_path, vibration, message_alert, uid, is_favorite, has_phonenumber, has_email "
-                               "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0", ctsvc_get_display_column());
+                               "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0", ctsvc_get_display_column(zone_name));
 
        if (0 != limit) {
                len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
@@ -160,14 +160,14 @@ static int __ctsvc_db_simple_contact_get_all_records( int offset, int limit,
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -183,8 +183,8 @@ static int __ctsvc_db_simple_contact_get_all_records( int offset, int limit,
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h query,
-       int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_simple_contact_get_records_with_query(const char *zone_name, contacts_query_h query,
+       int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -198,14 +198,14 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -215,17 +215,15 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
                contact = (ctsvc_simple_contact_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -239,6 +237,7 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
                                break;
                        case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->display_name);
                                contact->display_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
@@ -249,12 +248,14 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
                                break;
                        case CTSVC_PROPERTY_CONTACT_RINGTONE:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->ringtone_path);
                                contact->ringtone_path = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp && *temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                                       free(contact->image_thumbnail_path);
                                        contact->image_thumbnail_path = strdup(full_path);
                                }
                                break;
@@ -272,14 +273,17 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
                                break;
                        case CTSVC_PROPERTY_CONTACT_UID:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->uid);
                                contact->uid = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_VIBRATION:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->vibration);
                                contact->vibration = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(contact->message_alert);
                                contact->message_alert = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
@@ -298,7 +302,3 @@ static int __ctsvc_db_simple_contact_get_records_with_query( contacts_query_h qu
 
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_simple_contact_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_simple_contact_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_simple_contact_delete_records(int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 68%
rename from native/ctsvc_db_plugin_speeddial.c
rename to server/db/ctsvc_db_plugin_speeddial.c
index d16b082..ae54e2b 100644 (file)
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_list.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_record.h"
 #include "ctsvc_notification.h"
 
-static int __ctsvc_db_speeddial_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_speeddial_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_speeddial_update_record( contacts_record_h record );
-static int __ctsvc_db_speeddial_delete_record( int id );
-static int __ctsvc_db_speeddial_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_speeddial_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_speeddial_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_speeddial_delete_records( int ids[], int count);
+static int __ctsvc_db_speeddial_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_speeddial_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_speeddial_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_speeddial_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_speeddial_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_speeddial_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_speeddial = {
        .is_query_only = false,
@@ -46,36 +43,36 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_speeddial = {
        .delete_record = __ctsvc_db_speeddial_delete_record,
        .get_all_records = __ctsvc_db_speeddial_get_all_records,
        .get_records_with_query = __ctsvc_db_speeddial_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_speeddial_insert_records,
-       .update_records = NULL,//__ctsvc_db_speeddial_update_records,
-       .delete_records = NULL,//__ctsvc_db_speeddial_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_speeddial_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_speeddial_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int number_id = 0;
        char query[CTS_SQL_MAX_LEN] = {0};
        ctsvc_speeddial_s *speeddial = (ctsvc_speeddial_s*)record;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(ret, ret, "ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       // check number_id validation
+       /* check number_id validation */
        snprintf(query, sizeof(query),
                        "SELECT data.id FROM "CTS_TABLE_DATA", "CTS_TABLE_CONTACTS" "
                                                "ON "CTS_TABLE_DATA".contact_id = "CTS_TABLE_CONTACTS".contact_id "
                                                                "AND contacts.deleted = 0  AND is_my_profile = 0 AND datatype = %d "
                                                "WHERE id = %d ",
                                                CTSVC_DATA_NUMBER, speeddial->number_id);
-       ret = ctsvc_query_get_first_int_result(query, &number_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &number_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d) : number_id is invalid", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d) : number_id is invalid", ret);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
@@ -83,24 +80,24 @@ static int __ctsvc_db_speeddial_insert_record( contacts_record_h record, int *id
                        "INSERT INTO "CTS_TABLE_SPEEDDIALS"(speed_number, number_id) VALUES(%d, %d)",
                        speeddial->dial_number, speeddial->number_id);
 
-       ret = ctsvc_query_exec(query);
+       ret = ctsvc_query_exec(zone_name, query);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_change();
+       ret = ctsvc_db_change(zone_name);
        if (0 < ret) {
                if (id)
                        *id  = speeddial->dial_number;
-               ctsvc_set_speed_noti();
+               ctsvc_set_speed_noti(zone_name);
        }
        else {
                CTS_ERR("already exist");
        }
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
        if (ret < CONTACTS_ERROR_NONE)
                return ret;
        else
@@ -115,7 +112,7 @@ static int __ctsvc_db_speeddial_value_set(cts_stmt stmt, contacts_record_h *reco
        ctsvc_speeddial_s *speeddial;
 
        ret = contacts_record_create(_contacts_speeddial._uri, record);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
        speeddial = (ctsvc_speeddial_s*)*record;
 
        i = 0;
@@ -136,12 +133,12 @@ static int __ctsvc_db_speeddial_value_set(cts_stmt stmt, contacts_record_h *reco
        temp = ctsvc_stmt_get_text(stmt, i++);
        speeddial->number = SAFE_STRDUP(temp);
        speeddial->dial_number = ctsvc_stmt_get_int(stmt, i++);
-       speeddial->id = speeddial->dial_number; // dial_number is an unique key
+       speeddial->id = speeddial->dial_number; /* dial_number is an unique key */
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_speeddial_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_speeddial_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -153,14 +150,14 @@ static int __ctsvc_db_speeddial_get_record( int id, contacts_record_h* out_recor
                                        "type, label, number, speed_number  "
                        "FROM "CTSVC_DB_VIEW_SPEEDIDAL " "
                        "WHERE speed_number = %d",
-                       ctsvc_get_display_column(), id);
+                       ctsvc_get_display_column(zone_name), id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -172,7 +169,7 @@ static int __ctsvc_db_speeddial_get_record( int id, contacts_record_h* out_recor
 
        ctsvc_stmt_finalize(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_speeddial_value_set(ALL) Failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_speeddial_value_set(ALL) Fail(%d)", ret);
                return ret;
        }
 
@@ -181,7 +178,7 @@ static int __ctsvc_db_speeddial_get_record( int id, contacts_record_h* out_recor
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_speeddial_update_record( contacts_record_h record )
+static int __ctsvc_db_speeddial_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int number_id;
@@ -194,58 +191,58 @@ static int __ctsvc_db_speeddial_update_record( contacts_record_h record )
                                "Invalid parameter : dial number (%d)", speeddial->dial_number);
        RETVM_IF (speeddial->number_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
                                "Invalid parameter : number id (%d)", speeddial->number_id);
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans() Fail(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
-       // check number_id validation
+       /* check number_id validation */
        snprintf(query, sizeof(query),
                        "SELECT data.id FROM "CTS_TABLE_DATA", "CTS_TABLE_CONTACTS" "
                                                "ON "CTS_TABLE_DATA".contact_id = "CTS_TABLE_CONTACTS".contact_id "
                                                                "AND contacts.deleted = 0  AND is_my_profile = 0 AND datatype = %d "
                                                "WHERE id = %d ",
                                                CTSVC_DATA_NUMBER, speeddial->number_id);
-       ret = ctsvc_query_get_first_int_result(query, &number_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &number_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_query_get_first_int_result() Failed(%d) : number_id is invalid", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("ctsvc_query_get_first_int_result() Fail(%d) : number_id is invalid", ret);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
 
        snprintf(query, sizeof(query),
                "SELECT speed_number FROM "CTS_TABLE_SPEEDDIALS" WHERE speed_number = %d", speeddial->dial_number);
-       ret = ctsvc_query_get_first_int_result(query, &speeddial_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &speeddial_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_SPEEDDIALS" "
                        "SET number_id = %d WHERE speed_number = %d",
                        speeddial->number_id, speeddial->dial_number);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ret = ctsvc_db_change();
+       ret = ctsvc_db_change(zone_name);
        ctsvc_stmt_finalize(stmt);
 
        if (0 < ret) {
-               ctsvc_set_speed_noti();
-               ret = ctsvc_end_trans(true);
+               ctsvc_set_speed_noti(zone_name);
+               ret = ctsvc_end_trans(zone_name, true);
        }
        else {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                ret = CONTACTS_ERROR_NO_DATA;
        }
 
@@ -255,50 +252,50 @@ static int __ctsvc_db_speeddial_update_record( contacts_record_h record )
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_speeddial_delete_record( int id )
+static int __ctsvc_db_speeddial_delete_record(const char *zone_name, int id)
 {
        int ret;
        int speeddial_id;
        cts_stmt stmt;
        char query[CTS_SQL_MIN_LEN] = {0};
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans() Fail(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
 
        snprintf(query, sizeof(query),
                "SELECT speed_number FROM "CTS_TABLE_SPEEDDIALS" WHERE speed_number = %d", id);
-       ret = ctsvc_query_get_first_int_result(query, &speeddial_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &speeddial_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        snprintf(query, sizeof(query), "DELETE FROM %s WHERE speed_number = %d",
                        CTS_TABLE_SPEEDDIALS, id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ret = ctsvc_db_change();
+       ret = ctsvc_db_change(zone_name);
        ctsvc_stmt_finalize(stmt);
 
        if (0 < ret) {
-               ctsvc_set_speed_noti();
-               ret = ctsvc_end_trans(true);
+               ctsvc_set_speed_noti(zone_name);
+               ret = ctsvc_end_trans(zone_name, true);
        }
        else {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                ret = CONTACTS_ERROR_NO_DATA;
        }
 
@@ -308,7 +305,7 @@ static int __ctsvc_db_speeddial_delete_record( int id )
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_speeddial_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_speeddial_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int len;
@@ -319,7 +316,7 @@ static int __ctsvc_db_speeddial_get_all_records( int offset, int limit, contacts
        len = snprintf(query, sizeof(query),
                                        "SELECT person_id, %s, image_thumbnail_path, number_id, "
                                                        "type, label, number, speed_number      "
-                                       "FROM "CTSVC_DB_VIEW_SPEEDIDAL " ",     ctsvc_get_display_column());
+                                       "FROM "CTSVC_DB_VIEW_SPEEDIDAL " ",     ctsvc_get_display_column(zone_name));
 
        if (0 != limit) {
                len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
@@ -327,14 +324,14 @@ static int __ctsvc_db_speeddial_get_all_records( int offset, int limit, contacts
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -350,8 +347,8 @@ static int __ctsvc_db_speeddial_get_all_records( int offset, int limit, contacts
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
-               int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_speeddial_get_records_with_query(const char *zone_name, contacts_query_h query,
+               int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -365,14 +362,14 @@ static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt is failed(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -382,17 +379,15 @@ static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
                speeddial = (ctsvc_speeddial_s*)record;
                if (0 == s_query->projection_count)
                        field_count = s_query->property_count;
-               else
-               {
+               else {
                        field_count = s_query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -403,17 +398,19 @@ static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
                        switch(property_id) {
                        case CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER:
                                speeddial->dial_number = ctsvc_stmt_get_int(stmt, i);
-                               speeddial->id = speeddial->dial_number; // dial_number is an unique key
+                               speeddial->id = speeddial->dial_number; /* dial_number is an unique key */
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID:
                                speeddial->number_id = ctsvc_stmt_get_int(stmt, i);
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(speeddial->number);
                                speeddial->number = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(speeddial->label);
                                speeddial->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE:
@@ -424,12 +421,14 @@ static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(speeddial->display_name);
                                speeddial->display_name = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL:
                                temp = ctsvc_stmt_get_text(stmt, i);
                                if (temp) {
                                        snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
+                                       free(speeddial->image_thumbnail_path);
                                        speeddial->image_thumbnail_path = strdup(full_path);
                                }
                                break;
@@ -446,7 +445,3 @@ static int __ctsvc_db_speeddial_get_records_with_query( contacts_query_h query,
 
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_speeddial_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_speeddial_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_speeddial_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 65%
rename from native/ctsvc_db_plugin_url.c
rename to server/db/ctsvc_db_plugin_url.c
index 8f6043e..3daa658 100644 (file)
@@ -19,9 +19,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_plugin_contact_helper.h"
 #include "ctsvc_db_plugin_url_helper.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_db_access_control.h"
 
-static int __ctsvc_db_url_insert_record( contacts_record_h record, int *id );
-static int __ctsvc_db_url_get_record( int id, contacts_record_h* out_record );
-static int __ctsvc_db_url_update_record( contacts_record_h record );
-static int __ctsvc_db_url_delete_record( int id );
-static int __ctsvc_db_url_get_all_records( int offset, int limit, contacts_list_h* out_list );
-static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
-//static int __ctsvc_db_url_insert_records(const contacts_list_h in_list, int **ids);
-//static int __ctsvc_db_url_update_records(const contacts_list_h in_list);
-//static int __ctsvc_db_url_delete_records( int ids[], int count);
+static int __ctsvc_db_url_insert_record(const char *zone_name, contacts_record_h record, int *id);
+static int __ctsvc_db_url_get_record(const char *zone_name, int id, contacts_record_h* out_record);
+static int __ctsvc_db_url_update_record(const char *zone_name, contacts_record_h record);
+static int __ctsvc_db_url_delete_record(const char *zone_name, int id);
+static int __ctsvc_db_url_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list);
+static int __ctsvc_db_url_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
 
 ctsvc_db_plugin_info_s ctsvc_db_plugin_url = {
        .is_query_only = false,
@@ -49,16 +46,16 @@ ctsvc_db_plugin_info_s ctsvc_db_plugin_url = {
        .delete_record = __ctsvc_db_url_delete_record,
        .get_all_records = __ctsvc_db_url_get_all_records,
        .get_records_with_query = __ctsvc_db_url_get_records_with_query,
-       .insert_records = NULL,//__ctsvc_db_url_insert_records,
-       .update_records = NULL,//__ctsvc_db_url_update_records,
-       .delete_records = NULL,//__ctsvc_db_url_delete_records
+       .insert_records = NULL,
+       .update_records = NULL,
+       .delete_records = NULL,
        .get_count = NULL,
        .get_count_with_query = NULL,
        .replace_record = NULL,
        .replace_records = NULL,
 };
 
-static int __ctsvc_db_url_insert_record( contacts_record_h record, int *id )
+static int __ctsvc_db_url_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        int ret;
        int addressbook_id;
@@ -67,17 +64,17 @@ static int __ctsvc_db_url_insert_record( contacts_record_h record, int *id )
 
        RETVM_IF(NULL == url->url, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : url is NULL");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", url->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_ERR("No data : contact_id (%d) is not exist", url->contact_id);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -88,38 +85,37 @@ static int __ctsvc_db_url_insert_record( contacts_record_h record, int *id )
                }
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this url record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_url_insert(record, url->contact_id, false, id);
+       ret = ctsvc_db_url_insert(zone_name, record, url->contact_id, false, id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(url->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, url->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_url_get_record( int id, contacts_record_h* out_record )
+static int __ctsvc_db_url_get_record(const char *zone_name, int id, contacts_record_h* out_record)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -135,12 +131,12 @@ static int __ctsvc_db_url_get_record( int id, contacts_record_h* out_record )
                                "WHERE id = %d AND datatype = %d ",
                                id, CTSVC_DATA_URL);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (1 /*CTS_TRUE*/ != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
@@ -155,7 +151,7 @@ static int __ctsvc_db_url_get_record( int id, contacts_record_h* out_record )
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_url_update_record( contacts_record_h record )
+static int __ctsvc_db_url_update_record(const char *zone_name, contacts_record_h record)
 {
        int ret;
        int addressbook_id;
@@ -163,53 +159,52 @@ static int __ctsvc_db_url_update_record( contacts_record_h record )
        ctsvc_url_s *url = (ctsvc_url_s *)record;
        RETVM_IF(NULL == url->url, CONTACTS_ERROR_INVALID_PARAMETER, "url is empty");
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT addressbook_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", url->contact_id);
-       ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &addressbook_id);
        if (CONTACTS_ERROR_NONE != ret) {
                CTS_ERR("No data : contact_id (%d) is not exist", url->contact_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to update this url record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_url_update(record, false);
+       ret = ctsvc_db_url_update(zone_name, record, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("Update record Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("Update record Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(url->contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, url->contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_url_delete_record( int id )
+static int __ctsvc_db_url_delete_record(const char *zone_name, int id)
 {
        int ret;
        int contact_id;
@@ -217,26 +212,26 @@ static int __ctsvc_db_url_delete_record( int id )
        cts_stmt stmt = NULL;
        int addressbook_id;
 
-       ret = ctsvc_begin_trans();
+       ret = ctsvc_begin_trans(zone_name);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
                return ret;
        }
 
        snprintf(query, sizeof(query),
                        "SELECT contact_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
                                "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        if (NULL == stmt) {
                CTS_ERR("DB error : ctsvc_query_prepare Fail(%d)", ret);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
        ret = ctsvc_stmt_step(stmt);
        if (1 != ret) {
                CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
                ctsvc_stmt_finalize(stmt);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                if (CONTACTS_ERROR_NONE == ret)
                        return CONTACTS_ERROR_NO_DATA;
                else
@@ -247,38 +242,37 @@ static int __ctsvc_db_url_delete_record( int id )
        addressbook_id = ctsvc_stmt_get_int(stmt, 1);
        ctsvc_stmt_finalize(stmt);
 
-       if (false == ctsvc_have_ab_write_permission(addressbook_id)) {
+       if (false == ctsvc_have_ab_write_permission(zone_name, addressbook_id)) {
                CTS_ERR("Does not have permission to delete this url record : addressbook_id(%d)", addressbook_id);
-               ctsvc_end_trans(false);
+               ctsvc_end_trans(zone_name, false);
                return CONTACTS_ERROR_PERMISSION_DENIED;
        }
 
-       ret = ctsvc_db_url_delete(id, false);
+       ret = ctsvc_db_url_delete(zone_name, id, false);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_begin_trans(zone_name) Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
 
-       ret = ctsvc_db_contact_update_changed_time(contact_id);
+       ret = ctsvc_db_contact_update_changed_time(zone_name, contact_id);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
-               ctsvc_end_trans(false);
+               CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Fail(%d)", ret);
+               ctsvc_end_trans(zone_name, false);
                return ret;
        }
-       ctsvc_set_person_noti();
+       ctsvc_set_person_noti(zone_name);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
        else
                return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_url_get_all_records( int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_url_get_all_records(const char *zone_name, int offset, int limit, contacts_list_h* out_list)
 {
        int len;
        int ret;
@@ -300,13 +294,13 @@ static int __ctsvc_db_url_get_all_records( int offset, int limit, contacts_list_
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB : ctsvc_stmt_step fail(%d)", ret);
+                       CTS_ERR("DB : ctsvc_stmt_step Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -321,8 +315,8 @@ static int __ctsvc_db_url_get_all_records( int offset, int limit, contacts_list_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_url_get_records_with_query(const char *zone_name, contacts_query_h query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -335,14 +329,14 @@ static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int of
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s *)query;
 
-       ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, s_query, offset, limit, &stmt);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 /*CTS_TRUE */ != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -357,11 +351,11 @@ static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int of
                        ret = ctsvc_record_set_projection_flags(record, s_query->projection,
                                        s_query->projection_count, s_query->property_count);
 
-                       if(CONTACTS_ERROR_NONE != ret)
+                       if (CONTACTS_ERROR_NONE != ret)
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        char *temp;
                        int property_id;
                        if (0 == s_query->projection_count)
@@ -381,10 +375,12 @@ static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int of
                                break;
                        case CTSVC_PROPERTY_URL_LABEL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(url->label);
                                url->label = SAFE_STRDUP(temp);
                                break;
                        case CTSVC_PROPERTY_URL_URL:
                                temp = ctsvc_stmt_get_text(stmt, i);
+                               free(url->url);
                                url->url = SAFE_STRDUP(temp);
                                break;
                        default:
@@ -399,7 +395,3 @@ static int __ctsvc_db_url_get_records_with_query( contacts_query_h query, int of
        *out_list = list;
        return CONTACTS_ERROR_NONE;
 }
-
-//static int __ctsvc_db_url_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_url_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
-//static int __ctsvc_db_url_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
similarity index 78%
rename from native/ctsvc_db_plugin_url_helper.c
rename to server/db/ctsvc_db_plugin_url_helper.c
index 77dd081..db352cd 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_db_query.h"
 #include "ctsvc_db_plugin_contact_helper.h"
@@ -36,7 +36,7 @@ int ctsvc_db_url_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, i
        ctsvc_url_s *url;
 
        ret = contacts_record_create(_contacts_url._uri, (contacts_record_h *)&url);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create Fail(%d)", ret);
 
        url->id = ctsvc_stmt_get_int(stmt, start_count++);
        url->contact_id = ctsvc_stmt_get_int(stmt, start_count++);
@@ -51,7 +51,7 @@ int ctsvc_db_url_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, i
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_url_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
+int ctsvc_db_url_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id)
 {
        int ret;
        cts_stmt stmt = NULL;
@@ -69,8 +69,8 @@ int ctsvc_db_url_insert(contacts_record_h record, int contact_id, bool is_my_pro
                                                                        "VALUES(%d, %d, %d, %d, ?, ?)",
                                                        contact_id, is_my_profile, CTSVC_DATA_URL, url->type);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (url->label)
                ctsvc_stmt_bind_text(stmt, 1, url->label);
@@ -79,23 +79,23 @@ int ctsvc_db_url_insert(contacts_record_h record, int contact_id, bool is_my_pro
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
 
-       //url->id = ctsvc_db_get_last_insert_id();
+       /* url->id = ctsvc_db_get_last_insert_id(zone_name); */
        if (id)
-               *id = ctsvc_db_get_last_insert_id();
+               *id = ctsvc_db_get_last_insert_id(zone_name);
        ctsvc_stmt_finalize(stmt);
 
-       if (!is_my_profile)
-               ctsvc_set_url_noti();
+       if (false == is_my_profile)
+               ctsvc_set_url_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile)
+int ctsvc_db_url_update(const char *zone_name, contacts_record_h record, bool is_my_profile)
 {
        int id;
        int ret = CONTACTS_ERROR_NONE;
@@ -105,19 +105,19 @@ int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile)
        GSList *cursor = NULL;
        char query[CTS_SQL_MAX_LEN] = {0};
 
-       RETVM_IF(!url->id, CONTACTS_ERROR_INVALID_PARAMETER, "url of contact has no ID.");
+       RETVM_IF(0 == url->id, CONTACTS_ERROR_INVALID_PARAMETER, "url of contact has no ID.");
        RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (url->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
 
        snprintf(query, sizeof(query),
                        "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", url->id);
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
 
        do {
                if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
-               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, url->id))) break;
-               if (!is_my_profile)
-                       ctsvc_set_url_noti();
+               if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(zone_name, set, bind_text, CTS_TABLE_DATA, url->id))) break;
+               if (false == is_my_profile)
+                       ctsvc_set_url_noti(zone_name);
        } while (0);
 
        CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
@@ -130,7 +130,7 @@ int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile)
        return ret;
 }
 
-int ctsvc_db_url_delete(int id, bool is_my_profile)
+int ctsvc_db_url_delete(const char *zone_name, int id, bool is_my_profile)
 {
        int ret;
        char query[CTS_SQL_MIN_LEN] = {0};
@@ -138,11 +138,11 @@ int ctsvc_db_url_delete(int id, bool is_my_profile)
        snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
                        id, CTSVC_DATA_URL);
 
-       ret = ctsvc_query_exec(query);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
+       ret = ctsvc_query_exec(zone_name, query);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
 
-       if (!is_my_profile)
-               ctsvc_set_url_noti();
+       if (false == is_my_profile)
+               ctsvc_set_url_noti(zone_name);
 
        return CONTACTS_ERROR_NONE;
 }
similarity index 70%
rename from native/ctsvc_db_plugin_url_helper.h
rename to server/db/ctsvc_db_plugin_url_helper.h
index 6d06362..ecebaa1 100644 (file)
 #define __CTSVC_DB_PLUGIN_URL_HELPER_H__
 
 #include "contacts.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_sqlite.h"
 
-int ctsvc_db_url_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile);
-int ctsvc_db_url_delete(int id, bool is_my_profile);
+int ctsvc_db_url_insert(const char *zone_name, contacts_record_h record, int contact_id, bool is_my_profile, int *id);
+int ctsvc_db_url_update(const char *zone_name, contacts_record_h record, bool is_my_profile);
+int ctsvc_db_url_delete(const char *zone_name, int id, bool is_my_profile);
 int ctsvc_db_url_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
 
-#endif // __CTSVC_DB_PLUGIN_URL_HELPER_H__
+#endif /* __CTSVC_DB_PLUGIN_URL_HELPER_H__ */
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
similarity index 65%
rename from native/ctsvc_db_query.c
rename to server/db/ctsvc_db_query.c
index bd8a7ec..f49860e
 #include "contacts_internal.h"
 
 #include "ctsvc_internal.h"
-#include "ctsvc_sqlite.h"
-#include "ctsvc_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
 #include "ctsvc_list.h"
 #include "ctsvc_record.h"
-#include "ctsvc_utils.h"
+#include "ctsvc_db_utils.h"
 #include "ctsvc_normalize.h"
 #include "ctsvc_number_utils.h"
 #include "ctsvc_db_init.h"
 #include "ctsvc_inotify.h"
 #include "ctsvc_localize.h"
 #include "ctsvc_localize_utils.h"
-#include "ctsvc_setting.h"
+#include "ctsvc_server_setting.h"
 
 #include "ctsvc_db_access_control.h"
 #include "ctsvc_db_plugin_person_helper.h"
 #include "ctsvc_db_plugin_group_helper.h"
 #include "ctsvc_db_plugin_company_helper.h"
+#include "ctsvc_db_query.h"
+
 
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
 #include "ctsvc_server_sim.h"
-#endif // ENABLE_SIM_FEATURE
 #include "ctsvc_server_change_subject.h"
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
 
-// It is used to sort search results
+/* It is used to sort search results */
 const char *hangul_syllable[19][3] = {
-       {"ㄱ", "가", "깋"},  // AC00, AE3B
-       {"ㄲ", "까", "낗"},  // AE3C, B097
-       {"ㄴ", "나", "닣"},  // B098, B2E3
-       {"ㄷ", "다", "딯"},  // B2E4, B52F
-       {"ㄸ", "따", "띻"},  // B530, B77B
-       {"ㄹ", "라", "맇"},  // B77C, B9C7
-       {"ㅁ", "마", "밓"},  // B9C8, BC13
-       {"ㅂ", "바", "빟"},  // BC14, BE5F
-       {"ㅃ", "빠", "삫"},  // BE60, C0AB
-       {"ㅅ", "사", "싷"},  // C0AC, C2F7
-       {"ㅆ", "싸", "앃"},  // C2F8, C543
-       {"ㅇ", "아", "잏"},  // C544, C78F
-       {"ㅈ", "자", "짛"},  // C790, C9DB
-       {"ㅉ", "짜", "찧"},  // C9DC, CC27
-       {"ㅊ", "차", "칳"},  // CC28, CE73
-       {"ㅋ", "카", "킿"},  // CE74, D0AF
-       {"ㅌ", "타", "팋"},  // D0C0, D30B
-       {"ㅍ", "파", "핗"},  // D30C, D557
-       {"ㅎ", "하", "힣"},  // D558, D7A3
+       {"ㄱ", "가", "깋"},   /* AC00, AE3B */
+       {"ㄲ", "까", "낗"},   /* AE3C, B097 */
+       {"ㄴ", "나", "닣"},   /* B098, B2E3 */
+       {"ㄷ", "다", "딯"},   /* B2E4, B52F */
+       {"ㄸ", "따", "띻"},   /* B530, B77B */
+       {"ㄹ", "라", "맇"},   /* B77C, B9C7 */
+       {"ㅁ", "마", "밓"},   /* B9C8, BC13 */
+       {"ㅂ", "바", "빟"},   /* BC14, BE5F */
+       {"ㅃ", "빠", "삫"},   /* BE60, C0AB */
+       {"ㅅ", "사", "싷"},   /* C0AC, C2F7 */
+       {"ㅆ", "싸", "앃"},   /* C2F8, C543 */
+       {"ㅇ", "아", "잏"},   /* C544, C78F */
+       {"ㅈ", "자", "짛"},   /* C790, C9DB */
+       {"ㅉ", "짜", "찧"},   /* C9DC, CC27 */
+       {"ㅊ", "차", "칳"},   /* CC28, CE73 */
+       {"ㅋ", "카", "킿"},   /* CE74, D0AF */
+       {"ㅌ", "타", "팋"},   /* D0C0, D30B */
+       {"ㅍ", "파", "핗"},   /* D30C, D557 */
+       {"ㅎ", "하", "힣"},   /* D558, D7A3 */
 };
 
 typedef enum {
@@ -82,9 +82,9 @@ typedef enum {
        QUERY_PROJECTION,
 }db_query_property_type_e;
 
-static contacts_db_status_e __db_status = CONTACTS_DB_STATUS_NORMAL;
+static GHashTable *ctsvc_db_status_table = NULL;
 
-static const char * __ctsvc_db_get_property_field_name(const property_info_s *properties,
+static const char * __ctsvc_db_get_property_field_name(const char *zone_name, const property_info_s *properties,
                int count, db_query_property_type_e property_type, unsigned int property_id)
 {
        int i;
@@ -110,20 +110,22 @@ static const char * __ctsvc_db_get_property_field_name(const property_info_s *pr
                        else if (property_id == CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX) {
                                if (property_type != QUERY_PROJECTION)
                                        return NULL;
-                               const char* temp = ctsvc_get_display_column();
-                               // snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_display_column());
+                               const char* temp = ctsvc_get_display_column(zone_name);
+                               // snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_display_column(zone_name));
                                return "_NORMALIZE_INDEX_"temp;
                        }
                        */
                        else
-                               return ctsvc_get_display_column();
+                               return ctsvc_get_display_column(zone_name);
                }
        }
        return NULL;
 }
 
-// return data type of the property
-// bool / int / long long int / char string / double / child record
+/*
+ * return data type of the property
+ * bool / int / long long int / char string / double / child record
+ */
 static inline int __ctsvc_db_get_property_type(const property_info_s *properties,
                int count, unsigned int property_id)
 {
@@ -137,31 +139,29 @@ static inline int __ctsvc_db_get_property_type(const property_info_s *properties
        return -1;
 }
 
-static inline int __ctsvc_db_create_int_condition(ctsvc_composite_filter_s *com_filter,
-               ctsvc_attribute_filter_s *filter, char **condition )
+static inline int __ctsvc_db_create_int_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
+               ctsvc_attribute_filter_s *filter, char **condition)
 {
        const char *field_name;
        char out_cond[CTS_SQL_MAX_LEN] = {0};
 
-       field_name = __ctsvc_db_get_property_field_name(com_filter->properties,
+       field_name = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                        com_filter->property_count, QUERY_FILTER, filter->property_id);
        RETVM_IF(NULL == field_name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property id(%d)", filter->property_id);
 
 #ifdef _CONTACTS_IPC_SERVER
-#ifdef ENABLE_SIM_FEATURE
        if (filter->property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
-               // get real sim info id by SIM slot number 0/1
+               /* get real sim info id by SIM slot number 0/1 */
                int sim_info_id = ctsvc_server_sim_get_info_id_by_sim_slot_no(filter->value.i);
-               if (sim_info_id > 0) {
+               if (0 < sim_info_id) {
                        snprintf(out_cond, sizeof(out_cond), "%s = %d", field_name, sim_info_id);
                        *condition = strdup(out_cond);
                        return CONTACTS_ERROR_NONE;
                }
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-#endif // ENABLE_SIM_FEATURE
-#endif
+#endif /* _CONTACTS_IPC_SERVER */
 
        switch(filter->match) {
        case CONTACTS_MATCH_EQUAL:
@@ -194,13 +194,13 @@ static inline int __ctsvc_db_create_int_condition(ctsvc_composite_filter_s *com_
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_db_create_double_condition(ctsvc_composite_filter_s *com_filter,
-               ctsvc_attribute_filter_s *filter, char **condition )
+static inline int __ctsvc_db_create_double_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
+               ctsvc_attribute_filter_s *filter, char **condition)
 {
        const char *field_name;
        char out_cond[CTS_SQL_MAX_LEN] = {0};
 
-       field_name = __ctsvc_db_get_property_field_name(com_filter->properties,
+       field_name = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                        com_filter->property_count, QUERY_FILTER, filter->property_id);
        RETVM_IF(NULL == field_name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property id(%d)", filter->property_id);
@@ -236,13 +236,13 @@ static inline int __ctsvc_db_create_double_condition(ctsvc_composite_filter_s *c
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_db_create_lli_condition(ctsvc_composite_filter_s *com_filter,
-               ctsvc_attribute_filter_s *filter, char **condition )
+static inline int __ctsvc_db_create_lli_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
+               ctsvc_attribute_filter_s *filter, char **condition)
 {
        const char *field_name;
        char out_cond[CTS_SQL_MAX_LEN] = {0};
 
-       field_name = __ctsvc_db_get_property_field_name(com_filter->properties,
+       field_name = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                        com_filter->property_count, QUERY_FILTER, filter->property_id);
        RETVM_IF(NULL == field_name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property id(%d)", filter->property_id);
@@ -288,7 +288,7 @@ static char * __ctsvc_db_get_str_with_escape(char *str, int len, bool with_escap
        if (false == with_escape)
                return strdup(str);
 
-       for(i=0;i<len;i++) {
+       for (i=0;i<len;i++) {
                if (str[i] == '\'' || str[i] == '_' || str[i] == '%' || str[i] == '\\') {
                        temp_str[j++] = CTSVC_DB_ESCAPE_CHAR;
                }
@@ -317,7 +317,7 @@ static inline int __ctsvc_db_add_str_matching_rule(const char *field_name, int m
                cond_len = snprintf(out_cond, sizeof(out_cond), "%s LIKE ('%%' || ? || '%%') ESCAPE '%c'", field_name, CTSVC_DB_ESCAPE_CHAR);
                break;
        case CONTACTS_MATCH_STARTSWITH:
-               cond_len = snprintf(out_cond, sizeof(out_cond), "%s LIKE ( ? || '%%') ESCAPE '%c'", field_name, CTSVC_DB_ESCAPE_CHAR);
+               cond_len = snprintf(out_cond, sizeof(out_cond), "%s LIKE (? || '%%') ESCAPE '%c'", field_name, CTSVC_DB_ESCAPE_CHAR);
                break;
        case CONTACTS_MATCH_ENDSWITH:
                cond_len = snprintf(out_cond, sizeof(out_cond), "%s LIKE ('%%' || ?) ESCAPE '%c'", field_name, CTSVC_DB_ESCAPE_CHAR);
@@ -336,7 +336,7 @@ static inline int __ctsvc_db_add_str_matching_rule(const char *field_name, int m
        return cond_len;
 }
 
-static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_filter,
+static inline int __ctsvc_db_create_str_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
                ctsvc_attribute_filter_s *filter, char **condition, GSList **bind_text)
 {
        int ret;
@@ -348,55 +348,64 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
 
        *condition = NULL;
 
-       field_name = __ctsvc_db_get_property_field_name(com_filter->properties,
+       field_name = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                        com_filter->property_count, QUERY_FILTER, filter->property_id);
        RETVM_IF(NULL == field_name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property id(%d)", filter->property_id);
 
-       // number_filter condition is only used to find exactly matched number
-       // based on internal logic : _NUMBER_COMPARE_
+       /*
+        * number_filter condition is only used to find exactly matched number
+        * based on internal logic : _NUMBER_COMPARE_
+        */
        if (filter->property_id == CTSVC_PROPERTY_NUMBER_NUMBER_FILTER
                        || filter->property_id == CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER
                        || filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER)
                filter->match = CONTACTS_MATCH_EXACTLY;
 
        ret = __ctsvc_db_add_str_matching_rule(field_name, filter->match, &temp, &with_escape);
-       RETVM_IF(ret <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
-                       "__ctsvc_db_add_str_matching_rule Fail");
+       if (ret <= 0) {
+               free(temp);
+               CTS_ERR("__ctsvc_db_add_str_matching_rule Fail");
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
        cond_len = snprintf(out_cond, sizeof(out_cond), "%s", temp);
        free(temp);
        temp = NULL;
 
        if (filter->value.s) {
-               // number filter
+               /* number filter */
                if (filter->property_id == CTSVC_PROPERTY_NUMBER_NUMBER_FILTER
                        || filter->property_id == CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER
                        || filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER) {
-                       // number filter is for matching number depends on internal rule _NUMBER_COMPARE_
-                       char clean_num[strlen(filter->value.s)+1+5];    // for cc
-                       char normal_num[strlen(filter->value.s)+1+5];   // for cc
+                       /*
+                        * number filter is for matching number
+                        * depends on internal rule _NUMBER_COMPARE_
+                        */
+                       char clean_num[strlen(filter->value.s)+1+5];   /* for cc */
+                       char normal_num[strlen(filter->value.s)+1+5];  /* for cc */
                        bool add_condition = false;
                        ret = ctsvc_clean_number(filter->value.s, clean_num, sizeof(clean_num), false);
                        if (0 < ret) {
                                ret = ctsvc_normalize_number(clean_num, normal_num, sizeof(normal_num), false);
+                               normal_num[sizeof(normal_num) -1] = '\0';
                                if (0 < ret) {
-                                       char min_match[strlen(filter->value.s)+1+5];    // for cc
+                                       char min_match[strlen(filter->value.s)+1+5];   /* for cc */
                                        ret = ctsvc_get_minmatch_number(normal_num, min_match, sizeof(min_match), ctsvc_get_phonenumber_min_match_digit());
                                        if (CONTACTS_ERROR_NONE == ret) {
-                                               // minmatch filter is to improve performance
+                                               /* minmatch filter is to improve performance */
                                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(min_match, strlen(min_match), with_escape));
 
-                                               // _NUMBER_COMPARE_(noraml_num, normalized keyword)
-                                               if (strcmp(normal_num, "+") != 0) {
+                                               /* _NUMBER_COMPARE_(noraml_num, normalized keyword) */
+                                               if (STRING_EQUAL != strcmp(normal_num, "+")) {
                                                        const char *number_field = NULL;
                                                        if (filter->property_id == CTSVC_PROPERTY_NUMBER_NUMBER_FILTER)
-                                                               number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                                               number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER);
                                                        else if (filter->property_id == CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER)
-                                                               number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                                               number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS);
                                                        else if (filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER)
-                                                               number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                                               number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_SPEEDDIAL_NORMALIZED_NUMBER);
 
                                                        if (number_field) {
@@ -410,16 +419,16 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                        }
 
                        if (add_condition == false) {
-                               // If fail to get normalized number then compare with original number
+                               /* If fail to get normalized number then compare with original number */
                                const char *number_field = NULL;
                                if (filter->property_id == CTSVC_PROPERTY_NUMBER_NUMBER_FILTER)
-                                       number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_NUMBER_NUMBER);
                                else if (filter->property_id == CTSVC_PROPERTY_PHONELOG_ADDRESS_FILTER)
-                                       number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_PHONELOG_ADDRESS);
                                else if (filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NUMBER_FILTER)
-                                       number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_SPEEDDIAL_NUMBER);
 
 
@@ -429,47 +438,50 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                                }
                        }
                }
-               // normalized number
+               /* normalized number */
                else if (filter->property_id == CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER
                                || filter->property_id == CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS
                                || filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NORMALIZED_NUMBER) {
-                       char clean_num[strlen(filter->value.s)+1+5]; // for cc
+                       char clean_num[strlen(filter->value.s)+1+5];   /* for cc */
                        ret = ctsvc_clean_number(filter->value.s, clean_num, sizeof(clean_num), false);
                        if (0 < ret) {
                                bool add_condition = true;
                                const char *clean_field = NULL;
-                               // has clean number or normalized number
+                               /* has clean number or normalized number */
                                const char *cc = ctsvc_get_network_cc(false);
-                               if (cc && cc[0] == '7' && clean_num[0] == '8') {                // Russia
-                                       char normal_num[strlen(clean_num)+1+5]; // for cc
+                               if (cc && cc[0] == '7' && clean_num[0] == '8') {   /* Russia */
+                                       char normal_num[strlen(clean_num)+1+5];   /* for cc */
                                        ret = ctsvc_normalize_number(clean_num, normal_num, sizeof(normal_num), false);
                                        if (0 < ret)
                                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(normal_num, strlen(normal_num), with_escape));
                                        else
                                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(clean_num, strlen(clean_num), with_escape));
                                }
-                               else if (strcmp(clean_num, "+") != 0) {
+                               else if (STRING_EQUAL != strcmp(clean_num, "+")) {
                                        *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(clean_num, strlen(clean_num), with_escape));
                                }
                                else
                                        add_condition = false;
 
                                if (filter->property_id == CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER)
-                                       clean_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       clean_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER);
                                else if (filter->property_id == CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS)
-                                       clean_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       clean_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS);
                                else if (filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NORMALIZED_NUMBER)
-                                       clean_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       clean_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER);
 
                                if (clean_field) {
                                        if (add_condition)
                                                cond_len += snprintf(out_cond+cond_len, sizeof(out_cond)-cond_len, " OR ");
                                        ret = __ctsvc_db_add_str_matching_rule(clean_field, filter->match, &temp, &with_escape);
-                                       RETVM_IF(ret <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
-                                                       "__ctsvc_db_add_str_matching_rule Fail");
+                                       if (ret <= 0) {
+                                               free(temp);
+                                               CTS_ERR("__ctsvc_db_add_str_matching_rule Fail");
+                                               return CONTACTS_ERROR_INVALID_PARAMETER;
+                                       }
                                        cond_len += snprintf(out_cond+cond_len, sizeof(out_cond)-cond_len, "%s", temp);
                                        free(temp);
                                        temp = NULL;
@@ -477,16 +489,16 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                                }
                        }
                        else if (ret == 0) {
-                               // If fail to get cleaned number then compare with original number
+                               /* If fail to get cleaned number then compare with original number */
                                const char *number_field = NULL;
                                if (filter->property_id == CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER)
-                                       number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_NUMBER_NUMBER);
                                else if (filter->property_id == CTSVC_PROPERTY_PHONELOG_NORMALIZED_ADDRESS)
-                                       number_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_PHONELOG_ADDRESS);
                                else if (filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_NORMALIZED_NUMBER)
-                                       number_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_SPEEDDIAL_NUMBER);
 
                                if (number_field) {
@@ -502,26 +514,26 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                        else
                                return CONTACTS_ERROR_INVALID_PARAMETER;
                }
-               // cleaned number
+               /* cleaned number */
                else if (filter->property_id == CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER
                                || filter->property_id == CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS
                                || filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER) {
-                       char clean_num[strlen(filter->value.s)+1+5]; // for cc
+                       char clean_num[strlen(filter->value.s)+1+5];   /* for cc */
                        ret = ctsvc_clean_number(filter->value.s, clean_num, sizeof(clean_num), false);
                        if (0 < ret) {
                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(clean_num, strlen(clean_num), with_escape));
                        }
                        else if (ret == 0) {
-                               // If fail to get cleaned number then compare with original number
+                               /* If fail to get cleaned number then compare with original number */
                                const char *number_field = NULL;
                                if (filter->property_id == CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER)
-                                       number_field = __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                        com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_NUMBER_NUMBER);
                                else if (filter->property_id == CTSVC_PROPERTY_PHONELOG_CLEANED_ADDRESS)
-                                       number_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_PHONELOG_ADDRESS);
                                else if (filter->property_id == CTSVC_PROPERTY_SPEEDDIAL_CLEANED_NUMBER)
-                                       number_field =  __ctsvc_db_get_property_field_name(com_filter->properties,
+                                       number_field =  __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                                                com_filter->property_count, QUERY_FILTER, CTSVC_PROPERTY_SPEEDDIAL_NUMBER);
 
                                if (number_field) {
@@ -541,7 +553,7 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                                || filter->property_id == CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL
                                || filter->property_id == CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL
                                || filter->property_id == CTSVC_PROPERTY_IMAGE_PATH) {
-                       if (strncmp(filter->value.s, CTSVC_CONTACT_IMG_FULL_LOCATION, strlen(CTSVC_CONTACT_IMG_FULL_LOCATION)) == 0) {
+                       if (STRING_EQUAL == strncmp(filter->value.s, CTSVC_CONTACT_IMG_FULL_LOCATION, strlen(CTSVC_CONTACT_IMG_FULL_LOCATION))) {
                                *bind_text = g_slist_append(*bind_text,
                                                                        __ctsvc_db_get_str_with_escape(filter->value.s+strlen(CTSVC_CONTACT_IMG_FULL_LOCATION)+1,
                                                                        strlen(filter->value.s)-strlen(CTSVC_CONTACT_IMG_FULL_LOCATION)-1, with_escape));
@@ -550,7 +562,7 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(filter->value.s, strlen(filter->value.s), with_escape));
                }
                else if (filter->property_id == CTSVC_PROPERTY_GROUP_IMAGE) {
-                       if (strncmp(filter->value.s, CTS_GROUP_IMAGE_LOCATION, strlen(CTS_GROUP_IMAGE_LOCATION)) == 0) {
+                       if (STRING_EQUAL == strncmp(filter->value.s, CTS_GROUP_IMAGE_LOCATION, strlen(CTS_GROUP_IMAGE_LOCATION))) {
                                *bind_text = g_slist_append(*bind_text,
                                                                        __ctsvc_db_get_str_with_escape(filter->value.s+strlen(CTS_GROUP_IMAGE_LOCATION)+1,
                                                                        strlen(filter->value.s)-strlen(CTS_GROUP_IMAGE_LOCATION)-1, with_escape));
@@ -559,7 +571,7 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
                                *bind_text = g_slist_append(*bind_text, __ctsvc_db_get_str_with_escape(filter->value.s, strlen(filter->value.s), with_escape));
                }
                else if (filter->property_id == CTSVC_PROPERTY_COMPANY_LOGO) {
-                       if (strncmp(filter->value.s, CTS_LOGO_IMAGE_LOCATION, strlen(CTS_LOGO_IMAGE_LOCATION)) == 0) {
+                       if (STRING_EQUAL == strncmp(filter->value.s, CTS_LOGO_IMAGE_LOCATION, strlen(CTS_LOGO_IMAGE_LOCATION))) {
                                *bind_text = g_slist_append(*bind_text,
                                                                        __ctsvc_db_get_str_with_escape(filter->value.s+strlen(CTS_LOGO_IMAGE_LOCATION)+1,
                                                                        strlen(filter->value.s)-strlen(CTS_LOGO_IMAGE_LOCATION)-1, with_escape));
@@ -577,13 +589,13 @@ static inline int __ctsvc_db_create_str_condition(ctsvc_composite_filter_s *com_
        return CONTACTS_ERROR_NONE;
 }
 
-static inline int __ctsvc_db_create_bool_condition(ctsvc_composite_filter_s *com_filter,
-               ctsvc_attribute_filter_s *filter, char **condition )
+static inline int __ctsvc_db_create_bool_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
+               ctsvc_attribute_filter_s *filter, char **condition)
 {
        const char *field_name;
        char out_cond[CTS_SQL_MAX_LEN] = {0};
 
-       field_name = __ctsvc_db_get_property_field_name(com_filter->properties,
+       field_name = __ctsvc_db_get_property_field_name(zone_name, com_filter->properties,
                                                        com_filter->property_count, QUERY_FILTER, filter->property_id);
        RETVM_IF(NULL == field_name, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : property id(%d)", filter->property_id);
@@ -593,7 +605,7 @@ static inline int __ctsvc_db_create_bool_condition(ctsvc_composite_filter_s *com
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_create_attribute_condition(ctsvc_composite_filter_s *com_filter,
+static int __ctsvc_db_create_attribute_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
                ctsvc_attribute_filter_s *filter, char **condition, GSList **bind_text)
 {
        int ret;
@@ -603,19 +615,19 @@ static int __ctsvc_db_create_attribute_condition(ctsvc_composite_filter_s *com_f
 
        switch (filter->filter_type) {
        case CTSVC_FILTER_INT:
-               ret = __ctsvc_db_create_int_condition(com_filter, filter, &cond);
+               ret = __ctsvc_db_create_int_condition(zone_name, com_filter, filter, &cond);
                break;
        case CTSVC_FILTER_BOOL:
-               ret = __ctsvc_db_create_bool_condition(com_filter, filter, &cond);
+               ret = __ctsvc_db_create_bool_condition(zone_name, com_filter, filter, &cond);
                break;
        case CTSVC_FILTER_STR:
-               ret = __ctsvc_db_create_str_condition(com_filter, filter, &cond, bind_text);
+               ret = __ctsvc_db_create_str_condition(zone_name, com_filter, filter, &cond, bind_text);
                break;
        case CTSVC_FILTER_LLI:
-               ret = __ctsvc_db_create_lli_condition(com_filter, filter, &cond);
+               ret = __ctsvc_db_create_lli_condition(zone_name, com_filter, filter, &cond);
                break;
        case CTSVC_FILTER_DOUBLE:
-               ret = __ctsvc_db_create_double_condition(com_filter, filter, &cond);
+               ret = __ctsvc_db_create_double_condition(zone_name, com_filter, filter, &cond);
                break;
        default :
                CTS_ERR("The filter type is not supported (%d)", filter->filter_type);
@@ -630,10 +642,12 @@ static int __ctsvc_db_create_attribute_condition(ctsvc_composite_filter_s *com_f
 
 #define CTSVC_FILTER_LENGTH    100
 
-// If there are too many condition, sqlite return fail SQLITE_ERROR(1).
-// Expression tree is too large (maximum depth 1000).
-// It is related to SQLITE_LIMIT_EXPR_DEPTH.
-static inline int __ctsvc_db_create_composite_condition(ctsvc_composite_filter_s *com_filter,
+/*
+ * If there are too many condition, sqlite return fail SQLITE_ERROR(1).
+ * Expression tree is too large (maximum depth 1000).
+ * It is related to SQLITE_LIMIT_EXPR_DEPTH.
+ */
+static inline int __ctsvc_db_create_composite_condition(const char *zone_name, ctsvc_composite_filter_s *com_filter,
                char **condition, GSList **bind_text)
 {
        RETV_IF(NULL == com_filter, CONTACTS_ERROR_INVALID_PARAMETER);
@@ -652,7 +666,7 @@ static inline int __ctsvc_db_create_composite_condition(ctsvc_composite_filter_s
        GSList *ops = com_filter->filter_ops;
 
        *condition = NULL;
-       // the case : did not set filter condition after calling contacts_filter_create()
+       /* the case : did not set filter condition after calling contacts_filter_create() */
        RETV_IF(NULL == filters, CONTACTS_ERROR_NONE);
 
        cond = NULL;
@@ -660,34 +674,39 @@ static inline int __ctsvc_db_create_composite_condition(ctsvc_composite_filter_s
 
        filter = (ctsvc_filter_s *)filters->data;
        if (filter->filter_type == CTSVC_FILTER_COMPOSITE)
-               __ctsvc_db_create_composite_condition((ctsvc_composite_filter_s *)filter, &cond, bind_text);
+               __ctsvc_db_create_composite_condition(zone_name, (ctsvc_composite_filter_s *)filter, &cond, bind_text);
        else
-               __ctsvc_db_create_attribute_condition(com_filter, (ctsvc_attribute_filter_s*)filter, &cond, bind_text);
+               __ctsvc_db_create_attribute_condition(zone_name, com_filter, (ctsvc_attribute_filter_s*)filter, &cond, bind_text);
 
        buf_size = CTSVC_FILTER_LENGTH;
        out_cond = calloc(1, buf_size);
-       RETVM_IF(NULL == out_cond, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == out_cond) {
+               CTS_ERR("calloc() Fail");
+               free(cond);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
        len = 0;
        if (cond) {
                temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, "(");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, cond);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, ")");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                free(cond);
        }
 
        cursor_filter = filters->next;
-       for(cursor_ops=ops; cursor_ops && cursor_filter; cursor_filter=cursor_filter->next, cursor_ops=cursor_ops->next) {
+       for (cursor_ops=ops; cursor_ops && cursor_filter; cursor_filter=cursor_filter->next, cursor_ops=cursor_ops->next) {
                cond = NULL;
                bind = NULL;
 
                filter = (ctsvc_filter_s *)cursor_filter->data;
                if (filter->filter_type == CTSVC_FILTER_COMPOSITE)
-                       __ctsvc_db_create_composite_condition((ctsvc_composite_filter_s *)filter, &cond, &bind);
+                       __ctsvc_db_create_composite_condition(zone_name, (ctsvc_composite_filter_s *)filter, &cond, &bind);
                else
-                       __ctsvc_db_create_attribute_condition(com_filter, (ctsvc_attribute_filter_s*)filter, &cond, &bind);
+                       __ctsvc_db_create_attribute_condition(zone_name, com_filter, (ctsvc_attribute_filter_s*)filter, &cond, &bind);
 
                if (cond) {
                        op = (contacts_filter_operator_e)cursor_ops->data;
@@ -695,12 +714,12 @@ static inline int __ctsvc_db_create_composite_condition(ctsvc_composite_filter_s
                                temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, " AND (");
                        else
                                temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, " OR (");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
 
                        temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, cond);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = SAFE_SNPRINTF(&out_cond, &buf_size, len, ")");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
 
                        if (bind)
                                *bind_text = g_slist_concat(*bind_text, bind);
@@ -713,8 +732,8 @@ static inline int __ctsvc_db_create_composite_condition(ctsvc_composite_filter_s
        return CONTACTS_ERROR_NONE;
 }
 
-// Make and execute 'UPDATE' sqlite statement to update record
-int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, const char *table, int id)
+/* Make and execute 'UPDATE' sqlite statement to update record */
+int ctsvc_db_update_record_with_set_query(const char *zone_name, const char *set, GSList *bind_text, const char *table, int id)
 {
        int ret = CONTACTS_ERROR_NONE;
        char query[CTS_SQL_MAX_LEN] = {0};
@@ -723,8 +742,8 @@ int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, co
 
        snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE id = %d", table, set, id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        if (bind_text) {
                int i = 0;
@@ -736,7 +755,7 @@ int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, co
        }
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d)", ret);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d)", ret);
                ctsvc_stmt_finalize(stmt);
                return ret;
        }
@@ -744,7 +763,7 @@ int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, co
        return ret;
 }
 
-// make 'SET' sqlite statement to update record
+/* make 'SET' sqlite statement to update record */
 int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bind_text)
 {
        ctsvc_record_s *s_record;
@@ -766,7 +785,7 @@ int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bin
 
        property_info = ctsvc_view_get_all_property_infos(s_record->view_uri, &property_info_count);
 
-       for(i=0;i<property_info_count;i++) {
+       for (i=0;i<property_info_count;i++) {
                if (ctsvc_record_check_property_flag(s_record, property_info[i].property_id, CTSVC_PROPERTY_FLAG_DIRTY)) {
                        field_name = property_info[i].fields;
                        if (NULL == field_name)
@@ -825,7 +844,7 @@ int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bin
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_create_projection(const char *view_uri, const property_info_s *properties, int ids_count,
+static int __ctsvc_db_create_projection(const char *zone_name, const char *view_uri, const property_info_s *properties, int ids_count,
                unsigned int *projections, int pro_count, char **projection)
 {
        bool first;
@@ -840,11 +859,11 @@ static int __ctsvc_db_create_projection(const char *view_uri, const property_inf
        if (0 < pro_count) {
                for (i=0;i<pro_count;i++) {
                        if (projections[i] == CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX) {
-                               snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column());
+                               snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column(zone_name));
                                field_name = temp;
                        }
                        else
-                               field_name = __ctsvc_db_get_property_field_name(properties, ids_count, QUERY_PROJECTION, projections[i]);
+                               field_name = __ctsvc_db_get_property_field_name(zone_name, properties, ids_count, QUERY_PROJECTION, projections[i]);
 
                        if (field_name) {
                                if (first) {
@@ -857,7 +876,7 @@ static int __ctsvc_db_create_projection(const char *view_uri, const property_inf
                }
        }
        else {
-               // add all properties
+               /* add all properties */
                for (i=0;i<ids_count;i++) {
                        if (CTSVC_VIEW_DATA_TYPE_REC == (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK))
                                continue;
@@ -865,11 +884,11 @@ static int __ctsvc_db_create_projection(const char *view_uri, const property_inf
                        if (properties[i].fields)
                                field_name = properties[i].fields;
                        else if (properties[i].property_id == CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX) {
-                               snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column());
+                               snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column(zone_name));
                                field_name = temp;
                        }
                        else
-                               field_name = ctsvc_get_display_column();
+                               field_name = ctsvc_get_display_column(zone_name);
 
                        if (first) {
                                len += snprintf(out_projection+len, sizeof(out_projection)-len, "%s", field_name);
@@ -889,9 +908,9 @@ static inline bool __ctsvc_db_view_has_display_name(const char *view_uri,
 {
        int i;
 #ifdef ENABLE_LOG_FEATURE
-       if (0 == strcmp(view_uri, _contacts_person_phone_log._uri))
+       if (STRING_EQUAL == strcmp(view_uri, _contacts_person_phone_log._uri))
                return false;
-#endif // ENABLE_LOG_FEATURE
+#endif /* ENABLE_LOG_FEATURE */
 
        for (i=0;i<count;i++) {
                property_info_s *p = (property_info_s*)&(properties[i]);
@@ -908,7 +927,7 @@ static inline bool __ctsvc_db_view_has_display_name(const char *view_uri,
 
 #define SORT_CHECK_LEN 7
 
-int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int limit, cts_stmt *stmt)
+int ctsvc_db_make_get_records_query_stmt(const char *zone_name, ctsvc_query_s *s_query, int offset, int limit, cts_stmt *stmt)
 {
        char *query = NULL;
        char temp_str[100] = {0};
@@ -927,55 +946,59 @@ int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int
        ret = ctsvc_db_get_table_name(s_query->view_uri, &table);
        RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "Invalid parameter : view uri (%s)", s_query->view_uri);
 
-       ret = __ctsvc_db_create_projection(s_query->view_uri, s_query->properties, s_query->property_count,
+       ret = __ctsvc_db_create_projection(zone_name, s_query->view_uri, s_query->properties, s_query->property_count,
                                                                s_query->projection, s_query->projection_count, &projection);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_create_projection is failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_create_projection Fail(%d)", ret);
                return ret;
        }
 
        query_size = CTS_SQL_MAX_LEN;
        query = calloc(1, query_size);
-       RETVM_IF(NULL == query, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == query) {
+               CTS_ERR("calloc() Fail");
+               free(projection);
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        len = 0;
        if (s_query->distinct)
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT DISTINCT ");
        else
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
 
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " (");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-       if (temp_len >= 0) len+= temp_len;
-       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " )");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
+       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ")");
+       if (0 <= temp_len) len+= temp_len;
 
        if (s_query->filter) {
-               ret = __ctsvc_db_create_composite_condition(s_query->filter, &condition, &bind_text);
+               ret = __ctsvc_db_create_composite_condition(zone_name, s_query->filter, &condition, &bind_text);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("__ctsvc_db_create_composite_condition is failed(%d)", ret);
+                       CTS_ERR("__ctsvc_db_create_composite_condition Fail(%d)", ret);
                        free(projection);
                        return ret;
                }
                if (condition && *condition) {
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE (");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, condition);
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " )");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ")");
+                       if (0 <= temp_len) len+= temp_len;
                }
        }
 
-       // If the view_uri has display_name, default sortkey is display_name
+       /* If the view_uri has display_name, default sortkey is display_name */
        if (__ctsvc_db_view_has_display_name(s_query->view_uri, s_query->properties, s_query->property_count))
-               sortkey = ctsvc_get_sort_column();
+               sortkey = ctsvc_get_sort_column(zone_name);
 
        if (s_query->sort_property_id) {
                const char *field_name;
@@ -985,69 +1008,67 @@ int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int
                case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
                        if (sortkey) {
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                if (false == s_query->sort_asc) {
                                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " DESC ");
-                                       if (temp_len >= 0) len+= temp_len;
+                                       if (0 <= temp_len) len+= temp_len;
                                }
                        }
                        break;
                default :
-                       field_name = __ctsvc_db_get_property_field_name(s_query->properties,
+                       field_name = __ctsvc_db_get_property_field_name(zone_name, s_query->properties,
                                                                s_query->property_count, QUERY_SORTKEY, s_query->sort_property_id);
                        if (field_name) {
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, field_name);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
 
-//                             if (sortkey)
-//                                     len += snprintf(query+len, sizeof(query)-len, ", %s", sortkey);
                                if (false == s_query->sort_asc) {
                                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " DESC ");
-                                       if (temp_len >= 0) len+= temp_len;
+                                       if (0 <= temp_len) len+= temp_len;
                                }
                        }
                        else if (sortkey) {
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                        }
                        break;
                }
        }
        else if (sortkey) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
-       else if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP)) {
+       else if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP)) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY group_prio");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
 
        if (0 != limit) {
                snprintf(temp_str, sizeof(temp_str), " LIMIT %d", limit);
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_str);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                if (0 < offset) {
                        snprintf(temp_str, sizeof(temp_str), " OFFSET %d", offset);
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_str);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                }
        }
 
        free(condition);
        free(projection);
 
-       ret = ctsvc_query_prepare(query, stmt);
+       ret = ctsvc_query_prepare(zone_name, query, stmt);
        free(query);
-       if(NULL == *stmt) {
-               CTS_ERR("DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       if (NULL == *stmt) {
+               CTS_ERR("DB error : ctsvc_query_prepare() Fail(%d)", ret);
                for (cursor=bind_text;cursor;cursor=cursor->next)
                        free(cursor->data);
                g_slist_free(bind_text);
@@ -1064,8 +1085,8 @@ int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_records_with_query_exec(ctsvc_query_s *query, int offset,
-               int limit, contacts_list_h* out_list )
+static int __ctsvc_db_get_records_with_query_exec(const char *zone_name, ctsvc_query_s *query, int offset,
+               int limit, contacts_list_h* out_list)
 {
        int ret;
        int i;
@@ -1073,7 +1094,7 @@ static int __ctsvc_db_get_records_with_query_exec(ctsvc_query_s *query, int offs
        cts_stmt stmt = NULL;
        contacts_list_h list = NULL;
 
-       ret = ctsvc_db_make_get_records_query_stmt(query, offset, limit, &stmt);
+       ret = ctsvc_db_make_get_records_query_stmt(zone_name, query, offset, limit, &stmt);
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_db_make_get_records_query_stmt(%d)", ret);
 
        contacts_list_create(&list);
@@ -1081,7 +1102,7 @@ static int __ctsvc_db_get_records_with_query_exec(ctsvc_query_s *query, int offs
                contacts_record_h record;
                int field_count;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -1094,13 +1115,12 @@ static int __ctsvc_db_get_records_with_query_exec(ctsvc_query_s *query, int offs
                else {
                        field_count = query->projection_count;
 
-                       if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, query->projection, query->projection_count, query->property_count) )
-                       {
+                       if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, query->projection, query->projection_count, query->property_count)) {
                                ASSERT_NOT_REACHED("To set projection is failed.\n");
                        }
                }
 
-               for(i=0;i<field_count;i++) {
+               for (i=0;i<field_count;i++) {
                        int property_id;
                        if (0 == query->projection_count)
                                property_id = query->properties[i].property_id;
@@ -1130,8 +1150,8 @@ static int __ctsvc_db_get_records_with_query_exec(ctsvc_query_s *query, int offs
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_all_records_exec(const char *view_uri, const property_info_s* properties, int ids_count,
-               const char *projection, int offset,     int limit, contacts_list_h* out_list )
+static int __ctsvc_db_get_all_records_exec(const char *zone_name, const char *view_uri, const property_info_s* properties, int ids_count,
+               const char *projection, int offset,     int limit, contacts_list_h* out_list)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        const char *table;
@@ -1151,9 +1171,9 @@ static int __ctsvc_db_get_all_records_exec(const char *view_uri, const property_
        len += snprintf(query+len, sizeof(query)-len, " (%s)", table);
 
        if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count)) {
-               sortkey = ctsvc_get_sort_column();
+               sortkey = ctsvc_get_sort_column(zone_name);
                len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
-       } else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_GROUP))
+       } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_GROUP))
                len += snprintf(query+len, sizeof(query)-len, " ORDER BY group_prio");
 
        if (0 != limit) {
@@ -1162,21 +1182,21 @@ static int __ctsvc_db_get_all_records_exec(const char *view_uri, const property_
                        len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
 
                contacts_record_create(view_uri, &record);
-               for(i=0;i<ids_count;i++) {
+               for (i=0;i<ids_count;i++) {
                        type = (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK);
                        if (type == CTSVC_VIEW_DATA_TYPE_INT)
                                ctsvc_record_set_int(record, properties[i].property_id, ctsvc_stmt_get_int(stmt, i));
@@ -1200,17 +1220,17 @@ static int __ctsvc_db_get_all_records_exec(const char *view_uri, const property_
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_all_records( const char* view_uri, int offset, int limit, contacts_list_h* out_list )
+static int __ctsvc_db_get_all_records(const char *zone_name, const char* view_uri, int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
        unsigned int count;
        char *projection;
 
        const property_info_s *p = ctsvc_view_get_all_property_infos(view_uri, &count);
-       ret = __ctsvc_db_create_projection(view_uri, p, count, NULL, 0, &projection);
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection is failed(%d)", ret);
+       ret = __ctsvc_db_create_projection(zone_name, view_uri, p, count, NULL, 0, &projection);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection Fail(%d)", ret);
 
-       ret = __ctsvc_db_get_all_records_exec(view_uri, p, count, projection, offset, limit, out_list);
+       ret = __ctsvc_db_get_all_records_exec(zone_name, view_uri, p, count, projection, offset, limit, out_list);
        free(projection);
 
        return ret;
@@ -1220,13 +1240,13 @@ static inline bool __ctsvc_db_view_can_keyword_search(const char *view_uri)
 {
        RETV_IF(NULL == view_uri, false);
 
-       if (0 == strcmp(view_uri, CTSVC_VIEW_URI_PERSON)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
-               || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
+       if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_PERSON)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
+               || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
                return true;
        }
        return false;
@@ -1239,18 +1259,18 @@ static char* __ctsvc_db_make_search_keyword(const char *keyword)
                return NULL;
 
        size = strlen(keyword);
-       if (strstr(keyword, " ") != NULL) {
+       if (strstr(keyword, " ")) {
                int i = 0;
                int j = 0;
                char search_keyword[size * 2+1];
-               for(i=0;i<size;i++) {
+               for (i=0;i<size;i++) {
                        if (j>0 && keyword[i] == ' ') {
-                               if (search_keyword[j-1] != ' ' )
+                               if (search_keyword[j-1] != ' ')
                                        search_keyword[j++] = '*';
                        }
                        search_keyword[j++] = keyword[i];
                }
-               if (j > 0 && search_keyword[j-1] != ' ')
+               if (0 < j && search_keyword[j-1] != ' ')
                        search_keyword[j++] = '*';
                search_keyword[j] = '\0';
                return strdup(search_keyword);
@@ -1268,41 +1288,41 @@ static int __ctsvc_db_append_search_query_range(char **query, int *query_size, i
        int temp_len;
 
        temp_len = SAFE_SNPRINTF(query, query_size, len, " '");
-       if (temp_len >= 0) len += temp_len;
+       if (0 <= temp_len) len += temp_len;
        if (range & CONTACTS_SEARCH_RANGE_NAME) {
                temp_len = SAFE_SNPRINTF(query, query_size, len, "name:");
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, name);
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                first = false;
        }
 
        if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
                if (first == false) {
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " OR ");
-                       if (temp_len >= 0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                }
                temp_len = SAFE_SNPRINTF(query, query_size, len, "number:");
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, number);
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                first = false;
        }
 
        if (range & CONTACTS_SEARCH_RANGE_DATA) {
                if (first == false) {
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " OR ");
-                       if (temp_len >= 0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                }
                temp_len = SAFE_SNPRINTF(query, query_size, len, "data:");
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, data);
-               if (temp_len >= 0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                first = false;
        }
 
        temp_len = SAFE_SNPRINTF(query, query_size, len, "' ");
-       if (temp_len >= 0) len += temp_len;
+       if (0 <= temp_len) len += temp_len;
        return len;
 }
 
@@ -1313,25 +1333,24 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
        int keyword_temp_len = 0;
        int temp_len;
 
-       if( ctsvc_is_phonenumber(src) == false || strcmp(src, "+") == 0)
-       {
+       if (ctsvc_is_phonenumber(src) == false || STRING_EQUAL == strcmp(src, "+")) {
                phonenumber = false;
        }
 
        if (strstr(src, "@")) {
-               // If the search key is email address format, DO NOT search it from NAME
+               /* If the search key is email address format, DO NOT search it from NAME */
                range &= ~CONTACTS_SEARCH_RANGE_NAME;
        }
 
-       if (strcmp(src, "+") == 0) {
+       if (STRING_EQUAL == strcmp(src, "+")) {
                range &= ~CONTACTS_SEARCH_RANGE_NUMBER;
        }
 
        char* keyword = NULL;
        int keyword_size = 0;
        bool use_replaced_keyword = true;
-       // full width characters -> half width characters (apply to only FW ASCII & some symbols)
-       if ( ctsvc_get_halfwidth_string(src, &keyword, &keyword_size) != CONTACTS_ERROR_NONE ) {
+       /* full width characters -> half width characters (apply to only FW ASCII & some symbols) */
+       if (ctsvc_get_halfwidth_string(src, &keyword, &keyword_size) != CONTACTS_ERROR_NONE) {
                CTS_ERR("UChar converting error : ctsvc_get_halfwidth_string() Failed");
                keyword = (char*)src;
                use_replaced_keyword = false;
@@ -1339,70 +1358,74 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
 
        char *search_keyword = NULL;
        search_keyword = __ctsvc_db_make_search_keyword(keyword);
-       RETVM_IF(NULL == search_keyword, CONTACTS_ERROR_OUT_OF_MEMORY, "__ctsvc_db_make_search_keyword() return NULL");
+       if (NULL == search_keyword) {
+               CTS_ERR("__ctsvc_db_make_search_keyword() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        if (phonenumber) {
                temp_len = SAFE_SNPRINTF(query, query_size, len, "(SELECT contact_id FROM ");
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
 
                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                range, search_keyword, search_keyword, search_keyword);
-               if (temp_len >=0) len = temp_len;
+               if (0 <= temp_len) len = temp_len;
 
                if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
-                       // to find contact which has number including keyword
-                       // FTS can only startwiths search
+                       /*
+                        * to find contact which has number including keyword
+                        * FTS can only startwiths search
+                        */
                        char clean_number[SAFE_STRLEN(keyword)+1];
                        int err = ctsvc_clean_number(keyword, clean_number, sizeof(clean_number), false);
                        if (0 < err) {
                                const char *cc = ctsvc_get_network_cc(false);
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_PHONE_LOOKUP);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE number LIKE '%%");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, clean_number);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
 
-                               if (cc && cc[0] == '7' && clean_number[0] == '8') {             // Russia
-                                       char normal_num[strlen(clean_number)+1+5];      // for cc
+                               if (cc && cc[0] == '7' && clean_number[0] == '8') {   /* Russia */
+                                       char normal_num[strlen(clean_number)+1+5];   /* for cc */
                                        int ret;
                                        ret = ctsvc_normalize_number(clean_number, normal_num, sizeof(normal_num), false);
                                        if (0 < ret) {
                                                temp_len = SAFE_SNPRINTF(query, query_size, len, "%%' OR number LIKE '%%");
-                                               if (temp_len >= 0) len+= temp_len;
+                                               if (0 <= temp_len) len+= temp_len;
                                                temp_len = SAFE_SNPRINTF(query, query_size, len, normal_num);
-                                               if (temp_len >= 0) len+= temp_len;
+                                               if (0 <= temp_len) len+= temp_len;
                                        }
                                }
 
                                temp_len = SAFE_SNPRINTF(query, query_size, len, "%%' ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                        }
                }
                temp_len = SAFE_SNPRINTF(query, query_size, len, ")");
-               if (temp_len >=0) len += temp_len;
+               if (0 <= temp_len) len += temp_len;
        }
        else {
                char *normalized_name = NULL;
                int lang = CTSVC_LANG_OTHERS;
-               bool add_brace = false;
                char *hiragana = NULL;
                char *search_hiragana = NULL;
                bool need_union = false;
 
                lang = ctsvc_normalize_str(keyword, &normalized_name);
-               temp_len = SAFE_SNPRINTF(query, query_size, len, "( ");
-               if (temp_len >=0) len += temp_len;
+               temp_len = SAFE_SNPRINTF(query, query_size, len, "(");
+               if (0 <= temp_len) len += temp_len;
 
                if (CTSVC_LANG_JAPANESE == lang) {
                        ctsvc_convert_japanese_to_hiragana(keyword, &hiragana);
@@ -1411,25 +1434,25 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
 
                if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
                        temp_len = SAFE_SNPRINTF(query, query_size, len, "SELECT contact_id FROM ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
 
                        if (CTSVC_LANG_JAPANESE == lang) {
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NUMBER, NULL, search_hiragana, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
                        else {
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NUMBER, NULL, search_keyword, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
                        need_union = true;
                }
@@ -1437,30 +1460,29 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
                if (range & CONTACTS_SEARCH_RANGE_DATA) {
                        if (need_union) {
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id FROM (");
-                               if (temp_len >=0) len += temp_len;
-                               add_brace = true;
+                               if (0 <= temp_len) len += temp_len;
                        }
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " SELECT contact_id FROM ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
 
                        if (CTSVC_LANG_JAPANESE == lang) {
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_DATA, NULL, NULL, search_hiragana);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
                        else {
                                keyword_temp_len = strlen(search_keyword);
-                               // replace '-' -> '_' because FTS does not support search '-'
+                               /* replace '-' -> '_' because FTS does not support search '-' */
                                char temp_str[keyword_temp_len+1];
-                               for(i=0;i<keyword_temp_len;i++) {
+                               for (i=0;i<keyword_temp_len;i++) {
                                        if (search_keyword[i] == '-') {
                                                temp_str[i] = '_';
                                        }
@@ -1470,127 +1492,128 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
                                temp_str[i] = '\0';
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_DATA, NULL, NULL, temp_str);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
-                       if (add_brace) {
+                       if (need_union) {
                                temp_len = SAFE_SNPRINTF(query, query_size, len, ") ");
-                               if (temp_len >=0) len += temp_len;
-                               add_brace = false;
+                               if (0 <= temp_len) len += temp_len;
                        }
                        need_union = true;
                }
 
                if (range & CONTACTS_SEARCH_RANGE_NAME) {
                        if (need_union) {
-                               temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                               temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id FROM (");
+                               if (0 <= temp_len) len += temp_len;
                        }
 
-                       if (CTSVC_LANG_KOREAN == lang) {                // chosung search
+                       if (CTSVC_LANG_KOREAN == lang) {   /* chosung search */
                                char *chosung = calloc(1, strlen(keyword) * 5);
                                char *korean_pattern = calloc(1, strlen(keyword) * 5);
                                char *search_chosung = NULL;
                                int count = 0;
 
-                               // If try to find '홍길동' by 'ㄱ동'
-                               // search by 'ㄱㄷ' in search_index table
-                               // intersect
-                               // search by '*ㄱ*동*' in name_lookup table
+                               /*
+                                * If try to find '홍길동' by 'ㄱ동'
+                                * search by 'ㄱㄷ' in search_index table
+                                * intersect
+                                * search by '*ㄱ*동*' in name_lookup table
+                                */
 
-                               count = ctsvc_get_chosung(keyword, chosung, strlen(keyword) * 5 );
-                               ctsvc_get_korean_search_pattern(keyword, korean_pattern, strlen(keyword) * 5 );
+                               count = ctsvc_get_chosung(keyword, chosung, strlen(keyword) * 5);
+                               ctsvc_get_korean_search_pattern(keyword, korean_pattern, strlen(keyword) * 5);
 
-                               if (count > 0)
+                               if (0 < count)
                                        search_chosung = __ctsvc_db_make_search_keyword(chosung);
                                else
                                        search_chosung = __ctsvc_db_make_search_keyword(keyword);
 
-                               temp_len = SAFE_SNPRINTF(query, query_size, len, " (SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                               temp_len = SAFE_SNPRINTF(query, query_size, len, " SELECT contact_id FROM ");
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
 
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NAME, search_chosung, NULL, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
 
                                temp_len = SAFE_SNPRINTF(query, query_size, len,  " INTERSECT SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_NAME_LOOKUP);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE name GLOB '*");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, korean_pattern);
-                               if (temp_len >=0) len += temp_len;
-                               temp_len = SAFE_SNPRINTF(query, query_size, len, "*' " );
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
+                               temp_len = SAFE_SNPRINTF(query, query_size, len, "*' ");
+                               if (0 <= temp_len) len += temp_len;
 
                                free(chosung);
                                free(korean_pattern);
                                free(search_chosung);
                        }
-                       else if (CTSVC_LANG_JAPANESE == lang) { // hiragana search
-                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " (SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                       else if (CTSVC_LANG_JAPANESE == lang) {   /* hiragana search */
+                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " SELECT contact_id FROM ");
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
 
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NAME, search_hiragana, NULL, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
-                       else if (CONTACTS_ERROR_NONE <= lang) { // normalized string search
+                       else if (CONTACTS_ERROR_NONE <= lang) {   /* normalized string search */
                                char *search_normal_name = NULL;
                                search_normal_name = __ctsvc_db_make_search_keyword(normalized_name);
-                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " (SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " SELECT contact_id FROM ");
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
 
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NAME, search_normal_name, NULL, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                                free(search_normal_name);
                        }
-                       else {          // original keyword search
-                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " (SELECT contact_id FROM ");
-                               if (temp_len >=0) len += temp_len;
+                       else {   /* original keyword search */
+                               temp_len = SAFE_SNPRINTF(query, query_size, len,  " SELECT contact_id FROM ");
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_SEARCH_INDEX);
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " MATCH ");
-                               if (temp_len >=0) len += temp_len;
+                               if (0 <= temp_len) len += temp_len;
 
                                temp_len = __ctsvc_db_append_search_query_range(query, query_size, len,
                                                                        CONTACTS_SEARCH_RANGE_NAME, search_keyword, NULL, NULL);
-                               if (temp_len >=0) len = temp_len;
+                               if (0 <= temp_len) len = temp_len;
                        }
 
                        int j = 0;
                        keyword_temp_len = strlen(keyword);
                        char temp_str[keyword_temp_len*2+1];
-                       for(i=0;i<keyword_temp_len;i++) {
+                       for (i=0;i<keyword_temp_len;i++) {
                                if (keyword[i] == '\'' || keyword[i] == '_' || keyword[i] == '%' || keyword[i] == '\\') {
                                        temp_str[j++] = CTSVC_DB_ESCAPE_CHAR;
                                }
@@ -1598,28 +1621,33 @@ static int __ctsvc_db_append_search_query(const char *src, char **query, int *qu
                        }
                        temp_str[j] = '\0';
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id FROM ");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, CTS_TABLE_NAME_LOOKUP);
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, " WHERE name LIKE '");
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
                        temp_len = SAFE_SNPRINTF(query, query_size, len, temp_str);
-                       if (temp_len >=0) len += temp_len;
-                       temp_len = SAFE_SNPRINTF(query, query_size, len, "%%' ESCAPE '\\') ");  //CTSVC_DB_ESCAPE_CHAR
-                       if (temp_len >=0) len += temp_len;
+                       if (0 <= temp_len) len += temp_len;
+                       temp_len = SAFE_SNPRINTF(query, query_size, len, "%%' ESCAPE '\\' ");   /* CTSVC_DB_ESCAPE_CHAR */
+                       if (0 <= temp_len) len += temp_len;
+
+                       if (need_union) {
+                               temp_len = SAFE_SNPRINTF(query, query_size, len, ") ");
+                               if (0 <= temp_len) len += temp_len;
+                       }
                }
 
                free(normalized_name);
                free(hiragana);
                free(search_hiragana);
 
-               temp_len = SAFE_SNPRINTF(query, query_size, len, " ) ");
-               if (temp_len >=0) len += temp_len;
+               temp_len = SAFE_SNPRINTF(query, query_size, len, ") ");
+               if (0 <= temp_len) len += temp_len;
        }
 
        free(search_keyword);
 
-       if( use_replaced_keyword )
+       if (use_replaced_keyword)
                free(keyword);
 
        return len;
@@ -1647,7 +1675,7 @@ static int __ctsvc_db_search_records_character_count(const char *keyword)
        return count;
 }
 
-static int __ctsvc_db_search_records_append_sort(const char *view_uri,
+static int __ctsvc_db_search_records_append_sort(const char *zone_name, const char *view_uri,
                const char *sortkey, const char *keyword, int len, char **query, int *query_size)
 {
        int i;
@@ -1657,7 +1685,7 @@ static int __ctsvc_db_search_records_append_sort(const char *view_uri,
                contacts_name_sorting_order_e order;
                const char *field = NULL;
                char *temp_keyword = NULL;
-               contacts_setting_get_name_sorting_order(&order);
+               ctsvc_setting_get_name_sorting_order(zone_name, &order);
 
                if (CONTACTS_NAME_SORTING_ORDER_FIRSTLAST == order)
                        field = "display_name";
@@ -1696,8 +1724,8 @@ static int __ctsvc_db_search_records_append_sort(const char *view_uri,
                                                if (first == false && i != 0)
                                                        temp_str_len += snprintf(temp_str+temp_str_len, sizeof(temp_str)-temp_str_len, " AND ");
                                                if (ctsvc_is_chosung(temp)) {
-                                                       for(k=0;k<19;k++) {
-                                                               if (strcmp(hangul_syllable[k][0], temp) == 0)
+                                                       for (k=0;k<19;k++) {
+                                                               if (STRING_EQUAL == strcmp(hangul_syllable[k][0], temp))
                                                                        break;
                                                        }
                                                }
@@ -1721,18 +1749,22 @@ static int __ctsvc_db_search_records_append_sort(const char *view_uri,
                                temp_str_len = snprintf(temp_str+temp_str_len, sizeof(temp_str)-temp_str_len,
                                                                " ELSE %d END ", j);
                                temp_len = SAFE_SNPRINTF(query, query_size, len, temp_str);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                        }
                        else {
                                temp_len = SAFE_SNPRINTF(query, query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(query, query_size, len, sortkey);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                        }
                }
                else {
                        temp_keyword = __ctsvc_db_get_str_with_escape((char*)keyword, strlen((char*)keyword), true);
-                       RETVM_IF(NULL == temp_keyword, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+                       if (NULL == temp_keyword) {
+                               CTS_ERR("__ctsvc_db_get_str_with_escape() Fail");
+                               return CONTACTS_ERROR_OUT_OF_MEMORY;
+                       }
+
                        char temp_str[CTS_SQL_MIN_LEN + (strlen(field) + strlen(temp_keyword)) * SORT_CHECK_LEN];
                        snprintf(temp_str, sizeof(temp_str),
                                                        " ORDER BY "
@@ -1751,25 +1783,25 @@ static int __ctsvc_db_search_records_append_sort(const char *view_uri,
                                                        field, temp_keyword, field, temp_keyword,
                                                                field, temp_keyword);
                        temp_len = SAFE_SNPRINTF(query, query_size, len, temp_str);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                                free(temp_keyword);
                }
-               temp_len = SAFE_SNPRINTF(query, query_size, len, " , ");
-               if (temp_len >= 0) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(query, query_size, len, ", ");
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, sortkey);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
        else {
                temp_len = SAFE_SNPRINTF(query, query_size, len, " ORDER BY ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(query, query_size, len, sortkey);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
        return len;
 }
 
-static int __ctsvc_db_search_records_exec(const char *view_uri, const property_info_s* properties,
-               int ids_count, const char *projection, const char *keyword, int offset, int limit, int range, contacts_list_h* out_list )
+static int __ctsvc_db_search_records_exec(const char *zone_name, const char *view_uri, const property_info_s* properties,
+               int ids_count, const char *projection, const char *keyword, int offset, int limit, int range, contacts_list_h* out_list)
 {
        char *query = NULL;
        char temp_query[CTS_SQL_MAX_LEN];
@@ -1790,68 +1822,76 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
 
        query_size = CTS_SQL_MAX_LEN;
        query = calloc(1, query_size);
-       RETVM_IF(NULL == query, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == query) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
 
        len = 0;
 
-       if (strcmp(keyword, "+") == 0) {
+       if (STRING_EQUAL == strcmp(keyword, "+")) {
                range &= ~CONTACTS_SEARCH_RANGE_NUMBER;
        }
 
-       if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
-                       || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
-                       || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
-                       || 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
+       if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
+                       || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
+                       || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
+                       || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
                if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
                        free(query);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE contact_id IN ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
 
                temp_len = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, range);
-               if (temp_len >= 0) len = temp_len;
+               if (0 <= temp_len) len = temp_len;
        }
-       else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
-               bool need_union = false;
+       else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
+               bool need_or = false;
                if (range & CONTACTS_SEARCH_RANGE_DATA || range & CONTACTS_SEARCH_RANGE_EMAIL) {
                        free(query);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT * FROM ");
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
+               if (0 <= temp_len) len+= temp_len;
 
-               if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
-                       char clean_num[strlen(keyword)+1+5]; // for cc
-                       // Original number can include '-' or special character. So search by cleaned_number
-                       // If contact has 010 1234 5678 (normalized number is +cc 10 1234 5678),
-                       //      then the contack should be searched by keyword +cc 10 1234 5678
+               if ((range & CONTACTS_SEARCH_RANGE_NUMBER) && ctsvc_is_phonenumber(keyword)) {
+                       char clean_num[strlen(keyword)+1+5];   /* for cc */
+
+                       /*
+                        * Original number can include '-' or special character. So search by cleaned_number
+                        * If contact has 010 1234 5678 (normalized number is +cc 10 1234 5678),
+                        *      then the contact should be searched by keyword +cc 10 1234 5678
+                        */
                        ret = ctsvc_clean_number(keyword, clean_num, sizeof(clean_num), false);
                        if (0 < ret) {
                                const char *cc = ctsvc_get_network_cc(false);
 
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT * FROM ");
-                               if (temp_len >= 0) len+= temp_len;
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-                               if (temp_len >= 0) len+= temp_len;
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE normalized_number LIKE '%%");
-                               if (temp_len >= 0) len+= temp_len;
+                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, "(normalized_number LIKE '%%");
+                               if (0 <= temp_len) len+= temp_len;
 
-                               if (cc && cc[0] == '7' && clean_num[0] == '8') {                // Russia
-                                       char normal_num[strlen(clean_num)+1+5]; // for cc
+                               if (cc && cc[0] == '7' && clean_num[0] == '8') {   /* Russia */
+                                       char normal_num[strlen(clean_num)+1+5];   /* for cc */
                                        ret = ctsvc_normalize_number(clean_num, normal_num, sizeof(normal_num), false);
                                        if (0 < ret) {
                                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, normal_num);
@@ -1861,152 +1901,123 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
                                }
                                else
                                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, clean_num);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
 
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' OR cleaned_number LIKE '%%");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, clean_num);
-                               if (temp_len >= 0) len+= temp_len;
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
+                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%')");
+                               if (0 <= temp_len) len+= temp_len;
                        }
                        else {
                                char *temp_keyword = __ctsvc_db_get_str_with_escape((char*)keyword, strlen((char*)keyword), true);
                                if (NULL == temp_keyword) {
-                                       CTS_ERR("__ctsvc_db_get_str_with_escape() return NULL");
+                                       CTS_ERR("__ctsvc_db_get_str_with_escape() Fail");
                                        free(query);
                                        return CONTACTS_ERROR_OUT_OF_MEMORY;
                                }
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT * FROM ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE number LIKE '%%");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_keyword);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\'");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                free(temp_keyword);
                        }
-                       need_union = true;
+                       need_or = true;
                }
 
                if (range & CONTACTS_SEARCH_RANGE_NAME) {
-                       if (need_union) {
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
-                               if (temp_len >= 0) len+= temp_len;
+                       if (need_or) {
+                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " OR ");
+                               if (0 <= temp_len) len+= temp_len;
                        }
                        snprintf(temp_query, sizeof(temp_query),
-                                               "SELECT "CTSVC_DB_VIEW_PERSON_CONTACT".*, "
-                                                                       "temp_data.* "
-                                                       "FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
-                                                       "JOIN (SELECT id number_id, "
-                                                                       "contact_id, "
-                                                                       "data1 type, "
-                                                                       "is_primary_default, "
-                                                                       "data2 label, "
-                                                                       "data3 number, "
-                                                                       "data4 minmatch, "
-                                                                       "data5 normalized_number, "
-                                                                       "data6 cleaned_number "
-                                               "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
-                                               "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id ",
-                                                       CTSVC_DATA_NUMBER);
+                                               "person_id IN (SELECT person_id "
+                                               "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND  contact_id ");
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
 
-                       // search contact from search_index table by name and join the results
-                       // FTS can support to serach with multiple words
-                       // If contact display_name is 'abc def', then the contact should be searched by 'def'
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " JOIN ");
-                       if (temp_len >= 0) len+= temp_len;
+                       /*
+                        * search contact from search_index table by name and join the results
+                        * FTS can support to serach with multiple words
+                        * If contact display_name is 'abc def', then the contact should be searched by 'def'
+                        */
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " IN ");
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, CONTACTS_SEARCH_RANGE_NAME);
-                       if (temp_len >= 0) len = temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " temp_search_index ON ");
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTSVC_DB_VIEW_PERSON_CONTACT);
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".name_contact_id = temp_search_index.contact_id ");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len = temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+                       if (0 <= temp_len) len+= temp_len;
                }
 
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
-               if (temp_len >= 0) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+               if (0 <= temp_len) len+= temp_len;
        }
-       else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
-               bool need_union = false;
+       else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
+               bool need_or = false;
                if (range & CONTACTS_SEARCH_RANGE_NUMBER || range & CONTACTS_SEARCH_RANGE_DATA) {
                        free(query);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
                }
 
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
-                       // search contact which has email address started with keyword
+                       /* search contact which has email address started with keyword */
                        char *temp_keyword = __ctsvc_db_get_str_with_escape((char*)keyword, strlen((char*)keyword), true);
                        if (NULL == temp_keyword) {
-                               CTS_ERR("__ctsvc_db_get_str_with_escape() return NULL");
+                               CTS_ERR("__ctsvc_db_get_str_with_escape() Fail");
                                free(query);
                                return CONTACTS_ERROR_OUT_OF_MEMORY;
                        }
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT * FROM ");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE email LIKE '");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE (email LIKE '");
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_keyword);
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\'");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\')");
+                       if (0 <= temp_len) len+= temp_len;
                        free(temp_keyword);
-                       need_union = true;
+                       need_or = true;
                }
 
                if (range & CONTACTS_SEARCH_RANGE_NAME) {
-                       if (need_union) {
-                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
-                               if (temp_len >= 0) len+= temp_len;
+                       if (need_or) {
+                               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " OR ");
+                               if (0 <= temp_len) len+= temp_len;
                        }
 
                        snprintf(temp_query, sizeof(temp_query),
-                                               "SELECT "CTSVC_DB_VIEW_PERSON_CONTACT".*, "
-                                                                       "temp_data.* "
-                                                       "FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
-                                               "JOIN (SELECT id email_id, "
-                                                                       "contact_id, "
-                                                                       "data1 type, "
-                                                                       "is_primary_default, "
-                                                                       "data2 label, "
-                                                                       "data3 email "
-                                       "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
-                       "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
-                                                       CTSVC_DATA_EMAIL);
+                                               "person_id IN (SELECT person_id "
+                                               "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND  contact_id ");
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
 
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " JOIN ");
-                       if (temp_len >= 0) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " IN ");
+                       if (0 <= temp_len) len+= temp_len;
                        temp_len = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, CONTACTS_SEARCH_RANGE_NAME);
-                       if (temp_len >= 0) len = temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " temp_search_index ON ");
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTSVC_DB_VIEW_PERSON_CONTACT);
-                       if (temp_len >= 0) len+= temp_len;
-                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".name_contact_id = temp_search_index.contact_id ");
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len = temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+                       if (0 <= temp_len) len+= temp_len;
                }
 
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
-               if (temp_len >= 0) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+               if (0 <= temp_len) len+= temp_len;
        }
-       else {          // CTSVC_VIEW_URI_PERSON
+       else {   /* CTSVC_VIEW_URI_PERSON */
                if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
                        free(query);
                        return CONTACTS_ERROR_INVALID_PARAMETER;
@@ -2018,43 +2029,43 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
                                                        "WHERE deleted = 0 AND contact_id IN ",
                                                        projection, table);
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, range);
-               if (temp_len >= 0) len = temp_len;
+               if (0 <= temp_len) len = temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "GROUP BY person_id_in_contact) temp_contacts ON ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".person_id = temp_contacts.person_id_in_contact");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
 
        if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count))
-               sortkey = ctsvc_get_sort_column();
+               sortkey = ctsvc_get_sort_column(zone_name);
 
        if (sortkey) {
-               len = __ctsvc_db_search_records_append_sort(view_uri, sortkey, keyword, len , &query, &query_size);
+               len = __ctsvc_db_search_records_append_sort(zone_name, view_uri, sortkey, keyword, len, &query, &query_size);
        }
-       else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_GROUP)) {
+       else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_GROUP)) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY group_prio");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
 
        if (0 != limit) {
                snprintf(temp_query, sizeof(temp_query), " LIMIT %d", limit);
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
 
                if (0 < offset) {
                        snprintf(temp_query, sizeof(temp_query), " OFFSET %d", offset);
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                }
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        free(query);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        r_type = ctsvc_view_get_record_type(view_uri);
 
@@ -2062,17 +2073,15 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
 
-               if( r_type == CTSVC_RECORD_PERSON )
-               {
+               if (r_type == CTSVC_RECORD_PERSON) {
                        unsigned int *project = malloc(sizeof(unsigned int)*ids_count);
-                       for(i=0;i<ids_count;i++)
-                       {
+                       for (i=0;i<ids_count;i++) {
                                project[i] = properties[i].property_id;
                        }
 
@@ -2080,15 +2089,14 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
 
                        free(project);
 
-                       if( CONTACTS_ERROR_NONE != ret )
-                       {
-                               CTS_ERR("DB error : make record Failed(%d)", ret);
+                       if (CONTACTS_ERROR_NONE != ret) {
+                               CTS_ERR("DB error : make record Fail(%d)", ret);
                        }
                }
                else {
                        contacts_record_create(view_uri, &record);
 
-                       for(i=0;i<ids_count;i++) {
+                       for (i=0;i<ids_count;i++) {
                                type = (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK);
                                if (type == CTSVC_VIEW_DATA_TYPE_INT)
                                        ctsvc_record_set_int(record, properties[i].property_id, ctsvc_stmt_get_int(stmt, i));
@@ -2114,7 +2122,7 @@ static int __ctsvc_db_search_records_exec(const char *view_uri, const property_i
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_search_records(const char* view_uri, const char *keyword,
+static int __ctsvc_db_search_records(const char *zone_name, const char* view_uri, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
@@ -2132,16 +2140,16 @@ static int __ctsvc_db_search_records(const char* view_uri, const char *keyword,
                        "Invalid parameter : can not keyword search");
 
        p = ctsvc_view_get_all_property_infos(view_uri, &count);
-       ret = __ctsvc_db_create_projection(view_uri, p, count, NULL, 0, &projection);
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection is failed(%d)", ret);
+       ret = __ctsvc_db_create_projection(zone_name, view_uri, p, count, NULL, 0, &projection);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection Fail(%d)", ret);
 
-       ret = __ctsvc_db_search_records_exec(view_uri, p, count, projection, keyword, offset, limit, range, out_list);
+       ret = __ctsvc_db_search_records_exec(zone_name, view_uri, p, count, projection, keyword, offset, limit, range, out_list);
        free(projection);
 
        return ret;
 }
 
-static int __ctsvc_db_search_records_with_range(const char* view_uri, const char *keyword,
+static int __ctsvc_db_search_records_with_range(const char *zone_name, const char* view_uri, const char *keyword,
                int offset, int limit, int range, contacts_list_h* out_list)
 {
        int ret;
@@ -2158,17 +2166,17 @@ static int __ctsvc_db_search_records_with_range(const char* view_uri, const char
                        "Invalid parameter : can not keyword search");
 
        p = ctsvc_view_get_all_property_infos(view_uri, &count);
-       ret = __ctsvc_db_create_projection(view_uri, p, count, NULL, 0, &projection);
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection is failed(%d)", ret);
+       ret = __ctsvc_db_create_projection(zone_name, view_uri, p, count, NULL, 0, &projection);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection Fail(%d)", ret);
 
-       ret = __ctsvc_db_search_records_exec(view_uri, p, count, projection, keyword, offset, limit, range, out_list);
+       ret = __ctsvc_db_search_records_exec(zone_name, view_uri, p, count, projection, keyword, offset, limit, range, out_list);
        free(projection);
 
        return ret;
 }
 
-static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_query, const char *projection,
-       const char *condition, GSList *bind, const char *keyword, int offset, int limit, contacts_list_h * out_list )
+static inline int __ctsvc_db_search_records_with_query_exec(const char *zone_name, ctsvc_query_s *s_query, const char *projection,
+       const char *condition, GSList *bind, const char *keyword, int offset, int limit, contacts_list_h * out_list)
 {
        char *query = NULL;
        int query_size;
@@ -2177,6 +2185,7 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
        int ret;
        int i;
        int type;
+       bool person_contact_query = false;
        GSList *cursor;
        cts_stmt stmt = NULL;
        contacts_list_h list = NULL;
@@ -2191,68 +2200,91 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
 
        query_size = CTS_SQL_MAX_LEN;
        query = calloc(1, query_size);
-       RETVM_IF(NULL == query, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NULL");
+       if (NULL == query) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
        len = 0;
 
        if (s_query->distinct)
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT DISTINCT ");
        else
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
 
-       if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
-                       || 0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
-                       || 0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
-                       || 0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
-               if (temp_len >= 0) len+= temp_len;
+       if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
+                       || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
+                       || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
+                       || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".contact_id IN ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE person_id IN ");
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ( SELECT person_id FROM ");
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTS_TABLE_CONTACTS);
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE deleted = 0 AND contact_id IN ");
+               if (0 <= temp_len) len+= temp_len;
+               person_contact_query = true;
        }
-       else if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
-                       || 0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
+       else if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
+                       || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
                free(query);
                return CONTACTS_ERROR_INVALID_PARAMETER;
        }
-       else {          // CTSVC_VIEW_URI_PERSON
+       else {   /* CTSVC_VIEW_URI_PERSON */
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", "
                                                "(SELECT contact_id, person_id person_id_in_contact, addressbook_id FROM ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTS_TABLE_CONTACTS);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE deleted = 0) temp_contacts ON ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".person_id = temp_contacts.person_id_in_contact WHERE temp_contacts.contact_id IN ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
 
        temp_len = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, range);
-       if (temp_len >= 0) len = temp_len;
+       if (0 <= temp_len) len = temp_len;
+
+       if (person_contact_query) {
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
+               if (0 <= temp_len) len+= temp_len;
+       }
 
        if (condition && *condition) {
-               len += snprintf(query+len, sizeof(query)-len, " AND (%s)", condition);
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " AND (");
-               if (temp_len >= 0) len+= temp_len;
+               if (person_contact_query) {
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " AND contact_id IN (");
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT contact_id FROM ");
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+                       if (0 <= temp_len) len+= temp_len;
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
+                       if (0 <= temp_len) len+= temp_len;
+               }
+               else {
+                       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " AND (");
+                       if (0 <= temp_len) len+= temp_len;
+               }
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, condition);
-               if (temp_len >= 0) len+= temp_len;
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " )");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, ")");
+               if (0 <= temp_len) len+= temp_len;
        }
 
        if (__ctsvc_db_view_has_display_name(s_query->view_uri, s_query->properties, s_query->property_count))
-               sortkey = ctsvc_get_sort_column();
+               sortkey = ctsvc_get_sort_column(zone_name);
 
        if (s_query->sort_property_id) {
                const char *field_name;
@@ -2262,64 +2294,62 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
                case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
                        if (sortkey) {
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                if (false == s_query->sort_asc) {
                                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " DESC ");
-                                       if (temp_len >= 0) len+= temp_len;
+                                       if (0 <= temp_len) len+= temp_len;
                                }
                        }
                        break;
                default :
-                       field_name = __ctsvc_db_get_property_field_name(s_query->properties,
+                       field_name = __ctsvc_db_get_property_field_name(zone_name, s_query->properties,
                                                                s_query->property_count, QUERY_SORTKEY, s_query->sort_property_id);
                        if (field_name) {
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, field_name);
-                               if (temp_len >= 0) len+= temp_len;
-//                             if (sortkey)
-//                                     len += snprintf(query+len, sizeof(query)-len, ", %s", sortkey);
+                               if (0 <= temp_len) len+= temp_len;
                                if (false == s_query->sort_asc) {
                                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " DESC ");
-                                       if (temp_len >= 0) len+= temp_len;
+                                       if (0 <= temp_len) len+= temp_len;
                                }
                        }
                        else if (sortkey) {
                                len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY ");
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                                temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
-                               if (temp_len >= 0) len+= temp_len;
+                               if (0 <= temp_len) len+= temp_len;
                        }
                        break;
                }
        }
        else if (sortkey) {
-               len = __ctsvc_db_search_records_append_sort(s_query->view_uri, sortkey, keyword, len, &query, &query_size);
+               len = __ctsvc_db_search_records_append_sort(zone_name, s_query->view_uri, sortkey, keyword, len, &query, &query_size);
        }
-       else if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP)) {
+       else if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP)) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ORDER BY group_prio");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
        }
 
        if (0 != limit) {
                char temp_str[20] = {0};
                snprintf(temp_str, sizeof(temp_str), " LIMIT %d", limit);
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_str);
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
 
                if (0 < offset) {
                        snprintf(temp_str, sizeof(temp_str), " OFFSET %d", offset);
                        temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_str);
-                       if (temp_len >= 0) len+= temp_len;
+                       if (0 <= temp_len) len+= temp_len;
                }
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
        free(query);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        i = 1;
        len = g_slist_length(bind);
@@ -2330,13 +2360,13 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
                }
 
-               if( ctsvc_view_get_record_type(s_query->view_uri) == CTSVC_RECORD_PERSON ) {
+               if (ctsvc_view_get_record_type(s_query->view_uri) == CTSVC_RECORD_PERSON) {
                        unsigned int ids_count;
                        unsigned int *project;
                        if (0 == s_query->projection_count)
@@ -2346,7 +2376,7 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
 
                        project = malloc(sizeof(unsigned int)*ids_count);
 
-                       for(i=0;i<ids_count;i++) {
+                       for (i=0;i<ids_count;i++) {
                                if (0 == s_query->projection_count)
                                        project[i] = s_query->properties[i].property_id;
                                else
@@ -2356,25 +2386,23 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
                        ret = ctsvc_db_person_create_record_from_stmt_with_projection(stmt, project, ids_count, &record);
                        free(project);
 
-                       if( CONTACTS_ERROR_NONE != ret )
-                               CTS_ERR("DB error : make record Failed(%d)", ret);
+                       if (CONTACTS_ERROR_NONE != ret)
+                               CTS_ERR("DB error : make record Fail(%d)", ret);
                }
                else {
                        contacts_record_create(s_query->view_uri, (contacts_record_h*)&record);
                        int field_count;
                        if (0 == s_query->projection_count)
                                field_count = s_query->property_count;
-                       else
-                       {
+                       else {
                                field_count = s_query->projection_count;
 
-                               if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
-                               {
+                               if (CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count)) {
                                        ASSERT_NOT_REACHED("To set projection is failed.\n");
                                }
                        }
 
-                       for(i=0;i<field_count;i++) {
+                       for (i=0;i<field_count;i++) {
                                int property_id;
 
                                if (0 == s_query->projection_count)
@@ -2382,7 +2410,7 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
                                else
                                        property_id = s_query->projection[i];
 
-                               type = __ctsvc_db_get_property_type(s_query->properties, s_query->property_count, s_query->projection[i]);
+                               type = __ctsvc_db_get_property_type(s_query->properties, s_query->property_count, property_id);
                                if (type == CTSVC_VIEW_DATA_TYPE_INT)
                                        ctsvc_record_set_int(record,property_id, ctsvc_stmt_get_int(stmt, i));
                                else if (type == CTSVC_VIEW_DATA_TYPE_STR)
@@ -2406,7 +2434,7 @@ static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_que
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_search_records_with_query( contacts_query_h query, const char *keyword,
+static int __ctsvc_db_search_records_with_query(const char *zone_name, contacts_query_h query, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
        int ret;
@@ -2426,22 +2454,22 @@ static int __ctsvc_db_search_records_with_query( contacts_query_h query, const c
        RETVM_IF(false == can_keyword_search, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : can not keyword search");
 
-       ret = __ctsvc_db_create_projection(s_query->view_uri, s_query->properties, s_query->property_count,
+       ret = __ctsvc_db_create_projection(zone_name, s_query->view_uri, s_query->properties, s_query->property_count,
                                                                s_query->projection, s_query->projection_count, &projection);
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection is failed(%d)", ret);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection Fail(%d)", ret);
 
        if (s_query->filter) {
-               ret = __ctsvc_db_create_composite_condition(s_query->filter, &condition, &bind_text);
+               ret = __ctsvc_db_create_composite_condition(zone_name, s_query->filter, &condition, &bind_text);
                if (CONTACTS_ERROR_NONE != ret) {
-                       CTS_ERR("__ctsvc_db_create_composite_condition is failed(%d)", ret);
+                       CTS_ERR("__ctsvc_db_create_composite_condition Fail(%d)", ret);
                        free(projection);
                        return ret;
                }
        }
 
-       ret = __ctsvc_db_search_records_with_query_exec(s_query, projection, condition, bind_text, keyword, offset, limit, out_list);
+       ret = __ctsvc_db_search_records_with_query_exec(zone_name, s_query, projection, condition, bind_text, keyword, offset, limit, out_list);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_search_records_with_query_exec is failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_search_records_with_query_exec Fail(%d)", ret);
                for (cursor=bind_text;cursor;cursor=cursor->next)
                        free(cursor->data);
                g_slist_free(bind_text);
@@ -2471,7 +2499,7 @@ typedef struct {
        void *user_data;
 }ctsvc_bulk_info_s;
 
-static int __ctsvc_db_insert_records(contacts_list_h list, int **ids)
+static int __ctsvc_db_insert_records(const char *zone_name, contacts_list_h list, int **ids)
 {
        int ret;
        int index;
@@ -2481,12 +2509,12 @@ static int __ctsvc_db_insert_records(contacts_list_h list, int **ids)
 
        ret = contacts_list_get_count(list, &count);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("contacts_list_get_count() failed(%d)", ret);
+               CTS_ERR("contacts_list_get_count() Fail(%d)", ret);
                return ret;
        }
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans is failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans Fail(%d)", ret);
 
        id = calloc(count, sizeof(int));
 
@@ -2494,26 +2522,25 @@ static int __ctsvc_db_insert_records(contacts_list_h list, int **ids)
        index = 0;
        do {
                ret = contacts_list_get_current_record_p(list, &record);
-               ifCONTACTS_ERROR_NONE != ret) {
+               if (CONTACTS_ERROR_NONE != ret) {
                        CTS_ERR("contacts_list_get_current_record_p is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        free(id);
                        return ret;
                }
 
-               ret = contacts_db_insert_record(record, &id[index++]);
-               if( ret != CONTACTS_ERROR_NONE ) {
+               ret = ctsvc_db_insert_record(zone_name, record, &id[index++]);
+               if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("contacts_db_insert_record is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        free(id);
                        return ret;
                }
-       }while (CONTACTS_ERROR_NONE  == contacts_list_next(list));
+       } while (CONTACTS_ERROR_NONE  == contacts_list_next(list));
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                free(id);
                return ret;
        }
@@ -2525,85 +2552,38 @@ static int __ctsvc_db_insert_records(contacts_list_h list, int **ids)
        return CONTACTS_ERROR_NONE;
 }
 
-#ifdef _CONTACTS_NATIVE
-static gboolean __ctsvc_db_insert_idler(void *data)
-{
-       int ret;
-       ctsvc_bulk_info_s *info = data;
-       contacts_db_insert_result_cb cb;
-
-       ret = __ctsvc_db_insert_records(info->list, &info->ids);
-
-       if (info->cb) {
-               cb = info->cb;
-               if( CONTACTS_ERROR_NONE != ret) {
-                       cb(ret, NULL, 0, info->user_data);
-               }
-               else {
-                       int count = 0;
-                       contacts_list_get_count(info->list, &count);
-                       cb(ret, info->ids, count, info->user_data);
-               }
-       }
-       contacts_list_destroy(info->list, true);
-       free(info->ids);
-       free(info);
-       return false;
-}
-#endif
-
-static int __ctsvc_db_delete_records(const char* view_uri, int ids[], int count)
+static int __ctsvc_db_delete_records(const char *zone_name, const char* view_uri, int ids[], int count)
 {
        int ret = CONTACTS_ERROR_NONE;
        int index;
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans is failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans Fail(%d)", ret);
 
        index = 0;
        do {
-               ret = contacts_db_delete_record(view_uri, ids[index++]);
+               ret = ctsvc_db_delete_record(zone_name, view_uri, ids[index++]);
                if (CONTACTS_ERROR_NO_DATA == ret) {
                        CTS_DBG("the record is not exist : %d", ret);
                        continue;
                }
-               else if( ret != CONTACTS_ERROR_NONE ) {
+               else if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("contacts_db_delete_record is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
-       } while(index < count);
+       } while (index < count);
 
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-#ifdef _CONTACTS_NATIVE
-static gboolean __ctsvc_db_delete_idler(void *data)
-{
-       int ret;
-       ctsvc_bulk_info_s *info = data;
-       contacts_db_result_cb cb;
-
-       ret = __ctsvc_db_delete_records(info->view_uri, info->ids, info->count);
-
-       if (info->cb) {
-               cb = info->cb;
-               cb(ret, info->user_data);
-       }
-       free(info->ids);
-       free(info);
-       return false;
-}
-#endif
-
-static int __ctsvc_db_update_records( contacts_list_h list)
+static int __ctsvc_db_update_records(const char *zone_name, contacts_list_h list)
 {
        int ret = CONTACTS_ERROR_NONE;
        int count;
@@ -2613,56 +2593,36 @@ static int __ctsvc_db_update_records( contacts_list_h list)
        RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "contacts_list_get_count is falied(%d)", ret);
        RETVM_IF(count <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : count is 0");
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans is failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans Fail(%d)", ret);
 
        contacts_list_first(list);
        do {
                ret = contacts_list_get_current_record_p(list, &record);
-               ifCONTACTS_ERROR_NONE != ret) {
+               if (CONTACTS_ERROR_NONE != ret) {
                        CTS_ERR("contacts_list_get_current_record_p is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
-               ret = contacts_db_update_record(record);
-               if( ret != CONTACTS_ERROR_NONE ) {
-                       CTS_ERR("contacts_db_update_record is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+               ret = ctsvc_db_update_record(zone_name, record);
+               if (ret != CONTACTS_ERROR_NONE) {
+                       CTS_ERR("ctsvc_db_update_record() Fail(%d)", ret);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(list));
-       ret = ctsvc_end_trans(true);
-       if (ret < CONTACTS_ERROR_NONE)
-       {
-               CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(list));
+       ret = ctsvc_end_trans(zone_name, true);
+       if (ret < CONTACTS_ERROR_NONE) {
+               CTS_ERR("DB error : ctsvc_end_trans() Fail(%d)", ret);
                return ret;
        }
 
        return CONTACTS_ERROR_NONE;
 }
 
-#ifdef _CONTACTS_NATIVE
-static gboolean __ctsvc_db_update_idler(void *data)
-{
-       int ret;
-       ctsvc_bulk_info_s *info = data;
-       contacts_db_result_cb cb;
-
-       ret = __ctsvc_db_update_records(info->list);
-
-       if (info->cb) {
-               cb = info->cb;
-               cb(ret, info->user_data);
-       }
-       contacts_list_destroy(info->list, true);
-       free(info);
-       return false;
-}
-#endif
-
-static int __ctsvc_db_get_count_exec(const char *view_uri, const property_info_s* properties, int ids_count,
-               const char *projection, int *out_count )
+static int __ctsvc_db_get_count_exec(const char *zone_name, const char *view_uri, const property_info_s* properties, int ids_count,
+               const char *projection, int *out_count)
 {
        char query[CTS_SQL_MAX_LEN] = {0};
        const char *table;
@@ -2676,32 +2636,32 @@ static int __ctsvc_db_get_count_exec(const char *view_uri, const property_info_s
 
        len += snprintf(query+len, sizeof(query)-len, "  (%s)", table);
 
-       len += snprintf(query+len, sizeof(query)-len, " ) ");
+       len += snprintf(query+len, sizeof(query)-len, ") ");
 
-       ret = ctsvc_query_get_first_int_result(query, out_count);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_count);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
 
        return ret;
 }
 
-static int __ctsvc_db_get_count( const char* view_uri, int *out_count)
+static int __ctsvc_db_get_count(const char *zone_name, const char* view_uri, int *out_count)
 {
        int ret;
        unsigned int count;
        char *projection;
 
        const property_info_s *p = ctsvc_view_get_all_property_infos(view_uri, &count);
-       ret = __ctsvc_db_create_projection(view_uri, p, count, NULL, 0, &projection);
-       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection is failed(%d)", ret);
+       ret = __ctsvc_db_create_projection(zone_name, view_uri, p, count, NULL, 0, &projection);
+       RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_projection Fail(%d)", ret);
 
-       __ctsvc_db_get_count_exec(view_uri, p, count, projection, out_count);
+       __ctsvc_db_get_count_exec(zone_name, view_uri, p, count, projection, out_count);
        free(projection);
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_count_with_query_exec(ctsvc_query_s *s_query, const char *projection,
-       const char *condition, GSList *bind_text, int *out_count )
+static int __ctsvc_db_get_count_with_query_exec(const char *zone_name, ctsvc_query_s *s_query, const char *projection,
+       const char *condition, GSList *bind_text, int *out_count)
 {
        char *query = NULL;
        int query_size;
@@ -2717,7 +2677,11 @@ static int __ctsvc_db_get_count_with_query_exec(ctsvc_query_s *s_query, const ch
 
        query_size = CTS_SQL_MAX_LEN;
        query = calloc(1, query_size);
-       RETVM_IF(NULL == query, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() return NUL");
+       if (NULL == query) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
        len = 0;
        if (s_query->distinct) {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT COUNT(*) FROM (SELECT DISTINCT ");
@@ -2725,54 +2689,54 @@ static int __ctsvc_db_get_count_with_query_exec(ctsvc_query_s *s_query, const ch
        else {
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT COUNT(*) FROM (SELECT ");
        }
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
 
-       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ( ");
-       if (temp_len >= 0) len+= temp_len;
+       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " (");
+       if (0 <= temp_len) len+= temp_len;
        temp_len = SAFE_SNPRINTF(&query, &query_size, len,  table);
-       if (temp_len >= 0) len+= temp_len;
+       if (0 <= temp_len) len+= temp_len;
 
-       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
-       if (temp_len >= 0) len+= temp_len;
+       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+       if (0 <= temp_len) len+= temp_len;
 
        if (condition && *condition) {
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ( ");
-               if (temp_len >= 0) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE (");
+               if (0 <= temp_len) len+= temp_len;
                temp_len = SAFE_SNPRINTF(&query, &query_size, len, condition);
-               if (temp_len >= 0) len+= temp_len;
-               temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
-               if (temp_len >= 0) len+= temp_len;
+               if (0 <= temp_len) len+= temp_len;
+               temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+               if (0 <= temp_len) len+= temp_len;
        }
 
-       temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
-       if (temp_len >= 0) len+= temp_len;
+       temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+       if (0 <= temp_len) len+= temp_len;
 
        if (bind_text) {
                cts_stmt stmt;
                GSList *cursor;
                int i;
-               ret = ctsvc_query_prepare(query, &stmt);
+               ret = ctsvc_query_prepare(zone_name, query, &stmt);
                free(query);
-               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+               RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
                for (cursor=bind_text, i=1; cursor;cursor=cursor->next, i++)
                        ctsvc_stmt_bind_copy_text(stmt, i, cursor->data, strlen(cursor->data));
-               ret = ctsvc_stmt_get_first_int_result(stmt, out_count);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_stmt_get_first_int_result() Failed(%d)", ret);
+               ret = ctsvc_stmt_get_first_int_result(zone_name, stmt, out_count);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_stmt_get_first_int_result() Fail(%d)", ret);
        }
        else {
-               ret = ctsvc_query_get_first_int_result(query, out_count);
+               ret = ctsvc_query_get_first_int_result(zone_name, query, out_count);
                free(query);
-               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        }
        return ret;
 }
 
-static int __ctsvc_db_get_count_with_query( contacts_query_h query, int *out_count)
+static int __ctsvc_db_get_count_with_query(const char *zone_name, contacts_query_h query, int *out_count)
 {
        int ret;
        char *condition = NULL;
@@ -2785,14 +2749,14 @@ static int __ctsvc_db_get_count_with_query( contacts_query_h query, int *out_cou
        s_query = (ctsvc_query_s *)query;
 
        if (s_query->filter) {
-               ret = __ctsvc_db_create_composite_condition(s_query->filter, &condition, &bind_text);
-               RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_composite_condition is failed(%d)", ret);
+               ret = __ctsvc_db_create_composite_condition(zone_name, s_query->filter, &condition, &bind_text);
+               RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_db_create_composite_condition Fail(%d)", ret);
        }
 
-       ret = __ctsvc_db_create_projection(s_query->view_uri, s_query->properties, s_query->property_count,
+       ret = __ctsvc_db_create_projection(zone_name, s_query->view_uri, s_query->properties, s_query->property_count,
                                                                s_query->projection, s_query->projection_count, &projection);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("__ctsvc_db_create_projection is failed(%d)", ret);
+               CTS_ERR("__ctsvc_db_create_projection Fail(%d)", ret);
                for (cursor=bind_text;cursor;cursor=cursor->next)
                        free(cursor->data);
                g_slist_free(bind_text);
@@ -2800,7 +2764,7 @@ static int __ctsvc_db_get_count_with_query( contacts_query_h query, int *out_cou
                return ret;
        }
 
-       ret = __ctsvc_db_get_count_with_query_exec(s_query, projection, condition, bind_text, out_count);
+       ret = __ctsvc_db_get_count_with_query_exec(zone_name, s_query, projection, condition, bind_text, out_count);
        for (cursor=bind_text;cursor;cursor=cursor->next)
                free(cursor->data);
        g_slist_free(bind_text);
@@ -2811,8 +2775,8 @@ static int __ctsvc_db_get_count_with_query( contacts_query_h query, int *out_cou
        return ret;
 }
 
-API int contacts_db_get_records_with_query( contacts_query_h query, int offset, int limit,
-       contacts_list_h* out_list )
+int ctsvc_db_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit,
+       contacts_list_h* out_list)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -2823,20 +2787,20 @@ API int contacts_db_get_records_with_query( contacts_query_h query, int offset,
 
        RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
        s_query = (ctsvc_query_s*)query;
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(s_query->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(s_query->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read(%s)", s_query->view_uri);
 
-       if (( plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(s_query->view_uri)))){
-               if( plugin_info->get_records_with_query ) {
-                       ret = plugin_info->get_records_with_query( query, offset, limit, out_list );
+       if ((plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(s_query->view_uri)))) {
+               if (plugin_info->get_records_with_query) {
+                       ret = plugin_info->get_records_with_query(zone_name, query, offset, limit, out_list);
                        return ret;
                }
        }
 
-       return __ctsvc_db_get_records_with_query_exec(s_query, offset, limit, out_list);
+       return __ctsvc_db_get_records_with_query_exec(zone_name, s_query, offset, limit, out_list);
 }
 
-static int __ctsvc_db_get_contact_changes(const char* view_uri, int addressbook_id,
+static int __ctsvc_db_get_contact_changes(const char *zone_name, const char* view_uri, int addressbook_id,
                int version, contacts_list_h* out_list, int* out_current_version)
 {
        int ret;
@@ -2878,11 +2842,11 @@ static int __ctsvc_db_get_contact_changes(const char* view_uri, int addressbook_
                                                "AND "CTS_TABLE_CONTACTS".addressbook_id = "CTS_TABLE_ADDRESSBOOKS".addressbook_id",
                        CONTACTS_CHANGE_UPDATED, version,
                        CONTACTS_CHANGE_DELETED, version, version,
-                       CONTACTS_CHANGE_DELETED, version ,version);
+                       CONTACTS_CHANGE_DELETED, version,version);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
@@ -2890,7 +2854,7 @@ static int __ctsvc_db_get_contact_changes(const char* view_uri, int addressbook_
                ctsvc_updated_info_s *update_info;
 
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -2916,14 +2880,14 @@ static int __ctsvc_db_get_contact_changes(const char* view_uri, int addressbook_
        ctsvc_list_reverse(list);
 
        snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
-       ret = ctsvc_query_get_first_int_result(query, out_current_version);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_current_version);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        *out_list = list;
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_group_changes(const char* view_uri, int addressbook_id,
+static int __ctsvc_db_get_group_changes(const char *zone_name, const char* view_uri, int addressbook_id,
                int version, contacts_list_h* out_list, int* out_current_version)
 {
        int ret;
@@ -2952,8 +2916,8 @@ static int __ctsvc_db_get_group_changes(const char* view_uri, int addressbook_id
                        CONTACTS_CHANGE_DELETED, CTS_TABLE_GROUP_DELETEDS, version, version);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
@@ -2961,7 +2925,7 @@ static int __ctsvc_db_get_group_changes(const char* view_uri, int addressbook_id
                ctsvc_updated_info_s *update_info;
 
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -2984,14 +2948,14 @@ static int __ctsvc_db_get_group_changes(const char* view_uri, int addressbook_id
        ctsvc_list_reverse(list);
 
        snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
-       ret = ctsvc_query_get_first_int_result(query, out_current_version);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_current_version);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        *out_list = list;
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_group_relations_changes(const char* view_uri, int addressbook_id,
+static int __ctsvc_db_get_group_relations_changes(const char *zone_name, const char* view_uri, int addressbook_id,
                int version, contacts_list_h* out_list, int* out_current_version)
 {
        int len;
@@ -3016,14 +2980,14 @@ static int __ctsvc_db_get_group_relations_changes(const char* view_uri, int addr
                                        "SELECT * FROM (%s) WHERE addressbook_id = %d ", temp_query, addressbook_id);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -3042,14 +3006,14 @@ static int __ctsvc_db_get_group_relations_changes(const char* view_uri, int addr
        ctsvc_list_reverse(list);
 
        snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
-       ret = ctsvc_query_get_first_int_result(query, out_current_version);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_current_version);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        *out_list = list;
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_group_member_changes(const char* view_uri, int addressbook_id,
+static int __ctsvc_db_get_group_member_changes(const char *zone_name, const char* view_uri, int addressbook_id,
                int version, contacts_list_h* out_list, int* out_current_version)
 {
        int len;
@@ -3065,14 +3029,14 @@ static int __ctsvc_db_get_group_member_changes(const char* view_uri, int address
        if (0 <= addressbook_id)
                len += snprintf(query+len, sizeof(query)-len, " AND addressbook_id = %d ", addressbook_id);
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -3089,14 +3053,14 @@ static int __ctsvc_db_get_group_member_changes(const char* view_uri, int address
        ctsvc_list_reverse(list);
 
        snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
-       ret = ctsvc_query_get_first_int_result(query, out_current_version);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_current_version);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        *out_list = list;
 
        return CONTACTS_ERROR_NONE;
 }
 
-static int __ctsvc_db_get_my_profile_changes(const char* view_uri, int addressbook_id,
+static int __ctsvc_db_get_my_profile_changes(const char *zone_name, const char* view_uri, int addressbook_id,
                int version, contacts_list_h* out_list, int* out_current_version)
 {
        int ret;
@@ -3133,14 +3097,14 @@ static int __ctsvc_db_get_my_profile_changes(const char* view_uri, int addressbo
                        CONTACTS_CHANGE_DELETED, CTS_TABLE_MY_PROFILES, version);
        }
 
-       ret = ctsvc_query_prepare(query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Failed(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
 
        contacts_list_create(&list);
        while ((ret = ctsvc_stmt_step(stmt))) {
                contacts_record_h record;
                if (1 != ret) {
-                       CTS_ERR("DB error : ctsvc_stmt_step() Failed(%d)", ret);
+                       CTS_ERR("DB error : ctsvc_stmt_step() Fail(%d)", ret);
                        ctsvc_stmt_finalize(stmt);
                        contacts_list_destroy(list, true);
                        return ret;
@@ -3156,15 +3120,15 @@ static int __ctsvc_db_get_my_profile_changes(const char* view_uri, int addressbo
        ctsvc_list_reverse(list);
 
        snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
-       ret = ctsvc_query_get_first_int_result(query, out_current_version);
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret , "DB error : ctsvc_query_get_first_int_result() Failed(%d)", ret);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, out_current_version);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
        *out_list = list;
 
        return CONTACTS_ERROR_NONE;
 }
 
-API int contacts_db_get_changes_by_version( const char* view_uri, int addressbook_id,
-               int version, contacts_list_h* out_list, int* out_current_version )
+int ctsvc_db_get_changes_by_version(const char *zone_name, const char* view_uri, int addressbook_id,
+               int version, contacts_list_h* out_list, int* out_current_version)
 {
        int ret;
        RETV_IF(version < 0, CONTACTS_ERROR_INVALID_PARAMETER);
@@ -3172,31 +3136,31 @@ API int contacts_db_get_changes_by_version( const char* view_uri, int addressboo
        *out_list = NULL;
        RETV_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_current_version = 0;
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_READ),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", view_uri);
 
-       if (0 == strcmp(view_uri, _contacts_contact_updated_info._uri)) {
-               ret = __ctsvc_db_get_contact_changes(view_uri, addressbook_id,
+       if (STRING_EQUAL == strcmp(view_uri, _contacts_contact_updated_info._uri)) {
+               ret = __ctsvc_db_get_contact_changes(zone_name, view_uri, addressbook_id,
                                        version, out_list, out_current_version);
                return ret;
        }
-       else if (0 == strcmp(view_uri, _contacts_group_updated_info._uri)) {
-               ret = __ctsvc_db_get_group_changes(view_uri, addressbook_id,
+       else if (STRING_EQUAL == strcmp(view_uri, _contacts_group_updated_info._uri)) {
+               ret = __ctsvc_db_get_group_changes(zone_name, view_uri, addressbook_id,
                                        version, out_list, out_current_version);
                return ret;
        }
-       else if (0 == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
-               ret = __ctsvc_db_get_group_member_changes(view_uri, addressbook_id,
+       else if (STRING_EQUAL == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
+               ret = __ctsvc_db_get_group_member_changes(zone_name, view_uri, addressbook_id,
                                        version, out_list, out_current_version);
                return ret;
        }
-       else if (0 == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
-               ret = __ctsvc_db_get_group_relations_changes(view_uri, addressbook_id,
+       else if (STRING_EQUAL == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
+               ret = __ctsvc_db_get_group_relations_changes(zone_name, view_uri, addressbook_id,
                                        version, out_list, out_current_version);
                return ret;
        }
-       else if (0 == strcmp(view_uri, _contacts_my_profile_updated_info._uri)) {
-               ret = __ctsvc_db_get_my_profile_changes(view_uri, addressbook_id,
+       else if (STRING_EQUAL == strcmp(view_uri, _contacts_my_profile_updated_info._uri)) {
+               ret = __ctsvc_db_get_my_profile_changes(zone_name, view_uri, addressbook_id,
                                        version, out_list, out_current_version);
                return ret;
        }
@@ -3205,53 +3169,53 @@ API int contacts_db_get_changes_by_version( const char* view_uri, int addressboo
        return CONTACTS_ERROR_INVALID_PARAMETER;
 }
 
-API int contacts_db_get_current_version( int* out_current_version )
+int ctsvc_db_get_current_version(const char *zone_name, int* out_current_version)
 {
        RETVM_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ) && !ctsvc_have_permission(CTSVC_PERMISSION_PHONELOG_READ),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_CONTACT_READ) && false == ctsvc_have_permission(zone_name, CTSVC_PERMISSION_PHONELOG_READ),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (contact)");
 
-       return ctsvc_get_current_version(out_current_version);
+       return ctsvc_get_current_version(zone_name, out_current_version);
 }
 
-API int contacts_db_search_records(const char* view_uri, const char *keyword,
+int ctsvc_db_search_records(const char *zone_name, const char* view_uri, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
        RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_list = NULL;
        RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read(%s)", view_uri);
 
-       return __ctsvc_db_search_records(view_uri, keyword, offset, limit, out_list);
+       return __ctsvc_db_search_records(zone_name, view_uri, keyword, offset, limit, out_list);
 }
 
-API int contacts_db_search_records_with_range(const char* view_uri, const char *keyword,
+int ctsvc_db_search_records_with_range(const char *zone_name, const char* view_uri, const char *keyword,
                int offset, int limit, int range, contacts_list_h* out_list)
 {
        RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_list = NULL;
        RETVM_IF(range == 0, CONTACTS_ERROR_INVALID_PARAMETER, "range is 0");
        RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read(%s)", view_uri);
 
-       return __ctsvc_db_search_records_with_range(view_uri, keyword, offset, limit, range, out_list);
+       return __ctsvc_db_search_records_with_range(zone_name, view_uri, keyword, offset, limit, range, out_list);
 }
 
-API int contacts_db_search_records_with_query( contacts_query_h query, const char *keyword,
+int ctsvc_db_search_records_with_query(const char *zone_name, contacts_query_h query, const char *keyword,
                int offset, int limit, contacts_list_h* out_list)
 {
        RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_list = NULL;
        RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(((ctsvc_query_s*)query)->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(((ctsvc_query_s*)query)->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", ((ctsvc_query_s*)query)->view_uri);
 
-       return __ctsvc_db_search_records_with_query(query, keyword, offset, limit, out_list);
+       return __ctsvc_db_search_records_with_query(zone_name, query, keyword, offset, limit, out_list);
 }
 
-API int contacts_db_get_count( const char* view_uri, int *out_count)
+int ctsvc_db_get_count(const char *zone_name, const char* view_uri, int *out_count)
 {
        int ret;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -3259,20 +3223,20 @@ API int contacts_db_get_count( const char* view_uri, int *out_count)
        RETV_IF(NULL == out_count, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_count = 0;
        RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", view_uri);
 
-       if (( plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(view_uri)))){
-               if( plugin_info->get_count ) {
-                       ret = plugin_info->get_count(out_count);
+       if ((plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(view_uri)))) {
+               if (plugin_info->get_count) {
+                       ret = plugin_info->get_count(zone_name, out_count);
                        return ret;
                }
        }
 
-       return __ctsvc_db_get_count( view_uri, out_count );
+       return __ctsvc_db_get_count(zone_name, view_uri, out_count);
 }
 
-API int contacts_db_get_count_with_query( contacts_query_h query, int *out_count)
+int ctsvc_db_get_count_with_query(const char *zone_name, contacts_query_h query, int *out_count)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_record_type_e type = CTSVC_RECORD_INVALID;
@@ -3284,23 +3248,23 @@ API int contacts_db_get_count_with_query( contacts_query_h query, int *out_count
 
        RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        s_query = (ctsvc_query_s*)query;
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(s_query->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(s_query->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", s_query->view_uri);
 
        type = ctsvc_view_get_record_type(s_query->view_uri);
        plugin_info = ctsvc_db_get_plugin_info(type);
 
-       if (plugin_info){
-               if(plugin_info->get_count_with_query ) {
-                       ret = plugin_info->get_count_with_query( query, out_count );
+       if (plugin_info) {
+               if (plugin_info->get_count_with_query) {
+                       ret = plugin_info->get_count_with_query(zone_name, query, out_count);
                        return ret;
                }
        }
 
-       return __ctsvc_db_get_count_with_query( query, out_count );
+       return __ctsvc_db_get_count_with_query(zone_name, query, out_count);
 }
 
-API int contacts_db_insert_record(contacts_record_h record, int *id )
+int ctsvc_db_insert_record(const char *zone_name, contacts_record_h record, int *id)
 {
        ctsvc_db_plugin_info_s* plugin_info = NULL;
 
@@ -3312,13 +3276,13 @@ API int contacts_db_insert_record(contacts_record_h record, int *id )
        plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
        RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == plugin_info->insert_record, CONTACTS_ERROR_INVALID_PARAMETER, "Not permitted");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : write (%s)", ((ctsvc_record_s*)record)->view_uri);
 
-       return plugin_info->insert_record(record, id);
+       return plugin_info->insert_record(zone_name, record, id);
 }
 
-API int contacts_db_update_record(contacts_record_h record)
+int ctsvc_db_update_record(const char *zone_name, contacts_record_h record)
 {
        ctsvc_db_plugin_info_s* plugin_info = NULL;
 
@@ -3327,13 +3291,13 @@ API int contacts_db_update_record(contacts_record_h record)
        plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
        RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == plugin_info->update_record, CONTACTS_ERROR_INVALID_PARAMETER, "Not permitted");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : write (%s)", ((ctsvc_record_s*)record)->view_uri);
 
-       return plugin_info->update_record(record);
+       return plugin_info->update_record(zone_name, record);
 }
 
-API int contacts_db_delete_record(const char* view_uri, int id)
+int ctsvc_db_delete_record(const char *zone_name, const char* view_uri, int id)
 {
        ctsvc_record_type_e type = CTSVC_RECORD_INVALID;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -3344,13 +3308,13 @@ API int contacts_db_delete_record(const char* view_uri, int id)
        plugin_info = ctsvc_db_get_plugin_info(type);
        RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == plugin_info->delete_record, CONTACTS_ERROR_INVALID_PARAMETER, "Not permitted");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_write_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_write_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : write (%s)", view_uri);
 
-       return plugin_info->delete_record(id);
+       return plugin_info->delete_record(zone_name, id);
 }
 
-API int contacts_db_get_record(const char* view_uri, int id, contacts_record_h* out_record )
+int ctsvc_db_get_record(const char *zone_name, const char* view_uri, int id, contacts_record_h* out_record)
 {
        ctsvc_record_type_e type = CTSVC_RECORD_INVALID;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -3364,13 +3328,13 @@ API int contacts_db_get_record(const char* view_uri, int id, contacts_record_h*
 
        RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == plugin_info->get_record, CONTACTS_ERROR_INVALID_PARAMETER, "Not permitted");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", view_uri);
 
-       return plugin_info->get_record(id, out_record);
+       return plugin_info->get_record(zone_name, id, out_record);
 }
 
-API int contacts_db_replace_record( contacts_record_h record, int id )
+int ctsvc_db_replace_record(const char *zone_name, contacts_record_h record, int id)
 {
        ctsvc_db_plugin_info_s* plugin_info = NULL;
 
@@ -3379,13 +3343,13 @@ API int contacts_db_replace_record( contacts_record_h record, int id )
        plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
        RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == plugin_info->replace_record, CONTACTS_ERROR_INVALID_PARAMETER, "Not permitted");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_write_permission(((ctsvc_record_s*)record)->view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : write (%s)", ((ctsvc_record_s*)record)->view_uri);
 
-       return plugin_info->replace_record(record, id);
+       return plugin_info->replace_record(zone_name, record, id);
 }
 
-API int contacts_db_get_all_records(const char* view_uri, int offset, int limit, contacts_list_h* out_list )
+int ctsvc_db_get_all_records(const char *zone_name, const char* view_uri, int offset, int limit, contacts_list_h* out_list)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_record_type_e type = CTSVC_RECORD_INVALID;
@@ -3394,23 +3358,23 @@ API int contacts_db_get_all_records(const char* view_uri, int offset, int limit,
        RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
        *out_list = NULL;
        RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(ctsvc_required_read_permission(view_uri)),
+       RETVM_IF(false == ctsvc_have_permission(zone_name, ctsvc_required_read_permission(view_uri)),
                                CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (%s)", view_uri);
 
        type = ctsvc_view_get_record_type(view_uri);
        plugin_info = ctsvc_db_get_plugin_info(type);
 
-       if (plugin_info){
-               if( plugin_info->get_all_records ) {
-                       ret = plugin_info->get_all_records(offset, limit, out_list);
+       if (plugin_info) {
+               if (plugin_info->get_all_records) {
+                       ret = plugin_info->get_all_records(zone_name, offset, limit, out_list);
                        return ret;
                }
        }
 
-       return __ctsvc_db_get_all_records( view_uri, offset, limit, out_list );
+       return __ctsvc_db_get_all_records(zone_name, view_uri, offset, limit, out_list);
 }
 
-int ctsvc_db_insert_records(contacts_list_h list, int **ids, int *count)
+int ctsvc_db_insert_records(const char *zone_name, contacts_list_h list, int **ids, int *count)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -3419,112 +3383,51 @@ int ctsvc_db_insert_records(contacts_list_h list, int **ids, int *count)
 
        if (count)
                contacts_list_get_count(list, count);
-       if (( plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))) {
-               if( plugin_info->insert_records ) {
-                       ret = plugin_info->insert_records( list, ids );
+       if ((plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))) {
+               if (plugin_info->insert_records) {
+                       ret = plugin_info->insert_records(zone_name, list, ids);
                        return ret;
                }
        }
 
-       return __ctsvc_db_insert_records(list, ids);
-}
-
-API int contacts_db_insert_records_async( contacts_list_h list,
-               contacts_db_insert_result_cb callback, void *user_data)
-{
-       RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-#ifdef _CONTACTS_NATIVE
-       if (callback) {
-               ctsvc_bulk_info_s *info;
-               info = (ctsvc_bulk_info_s *)calloc(1, sizeof(ctsvc_bulk_info_s));
-               ctsvc_list_clone(list, &info->list);
-               info->cb = callback;
-               info->user_data = user_data;
-               g_idle_add(__ctsvc_db_insert_idler, info);              // should be changed after ipc implementation
-               return CONTACTS_ERROR_NONE;
-       }
-#endif
-       return ctsvc_db_insert_records(list, NULL, NULL);
+       return __ctsvc_db_insert_records(zone_name, list, ids);
 }
 
-int ctsvc_db_update_records(contacts_list_h list)
+int ctsvc_db_update_records(const char *zone_name, contacts_list_h list)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
 
        RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
 
-       if (( plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))){
-               if( plugin_info->update_records ) {
-                       ret = plugin_info->update_records( list );
+       if ((plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))) {
+               if (plugin_info->update_records) {
+                       ret = plugin_info->update_records(zone_name, list);
                        return ret;
                }
        }
 
-       return __ctsvc_db_update_records(list);
+       return __ctsvc_db_update_records(zone_name, list);
 }
 
-API int contacts_db_update_records_async( contacts_list_h list,
-               contacts_db_result_cb callback, void *user_data)
-{
-       RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-#ifdef _CONTACTS_NATIVE
-       if (callback) {
-               ctsvc_bulk_info_s *info;
-               info = (ctsvc_bulk_info_s *)calloc(1, sizeof(ctsvc_bulk_info_s));
-               ctsvc_list_clone(list, &info->list);
-               info->cb = callback;
-               info->user_data = user_data;
-               g_idle_add(__ctsvc_db_update_idler, info);              // should be changed after ipc implementation
-               return CONTACTS_ERROR_NONE;
-       }
-#endif
-       return ctsvc_db_update_records(list);
-}
-
-int ctsvc_db_delete_records(const char* view_uri, int* ids, int count)
+int ctsvc_db_delete_records(const char *zone_name, const char* view_uri, int* ids, int count)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
 
        RETV_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER);
 
-       if (( plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(view_uri)))){
-               if( plugin_info->delete_records ) {
-                       ret = plugin_info->delete_records( ids, count );
+       if ((plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(view_uri)))) {
+               if (plugin_info->delete_records) {
+                       ret = plugin_info->delete_records(zone_name, ids, count);
                        return ret;
                }
        }
 
-       return __ctsvc_db_delete_records(view_uri, ids, count);
-}
-
-API int contacts_db_delete_records_async( const char* view_uri, int* ids, int count,
-               contacts_db_result_cb callback, void *user_data)
-{
-       RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-#ifdef _CONTACTS_NATIVE
-       if (callback) {
-               ctsvc_bulk_info_s *info;
-               info = (ctsvc_bulk_info_s *)calloc(1, sizeof(ctsvc_bulk_info_s));
-               info->ids = calloc(count, sizeof(int));
-               memcpy(info->ids, ids, sizeof(int)*count);
-               info->view_uri = view_uri;
-               info->count = count;
-               info->cb = callback;
-               info->user_data = user_data;
-               g_idle_add(__ctsvc_db_delete_idler, info);              // should be changed after ipc implementation
-               return CONTACTS_ERROR_NONE;
-       }
-#endif
-       return ctsvc_db_delete_records(view_uri, ids, count);
+       return __ctsvc_db_delete_records(zone_name, view_uri, ids, count);
 }
 
-static int __ctsvc_db_replace_records( contacts_list_h list, int ids[], int count)
+static int __ctsvc_db_replace_records(const char *zone_name, contacts_list_h list, int ids[], int count)
 {
        int ret = CONTACTS_ERROR_NONE;
        int record_count;
@@ -3537,54 +3440,34 @@ static int __ctsvc_db_replace_records( contacts_list_h list, int ids[], int coun
        RETVM_IF(record_count != count, CONTACTS_ERROR_INVALID_PARAMETER,
                        "Invalid parameter : list count and ids count are not matched");
 
-       ret = ctsvc_begin_trans();
-       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans is failed(%d)", ret);
+       ret = ctsvc_begin_trans(zone_name);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans Fail(%d)", ret);
 
        contacts_list_first(list);
        i = 0;
        do {
                ret = contacts_list_get_current_record_p(list, &record);
-               ifCONTACTS_ERROR_NONE != ret) {
+               if (CONTACTS_ERROR_NONE != ret) {
                        CTS_ERR("contacts_list_get_current_record_p is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
 
-               ret = contacts_db_replace_record(record, ids[i++]);
-               if( ret != CONTACTS_ERROR_NONE ) {
+               ret = ctsvc_db_replace_record(zone_name, record, ids[i++]);
+               if (ret != CONTACTS_ERROR_NONE) {
                        CTS_ERR("contacts_db_replace_record is faild(%d)", ret);
-                       ctsvc_end_trans(false);
+                       ctsvc_end_trans(zone_name, false);
                        return ret;
                }
-       }while(CONTACTS_ERROR_NONE == contacts_list_next(list));
+       } while (CONTACTS_ERROR_NONE == contacts_list_next(list));
 
-       ret = ctsvc_end_trans(true);
+       ret = ctsvc_end_trans(zone_name, true);
 
        return ret;
 }
 
 
-#ifdef _CONTACTS_NATIVE
-static gboolean __ctsvc_db_replace_idler(void *data)
-{
-       int ret;
-       ctsvc_bulk_info_s *info = data;
-       contacts_db_result_cb cb;
-
-       ret = __ctsvc_db_replace_records(info->list, info->ids, info->count);
-
-       if (info->cb) {
-               cb = info->cb;
-               cb(ret, info->user_data);
-       }
-       contacts_list_destroy(info->list, true);
-       free(info->ids);
-       free(info);
-       return false;
-}
-#endif
-
-int ctsvc_db_replace_records(contacts_list_h list, int ids[], unsigned int count)
+int ctsvc_db_replace_records(const char *zone_name, contacts_list_h list, int ids[], unsigned int count)
 {
        int ret = CONTACTS_ERROR_NONE;
        ctsvc_db_plugin_info_s* plugin_info = NULL;
@@ -3592,83 +3475,33 @@ int ctsvc_db_replace_records(contacts_list_h list, int ids[], unsigned int count
        RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
        RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
 
-       if (( plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))){
-               if( plugin_info->replace_records ) {
-                       ret = plugin_info->replace_records( list, ids, count );
+       if ((plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))) {
+               if (plugin_info->replace_records) {
+                       ret = plugin_info->replace_records(zone_name, list, ids, count);
                        return ret;
                }
        }
 
-       return __ctsvc_db_replace_records(list, ids, count);
-}
-
-API int contacts_db_replace_records_async( contacts_list_h list, int ids[], int count,
-               contacts_db_result_cb callback, void *user_data )
-{
-       RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-#ifdef _CONTACTS_NATIVE
-       if (callback) {
-               ctsvc_bulk_info_s *info;
-               info = (ctsvc_bulk_info_s *)calloc(1, sizeof(ctsvc_bulk_info_s));
-               ctsvc_list_clone(list, &info->list);
-               info->ids = calloc(count, sizeof(int));
-               memcpy(info->ids, ids, sizeof(int)*count);
-               info->count = count;
-               info->cb = callback;
-               info->user_data = user_data;
-               g_idle_add(__ctsvc_db_replace_idler, info);             // should be changed after ipc implementation
-               return CONTACTS_ERROR_NONE;
-       }
-#endif
-       return ctsvc_db_replace_records(list, ids, count);
-}
-
-API int contacts_db_insert_records( contacts_list_h record_list, int **ids, int *count)
-{
-       return ctsvc_db_insert_records(record_list, ids, count);
-}
-
-API int contacts_db_update_records( contacts_list_h record_list)
-{
-       return ctsvc_db_update_records(record_list);
-}
-
-API int contacts_db_delete_records(const char* view_uri, int record_id_array[], int count)
-{
-       return ctsvc_db_delete_records(view_uri, record_id_array, count);
-}
-
-API int contacts_db_replace_records( contacts_list_h list, int record_id_array[], int count )
-{
-       return ctsvc_db_replace_records(list, record_id_array, count);
+       return __ctsvc_db_replace_records(zone_name, list, ids, count);
 }
 
-API int contacts_db_get_last_change_version(int* last_version)
+int ctsvc_db_get_status(const char *zone_name, contacts_db_status_e *status)
 {
-       int ret = CONTACTS_ERROR_NONE;
+       if (NULL == ctsvc_db_status_table)
+               ctsvc_db_status_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
 
-       RETVM_IF(NULL == last_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       RETVM_IF(!ctsvc_have_permission(CTSVC_PERMISSION_CONTACT_READ) && !ctsvc_have_permission(CTSVC_PERMISSION_PHONELOG_READ),
-                               CONTACTS_ERROR_PERMISSION_DENIED, "Permission denied : read (contact)");
-       *last_version = ctsvc_get_transaction_ver();
-       return ret;
-}
+       *status = GPOINTER_TO_INT(g_hash_table_lookup(ctsvc_db_status_table, zone_name));
 
-API int contacts_db_get_status(contacts_db_status_e *status)
-{
-       *status = __db_status;
        return CONTACTS_ERROR_NONE;
 }
 
-void ctsvc_db_set_status(contacts_db_status_e status)
+void ctsvc_db_set_status(const char *zone_name, contacts_db_status_e status)
 {
-       __db_status = status;
+       if (NULL == ctsvc_db_status_table)
+               ctsvc_db_status_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
 
-#ifdef _CONTACTS_IPC_SERVER
-       ctsvc_change_subject_publish_status(status);
-#endif
-       return;
+       g_hash_table_replace(ctsvc_db_status_table, g_strdup(zone_name), GINT_TO_POINTER(status));
+
+       ctsvc_change_subject_publish_status(zone_name, status);
 }
 
diff --git a/server/db/ctsvc_db_query.h b/server/db/ctsvc_db_query.h
new file mode 100644 (file)
index 0000000..f710d52
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Dohyung Jin <dh.jin@samsung.com>
+ *                 Jongwon Lee <gogosing.lee@samsung.com>
+ *                 Donghee Ye <donghee.ye@samsung.com>
+ *
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_DB_QUERY_H__
+#define __CTSVC_DB_QUERY_H__
+
+#include "contacts.h"
+#include "contacts_db_status.h"
+#include "ctsvc_struct.h"
+#include "ctsvc_db_sqlite.h"
+
+int ctsvc_db_insert_record(const char *zone_name, contacts_record_h record, int *id);
+int ctsvc_db_get_record(const char *zone_name, const char* view_uri, int id, contacts_record_h* out_record);
+int ctsvc_db_update_record(const char *zone_name, contacts_record_h record);
+int ctsvc_db_delete_record(const char *zone_name, const char* view_uri, int id);
+int ctsvc_db_replace_record(const char *zone_name, contacts_record_h record, int id);
+int ctsvc_db_get_all_records(const char *zone_name, const char* view_uri, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_db_get_records_with_query(const char *zone_name, contacts_query_h query, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_db_get_count(const char *zone_name, const char* view_uri, int *out_count);
+int ctsvc_db_get_count_with_query(const char *zone_name, contacts_query_h query, int *out_count);
+int ctsvc_db_get_changes_by_version(const char *zone_name, const char* view_uri, int addressbook_id, int version, contacts_list_h* out_list, int* out_current_version);
+int ctsvc_db_get_current_version(const char *zone_name, int* out_current_version);
+int ctsvc_db_search_records(const char *zone_name, const char* view_uri, const char *keyword, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_db_search_records_with_range(const char *zone_name, const char* view_uri, const char *keyword, int offset, int limit, int range, contacts_list_h* out_list);
+int ctsvc_db_search_records_with_query(const char *zone_name, contacts_query_h query, const char *keyword, int offset, int limit, contacts_list_h* out_list);
+int ctsvc_db_get_status(const char *zone_name, contacts_db_status_e *status);
+int ctsvc_db_insert_records_with_vcard(const char *zone_name, const char* vcard_stream, int **record_id_array, int *count);
+int ctsvc_db_replace_records_with_vcard(const char *zone_name, const char* vcard_stream, int *record_id_array, int count);
+
+
+int ctsvc_db_insert_records(const char *zone_name, contacts_list_h list, int **ids, int *count);
+int ctsvc_db_update_records(const char *zone_name, contacts_list_h list);
+int ctsvc_db_delete_records(const char *zone_name, const char* view_uri, int* ids, int count);
+int ctsvc_db_replace_records(const char *zone_name, contacts_list_h list, int ids[], unsigned int count);
+
+int ctsvc_db_make_get_records_query_stmt(const char *zone_name, ctsvc_query_s *s_query, int offset, int limit, cts_stmt *stmt);
+int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bind_text);
+int ctsvc_db_update_record_with_set_query(const char *zone_name, const char *set, GSList *bind_text, const char *table, int id);
+
+void ctsvc_db_set_status(const char *zone_name, contacts_db_status_e status);
+
+#endif /* __CTSVC_DB_QUERY_H__ */
+
old mode 100755 (executable)
new mode 100644 (file)
similarity index 51%
rename from native/ctsvc_schema.h
rename to server/db/ctsvc_db_schema.h
index 3498868..8a07fa1
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_SCHEMA_H__
-#define __TIZEN_SOCIAL_CTSVC_SCHEMA_H__
+#ifndef __CTSVC_DB_SCHEMA_H__
+#define __CTSVC_DB_SCHEMA_H__
 
 #define CTSVC_DB_PATH "/opt/usr/dbspace/.contacts-svc.db"
 #define CTSVC_DB_JOURNAL_PATH "/opt/usr/dbspace/.contacts-svc.db-journal"
 
-// For Security
+/* For Security */
 #define CTS_SECURITY_FILE_GROUP 5000
 #define CTS_SECURITY_DEFAULT_PERMISSION 0660
 #define CTS_SECURITY_DIR_DEFAULT_PERMISSION 0770
 
 #define CTS_SCHEMA_TABLE_TOTAL 10
 
-// DB Tables
+/* DB Tables */
 #define CTS_TABLE_PERSONS "persons"
 #define CTS_TABLE_CONTACTS "contacts"
 #define CTS_TABLE_GROUPS "groups"
 #define CTS_TABLE_ADDRESSBOOKS "addressbooks"
-#define CTS_TABLE_DATA "data"     // This is the data table for contact all fields
+#define CTS_TABLE_DATA "data"  /* This is the data table for contact all fields */
 #define CTS_TABLE_FAVORITES "favorites"
 #define CTS_TABLE_PHONELOGS "phonelogs"
 #define CTS_TABLE_PHONELOG_ACC "phonelog_accumulation"
 #define CTS_TABLE_ACTIVITIES "activities"
 #define CTS_TABLE_ACTIVITY_PHOTOS "activity_photos"
 
-// DB views /////////////////////////////////////////////////////////////////////
-#define CTSVC_DB_VIEW_PERSON                                   "view_person"
-#define CTSVC_DB_VIEW_CONTACT                                  "view_contact"
-#define CTSVC_DB_VIEW_MY_PROFILE                               "view_my_profile"
-
-#define CTSVC_DB_VIEW_NAME                                             "view_name"
-#define CTSVC_DB_VIEW_NUMBER                                   "view_number"
-#define CTSVC_DB_VIEW_EMAIL                                            "view_email"
-#define CTSVC_DB_VIEW_ADDRESS                                  "view_address"
-#define CTSVC_DB_VIEW_URL                                              "view_url"
-#define CTSVC_DB_VIEW_EVENT                                            "view_event"
-#define CTSVC_DB_VIEW_RELATIONSHIP                             "view_relationship"
-#define CTSVC_DB_VIEW_IMAGE                                            "view_image"
-#define CTSVC_DB_VIEW_COMPANY                                  "view_company"
-#define CTSVC_DB_VIEW_GROUP_RELATION                   "view_group_relation"
-#define CTSVC_DB_VIEW_NICKNAME                                 "view_nickname"
-#define CTSVC_DB_VIEW_MESSENGER                                        "view_messenger"
-#define CTSVC_DB_VIEW_NOTE                                             "view_note"
-#define CTSVC_DB_VIEW_PROFILE                                  "view_profile"
-#define CTSVC_DB_VIEW_EXTENSION                                        "view_extension"
-
-#define CTSVC_DB_VIEW_ACTIVITY                                 "view_activity"
-#define CTSVC_DB_VIEW_ACTIVITY_PHOTOS                  "view_activity_photos"
-#define CTSVC_DB_VIEW_SPEEDIDAL                                        "view_speeddial"
-
-//#define CTSVC_DB_VIEW_GROUPS_UPDATED_INFO            "view_group_changes"
-//#define CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO     "view_group_member_changes"
-//#define CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO          "view_contacts_changes"
-
-#define CTSVC_DB_VIEW_PERSON_CONTACT                   "view_person_contact"
-#define CTSVC_DB_VIEW_PERSON_NUMBER            "view_person_contact_number"
-#define CTSVC_DB_VIEW_PERSON_EMAIL             "view_person_contact_email"
-#define CTSVC_DB_VIEW_PERSON_GROUP                     "view_person_contact_group"
-#define CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED    "view_person_contact_group_assigned"
-#define CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED        "view_person_contact_group_not_assigned"
-
-#define CTSVC_DB_VIEW_PERSON_PHONELOG  "view_person_contact_phonelog"
-#define CTSVC_DB_VIEW_PERSON_USAGE                             "view_person_usage"
-
-#define CTSVC_DB_VIEW_CONTACT_NUMBER           "view_contact_number"
-#define CTSVC_DB_VIEW_CONTACT_EMAIL                    "view_contact_email"
-#define CTSVC_DB_VIEW_CONTACT_GROUP                    "view_contact_group"
-
-#define CTSVC_DB_VIEW_CONTACT_ACTIVITY                 "view_contact_activity"
-
-/////////////////////////////////////////////////////////////////////////////////
+/* DB views */
+#define CTSVC_DB_VIEW_PERSON "view_person"
+#define CTSVC_DB_VIEW_CONTACT "view_contact"
+#define CTSVC_DB_VIEW_MY_PROFILE "view_my_profile"
+
+#define CTSVC_DB_VIEW_NAME "view_name"
+#define CTSVC_DB_VIEW_NUMBER "view_number"
+#define CTSVC_DB_VIEW_EMAIL "view_email"
+#define CTSVC_DB_VIEW_ADDRESS "view_address"
+#define CTSVC_DB_VIEW_URL "view_url"
+#define CTSVC_DB_VIEW_EVENT "view_event"
+#define CTSVC_DB_VIEW_RELATIONSHIP "view_relationship"
+#define CTSVC_DB_VIEW_IMAGE "view_image"
+#define CTSVC_DB_VIEW_COMPANY "view_company"
+#define CTSVC_DB_VIEW_GROUP_RELATION "view_group_relation"
+#define CTSVC_DB_VIEW_NICKNAME "view_nickname"
+#define CTSVC_DB_VIEW_MESSENGER "view_messenger"
+#define CTSVC_DB_VIEW_NOTE "view_note"
+#define CTSVC_DB_VIEW_PROFILE "view_profile"
+#define CTSVC_DB_VIEW_EXTENSION "view_extension"
+
+#define CTSVC_DB_VIEW_ACTIVITY "view_activity"
+#define CTSVC_DB_VIEW_ACTIVITY_PHOTOS "view_activity_photos"
+#define CTSVC_DB_VIEW_SPEEDIDAL "view_speeddial"
+
+/* #define CTSVC_DB_VIEW_GROUPS_UPDATED_INFO "view_group_changes" */
+/* #define CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO "view_group_member_changes" */
+/* #define CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO "view_contacts_changes" */
+
+#define CTSVC_DB_VIEW_PERSON_CONTACT "view_person_contact"
+#define CTSVC_DB_VIEW_PERSON_NUMBER "view_person_contact_number"
+#define CTSVC_DB_VIEW_PERSON_EMAIL "view_person_contact_email"
+#define CTSVC_DB_VIEW_PERSON_GROUP "view_person_contact_group"
+#define CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED "view_person_contact_group_assigned"
+#define CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED "view_person_contact_group_not_assigned"
+
+#define CTSVC_DB_VIEW_PERSON_PHONELOG "view_person_contact_phonelog"
+#define CTSVC_DB_VIEW_PERSON_USAGE "view_person_usage"
+
+#define CTSVC_DB_VIEW_CONTACT_NUMBER "view_contact_number"
+#define CTSVC_DB_VIEW_CONTACT_EMAIL "view_contact_email"
+#define CTSVC_DB_VIEW_CONTACT_GROUP "view_contact_group"
+
+#define CTSVC_DB_VIEW_CONTACT_ACTIVITY "view_contact_activity"
+
 
 #define CTS_SCHEMA_DATA_NAME_LANG_INFO "data1"
 #define CTS_SCHEMA_DATA_NAME_LOOKUP "data7"
 #define CTS_SCHEMA_REVERSE_SORTKEY  "reverse_sortkey"
 
 
-#endif /* __TIZEN_SOCIAL_CTSVC_SCHEMA_H__ */
+#endif /* __CTSVC_DB_SCHEMA_H__ */
old mode 100755 (executable)
new mode 100644 (file)
similarity index 63%
rename from native/ctsvc_sqlite.c
rename to server/db/ctsvc_db_sqlite.c
index 0be7cd6..d9e2f4b
@@ -25,8 +25,9 @@
 
 #include "contacts.h"
 #include "ctsvc_internal.h"
-#include "ctsvc_schema.h"
-#include "ctsvc_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_zone.h"
 #include "ctsvc_notification.h"
 #include "ctsvc_number_utils.h"
 
 #include "ctsvc_db_plugin_group_helper.h"
 
 #ifdef ENABLE_LOG_FEATURE
-#include "ctsvc_phonelog.h"
-#endif // ENABLE_LOG_FEATURE
-#include "ctsvc_person.h"
+#include "ctsvc_server_phonelog.h"
+#endif /* ENABLE_LOG_FEATURE */
+#include "ctsvc_server_person.h"
 
 #define CTSVC_QUERY_RETRY_TIME 4
 #define CTSVC_QUERY_RETRY_INTERVAL     50*1000
 
-static __thread sqlite3 *ctsvc_db = NULL;
+static __thread GHashTable *ctsvc_db_table = NULL;
 
-int ctsvc_db_open(void) {
+int ctsvc_db_open(const char *zone_name)
+{
        CTS_FN_CALL;
        int ret;
 
-       if (!ctsvc_db) {
-               ret = db_util_open(CTSVC_DB_PATH, &ctsvc_db, 0);
+       sqlite3 *ctsvc_db = NULL;
+       if (NULL == ctsvc_db_table)
+               ctsvc_db_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+
+       if (NULL == ctsvc_db) {
+               char db_path[CTSVC_PATH_MAX_LEN] = {0};
+               int len = ctsvc_zone_get_root_path(zone_name, db_path, sizeof(db_path));
+               snprintf(db_path+len, sizeof(db_path)-len, "%s", CTSVC_DB_PATH);
+
+               ret = db_util_open(db_path, &ctsvc_db, 0);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/,
-                               "DB error : db_util_open() Failed(%d)", ret);
-               ret = sqlite3_create_function(ctsvc_db, "_DATA_DELETE_", 2, SQLITE_UTF8, NULL,
+                               "DB error : db_util_open() Fail(%d)", ret);
+
+               g_hash_table_replace(ctsvc_db_table, g_strdup(zone_name), ctsvc_db);
+
+               ret = sqlite3_create_function(ctsvc_db, "_DATA_DELETE_", 2, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_data_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(ctsvc_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(ctsvc_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_image_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(ctsvc_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(ctsvc_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_company_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
                ret = sqlite3_create_function(ctsvc_db, "_NORMALIZE_INDEX_", 2, SQLITE_UTF8, NULL,
                                        ctsvc_db_normalize_str_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
 #ifdef ENABLE_LOG_FEATURE
-               ret = sqlite3_create_function(ctsvc_db, "_PHONE_LOG_DELETE_", 1, SQLITE_UTF8, NULL,
+               ret = sqlite3_create_function(ctsvc_db, "_PHONE_LOG_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_phone_log_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-#endif // ENABLE_LOG_FEATURE
-               ret = sqlite3_create_function(ctsvc_db, "_PERSON_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+#endif /* ENABLE_LOG_FEATURE */
+               ret = sqlite3_create_function(ctsvc_db, "_PERSON_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_person_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
-               ret = sqlite3_create_function(ctsvc_db, "_GROUP_DELETE_", 1, SQLITE_UTF8, NULL,
+                                               "sqlite3_create_function() Fail(%d)", ret);
+               ret = sqlite3_create_function(ctsvc_db, "_GROUP_DELETE_", 1, SQLITE_UTF8, strdup(zone_name),
                                        ctsvc_db_group_delete_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
                ret = sqlite3_create_function(ctsvc_db, "_NUMBER_COMPARE_", 4, SQLITE_UTF8, NULL,
                                        ctsvc_db_phone_number_equal_callback, NULL, NULL);
                RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
-                                               "sqlite3_create_function() Failed(%d)", ret);
+                                               "sqlite3_create_function() Fail(%d)", ret);
        }
 
        return CONTACTS_ERROR_NONE /*CTS_SUCCESS*/;
 }
 
-int ctsvc_db_close(void) {
+int ctsvc_db_close(const char *zone_name)
+{
        int ret = 0;
 
+       RETV_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_NONE);
+       sqlite3 *ctsvc_db = NULL;
+       ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+
        if (ctsvc_db) {
+               g_hash_table_remove(ctsvc_db_table, zone_name);
                ret = db_util_close(ctsvc_db);
-               WARN_IF(SQLITE_OK != ret, "db_util_close() Failed(%d)", ret);
+               WARN_IF(SQLITE_OK != ret, "db_util_close() Fail(%d)", ret);
                ctsvc_db = NULL;
                CTS_DBG("The database disconnected really.");
        }
@@ -106,15 +127,28 @@ int ctsvc_db_close(void) {
        return CONTACTS_ERROR_NONE /*CTS_SUCCESS*/;
 }
 
-int ctsvc_db_change(void) {
+int ctsvc_db_change(const char *zone_name)
+{
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+       sqlite3 *ctsvc_db = NULL;
+       ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opended");
+
        return sqlite3_changes(ctsvc_db);
 }
 
-int ctsvc_db_get_last_insert_id(void) {
+int ctsvc_db_get_last_insert_id(const char *zone_name)
+{
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+       sqlite3 *ctsvc_db = NULL;
+       ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opended");
+
        return sqlite3_last_insert_rowid(ctsvc_db);
 }
 
-int ctsvc_db_get_next_id(const char *table) {
+int ctsvc_db_get_next_id(const char *zone_name, const char *table)
+{
        int id;
        int ret;
        char query[CTS_SQL_MAX_LEN] = { 0 };
@@ -122,7 +156,7 @@ int ctsvc_db_get_next_id(const char *table) {
        snprintf(query, sizeof(query), "SELECT seq FROM %s WHERE name = '%s'",
                        CTS_SCHEMA_SQLITE_SEQ, table);
 
-       ret = ctsvc_query_get_first_int_result(query, &id);
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &id);
        if (ret != CONTACTS_ERROR_NONE /*CTS_SUCCESS*/) {
                if (CONTACTS_ERROR_NO_DATA /*CONTACTS_ERR_DB_RECORD_NOT_FOUND*/ == ret)
                        return 1;
@@ -133,18 +167,23 @@ int ctsvc_db_get_next_id(const char *table) {
        }
 }
 
-int ctsvc_query_get_first_int_result(const char *query, int *result) {
+int ctsvc_query_get_first_int_result(const char *zone_name, const char *query, int *result)
+{
        int ret;
        struct timeval from, now, diff;
        bool retry = false;
        cts_stmt stmt = NULL;
+
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+
+       sqlite3 *ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
        RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opended");
 
        gettimeofday(&from, NULL);
        do {
                ret = sqlite3_prepare_v2(ctsvc_db, query, strlen(query), &stmt, NULL);
                if (ret != SQLITE_OK)
-                       CTS_ERR("DB error : sqlite3_prepare_v2() Failed(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
+                       CTS_ERR("DB error : sqlite3_prepare_v2() Fail(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
 
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
                        gettimeofday(&now, NULL);
@@ -154,10 +193,10 @@ int ctsvc_query_get_first_int_result(const char *query, int *result) {
                                usleep(CTSVC_QUERY_RETRY_INTERVAL);
                } else
                        retry = false;
-       }while(retry);
+       } while (retry);
 
        if (SQLITE_OK != ret) {
-               CTS_ERR("DB error : sqlite3_prepare_v2() Failed(%s)", sqlite3_errmsg(ctsvc_db));
+               CTS_ERR("DB error : sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(ctsvc_db));
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED)
                        return CONTACTS_ERROR_DB_LOCKED;
                else
@@ -169,7 +208,7 @@ int ctsvc_query_get_first_int_result(const char *query, int *result) {
        do {
                ret = sqlite3_step(stmt);
                if (ret != SQLITE_ROW && SQLITE_DONE != ret)
-                       CTS_ERR("DB error : sqlite3_step() Failed(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
+                       CTS_ERR("DB error : sqlite3_step() Fail(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
                                        sqlite3_extended_errcode(ctsvc_db));
 
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
@@ -181,7 +220,7 @@ int ctsvc_query_get_first_int_result(const char *query, int *result) {
                }
                else
                        retry = false;
-       }while(retry);
+       } while (retry);
 
        if (SQLITE_ROW != ret) {
                sqlite3_finalize(stmt);
@@ -190,7 +229,7 @@ int ctsvc_query_get_first_int_result(const char *query, int *result) {
                                ret, sqlite3_errmsg(ctsvc_db));
                        return CONTACTS_ERROR_NO_DATA /*CONTACTS_ERR_DB_RECORD_NOT_FOUND*/;
                }
-               CTS_ERR("sqlite3_step() Failed(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
+               CTS_ERR("sqlite3_step() Fail(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
                                sqlite3_extended_errcode(ctsvc_db));
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED)
                        return CONTACTS_ERROR_DB_LOCKED;
@@ -204,31 +243,37 @@ int ctsvc_query_get_first_int_result(const char *query, int *result) {
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_query_exec(const char *query) {
+int ctsvc_query_exec(const char *zone_name, const char *query)
+{
        int ret;
        cts_stmt stmt = NULL;
        char *err_msg = NULL;
 
-       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB, "DB error : Database is not opended");
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+       sqlite3 *ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opended");
 
-       ret = ctsvc_query_prepare((char*)query, &stmt);
-       RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare fail(%d)", ret);
+       ret = ctsvc_query_prepare(zone_name, (char*)query, &stmt);
+       RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare Fail(%d)", ret);
 
        ret = ctsvc_stmt_step(stmt);
        if (CONTACTS_ERROR_NONE != ret) {
-               CTS_ERR("ctsvc_stmt_step() Failed(%d, %s)", ret, err_msg);
+               CTS_ERR("ctsvc_stmt_step() Fail(%d, %s)", ret, err_msg);
        }
        ctsvc_stmt_finalize(stmt);
 
        return ret;
 }
 
-int ctsvc_query_prepare(char *query, cts_stmt *stmt) {
+int ctsvc_query_prepare(const char *zone_name, char *query, cts_stmt *stmt)
+{
        int ret = -1;
        struct timeval from, now, diff;
        bool retry = false;
        *stmt = NULL;
 
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+       sqlite3 *ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
        RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB, "DB error : Database is not opened");
 
        gettimeofday(&from, NULL);
@@ -236,7 +281,7 @@ int ctsvc_query_prepare(char *query, cts_stmt *stmt) {
                ret = sqlite3_prepare_v2(ctsvc_db, query, strlen(query), stmt, NULL);
 
                if (ret != SQLITE_OK)
-                       CTS_ERR("DB error : sqlite3_prepare_v2() Failed(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
+                       CTS_ERR("DB error : sqlite3_prepare_v2() Fail(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
 
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
                        gettimeofday(&now, NULL);
@@ -246,7 +291,7 @@ int ctsvc_query_prepare(char *query, cts_stmt *stmt) {
                                usleep(CTSVC_QUERY_RETRY_INTERVAL);
                } else
                        retry = false;
-       }while(retry);
+       } while (retry);
 
        if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED)
                return CONTACTS_ERROR_DB_LOCKED;
@@ -256,17 +301,21 @@ int ctsvc_query_prepare(char *query, cts_stmt *stmt) {
                return CONTACTS_ERROR_DB;
 }
 
-int ctsvc_stmt_get_first_int_result(cts_stmt stmt, int *result) {
+int ctsvc_stmt_get_first_int_result(const char *zone_name, cts_stmt stmt, int *result)
+{
        int ret;
        struct timeval from, now, diff;
        bool retry = false;
-       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opened");
+
+       RETVM_IF(NULL == ctsvc_db_table, CONTACTS_ERROR_DB, "ctsvc_db_table is NULL");
+       sqlite3 *ctsvc_db = g_hash_table_lookup(ctsvc_db_table, zone_name);
+       RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB, "DB error : Database is not opened");
 
        gettimeofday(&from, NULL);
        do {
                ret = sqlite3_step(stmt);
                if (SQLITE_ROW != ret && SQLITE_DONE != ret)
-                       CTS_ERR("sqlite3_step() Failed(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
+                       CTS_ERR("sqlite3_step() Fail(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
                                        sqlite3_extended_errcode(ctsvc_db));
 
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
@@ -278,10 +327,10 @@ int ctsvc_stmt_get_first_int_result(cts_stmt stmt, int *result) {
                }
                else
                        retry = false;
-       }while(retry);
+       } while (retry);
 
        if (SQLITE_ROW != ret) {
-               CTS_ERR("sqlite3_step() Failed(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
+               CTS_ERR("sqlite3_step() Fail(%d, %s, %d)", ret, sqlite3_errmsg(ctsvc_db),
                                        sqlite3_extended_errcode(ctsvc_db));
                sqlite3_finalize(stmt);
                if (SQLITE_DONE == ret)
@@ -298,7 +347,8 @@ int ctsvc_stmt_get_first_int_result(cts_stmt stmt, int *result) {
        return CONTACTS_ERROR_NONE;
 }
 
-int ctsvc_stmt_step(cts_stmt stmt) {
+int ctsvc_stmt_step(cts_stmt stmt)
+{
        int ret = CONTACTS_ERROR_NONE;
        struct timeval from, now, diff;
        bool retry = false;
@@ -308,8 +358,7 @@ int ctsvc_stmt_step(cts_stmt stmt) {
                ret = sqlite3_step(stmt);
 
                if (ret != SQLITE_ROW && ret != SQLITE_DONE)
-                       CTS_ERR("DB error : sqlite3_step() Failed(%d, %s, %d)", ret,
-                                       sqlite3_errmsg(ctsvc_db), sqlite3_extended_errcode(ctsvc_db));
+                       CTS_ERR("DB error : sqlite3_step() Fail(%d)", ret);
 
                if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
                        gettimeofday(&now, NULL);
@@ -320,7 +369,7 @@ int ctsvc_stmt_step(cts_stmt stmt) {
                }
                else
                        retry = false;
-       }while(retry);
+       } while (retry);
 
        switch (ret) {
        case SQLITE_BUSY:
@@ -347,26 +396,27 @@ int ctsvc_stmt_step(cts_stmt stmt) {
                ret = CONTACTS_ERROR_DB;
                break;
        default:
-               CTS_ERR("sqlite3_step() Failed(%d)", ret);
+               CTS_ERR("sqlite3_step() Fail(%d)", ret);
                ret = CONTACTS_ERROR_DB;
                break;
        }
        return ret;
 }
 
-void ctsvc_stmt_reset(cts_stmt stmt) {
+void ctsvc_stmt_reset(cts_stmt stmt)
+{
        sqlite3_reset(stmt);
        sqlite3_clear_bindings(stmt);
 }
 
-void ctsvc_stmt_finalize(cts_stmt stmt) {
+void ctsvc_stmt_finalize(cts_stmt stmt)
+{
        int ret;
 
        if (NULL == stmt)
                return;
 
        ret = sqlite3_finalize(stmt);
-       WARN_IF(ret != SQLITE_OK, "sqlite3_finalize Failed(%d, %s, %d)",
-                       ret, sqlite3_errmsg(ctsvc_db), sqlite3_extended_errcode(ctsvc_db));
+       WARN_IF(ret != SQLITE_OK, "sqlite3_finalize Fail(%d)", ret);
 }
 
old mode 100755 (executable)
new mode 100644 (file)
similarity index 70%
rename from native/ctsvc_sqlite.h
rename to server/db/ctsvc_db_sqlite.h
index 71381f4..5c69539
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_SQLITE_H__
-#define __TIZEN_SOCIAL_CTSVC_SQLITE_H__
+#ifndef __CTSVC_DB_SQLITE_H__
+#define __CTSVC_DB_SQLITE_H__
 
 #include <sqlite3.h>
 
-#define CTS_SQL_MAX_LEN   2048 //normal string length
-#define CTS_SQL_MIN_LEN  1024 //short sql string length
+#define CTS_SQL_MAX_LEN 2048 /* normal string length */
+#define CTS_SQL_MIN_LEN 1024 /* short sql string length */
 
 typedef sqlite3_stmt* cts_stmt;
 
-int ctsvc_db_open(void);
-int ctsvc_db_close(void);
-int ctsvc_db_change();
-int ctsvc_db_get_last_insert_id(void);
-int ctsvc_db_get_next_id(const char *table);
+int ctsvc_db_open(const char *zone_name);
+int ctsvc_db_close(const char *zone_name);
+int ctsvc_db_change(const char *zone_name);
+int ctsvc_db_get_last_insert_id(const char *zone_name);
+int ctsvc_db_get_next_id(const char *zone_name, const char *table);
 
-int ctsvc_query_get_first_int_result(const char *query, int *result);
-int ctsvc_query_exec(const char *query);
-int ctsvc_query_prepare(char *query, cts_stmt *stmt);
+int ctsvc_query_get_first_int_result(const char *zone_name, const char *query, int *result);
+int ctsvc_query_exec(const char *zone_name, const char *query);
+int ctsvc_query_prepare(const char *zone_name, char *query, cts_stmt *stmt);
 
 int ctsvc_stmt_step(cts_stmt stmt);
 void ctsvc_stmt_reset(cts_stmt stmt);
 void ctsvc_stmt_finalize(cts_stmt stmt);
 
-int ctsvc_stmt_get_first_int_result(cts_stmt stmt, int *result);
+int ctsvc_stmt_get_first_int_result(const char *zone_name, cts_stmt stmt, int *result);
 
 
 static inline double ctsvc_stmt_get_dbl(cts_stmt stmt, int pos) {
@@ -68,11 +68,11 @@ static inline int ctsvc_stmt_bind_text(cts_stmt stmt, int pos, const char *str)
        return sqlite3_bind_text(stmt, pos, str, strlen(str), SQLITE_STATIC);
 }
 static inline int ctsvc_stmt_bind_copy_text(cts_stmt stmt, int pos,
-               const char *str, int strlen){
+               const char *str, int strlen) {
        return sqlite3_bind_text(stmt, pos, str, strlen, SQLITE_TRANSIENT);
 }
 
 int ctsvc_stmt_bind_copy_text(cts_stmt stmt, int pos, const char *str, int strlen);
 
 
-#endif //__TIZEN_SOCIAL_CTSVC_SQLITE_H__
+#endif /* __CTSVC_DB_SQLITE_H__ */
\ No newline at end of file
diff --git a/server/db/ctsvc_db_utils.c b/server/db/ctsvc_db_utils.c
new file mode 100644 (file)
index 0000000..c593be1
--- /dev/null
@@ -0,0 +1,990 @@
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <sys/vfs.h>
+#include <image_util.h>
+#include <image_util_internal.h>
+#include <unicode/ulocdata.h>
+#include <unicode/uset.h>
+#include <unicode/ustring.h>
+#include <libexif/exif-data.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_db_utils.h"
+#include "ctsvc_mutex.h"
+#include "ctsvc_db_sqlite.h"
+#include "ctsvc_db_schema.h"
+#include "ctsvc_notification.h"
+#include "ctsvc_struct.h"
+#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
+#include "ctsvc_localize_utils.h"
+#include "ctsvc_server_setting.h"
+#include "ctsvc_zone.h"
+
+#ifdef _CONTACTS_IPC_SERVER
+#include "ctsvc_server_change_subject.h"
+#endif
+
+static __thread GHashTable *ctsvc_transaction_table = NULL;
+
+struct ctsvc_transaction_s {
+       int count;
+       int ver;
+       bool version_up;
+};
+
+struct image_transform{
+       int ret;
+       uint64_t size;
+       void *buffer;
+       GCond cond;
+       GMutex mutex;
+};
+
+#define CTS_SECURITY_IMAGE_PERMISSION 0440
+#define CTS_IMAGE_ENCODE_QUALITY 50
+#define CTS_IMAGE_MAX_SIZE 1080
+#define CTS_COMMIT_TRY_MAX 500000 /* For 3second */
+#define CTS_IMAGE_TRANSFORM_WAIT_TIME 1000 * G_TIME_SPAN_MILLISECOND /* 1 sec */
+
+int ctsvc_begin_trans(const char *zone_name)
+{
+       int ret = -1, progress;
+
+       struct ctsvc_transaction_s *transaction = NULL;
+
+       if (NULL == ctsvc_transaction_table)
+               ctsvc_transaction_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               transaction = g_hash_table_lookup(ctsvc_transaction_table, zone_name);
+
+       if (NULL == transaction) {
+               transaction = calloc(1, sizeof(struct ctsvc_transaction_s));
+               if (NULL == transaction) {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+               g_hash_table_replace(ctsvc_transaction_table, g_strdup(zone_name), transaction);
+       }
+
+       if (transaction->count <= 0) {
+               ret = ctsvc_query_exec(zone_name, "BEGIN IMMEDIATE TRANSACTION");
+               progress = 100000;
+               while (CONTACTS_ERROR_DB == ret && progress < CTS_COMMIT_TRY_MAX) {
+                       usleep(progress);
+                       ret = ctsvc_query_exec(zone_name, "BEGIN IMMEDIATE TRANSACTION");
+                       progress *= 2;
+               }
+               if (CONTACTS_ERROR_NONE != ret) {
+                       CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+                       return ret;
+               }
+
+               transaction->count = 0;
+
+               const char *query = "SELECT ver FROM "CTS_TABLE_VERSION;
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &(transaction->ver));
+               transaction->version_up = false;
+       }
+       transaction->count++;
+       INFO("transaction->count : %d.", transaction->count);
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_end_trans(const char *zone_name, bool is_success)
+{
+       int ret = -1, progress;
+       char query[CTS_SQL_MIN_LEN] = {0};
+       struct ctsvc_transaction_s *transaction = NULL;
+
+       if (NULL == ctsvc_transaction_table)
+               ctsvc_transaction_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               transaction = g_hash_table_lookup(ctsvc_transaction_table, zone_name);
+
+       if (NULL == transaction) {
+               transaction = calloc(1, sizeof(struct ctsvc_transaction_s));
+               if (NULL == transaction) {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+               g_hash_table_replace(ctsvc_transaction_table, g_strdup(zone_name), transaction);
+       }
+
+       transaction->count--;
+       INFO("%s, transaction->count : %d", is_success?"True": "False",  transaction->count);
+
+       if (0 != transaction->count) {
+               CTS_DBG("contact transaction->count : %d.", transaction->count);
+               return CONTACTS_ERROR_NONE;
+       }
+
+       if (false == is_success) {
+               ctsvc_nofitication_cancel(zone_name);
+               ctsvc_change_subject_clear_changed_info(zone_name);
+               ret = ctsvc_query_exec(zone_name, "ROLLBACK TRANSACTION");
+               return CONTACTS_ERROR_NONE;
+       }
+
+       if (transaction->version_up) {
+               transaction->ver++;
+               snprintf(query, sizeof(query), "UPDATE %s SET ver = %d",
+                               CTS_TABLE_VERSION, transaction->ver);
+               ret = ctsvc_query_exec(zone_name, query);
+               WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec(version up) Fail(%d)", ret);
+       }
+
+       INFO("start commit");
+       progress = 100000;
+       ret = ctsvc_query_exec(zone_name, "COMMIT TRANSACTION");
+       while (CONTACTS_ERROR_DB == ret && progress<CTS_COMMIT_TRY_MAX) {
+               usleep(progress);
+               ret = ctsvc_query_exec(zone_name, "COMMIT TRANSACTION");
+               progress *= 2;
+       }
+       INFO("%s", (CONTACTS_ERROR_NONE == ret)?"commit": "rollback");
+
+       if (CONTACTS_ERROR_NONE != ret) {
+               int tmp_ret;
+               CTS_ERR("ctsvc_query_exec() Fail(%d)", ret);
+               ctsvc_nofitication_cancel(zone_name);
+               ctsvc_change_subject_clear_changed_info(zone_name);
+               tmp_ret = ctsvc_query_exec(zone_name, "ROLLBACK TRANSACTION");
+               WARN_IF(CONTACTS_ERROR_NONE != tmp_ret, "ctsvc_query_exec(ROLLBACK) Fail(%d)", tmp_ret);
+               return ret;
+       }
+
+       ctsvc_notification_send(zone_name);
+       ctsvc_change_subject_publish_changed_info(zone_name);
+
+       CTS_DBG("Transaction shut down! : (%d)\n", transaction->ver);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+const char* ctsvc_get_display_column(const char *zone_name)
+{
+       contacts_name_display_order_e order;
+
+       ctsvc_setting_get_name_display_order(zone_name, &order);
+       if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == order)
+               return "display_name";
+       else
+               return "reverse_display_name";
+}
+
+const char* ctsvc_get_sort_name_column(const char *zone_name)
+{
+       contacts_name_sorting_order_e order;
+
+       ctsvc_setting_get_name_sorting_order(zone_name, &order);
+       if (CONTACTS_NAME_SORTING_ORDER_FIRSTLAST == order)
+               return "sort_name, display_name_language";
+       else
+               return "reverse_sort_name, reverse_display_name_language";
+}
+
+const char* ctsvc_get_sort_column(const char *zone_name)
+{
+       contacts_name_sorting_order_e order;
+
+       ctsvc_setting_get_name_sorting_order(zone_name, &order);
+       if (CONTACTS_NAME_SORTING_ORDER_FIRSTLAST == order)
+               return "display_name_language, sortkey";
+       else
+               return "reverse_display_name_language, reverse_sortkey";
+}
+
+void ctsvc_utils_make_image_file_name(int parent_id, int id, char *src_img, char *dest, int dest_size)
+{
+       char *ext;
+       char *temp;
+       char *lower_ext;
+
+       ext = strrchr(src_img, '.');
+       if (NULL == ext || strchr(ext, '/'))
+               ext = "";
+
+       lower_ext = strdup(ext);
+       if (NULL == lower_ext) {
+               CTS_ERR("strdup() Fail");
+               return;
+       }
+       temp = lower_ext;
+       while (*temp) {
+               *temp = tolower(*temp);
+               temp++;
+       }
+
+       if (0 < parent_id)
+               snprintf(dest, dest_size, "%d_%d%s", parent_id, id, lower_ext);
+       else
+               snprintf(dest, dest_size, "%d%s", id, ext);
+       free(lower_ext);
+}
+
+static inline bool ctsvc_check_available_image_space(void) {
+       int ret;
+       struct statfs buf;
+       long long size;
+       ret = statfs(CTSVC_IMG_FULL_LOCATION, &buf);
+
+       RETVM_IF(ret!=0, false, "statfs Fail(%d)", ret);
+
+       size = (long long)buf.f_bavail * (buf.f_bsize);
+
+       if (1024*1024 < size)  /* if available space to copy a image is larger than 1M */
+               return true;
+       return false;
+}
+
+static image_util_rotation_e _ctsvc_image_get_rotation_info(const char *path)
+{
+       ExifData *ed = NULL;
+       ExifEntry *entry;
+       image_util_rotation_e rotation = IMAGE_UTIL_ROTATION_NONE;
+       int orientation = 0;
+
+       ed = exif_data_new_from_file(path);
+       if (ed == NULL) {
+               CTS_ERR("exif_data_new_from_file : ExifData is NULL");
+               return IMAGE_UTIL_ROTATION_NONE;
+       }
+
+       entry = exif_data_get_entry(ed, EXIF_TAG_ORIENTATION);
+       if (entry) {
+               ExifByteOrder mByteOrder = exif_data_get_byte_order(ed);
+               orientation = (int)exif_get_short(entry->data, mByteOrder);
+               if (orientation < 0 || 8 < orientation)
+                       orientation = 0;
+       }
+
+       if (ed)
+               exif_data_unref(ed);
+
+       switch(orientation) {
+       case 1: /* Top-left */
+               rotation = IMAGE_UTIL_ROTATION_NONE;
+               break;
+       case 2: /* Top-right */
+               rotation = IMAGE_UTIL_ROTATION_FLIP_HORZ;
+               break;
+       case 3: /* Bottom-right */
+               rotation = IMAGE_UTIL_ROTATION_180;
+               break;
+       case 4: /* Bottom-left */
+               rotation = IMAGE_UTIL_ROTATION_FLIP_VERT;
+               break;
+       case 6: /* Right-top */
+               rotation = IMAGE_UTIL_ROTATION_90;
+               break;
+       case 8: /* Left-bottom */
+               rotation = IMAGE_UTIL_ROTATION_270;
+               break;
+       case 5: /* Left-top */
+       case 7: /* Right-bottom */
+       case 0:
+       default:
+               break;
+       };
+
+       return rotation;
+}
+
+
+typedef struct {
+       const char *src;
+       const char *dest;
+       int ret;
+}image_info;
+
+static int _ctsvc_image_get_mimetype(image_util_colorspace_e colorspace,
+               int *p_mimetype)
+{
+       media_format_mimetype_e mimetype;
+       switch (colorspace) {
+       case IMAGE_UTIL_COLORSPACE_YUV422:
+               mimetype = MEDIA_FORMAT_422P;
+               break;
+       case IMAGE_UTIL_COLORSPACE_NV12:
+               mimetype = MEDIA_FORMAT_NV12;
+               break;
+       case IMAGE_UTIL_COLORSPACE_UYVY:
+               mimetype = MEDIA_FORMAT_UYVY;
+               break;
+       case IMAGE_UTIL_COLORSPACE_YUYV:
+               mimetype = MEDIA_FORMAT_YUYV;
+               break;
+       case IMAGE_UTIL_COLORSPACE_RGB565:
+               mimetype = MEDIA_FORMAT_RGB565;
+               break;
+       case IMAGE_UTIL_COLORSPACE_RGB888:
+               mimetype = MEDIA_FORMAT_RGB888;
+               break;
+       case IMAGE_UTIL_COLORSPACE_ARGB8888:
+               mimetype = MEDIA_FORMAT_ARGB;
+               break;
+       case IMAGE_UTIL_COLORSPACE_RGBA8888:
+               mimetype = MEDIA_FORMAT_RGBA;
+               break;
+       case IMAGE_UTIL_COLORSPACE_NV21:
+               mimetype = MEDIA_FORMAT_NV21;
+               break;
+       case IMAGE_UTIL_COLORSPACE_NV16:
+               mimetype = MEDIA_FORMAT_NV16;
+               break;
+       case IMAGE_UTIL_COLORSPACE_BGRA8888: /* not supported */
+       case IMAGE_UTIL_COLORSPACE_BGRX8888: /* not supported */
+       case IMAGE_UTIL_COLORSPACE_NV61: /* not supported */
+       case IMAGE_UTIL_COLORSPACE_YV12: /* not supported */
+       case IMAGE_UTIL_COLORSPACE_I420: /* not supported */
+       default:
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+       }
+       *p_mimetype = mimetype;
+       return CONTACTS_ERROR_NONE;
+}
+
+static media_format_h _ctsvc_image_create_media_format(int mimetype, int width,
+               int height)
+{
+       int ret;
+       media_format_h fmt = NULL;
+
+       ret = media_format_create(&fmt);
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_create() Fail(%d)", ret);
+               return NULL;
+       }
+
+       ret = media_format_set_video_mime(fmt, mimetype);
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_set_video_mime() Fail(%d)", ret);
+               media_format_unref(fmt);
+               return NULL;
+       }
+
+       ret = media_format_set_video_width(fmt, width);
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_set_video_width() Fail(%d)", ret);
+               media_format_unref(fmt);
+               return NULL;
+       }
+
+       ret = media_format_set_video_height(fmt, height);
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_set_video_height() Fail(%d)", ret);
+               media_format_unref(fmt);
+               return NULL;
+       }
+
+       ret = media_format_set_video_avg_bps(fmt, 2000000); /* image_util guide */
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_set_video_avg_bps() Fail(%d)", ret);
+               media_format_unref(fmt);
+               return NULL;
+       }
+
+       ret = media_format_set_video_max_bps(fmt, 15000000); /* image_util guide */
+       if (MEDIA_FORMAT_ERROR_NONE != ret) {
+               CTS_ERR("media_format_set_video_max_bps() Fail(%d)", ret);
+               media_format_unref(fmt);
+               return NULL;
+       }
+
+       return fmt;
+}
+
+static int _ctsvc_image_packet_create_alloc_finalize_cb(media_packet_h packet,
+               int error_code, void *user_data)
+{
+       return MEDIA_PACKET_FINALIZE;
+}
+
+static media_packet_h _ctsvc_image_create_media_packet(media_format_h fmt,
+               void *buffer, unsigned int buffer_size)
+{
+       int ret;
+       void *mp_buffer = NULL;
+       media_packet_h packet = NULL;
+       uint64_t mp_buffer_size = 0;
+
+       RETV_IF(NULL == fmt, NULL);
+       RETV_IF(NULL == buffer, NULL);
+
+       ret = media_packet_create_alloc(fmt, _ctsvc_image_packet_create_alloc_finalize_cb,
+                       NULL, &packet);
+       if (MEDIA_PACKET_ERROR_NONE != ret) {
+               CTS_ERR("media_packet_create_alloc() Fail(%d)", ret);
+               return NULL;
+       }
+
+       ret = media_packet_get_buffer_size(packet, &mp_buffer_size);
+       if (MEDIA_PACKET_ERROR_NONE != ret) {
+               CTS_ERR("media_packet_get_buffer_size() Fail(%d)", ret);
+               media_packet_destroy(packet);
+               return NULL;
+       }
+
+       ret = media_packet_get_buffer_data_ptr(packet, &mp_buffer);
+       if (MEDIA_PACKET_ERROR_NONE != ret) {
+               CTS_ERR("media_packet_get_buffer_data_ptr() Fail(%d)", ret);
+               media_packet_destroy(packet);
+               return NULL;
+       }
+
+       if (mp_buffer)
+               memcpy(mp_buffer, buffer, (int)buffer_size);
+
+       return packet;
+}
+
+static void _ctsvc_image_transform_completed_cb(media_packet_h *dst,
+               image_util_error_e error, void *user_data)
+{
+       int ret;
+       uint64_t size = 0;
+       void *buffer = 0;
+       struct image_transform *info = user_data;
+
+       if (NULL == info) {
+               media_packet_destroy(*dst);
+               return;
+       }
+
+       if (IMAGE_UTIL_ERROR_NONE == error) {
+               ret = media_packet_get_buffer_size(*dst, &size);
+               if (MEDIA_PACKET_ERROR_NONE != ret) {
+                       CTS_ERR("media_packet_get_buffer_size() Fail(%d)", ret);
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       media_packet_destroy(*dst);
+                       g_mutex_lock(&info->mutex);
+                       g_cond_signal(&info->cond);
+                       g_mutex_unlock(&info->mutex);
+                       return;
+               }
+
+               ret = media_packet_get_buffer_data_ptr(*dst, &buffer);
+               if (MEDIA_PACKET_ERROR_NONE != ret) {
+                       CTS_ERR("media_packet_get_buffer_data_ptr() Fail(%d)", ret);
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       media_packet_destroy(*dst);
+                       g_mutex_lock(&info->mutex);
+                       g_cond_signal(&info->cond);
+                       g_mutex_unlock(&info->mutex);
+                       return;
+               }
+
+               info->buffer = calloc(1, (int)size);
+               if (NULL == info->buffer) {
+                       CTS_ERR("calloc() Fail");
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       media_packet_destroy(*dst);
+                       g_mutex_lock(&info->mutex);
+                       g_cond_signal(&info->cond);
+                       g_mutex_unlock(&info->mutex);
+                       return;
+               }
+               memcpy(info->buffer, buffer, (int)size);
+               info->size = size;
+               info->ret = CONTACTS_ERROR_NONE;
+       }
+       else {
+               CTS_ERR("transform_run() Fail(%d)", error);
+               info->ret = CONTACTS_ERROR_SYSTEM;
+       }
+       media_packet_destroy(*dst);
+       g_mutex_lock(&info->mutex);
+       g_cond_signal(&info->cond);
+       g_mutex_unlock(&info->mutex);
+}
+
+static int _ctsvc_image_util_transform_run(transformation_h transform,
+               media_packet_h packet, void **p_buffer, uint64_t *p_size)
+{
+       gint64 end_time;
+       struct image_transform *info = NULL;
+
+       RETV_IF(NULL == transform, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(NULL == packet, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       info = calloc(1, sizeof(struct image_transform));
+       if (NULL == info) {
+               CTS_ERR("calloc() Fail");
+               return CONTACTS_ERROR_OUT_OF_MEMORY;
+       }
+
+       g_cond_init(&info->cond);
+       g_mutex_init(&info->mutex);
+
+       g_mutex_lock(&info->mutex);
+       image_util_transform_run(transform, packet, _ctsvc_image_transform_completed_cb, info);
+
+       end_time = g_get_monotonic_time() + CTS_IMAGE_TRANSFORM_WAIT_TIME;
+       if (!g_cond_wait_until(&info->cond, &info->mutex, end_time)) {
+               /* timeout has passed */
+               CTS_ERR("g_cond_wait_until() return FALSE");
+               info->ret = CONTACTS_ERROR_SYSTEM;
+       }
+       g_mutex_unlock(&info->mutex);
+       g_mutex_clear(&info->mutex);
+       g_cond_clear(&info->cond);
+
+       if (CONTACTS_ERROR_NONE != info->ret) {
+               CTS_ERR("image_util_transform_run() Fail(%d)", info->ret);
+               free(info->buffer);
+               free(info);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       *p_size = info->size;
+       *p_buffer = info->buffer;
+       free(info);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static int _ctsvc_image_rotate(media_packet_h packet, image_util_rotation_e rotation,
+               void **p_buffer, uint64_t *p_size)
+{
+       int ret;
+       transformation_h transform = NULL;
+
+       ret = image_util_transform_create(&transform);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               CTS_ERR("image_util_transform_create() Fail(%d)", ret);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       ret = image_util_transform_set_rotation(transform, rotation);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               CTS_ERR("image_util_transform_set_rotation() Fail(%d)", ret);
+               image_util_transform_destroy(transform);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       ret = _ctsvc_image_util_transform_run(transform, packet, p_buffer, p_size);
+
+       image_util_transform_destroy(transform);
+       return ret;
+}
+
+static int _ctsvc_image_resize(media_packet_h packet, int width, int height,
+               void **p_buffer, uint64_t *p_size)
+{
+       int ret;
+       transformation_h transform = NULL;
+
+       ret = image_util_transform_create(&transform);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               CTS_ERR("image_util_transform_create() Fail(%d)", ret);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       ret = image_util_transform_set_resolution(transform, width, height);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               CTS_ERR("image_util_transform_set_resolution() Fail(%d)", ret);
+               image_util_transform_destroy(transform);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       ret = _ctsvc_image_util_transform_run(transform, packet, p_buffer, p_size);
+
+       image_util_transform_destroy(transform);
+
+       return ret;
+}
+
+static bool _ctsvc_image_util_supported_jpeg_colorspace_cb(
+               image_util_colorspace_e colorspace, void *user_data)
+{
+       int width = 0;
+       int height = 0;
+       int dest_fd = 0;
+       int mimetype = 0;
+       uint64_t size = 0;
+       void *buffer = NULL;
+       void *buffer_temp = NULL;
+       int ret;
+       image_util_rotation_e rotation;
+       image_info *info = user_data;
+
+       ret = _ctsvc_image_get_mimetype(colorspace, &mimetype);
+       if (CONTACTS_ERROR_NONE != ret) {
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               return true;
+       }
+
+       ret = image_util_decode_jpeg(info->src, colorspace, (unsigned char **)&buffer, &width,
+                       &height, (unsigned int *)&size);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               return true;
+       }
+
+       rotation = _ctsvc_image_get_rotation_info(info->src);
+       if (IMAGE_UTIL_ROTATION_NONE != rotation) { /* need rotate */
+               media_format_h fmt;
+               media_packet_h packet;
+
+               fmt = _ctsvc_image_create_media_format(mimetype, width, height);
+               if (NULL == fmt) {
+                       CTS_ERR("_ctsvc_image_create_media_format() Fail");
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       free(buffer);
+                       return false;
+               }
+
+               packet = _ctsvc_image_create_media_packet(fmt, buffer, (unsigned int)size);
+               if (NULL == packet) {
+                       CTS_ERR("_ctsvc_image_create_media_packet() Fail");
+                       media_format_unref(fmt);
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       free(buffer);
+                       return false;
+               }
+
+               ret = _ctsvc_image_rotate(packet, rotation, &buffer_temp, &size);
+
+               media_packet_destroy(packet);
+               media_format_unref(fmt);
+
+               if (CONTACTS_ERROR_NONE != ret) {
+                       free(buffer);
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       return false;
+               }
+
+               if (rotation == IMAGE_UTIL_ROTATION_90 || rotation == IMAGE_UTIL_ROTATION_270) {
+                       int temp = width;
+                       width = height;
+                       height = temp;
+               }
+               free(buffer);
+               buffer = buffer_temp;
+       }
+
+       if (CTS_IMAGE_MAX_SIZE < width || CTS_IMAGE_MAX_SIZE < height) { /* need resize */
+               int resized_width;
+               int resized_height;
+               media_format_h fmt;
+               media_packet_h packet;
+
+               /* set resize */
+               if (width>height) {
+                       resized_width = CTS_IMAGE_MAX_SIZE;
+                       resized_height = height * CTS_IMAGE_MAX_SIZE / width;
+               }
+               else {
+                       resized_height = CTS_IMAGE_MAX_SIZE;
+                       resized_width = width * CTS_IMAGE_MAX_SIZE / height;
+               }
+
+               if (resized_height % 8)
+                       resized_height += (8 - (resized_height % 8));
+
+               if (resized_width % 8)
+                       resized_width += (8 - (resized_width % 8));
+
+               fmt = _ctsvc_image_create_media_format(mimetype, width, height);
+               if (NULL == fmt) {
+                       CTS_ERR("_ctsvc_image_create_media_format() Fail");
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       free(buffer);
+                       return false;
+               }
+
+               packet = _ctsvc_image_create_media_packet(fmt, buffer, (unsigned int)size);
+               if (NULL == packet) {
+                       CTS_ERR("_ctsvc_image_create_media_packet() Fail");
+                       media_format_unref(fmt);
+                       info->ret = CONTACTS_ERROR_SYSTEM;
+                       free(buffer);
+                       return false;
+               }
+
+               ret = _ctsvc_image_resize(packet, resized_width, resized_height, &buffer_temp,
+                               &size);
+
+               media_packet_destroy(packet);
+               media_format_unref(fmt);
+
+               if (CONTACTS_ERROR_NONE != ret) {
+                       free(buffer);
+                       info->ret = -1;
+                       return false;
+               }
+               free(buffer);
+               buffer = buffer_temp;
+
+               width = resized_width;
+               height = resized_height;
+       }
+
+       ret = image_util_encode_jpeg(buffer, width, height, colorspace,
+                       CTS_IMAGE_ENCODE_QUALITY, info->dest);
+       free(buffer);
+       if (IMAGE_UTIL_ERROR_NONE != ret) {
+               CTS_ERR("image_util_encode_jpeg Fail(%d)", ret);
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               return false;
+       }
+
+       dest_fd = open(info->dest, O_RDONLY);
+       if (dest_fd < 0) {
+               CTS_ERR("System : Open Fail(%d)", errno);
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               return false;
+       }
+
+       ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
+       if (0 != ret) {
+               CTS_ERR("fchown Fail(%d)", errno);
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               close(dest_fd);
+               return false;
+       }
+
+       ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
+       if (0 != ret) {
+               CTS_ERR("fchmod Fail(%d)", errno);
+               info->ret = CONTACTS_ERROR_SYSTEM;
+               close(dest_fd);
+               return false;
+       }
+       close(dest_fd);
+
+       info->ret = CONTACTS_ERROR_NONE;
+       return false;
+}
+
+static int _ctsvc_image_encode(const char *src, const char *dest)
+{
+       int ret;
+       image_info info = {.src = src, .dest = dest, ret = CONTACTS_ERROR_SYSTEM};
+
+       ret = image_util_foreach_supported_jpeg_colorspace(
+                       _ctsvc_image_util_supported_jpeg_colorspace_cb, &info);
+
+       if (IMAGE_UTIL_ERROR_NONE != ret)
+               return CONTACTS_ERROR_SYSTEM;
+
+       return info.ret;
+}
+
+#define CTSVC_COPY_SIZE_MAX 4096
+int ctsvc_utils_copy_image(const char *zone_name, const char *dir_path, const char *src_path, const char *file_name)
+{
+       int ret;
+       int size;
+       int src_fd, dest_fd;
+       char buf[CTSVC_COPY_SIZE_MAX] = {0};
+
+       if (NULL == file_name || *file_name == '\0')
+               return CONTACTS_ERROR_INVALID_PARAMETER;
+
+       char dir_full_path[CTSVC_PATH_MAX_LEN] = {0};
+       int len = ctsvc_zone_get_root_path(zone_name, dir_full_path, sizeof(dir_full_path));
+       snprintf(dir_full_path+len, sizeof(dir_full_path)-len, "/%s", dir_path);
+
+       char src_full_path[CTSVC_PATH_MAX_LEN] = {0};
+       len = ctsvc_zone_get_root_path(zone_name, src_full_path, sizeof(src_full_path));
+       snprintf(src_full_path+len, sizeof(src_full_path)-len, "/%s", src_path);
+
+       char dest[strlen(dir_full_path) + strlen(file_name) + 2];
+       snprintf(dest, sizeof(dest), "%s/%s", dir_full_path, file_name);
+
+       if (false == ctsvc_check_available_image_space())
+               return CONTACTS_ERROR_FILE_NO_SPACE;
+
+       ret = _ctsvc_image_encode(src_full_path, dest);
+       if (CONTACTS_ERROR_NONE == ret) {
+               return ret;
+       }
+       else
+               CTS_ERR("_ctsvc_image_encode Fail(%d)", ret);
+
+       src_fd = open(src_full_path, O_RDONLY);
+       RETVM_IF(src_fd < 0, CONTACTS_ERROR_SYSTEM, "System : Open(src_path:%s) Fail(%d)", src_full_path, errno);
+       dest_fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0660);
+       if (dest_fd < 0) {
+               CTS_ERR("Open Fail(%d)", errno);
+               close(src_fd);
+               return CONTACTS_ERROR_SYSTEM;
+       }
+
+       while (0 < (size = read(src_fd, buf, CTSVC_COPY_SIZE_MAX))) {
+               ret = write(dest_fd, buf, size);
+               if (ret <= 0) {
+                       if (EINTR == errno)
+                               continue;
+                       else {
+                               CTS_ERR("write() Fail(%d)", errno);
+                               if (ENOSPC == errno)
+                                       ret = CONTACTS_ERROR_FILE_NO_SPACE; /* No space */
+                               else
+                                       ret = CONTACTS_ERROR_SYSTEM; /* IO error */
+                               close(src_fd);
+                               close(dest_fd);
+                               unlink(dest);
+                               return ret;
+                       }
+               }
+       }
+
+       ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
+       if (0 != ret) {
+               CTS_ERR("fchown() Fail(%d)", ret);
+       }
+       ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
+       if (0 != ret) {
+               CTS_ERR("fchmod() Fail(%d)", ret);
+       }
+       close(src_fd);
+       close(dest_fd);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_get_next_ver(const char *zone_name)
+{
+       const char *query;
+       int version;
+       int ret;
+
+       struct ctsvc_transaction_s *transaction = NULL;
+
+       if (NULL == ctsvc_transaction_table)
+               ctsvc_transaction_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               transaction = g_hash_table_lookup(ctsvc_transaction_table, zone_name);
+
+       if (NULL == transaction) {
+               transaction = calloc(1, sizeof(struct ctsvc_transaction_s));
+               if (NULL == transaction) {
+                       CTS_ERR("calloc() Fail");
+                       return -1;
+               }
+               g_hash_table_replace(ctsvc_transaction_table, g_strdup(zone_name), transaction);
+       }
+
+       if (0 < transaction->count) {
+               transaction->version_up = true;
+               return transaction->ver + 1;
+       }
+
+       query = "SELECT ver FROM "CTS_TABLE_VERSION;
+       ret = ctsvc_query_get_first_int_result(zone_name, query, &version);
+
+       /* In this case, contacts-service already works abnormally. */
+       if (CONTACTS_ERROR_NONE != ret)
+               CTS_ERR("ctsvc_query_get_first_int_result : get version error(%d)", ret);
+
+       return (1 + version);
+}
+
+int ctsvc_get_current_version(const char *zone_name, int* out_current_version)
+{
+       struct ctsvc_transaction_s *transaction = NULL;
+
+       if (NULL == ctsvc_transaction_table)
+               ctsvc_transaction_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               transaction = g_hash_table_lookup(ctsvc_transaction_table, zone_name);
+
+       if (NULL == transaction) {
+               transaction = calloc(1, sizeof(struct ctsvc_transaction_s));
+               if (NULL == transaction) {
+                       CTS_ERR("calloc() Fail");
+                       return CONTACTS_ERROR_OUT_OF_MEMORY;
+               }
+               g_hash_table_replace(ctsvc_transaction_table, g_strdup(zone_name), transaction);
+       }
+
+       if (transaction->count <= 0) {
+               int ret;
+               int version = 0;
+               const char *query = "SELECT ver FROM "CTS_TABLE_VERSION;
+               ret = ctsvc_query_get_first_int_result(zone_name, query, &version);
+               RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_get_first_int_result() Fail(%d)", ret);
+               *out_current_version = version;
+       }
+       else
+               *out_current_version = transaction->ver;
+       return CONTACTS_ERROR_NONE;
+}
+
+int ctsvc_get_transaction_ver(const char *zone_name)
+{
+       struct ctsvc_transaction_s *transaction = NULL;
+
+       if (NULL == ctsvc_transaction_table)
+               ctsvc_transaction_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
+       else
+               transaction = g_hash_table_lookup(ctsvc_transaction_table, zone_name);
+
+       if (NULL == transaction) {
+               transaction = calloc(1, sizeof(struct ctsvc_transaction_s));
+               if (NULL == transaction) {
+                       CTS_ERR("calloc() Fail");
+                       return -1;
+               }
+               g_hash_table_replace(ctsvc_transaction_table, g_strdup(zone_name), transaction);
+       }
+
+       return transaction->ver;
+}
+
+int SAFE_SNPRINTF(char **buf, int *buf_size, int len, const char *src)
+{
+       int remain;
+       int temp_len;
+
+       if (len < 0)
+               return -1;
+
+       remain = *buf_size - len;
+       if (strlen(src) + 1 < remain) {
+               temp_len = snprintf((*buf)+len, remain, "%s", src);
+               return temp_len;
+       }
+       else {
+               char *temp;
+               while (1) {
+                       temp = realloc(*buf, *buf_size*2);
+                       if (NULL == temp)
+                               return -1;
+                       *buf = temp;
+                       *buf_size = *buf_size * 2;
+                       remain = *buf_size - len;
+                       if (strlen(src) + 1 < remain)
+                               break;
+               }
+               temp_len = snprintf((*buf)+len, remain, "%s", src);
+               return temp_len;
+       }
+}
+
similarity index 56%
rename from native/ctsvc_utils.h
rename to server/db/ctsvc_db_utils.h
index bc6de7e..1103b03 100644 (file)
  *
  */
 
-#ifndef __TIZEN_SOCIAL_CTSVC_UTILS_H__
-#define __TIZEN_SOCIAL_CTSVC_UTILS_H__
+#ifndef __CTSVC_DB_UTILS_H__
+#define __CTSVC_DB_UTILS_H__
 
-const char* ctsvc_get_display_column(void);
-const char* ctsvc_get_sort_column(void);
-const char* ctsvc_get_sort_name_column(void);
+const char* ctsvc_get_display_column(const char *zone_name);
+const char* ctsvc_get_sort_column(const char *zone_name);
+const char* ctsvc_get_sort_name_column(const char *zone_name);
 
-int ctsvc_begin_trans(void);
-int ctsvc_end_trans(bool is_success);
-int ctsvc_get_next_ver(void);
-int ctsvc_get_current_version( int* out_current_version );
-int ctsvc_get_transaction_ver(void);
+int ctsvc_begin_trans(const char *zone_name);
+int ctsvc_end_trans(const char *zone_name, bool is_success);
+int ctsvc_get_next_ver(const char *zone_name);
+int ctsvc_get_current_version(const char *zone_name, int* out_current_version);
+int ctsvc_get_transaction_ver(const char *zone_name);
 
-int ctsvc_utils_copy_image(const char *dir, const char *src, const char *file);
+int ctsvc_utils_copy_image(const char *zone_name, const char *dir, const char *src, const char *file);
 void ctsvc_utils_make_image_file_name(int parent_id, int id, char *src_img, char *dest, int dest_size);
 
 int SAFE_SNPRINTF(char **buf, int *buf_size, int len, const char *src);
 
-#endif /* __TIZEN_SOCIAL_CTSVC_UTILS_H__ */
+#endif /* __CTSVC_DB_UTILS_H__ */