if (!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;
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;
}
if (!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;
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 Fail (%d)", ret);
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)
break;
else
same_noti = NULL;
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)) {
it = it->next;
result = g_slist_remove(result, noti);
free(noti->view_uri);
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);
}
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);
}
#define CTSVC_PATH_MAX_LEN 1024
#define CTSVC_IMG_FULL_PATH_SIZE_MAX 1024 // current max length file path is 256
+#define STRING_EQUAL 0
#define SAFE_STR(src) (src)?src:""
#define SAFE_STRDUP(src) (src)?strdup(src):NULL
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;
info->write_list[write_index++] = id;
else if (NULL == info->ipc) // contacts-service daemon
info->write_list[write_index++] = id;
- else if (info->smack && temp && 0 == strcmp(temp, info->smack)) // owner
+ else if (info->smack && temp && STRING_EQUAL == strcmp(temp, info->smack)) // owner
info->write_list[write_index++] = id;
else if (CONTACTS_ADDRESS_BOOK_MODE_NONE == mode)
info->write_list[write_index++] = id;
saved_smack = ctsvc_stmt_get_text(stmt, 1);
smack = ctsvc_get_client_smack_label();
- if (smack && strcmp(smack, saved_smack) == 0)
+ if (smack && STRING_EQUAL == strcmp(smack, saved_smack))
ret = CONTACTS_ERROR_NONE;
ctsvc_stmt_finalize(stmt);
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) {
+ 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;
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);
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))) {
+ (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))
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))) {
+ (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))
WARN_IF(CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != 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;
}
char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
snprintf(full_path, sizeof(full_path), "%s/%s", 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;
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))) {
+ (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))
*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) {
+ 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,
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
{
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
temp_len = SAFE_SNPRINTF(&query, &query_size, len, sortkey);
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 (0 <= temp_len) len+= temp_len;
}
if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count)) {
sortkey = ctsvc_get_sort_column();
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) {
{
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;
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;
}
range &= ~CONTACTS_SEARCH_RANGE_NAME;
}
- if (strcmp(src, "+") == 0) {
+ if (STRING_EQUAL == strcmp(src, "+")) {
range &= ~CONTACTS_SEARCH_RANGE_NUMBER;
}
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)
+ if (STRING_EQUAL == strcmp(hangul_syllable[k][0], temp))
break;
}
}
query = calloc(1, query_size);
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 = __ctsvc_db_append_search_query(keyword, &query, &query_size, len, range);
if (0 <= temp_len) len = temp_len;
}
- else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
+ else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
bool need_union = false;
if (range & CONTACTS_SEARCH_RANGE_DATA || range & CONTACTS_SEARCH_RANGE_EMAIL) {
free(query);
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)) {
+ else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
bool need_union = false;
if (range & CONTACTS_SEARCH_RANGE_NUMBER || range & CONTACTS_SEARCH_RANGE_DATA) {
free(query);
if (sortkey) {
len = __ctsvc_db_search_records_append_sort(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 (0 <= temp_len) len+= temp_len;
}
temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
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)) {
+ 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 (0 <= temp_len) len+= temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
temp_len = SAFE_SNPRINTF(&query, &query_size, len, ".contact_id IN ");
if (0 <= temp_len) len+= temp_len;
}
- 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 if (sortkey) {
len = __ctsvc_db_search_records_append_sort(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 (0 <= temp_len) len+= temp_len;
}
RETV_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER);
*out_current_version = 0;
- if (0 == strcmp(view_uri, _contacts_contact_updated_info._uri)) {
+ if (STRING_EQUAL == strcmp(view_uri, _contacts_contact_updated_info._uri)) {
ret = __ctsvc_db_get_contact_changes(view_uri, addressbook_id,
version, out_list, out_current_version);
return ret;
}
- else if (0 == strcmp(view_uri, _contacts_group_updated_info._uri)) {
+ else if (STRING_EQUAL == strcmp(view_uri, _contacts_group_updated_info._uri)) {
ret = __ctsvc_db_get_group_changes(view_uri, addressbook_id,
version, out_list, out_current_version);
return ret;
}
- else if (0 == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
+ else if (STRING_EQUAL == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
ret = __ctsvc_db_get_group_member_changes(view_uri, addressbook_id,
version, out_list, out_current_version);
return ret;
}
- else if (0 == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
+ else if (STRING_EQUAL == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
ret = __ctsvc_db_get_group_relations_changes(view_uri, addressbook_id,
version, out_list, out_current_version);
return ret;
}
- else if (0 == strcmp(view_uri, _contacts_my_profile_updated_info._uri)) {
+ else if (STRING_EQUAL == strcmp(view_uri, _contacts_my_profile_updated_info._uri)) {
ret = __ctsvc_db_get_my_profile_changes(view_uri, addressbook_id,
version, out_list, out_current_version);
return ret;
}
ctsvc_server_check_schema();
- if (2 <= argc && !strcmp(argv[1], "schema"))
+ if (2 <= argc && STRING_EQUAL ==strcmp(argv[1], "schema"))
return CONTACTS_ERROR_NONE;
ctsvc_create_rep_set_permission(DATA_REPERTORY, 0755);
{
CTS_FN_CALL;
CTS_INFO("event_type : %s, account_id : %d", event_type, account_id);
- if (strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE) == 0)
+ if (STRING_EQUAL == strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE))
ctsvc_addressbook_delete(account_id);
return true;
}
new_langset = vconf_keynode_get_str(key);
langset = ctsvc_get_langset();
INFO("%s --> %s", langset, new_langset);
- if (strcmp(langset, new_langset) != 0) {
+ if (STRING_EQUAL != strcmp(langset, new_langset)) {
bool sort_name_update = false;
old_primary_sort = ctsvc_get_primary_sort();
if (old_primary_sort < 0) {
--- /dev/null
+/*
+ * 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_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;
+
+ if (zone_name && *zone_name)
+ _ctsvc_zone_enabled = true;
+
+ int ret;
+
+ 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 *));
+
+ 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;
+}
+