*last_version = 0;
bool result = false;
- ret = cal_client_ipc_client_check_permission(CAL_PERMISSION_READ, &result);
+ ret = cal_client_ipc_client_check_permission(handle, CAL_PERMISSION_READ, &result);
if (CALENDAR_ERROR_NONE != ret) {
ERR("cal_client_ipc_client_check_permission() Fail (%d)", ret);
return ret;
#include "calendar_db.h"
#include "calendar_types.h"
+#include "cal_client_service.h"
#include "cal_client_service_helper.h"
#include "cal_client_utils.h"
#include "cal_client_ipc.h"
return h->version;
}
-int cal_client_ipc_client_check_permission(int permission, bool *result)
+int cal_client_ipc_client_check_permission(calendar_h handle, int permission, bool *result)
{
pims_ipc_data_h indata = NULL;
pims_ipc_data_h outdata = NULL;
return CALENDAR_ERROR_OUT_OF_MEMORY;
}
+ ret = cal_ipc_marshal_handle(handle, indata);
+ if (CALENDAR_ERROR_NONE != ret) {
+ ERR("cal_ipc_marshal_handle() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
ret = cal_ipc_marshal_int(permission, indata);
if (CALENDAR_ERROR_NONE != ret) {
ERR("cal_ipc_marshal_int() Fail(%d)", ret);
bool cal_client_ipc_is_call_inprogress(void);
int cal_client_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_data_h *data_out);
-int cal_client_ipc_client_check_permission(int permission, bool *result);
+int cal_client_ipc_client_check_permission(calendar_h handle, int permission, bool *result);
int cal_client_ipc_get_change_version(calendar_h handle);
void cal_client_ipc_set_change_version(calendar_h handle, int version);
void cal_client_ipc_lock(void);
GSList *it = NULL;
callback_info_s *cb_info = NULL;
bool result = false;
+ calendar_h handle = NULL;
+ ret = cal_client_handle_get_p(&handle);
+ RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "cal_client_handle_get_p() Fail(%d)", ret);
RETV_IF(NULL == callback, CALENDAR_ERROR_INVALID_PARAMETER);
- ret = cal_client_ipc_client_check_permission(CAL_PERMISSION_READ, &result);
+ ret = cal_client_ipc_client_check_permission(handle, CAL_PERMISSION_READ, &result);
RETVM_IF(CALENDAR_ERROR_NONE != ret, ret, "ctsvc_ipc_client_check_permission() Fail(%d)", ret);
RETVM_IF(result == false, CALENDAR_ERROR_PERMISSION_DENIED, "Permission denied (calendar read)");
if (0 == *connection_count) { /* total connection */
g_type_init(); /* for alarmmgr */
- ret = cal_inotify_initialize();
+ ret = cal_inotify_init();
if (CALENDAR_ERROR_NONE != ret) {
- ERR("cal_inotify_initialize() Fail(%d)", ret);
+ ERR("cal_inotify_init() Fail(%d)", ret);
cal_mutex_unlock(CAL_MUTEX_CONNECTION);
return ret;
}
DBG("[System] disconnected successfully");
cal_client_reminder_destroy_for_subscribe();
cal_view_finalize();
- cal_inotify_finalize();
+ cal_inotify_deinit();
}
else if (1 < *connection_count) {
DBG("[System] connection count(%d)", *connection_count);
return ret;
}
-int cal_inotify_initialize(void)
+int cal_inotify_init(void)
{
int ret;
free(data);
}
-void cal_inotify_finalize(void)
+void cal_inotify_deinit(void)
{
#ifdef CAL_IPC_CLIENT
cal_mutex_lock(CAL_MUTEX_INOTIFY);
void cal_inotify_call_pending_callback(void);
#endif
-int cal_inotify_initialize(void);
+int cal_inotify_init(void);
int cal_inotify_subscribe(cal_noti_type_e type, const char *path, calendar_db_changed_cb callback, void *data);
int cal_inotify_unsubscribe_with_data(const char *path, calendar_db_changed_cb callback, void *user_data);
int cal_inotify_subscribe_ipc_ready(calendar_h handle, void (*cb)(void *), void *user_data);
int cal_inotify_unsubscribe_ipc_ready(calendar_h handle);
-void cal_inotify_finalize(void);
+void cal_inotify_deinit(void);
#endif /* __CALENDAR_SVC_INOTIFY_H__ */
pims_ipc_h ipc;
char *smack_label;
int *write_list;
-} calendar_permission_info_s;
+ int write_list_count;
+} cal_permission_info_s;
-static GList *__thread_list = NULL;
-
-static int have_smack = -1;
+enum {
+ CAL_SMACK_NOT_CHECKED,
+ CAL_SMACK_ENABLED, /* 1 */
+ CAL_SMACK_DISABLED, /* 0 */
+};
-static calendar_permission_info_s* __cal_access_control_find_permission_info(unsigned int thread_id);
+static GList *__thread_list = NULL;
+static int have_smack = CAL_SMACK_NOT_CHECKED;
static void _cal_access_control_disconnected_cb(pims_ipc_h ipc, void *user_data);
-static calendar_permission_info_s* _cal_access_control_find_permission_info(unsigned int thread_id)
+static cal_permission_info_s* _cal_access_control_find_permission_info(unsigned int thread_id)
{
GList *cursor;
for(cursor=__thread_list;cursor;cursor=cursor->next) {
- calendar_permission_info_s *info = NULL;
+ cal_permission_info_s *info = NULL;
info = cursor->data;
if (info->thread_id == thread_id)
return info;
/* check SMACK enable or disable */
static int _cal_have_smack(void)
{
- if (-1 == have_smack) {
+ if (CAL_SMACK_NOT_CHECKED == have_smack) {
if (NULL == smack_smackfs_path())
- have_smack = 0;
+ have_smack = CAL_SMACK_DISABLED;
else
- have_smack = 1;
+ have_smack = CAL_SMACK_ENABLED;
}
return have_smack;
}
-static void _cal_access_control_set_permission_info(calendar_permission_info_s *info)
+static void _cal_access_control_set_permission_info(cal_permission_info_s *info)
{
+ int ret = 0;
bool smack_enabled = false;
- if (_cal_have_smack() == 1)
+ if (CAL_SMACK_ENABLED == _cal_have_smack())
smack_enabled = true;
else
INFO("SAMCK disabled");
+ /* white listing : core module */
free(info->write_list);
info->write_list = NULL;
+ info->write_list_count = 0;
char query[CAL_DB_SQL_MAX_LEN] = {0};
int count = 0;
- int ret = 0;
- sqlite3_stmt *stmt;
- int write_index = 0;
snprintf(query, sizeof(query), "SELECT count(id) FROM %s WHERE deleted = 0 ", CAL_TABLE_CALENDAR);
ret = cal_db_util_query_get_first_int_result(query, NULL, &count);
- RETM_IF(CALENDAR_ERROR_NONE != ret, "cal_db_util_query_get_first_int_result() Fail(%d)", ret);
+ if (CALENDAR_ERROR_NONE != ret) {
+ ERR("cal_db_util_query_get_first_int_result() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return;
+ }
info->write_list = calloc(count +1, sizeof(int));
- RETM_IF(NULL == info->write_list, "calloc() Fail");
- info->write_list[0] = -1;
+ if (NULL == info->write_list) {
+ ERR("calloc() Fail");
+ return;
+ }
+ info->write_list_count = 0;
+ sqlite3_stmt *stmt = NULL;
snprintf(query, sizeof(query), "SELECT id, mode, owner_label FROM %s WHERE deleted = 0 ", CAL_TABLE_CALENDAR);
ret = cal_db_util_query_prepare(query, &stmt);
if (CALENDAR_ERROR_NONE != ret) {
return;
}
+ int write_index = 0;
while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
- int id = sqlite3_column_int(stmt, 0);
- int mode = sqlite3_column_int(stmt, 1);
- char *temp = (char *)sqlite3_column_text(stmt, 2);
+ int id = 0;
+ int mode = 0;
+ char *temp = NULL;
+
+ id = sqlite3_column_int(stmt, 0);
+ mode = sqlite3_column_int(stmt, 1);
+ temp = (char *)sqlite3_column_text(stmt, 2);
if (!smack_enabled) // smack disabled
info->write_list[write_index++] = id;
else if (CALENDAR_BOOK_MODE_NONE == mode)
info->write_list[write_index++] = id;
}
- info->write_list[write_index] = -1;
+ info->write_list_count = write_index;
sqlite3_finalize(stmt);
}
void cal_access_control_set_client_info(pims_ipc_h ipc, const char *smack_label)
{
- unsigned int thread_id = 0;
- calendar_permission_info_s *info = NULL;
+ unsigned int thread_id = (unsigned int)pthread_self();
+ cal_permission_info_s *info = NULL;
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
-
- thread_id = (unsigned int)pthread_self();
info = _cal_access_control_find_permission_info(thread_id);
if (NULL == info) {
- info = calloc(1, sizeof(calendar_permission_info_s));
+ info = calloc(1, sizeof(cal_permission_info_s));
if (NULL == info) {
ERR("calloc() Fail");
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
void cal_access_control_unset_client_info(void)
{
- calendar_permission_info_s *find = NULL;
+ cal_permission_info_s *find = NULL;
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
find = _cal_access_control_find_permission_info(pthread_self());
bool cal_access_control_have_permission(pims_ipc_h ipc, cal_permission_e permission)
{
have_smack = _cal_have_smack();
- if (have_smack != 1) // smack disabled
+ if (CAL_SMACK_DISABLED == have_smack)
return true;
if (NULL == ipc) // calendar-service daemon
char* cal_access_control_get_label(void)
{
unsigned int thread_id = (unsigned int)pthread_self();
- calendar_permission_info_s *info = NULL;
+ cal_permission_info_s *info = NULL;
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
info = _cal_access_control_find_permission_info(thread_id);
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
GList *cursor;
for(cursor=__thread_list;cursor;cursor=cursor->next) {
- calendar_permission_info_s *info = NULL;
+ cal_permission_info_s *info = NULL;
info = cursor->data;
if (info)
_cal_access_control_set_permission_info(info);
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
}
-bool cal_access_control_have_write_permission(int calendarbook_id)
+bool cal_access_control_have_write_permission(int book_id)
{
- int i = 0;
- calendar_permission_info_s *find = NULL;
+ cal_permission_info_s *info = NULL;
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
- find = _cal_access_control_find_permission_info(pthread_self());
- if (!find) {
+ unsigned int thread_id = pthread_self();
+ info = _cal_access_control_find_permission_info(thread_id);
+ if (NULL == info) {
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
- ERR("can not found access info");
+ ERR("_cal_access_control_find_permission_info() Fail");
return false;
}
- if (NULL == find->write_list) {
+ if (NULL == info->write_list) {
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
ERR("there is no write access info");
return false;
}
- while (1) {
- if (find->write_list[i] == -1)
- break;
- if (calendarbook_id == find->write_list[i]) {
+ int i = 0;
+ for (i = 0; i < info->write_list_count; i++) {
+ if (book_id == info->write_list[i]) {
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
return true;
}
- i++;
}
cal_mutex_unlock(CAL_MUTEX_ACCESS_CONTROL);
+ ERR("thread(0x%x), No write permission of book_id(%d)", thread_id, book_id);
return false;
}
static void _cal_access_control_disconnected_cb(pims_ipc_h ipc, void *user_data)
{
CAL_FN_CALL();
- calendar_permission_info_s *info = NULL;
+ cal_permission_info_s *info = NULL;
cal_mutex_lock(CAL_MUTEX_ACCESS_CONTROL);
- info = (calendar_permission_info_s *)user_data;
+ info = (cal_permission_info_s *)user_data;
if (info) {
INFO("Thread(0x%x), info(%p)", info->thread_id, info);
free(info->smack_label);
cal_service_internal_disconnect();
}
-int cal_is_owner(int calendarbook_id)
+int cal_is_owner(int book_id)
{
int ret;
sqlite3_stmt *stmt = NULL;
char *owner_label = NULL;
char *saved_smack = NULL;
- snprintf(query, sizeof(query),
- "SELECT owner_label FROM "CAL_TABLE_CALENDAR" "
- "WHERE id = %d", calendarbook_id);
+ snprintf(query, sizeof(query), "SELECT owner_label FROM %s WHERE id = %d",
+ CAL_TABLE_CALENDAR, book_id);
ret = cal_db_util_query_prepare(query, &stmt);
if (CALENDAR_ERROR_NONE != ret) {
ERR("cal_db_util_query_prepare() Fail(%d)", ret);
void cal_access_control_unset_client_info(void);
char* cal_access_control_get_label(void);
void cal_access_control_reset(void); // reset read_list, write_list..
-bool cal_access_control_have_write_permission(int calendarbook_id);
-int cal_is_owner(int calendarbook_id);
+bool cal_access_control_have_write_permission(int book_id);
+int cal_is_owner(int book_id);
#endif /* __CALENDAR_SVC_ACCESS_CONTROL_H__ */
return true;
}
-#ifdef CAL_MEMORY_TEST
-static gboolean _cal_server_ipc_destroy_idle(void* user_data)
-{
- ERR();
- g_main_loop_quit(main_loop);
-}
-
-void cal_server_ipc_destroy(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
-{
- ERR();
- int ret = CALENDAR_ERROR_NONE;
-
- /* kill daemon destroy */
- g_timeout_add_seconds(1, &_cal_server_ipc_destroy_idle, NULL);
-
- if (outdata)
- {
- *outdata = pims_ipc_data_create(0);
- if (!*outdata) {
- ERR("pims_ipc_data_create Fail");
- goto DATA_FREE;
- }
- if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
- pims_ipc_data_destroy(*outdata);
- *outdata = NULL;
- ERR("pims_ipc_data_put Fail");
- goto DATA_FREE;
- }
-
- }
- else {
- ERR("outdata is NULL");
- }
- goto DATA_FREE;
-
-ERROR_RETURN:
- if (outdata)
- {
- *outdata = pims_ipc_data_create(0);
- if (!*outdata) {
- ERR("pims_ipc_data_create Fail");
- goto DATA_FREE;
- }
- if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0) {
- pims_ipc_data_destroy(*outdata);
- *outdata = NULL;
- ERR("pims_ipc_data_put Fail");
- goto DATA_FREE;
- }
- }
- else {
- ERR("outdata is NULL");
- }
-DATA_FREE:
-
- return;
-}
-#endif /* CAL_MEMORY_TEST */
-
static void _cal_server_init(void)
{
int ret;
cal_server_calendar_delete_start();
}
-static void _cal_server_fini(void)
+static void _cal_server_deinit(void)
{
cal_disconnect();
-// contacts_disconnect();
-}
-static int _server_init_ipc(void)
-{
- g_type_init();
+ if (cal_account_h) {
+ account_unsubscribe_notification(cal_account_h);
+ cal_account_h = NULL;
+ }
- char sock_file[CAL_STR_MIDDLE_LEN] = {0};
- snprintf(sock_file, sizeof(sock_file), CAL_SOCK_PATH"/.%s", getuid(), CAL_IPC_SERVICE);
- pims_ipc_svc_init(sock_file,CAL_SECURITY_FILE_GROUP, 0777);
-
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_CONNECT, cal_server_ipc_connect, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DISCONNECT, cal_server_ipc_disconnect, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_CHECK_PERMISSION, cal_server_ipc_check_permission, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_RECORD, cal_server_ipc_db_insert_record, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORD, cal_server_ipc_db_get_record, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORD, cal_server_ipc_db_update_record, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORD, cal_server_ipc_db_delete_record, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_ALL_RECORDS, cal_server_ipc_db_get_all_records, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, cal_server_ipc_db_get_records_with_query, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CLEAN_AFTER_SYNC, cal_server_ipc_db_clean_after_sync, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT, cal_server_ipc_db_get_count, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, cal_server_ipc_db_get_count_with_query, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_RECORDS, cal_server_ipc_db_insert_records, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORDS, cal_server_ipc_db_update_records, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORDS, cal_server_ipc_db_delete_records, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CHANGES_BY_VERSION, cal_server_ipc_db_get_changes_by_version, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_CURRENT_VERSION, cal_server_ipc_db_get_current_version, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_VCALENDARS, cal_server_ipc_db_insert_vcalendars, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_VCALENDARS, cal_server_ipc_db_replace_vcalendars, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORD, cal_server_ipc_db_replace_record, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORDS, cal_server_ipc_db_replace_records, NULL) != 0, -1);
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CHANGES_EXCEPTION, cal_server_ipc_db_changes_exception, NULL) != 0, -1);
-#ifdef CAL_MEMORY_TEST
- RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DESTROY, cal_server_ipc_destroy, NULL) != 0, -1);
-#endif /* CAL_MEMORY_TEST */
-
- /* for subscribe */
- snprintf(sock_file, sizeof(sock_file), CAL_SOCK_PATH"/.%s_for_subscribe", getuid(), CAL_IPC_SERVICE);
- pims_ipc_svc_init_for_publish(sock_file, CAL_SECURITY_FILE_GROUP, CAL_SECURITY_DEFAULT_PERMISSION);
-
- return CALENDAR_ERROR_NONE;
+ cal_access_control_unset_client_info();
}
-static int _server_main(void)
+static int _cal_server_main(void)
{
main_loop = g_main_loop_new(NULL, FALSE);
- pims_ipc_svc_run_main_loop(main_loop);
- g_main_loop_unref(main_loop);
-
- cal_time_u_cleanup();
- cal_inotify_finalize();
+ cal_server_ipc_run(main_loop);
- if (cal_account_h) {
- account_unsubscribe_notification(cal_account_h);
- cal_account_h = NULL;
- }
-
- pims_ipc_svc_deinit_for_publish();
- pims_ipc_svc_deinit();
+ g_main_loop_unref(main_loop);
- cal_access_control_unset_client_info();
return 0;
}
cal_server_alarm_init();
cal_server_update();
_cal_server_init();
+ cal_server_ipc_init();
+
+ _cal_server_main();
+
+ cal_time_u_cleanup();
- _server_init_ipc();
- _server_main();
+ cal_server_ipc_deinit();
+ _cal_server_deinit();
+ cal_server_alarm_deinit();
+ cal_inotify_deinit();
- _cal_server_fini();
- cal_server_alarm_fini();
return 0;
}
cal_server_alarm_register_next_alarm(time(NULL));
}
-void cal_server_alarm_fini(void)
+void cal_server_alarm_deinit(void)
{
alarmmgr_fini();
}
#define __CAL_SERVER_ALARM_H__
void cal_server_alarm_init(void);
-void cal_server_alarm_fini(void);
+void cal_server_alarm_deinit(void);
void cal_server_alarm_register(void);
void cal_server_alarm_alert(time_t tt_alert);
#include <malloc.h>
#include <glib.h>
#include <pims-ipc-data.h>
+#include <pims-ipc-svc.h>
#include "calendar.h"
#include "cal_typedef.h"
#include "cal_internal.h"
#include "cal_db_util.h"
+#include "cal_ipc.h"
#include "cal_ipc_marshal.h"
#include "cal_server_ipc.h"
#include "cal_access_control.h"
return;
}
+ calendar_h handle = NULL;
+ ret = cal_ipc_unmarshal_handle(indata, &handle);
+ if (CALENDAR_ERROR_NONE != ret) {
+ ERR("cal_ipc_unmarshal_handle() Fail(%d)", ret);
+ _cal_server_ipc_return(outdata, ret);
+ return;
+ }
+
int permission = 0;
ret = cal_ipc_unmarshal_int(indata, &permission);
if (CALENDAR_ERROR_NONE != ret) {
ERR("cal_ipc_unmarshal_int() Fail(%d)", ret);
_cal_server_ipc_return(outdata, ret);
+ cal_handle_destroy(handle);
return;
}
ret = CALENDAR_ERROR_OUT_OF_MEMORY;
_cal_server_ipc_return(outdata, ret);
}
+
+ cal_handle_destroy(handle);
}
void cal_server_ipc_db_insert_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
cal_handle_destroy(handle);
cal_ondemand_start();
}
+
+#ifdef CAL_MEMORY_TEST
+static gboolean _cal_server_ipc_destroy_idle(void* user_data)
+{
+ g_main_loop_quit(main_loop);
+}
+void cal_server_ipc_destroy(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+ int ret = CALENDAR_ERROR_NONE;
+
+ /* kill daemon destroy */
+ g_timeout_add_seconds(1, &_cal_server_ipc_destroy_idle, NULL);
+
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put() Fail");
+ goto DATA_FREE;
+ }
+
+ }
+ else {
+ ERR("outdata is NULL");
+ }
+ goto DATA_FREE;
+
+ERROR_RETURN:
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put() Fail");
+ goto DATA_FREE;
+ }
+ }
+ else {
+ ERR("outdata is NULL");
+ }
+DATA_FREE:
+
+ return;
+}
+#endif /* CAL_MEMORY_TEST */
+
+int cal_server_ipc_init(void)
+{
+ g_type_init();
+
+ pims_ipc_svc_init(CAL_IPC_SOCKET_PATH, CAL_SECURITY_FILE_GROUP, 0777);
+
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_CONNECT, cal_server_ipc_connect, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DISCONNECT, cal_server_ipc_disconnect, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_CHECK_PERMISSION, cal_server_ipc_check_permission, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_RECORD, cal_server_ipc_db_insert_record, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORD, cal_server_ipc_db_get_record, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORD, cal_server_ipc_db_update_record, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORD, cal_server_ipc_db_delete_record, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_ALL_RECORDS, cal_server_ipc_db_get_all_records, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, cal_server_ipc_db_get_records_with_query, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CLEAN_AFTER_SYNC, cal_server_ipc_db_clean_after_sync, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT, cal_server_ipc_db_get_count, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, cal_server_ipc_db_get_count_with_query, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_RECORDS, cal_server_ipc_db_insert_records, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORDS, cal_server_ipc_db_update_records, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORDS, cal_server_ipc_db_delete_records, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CHANGES_BY_VERSION, cal_server_ipc_db_get_changes_by_version, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_CURRENT_VERSION, cal_server_ipc_db_get_current_version, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_VCALENDARS, cal_server_ipc_db_insert_vcalendars, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_VCALENDARS, cal_server_ipc_db_replace_vcalendars, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORD, cal_server_ipc_db_replace_record, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORDS, cal_server_ipc_db_replace_records, NULL) != 0, -1);
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CHANGES_EXCEPTION, cal_server_ipc_db_changes_exception, NULL) != 0, -1);
+#ifdef CAL_MEMORY_TEST
+ RETV_IF(pims_ipc_svc_register(CAL_IPC_MODULE, CAL_IPC_SERVER_DESTROY, cal_server_ipc_destroy, NULL) != 0, -1);
+#endif /* CAL_MEMORY_TEST */
+
+ /* for subscribe */
+ pims_ipc_svc_init_for_publish(CAL_IPC_SOCKET_PATH_FOR_SUBSCRIPTION, CAL_SECURITY_FILE_GROUP, CAL_SECURITY_DEFAULT_PERMISSION);
+ return CALENDAR_ERROR_NONE;
+}
+
+void cal_server_ipc_deinit(void)
+{
+ pims_ipc_svc_deinit_for_publish();
+ pims_ipc_svc_deinit();
+}
+
+void cal_server_ipc_run(GMainLoop *loop)
+{
+ pims_ipc_svc_run_main_loop(loop);
+}
void cal_server_ipc_db_replace_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void cal_server_ipc_db_changes_exception(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+int cal_server_ipc_init(void);
+void cal_server_ipc_deinit(void);
+void cal_server_ipc_run(GMainLoop *loop);
+
#endif /* __CAL_SERVER_IPC_H__ */
if (0 == cal_total_connection) {
g_type_init(); // added for alarmmgr
cal_view_initialize();
- ret = cal_inotify_initialize();
+ ret = cal_inotify_init();
if (CALENDAR_ERROR_NONE != ret) {
- ERR("cal_inotify_initialize() Fail(%d)", ret);
+ ERR("cal_inotify_init() Fail(%d)", ret);
cal_mutex_unlock(CAL_MUTEX_CONNECTION);
return ret;
}
cal_thread_connection--;
if (1 == cal_total_connection) {
- cal_inotify_finalize();
+ cal_inotify_deinit();
cal_view_finalize();
}
else if (1 < cal_total_connection) {