summaryrefslogtreecommitdiff
path: root/src/agent/service-engine/se_account.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/agent/service-engine/se_account.c')
-rwxr-xr-xsrc/agent/service-engine/se_account.c287
1 files changed, 267 insertions, 20 deletions
diff --git a/src/agent/service-engine/se_account.c b/src/agent/service-engine/se_account.c
index 803f9d3..b1608d8 100755
--- a/src/agent/service-engine/se_account.c
+++ b/src/agent/service-engine/se_account.c
@@ -56,6 +56,11 @@ static datastore_cp_info predefinedServer[] = {
{"Everdroid", 1}
};
+static char * _convert_to_sync_mode_str(int sync_mode);
+static char * _convert_to_sync_type_str(int sync_type);
+static char * _convert_to_interval_str(int interval);
+static char * _convert_to_src_uri_str(int src_uri);
+
static se_error_type_e _add_profile(char *addr, char *id, char *password, char *access_name, int *account_id);
static se_error_type_e _set_profile_info(int account_id, char *profile_name, char *sync_mode, char *sync_type, char *interval);
static se_error_type_e _set_profile_category(int account_id, sync_service_s * category);
@@ -69,6 +74,145 @@ static se_error_type_e _set_profile_category_info_cp(int account_id, int content
static se_error_type_e __set_profile_category_info_into_cofnig_list(int account_id, int content_type, int enabled, char *src_uri, char *tgt_uri, char *id, char *password, GList ** config_list);
static se_error_type_e ___append_config_value(int account_id, char *key, char *value, char *type, char *access_name, GList ** list);
+static char * _convert_to_sync_mode_str(int sync_mode)
+{
+ _INNER_FUNC_ENTER;
+
+ _DEBUG_INFO("sync_mode: [%d]",sync_mode);
+ char *sync_mode_str = NULL;
+
+ switch (sync_mode) {
+ case MODE_MANUAL:
+ sync_mode_str = DEFINE_SYNC_MODE_MANUAL;
+ break;
+ case MODE_PERIODIC:
+ sync_mode_str = DEFINE_SYNC_MODE_PERIODIC;
+ break;
+ case MODE_PUSH:
+ sync_mode_str = DEFINE_SYNC_MODE_PUSH;
+ break;
+ default:
+ _DEBUG_ERROR("sync_mode is invalid!!");
+ break;
+ }
+
+ _DEBUG_INFO("sync_mode_str: [%s]",sync_mode_str);
+
+ _INNER_FUNC_EXIT;
+ return sync_mode_str;
+}
+
+static char * _convert_to_sync_type_str(int sync_type)
+{
+ _INNER_FUNC_ENTER;
+ char *sync_type_str = NULL;
+
+ _DEBUG_INFO("sync_type: [%d]",sync_type);
+
+ switch (sync_type) {
+ case SYNC_TYPE_FULL_SYNC:
+ sync_type_str = DEFINE_ALERT_SLOW_SYNC_STR;
+ break;
+ case SYNC_TYPE_UPDATE_BOTH:
+ sync_type_str = DEFINE_ALERT_TWO_WAY_STR;
+ break;
+ case SYNC_TYPE_UPDATE_TO_SERVER:
+ sync_type_str = DEFINE_ALERT_ONE_WAY_FROM_CLIENT_STR;
+ break;
+ case SYNC_TYPE_UPDATE_TO_PHONE:
+ sync_type_str = DEFINE_ALERT_ONE_WAY_FROM_SERVER_STR;
+ break;
+ case SYNC_TYPE_REFRESH_FROM_SERVER:
+ sync_type_str = DEFINE_ALERT_REFRESH_FROM_SERVER_STR;
+ break;
+ case SYNC_TYPE_REFRESH_FROM_PHONE:
+ sync_type_str = DEFINE_ALERT_REFRESH_FROM_CLIENT_STR;
+ break;
+ default:
+ _DEBUG_ERROR("sync_type is invalid!!");
+ sync_type_str = DEFINE_ALERT_UNKNOWN_STR;
+ break;
+ }
+
+ _DEBUG_INFO("sync_type_str: [%s]",sync_type_str);
+
+ _INNER_FUNC_EXIT;
+ return sync_type_str;
+}
+
+static char * _convert_to_interval_str(int interval)
+{
+ _INNER_FUNC_ENTER;
+ char *interval_str = NULL;
+
+ _DEBUG_INFO("interval: [%d]",interval);
+
+ switch (interval) {
+ case SYNC_INTERVAL_5_MINUTES:
+ interval_str = DEFINE_SYNC_INTERVAL_5_MINUTES_STR;
+ break;
+ case SYNC_INTERVAL_15_MINUTES:
+ interval_str = DEFINE_SYNC_INTERVAL_15_MINUTES_STR;
+ break;
+ case SYNC_INTERVAL_1_HOUR:
+ interval_str = DEFINE_SYNC_INTERVAL_1_HOUR_STR;
+ break;
+ case SYNC_INTERVAL_4_HOURS:
+ interval_str = DEFINE_SYNC_INTERVAL_4_HOURS_STR;
+ break;
+ case SYNC_INTERVAL_12_HOURS:
+ interval_str = DEFINE_SYNC_INTERVAL_12_HOURS_STR;
+ break;
+ case SYNC_INTERVAL_1_DAY:
+ interval_str = DEFINE_SYNC_INTERVAL_1_DAY_STR;
+ break;
+ case SYNC_INTERVAL_1_WEEK:
+ interval_str = DEFINE_SYNC_INTERVAL_1_WEEK_STR;
+ break;
+ case SYNC_INTERVAL_1_MONTH:
+ interval_str = DEFINE_SYNC_INTERVAL_1_MONTH_STR;
+ break;
+ default:
+ _DEBUG_ERROR("interval is invalid!!");
+ break;
+ }
+
+ _DEBUG_INFO("interval_str: [%s]",interval_str);
+
+ _INNER_FUNC_EXIT;
+ return interval_str;
+}
+
+static char * _convert_to_src_uri_str(int src_uri)
+{
+ _INNER_FUNC_ENTER;
+ char* src_uri_str = NULL;
+
+ _DEBUG_INFO("src_uri: [%d]",src_uri);
+
+ switch (src_uri) {
+ case SRC_URI_CONTACT:
+ src_uri_str = DEFINE_SOURCE_CONTACT_URI;
+ break;
+ case SRC_URI_CALENDAR:
+ src_uri_str = DEFINE_SOURCE_CALENDAR_URI;
+ break;
+ case SRC_URI_MEMO:
+ src_uri_str = DEFINE_SOURCE_MEMO_URI;
+ break;
+ case SRC_URI_CALLLOG:
+ src_uri_str = DEFINE_SOURCE_CALLLOG_URI;
+ break;
+ default:
+ _DEBUG_ERROR("src_uri is invalid!!");
+ break;
+ }
+ _DEBUG_INFO("src_uri_str: [%s]", src_uri_str);
+
+ _INNER_FUNC_EXIT;
+ return src_uri_str;
+}
+
static se_error_type_e _add_profile(char *addr, char *id, char *password, char *access_name, int *account_id)
{
_INNER_FUNC_ENTER;
@@ -353,7 +497,7 @@ static se_error_type_e _set_profile_category(int account_id, sync_service_s * ca
_DEBUG_TRACE("category->content_type : %d", category->service_type);
_DEBUG_TRACE("category->enabled : %d", category->enabled);
- _DEBUG_TRACE("category->src_uri : %s", category->src_uri);
+ _DEBUG_TRACE("category->src_uri : %d", category->src_uri);
_DEBUG_TRACE("category->tgt_uri : %s", category->tgt_uri);
_DEBUG_TRACE("category->id : %s", category->id);
_DEBUG_TRACE("category->password : %s", category->password);
@@ -366,6 +510,7 @@ static se_error_type_e _set_profile_category(int account_id, sync_service_s * ca
char datastore_source[128];
char datastore_id[128];
char datastore_pw[128];
+ char *src_uri_str = NULL;
if (category->service_type == TYPE_CONTACT)
datastore = DEFINE_CONFIG_KEY_PROFILE_CATEGORY_CONTACTS;
@@ -388,12 +533,19 @@ static se_error_type_e _set_profile_category(int account_id, sync_service_s * ca
goto error;
}
- result = set_config_str(account_id, datastore_source, category->src_uri, "string", "SE");
+ src_uri_str = _convert_to_src_uri_str(category->src_uri);
+ if (src_uri_str == NULL){
+ _DEBUG_ERROR("failed in _convert_to_src_uri_str");
+ goto error;
+ }
+
+ result = set_config_str(account_id, datastore_source, src_uri_str, "string", "SE");
if (result == false) {
_DEBUG_ERROR("failed in set_config");
err = SE_INTERNAL_DA_ERROR;
goto error;
}
+ _DEBUG_INFO("src_uri_str: [%s]",src_uri_str);
result = set_config_str(account_id, datastore_target, category->tgt_uri, "string", "SE");
if (result == false) {
@@ -426,6 +578,7 @@ static se_error_type_e _set_profile_category(int account_id, sync_service_s * ca
static se_error_type_e _set_periodic_sync_config(int account_id, char *sync_mode, char *interval)
{
_INNER_FUNC_ENTER;
+ _DEBUG_TRACE("account_id = %d", account_id);
_DEBUG_TRACE("sync_mode = %s", sync_mode);
se_error_type_e err = SE_INTERNAL_OK;
@@ -460,14 +613,14 @@ static se_error_type_e _set_periodic_sync_config(int account_id, char *sync_mode
}
if (strcmp(sync_mode, DEFINE_SYNC_MODE_PERIODIC) == 0 && interval != NULL) {
-
+/*
result = set_config_str(account_id, DEFINE_CONFIG_KEY_PROFILE_CLIENT_SYNC_TYPE, DEFINE_ALERT_TWO_WAY_STR, "string", "SE");
if (result == false) {
_DEBUG_ERROR("failed in set_config");
err = SE_INTERNAL_DA_ERROR;
goto error;
}
-
+*/
int week[] = { DAY_SUN, DAY_MON, DAY_TUE, DAY_WED, DAY_THU, DAY_FRI, DAY_SAT };
time_t current_time;
struct tm *struct_time;
@@ -510,6 +663,10 @@ static se_error_type_e _set_periodic_sync_config(int account_id, char *sync_mode
_DEBUG_TRACE("1 week");
alarm_info->repeat_type = REPEAT_WEEKLY;
alarm_info->repeat_value = week[struct_time->tm_wday];
+ } else if (strcmp(interval, "1 month") == 0) {
+ _DEBUG_TRACE("1 month");
+ alarm_info->repeat_type = REPEAT;//REPEAT_MONTHLY;
+ alarm_info->repeat_value = (((24 * 60) * 60) * 30 );
}
scheduler_err = sync_agent_add_service_data(1, alarm_info, &alarm_id);
@@ -538,14 +695,19 @@ static se_error_type_e _set_periodic_sync_config(int account_id, char *sync_mode
error:
- if (value != NULL)
+ if (value != NULL) {
free(value);
+ value = NULL;
+ }
if (alarm_info != NULL) {
- if (alarm_info->start_alarm_time != NULL)
+ if (alarm_info->start_alarm_time != NULL) {
free(alarm_info->start_alarm_time);
+ alarm_info->start_alarm_time = NULL;
+ }
free(alarm_info);
+ alarm_info = NULL;
}
_INNER_FUNC_EXIT;
@@ -670,12 +832,20 @@ static se_error_type_e _set_profile_category_info(int account_id, sync_service_s
retvm_if(category == NULL, SE_INTERNAL_NOT_DEFINED, "category is NULL");
se_error_type_e err = SE_INTERNAL_OK;
- err = __set_profile_category_info_into_cofnig_list(account_id, category->service_type, category->enabled, category->src_uri, category->tgt_uri, category->id, category->password, config_list);
+ char *src_uri_str = NULL;
+
+ src_uri_str = _convert_to_src_uri_str(category->src_uri);
+ if (src_uri_str == NULL) {
+ _DEBUG_ERROR("failed in _convert_to_src_uri_str");
+ goto error;
+ }
+
+ err = __set_profile_category_info_into_cofnig_list(account_id, category->service_type, category->enabled, src_uri_str, category->tgt_uri, category->id, category->password, config_list);
if (err != SE_INTERNAL_OK) {
_DEBUG_ERROR("failed in _set_profile_category_info_into_cofnig_list");
goto error;
}
-
+ _DEBUG_INFO("src_uri_str: [%s]",src_uri_str);
error:
_INNER_FUNC_EXIT;
@@ -1016,6 +1186,7 @@ static se_error_type_e _get_empty_profile_dir_name(char **empty_profile_dir_name
char profileIndex[2];
int index;
int i;
+ int cnt = 0;
sync_agent_acc_error_e acc_err = SYNC_AGENT_ACC_SUCCESS;
sync_agent_fw_account_s *fw_account = NULL;
@@ -1031,6 +1202,9 @@ static se_error_type_e _get_empty_profile_dir_name(char **empty_profile_dir_name
goto error;
}
+ cnt = g_list_length(account_info_list);
+ _DEBUG_INFO("account_info_list , length = %d", cnt);
+
for (iter = account_info_list; iter != NULL; iter = g_list_next(iter)) {
fw_account = (sync_agent_fw_account_s *) iter->data;
@@ -1039,6 +1213,7 @@ static se_error_type_e _get_empty_profile_dir_name(char **empty_profile_dir_name
profileDirName = NULL;
}
+ _DEBUG_INFO("fw_account->account_id = %d", fw_account->account_id);
result = get_config(fw_account->account_id, DEFINE_CONFIG_KEY_PROFILE_DIR_NAME, &profileDirName);
if (result == false) {
_DEBUG_ERROR("failed in get_Config");
@@ -1075,7 +1250,7 @@ static se_error_type_e _get_empty_profile_dir_name(char **empty_profile_dir_name
return err;
}
-bool add_profile(char *profile_dir_name, char *profile_name, char *addr, char *id, char *password, char *sync_mode, char *sync_type, char *interval, GList * categories, int *account_id)
+bool add_profile(char *profile_name, char *addr, char *id, char *password, int sync_mode, int sync_type, int interval, GList * categories, int *account_id)
{
_EXTERN_FUNC_ENTER;
@@ -1083,13 +1258,17 @@ bool add_profile(char *profile_dir_name, char *profile_name, char *addr, char *i
_DEBUG_INFO("addr = %s", addr);
_DEBUG_INFO("id = %s", id);
_DEBUG_INFO("password = %s", password);
- _DEBUG_INFO("sync_mode = %s", sync_mode);
- _DEBUG_INFO("sync_type = %s", sync_type);
- _DEBUG_INFO("interval = %s", interval);
+ _DEBUG_INFO("sync_mode = %d", sync_mode);
+ _DEBUG_INFO("sync_type = %d", sync_type);
+ _DEBUG_INFO("interval = %d", interval);
se_error_type_e err = SE_INTERNAL_OK;
int account = -1;
GList *config_list = NULL;
+ char *profile_dir_name = NULL;
+ char * sync_mode_str = NULL;
+ char * sync_type_str = NULL;
+ char * interval_str = NULL;
sync_agent_da_return_e da_err = sync_agent_open_agent();
if (da_err != SYNC_AGENT_DA_SUCCESS) {
@@ -1097,25 +1276,68 @@ bool add_profile(char *profile_dir_name, char *profile_name, char *addr, char *i
goto error;
}
+ // Assign profile_dir_name
+ err = _get_empty_profile_dir_name(&profile_dir_name);
+ if (err != SE_INTERNAL_OK) {
+ _DEBUG_ERROR("failed in _get_empty_profileDirName");
+ goto error;
+ }
+
+ if (profile_dir_name == NULL) {
+ _DEBUG_ERROR("Maximum profiles count is %d, no more profile", MAXIMUM_ACCOUNT_COUNT);
+ err = SE_INTERNAL_ERROR;
+ goto error;
+ }
+ _DEBUG_INFO("profile_dir_name[%s]", profile_dir_name);
+
err = _add_profile(addr, id, password, "SE", &account);
if (err != SE_INTERNAL_OK) {
- _DEBUG_ERROR("failed in add_Account");
+ _DEBUG_ERROR("failed in _add_profile");
goto error;
}
- err = _set_profile_info_into_config_list(account, profile_dir_name, addr, profile_name, sync_mode, sync_type, interval, NULL, NULL, &config_list);
+ sync_mode_str = _convert_to_sync_mode_str(sync_mode);
+ if (sync_mode_str == NULL) {
+ _DEBUG_ERROR("_convert_to_sync_mode_str failed!!");
+ err = SE_INTERNAL_ERROR;
+ goto error;
+ }
+
+ sync_type_str = _convert_to_sync_type_str(sync_type);
+ if (sync_type_str == NULL) {
+ _DEBUG_ERROR("_convert_to_sync_type_str failed!!");
+ err = SE_INTERNAL_ERROR;
+ goto error;
+ }
+
+ interval_str = _convert_to_interval_str(interval);
+ if (interval_str == NULL) {
+ _DEBUG_ERROR("_convert_to_interval_str failed!!");
+ err = SE_INTERNAL_ERROR;
+ goto error;
+ }
+
+ _DEBUG_INFO("sync_mode_str : [%s]", sync_mode_str);
+ _DEBUG_INFO("sync_type_str : [%s]", sync_type_str);
+ _DEBUG_INFO("interval_str : [%s]", interval_str);
+
+ err = _set_profile_info_into_config_list(account, profile_dir_name, addr, profile_name, sync_mode_str, sync_type_str, interval_str, NULL, NULL, &config_list);
if (err != SE_INTERNAL_OK) {
- _DEBUG_ERROR("failed in add_Account");
+ _DEBUG_ERROR("_set_profile_info_into_config_list failed!!");
goto error;
}
+ int cnt = 0;
+ cnt = g_list_length(categories);
+ _DEBUG_INFO("categories length : [%d]", cnt);
+
sync_service_s *category = NULL;
GList *iter = NULL;
for (iter = categories; iter != NULL; iter = g_list_next(iter)) {
category = iter->data;
err = _set_profile_category_info(account, category, &config_list);
if (err != SE_INTERNAL_OK) {
- _DEBUG_ERROR("failed in __set_profile_category");
+ _DEBUG_ERROR("failed in _set_profile_category_info");
goto error;
}
}
@@ -1123,10 +1345,11 @@ bool add_profile(char *profile_dir_name, char *profile_name, char *addr, char *i
da_err = sync_agent_add_config_list(config_list);
if (da_err != SYNC_AGENT_DA_SUCCESS) {
err = SE_INTERNAL_DA_ERROR;
+ _DEBUG_ERROR("failed in sync_agent_add_config_list");
goto error;
}
- err = _set_periodic_sync_config(account, sync_mode, interval);
+ err = _set_periodic_sync_config(account, sync_mode_str, interval_str);
if (err != SE_INTERNAL_OK) {
_DEBUG_ERROR("failed in _set_periodic_sync_config");
goto error;
@@ -1445,7 +1668,7 @@ bool add_profile_dive(int *account_id)
return true;
}
-bool edit_profile(int account_id, char *profile_name, char *addr, char *id, char *password, char *sync_mode, char *sync_type, char *interval, GList * categories)
+bool edit_profile(int account_id, char *profile_name, char *addr, char *id, char *password, int sync_mode, int sync_type, int interval, GList * categories)
{
_EXTERN_FUNC_ENTER;
@@ -1453,6 +1676,9 @@ bool edit_profile(int account_id, char *profile_name, char *addr, char *id, char
sync_agent_acc_error_e acc_err = SYNC_AGENT_ACC_SUCCESS;
sync_agent_fw_account_s *fw_account = NULL;
bool result;
+ char* sync_mode_str = NULL;
+ char* sync_type_str = NULL;
+ char* interval_str = NULL;
sync_agent_da_return_e da_err = sync_agent_open_agent();
if (da_err != SYNC_AGENT_DA_SUCCESS) {
@@ -1485,13 +1711,34 @@ bool edit_profile(int account_id, char *profile_name, char *addr, char *id, char
goto error;
}
- err = _set_profile_info(account_id, profile_name, sync_mode, sync_type, interval);
+ sync_mode_str = _convert_to_sync_mode_str(sync_mode);
+ if (sync_mode_str == NULL) {
+ _DEBUG_ERROR("_convert_to_sync_mode_str failed!!");
+ err = SE_INTERNAL_DA_ERROR;
+ goto error;
+ }
+
+ sync_type_str = _convert_to_sync_type_str(sync_type);
+ if (sync_type_str == NULL) {
+ _DEBUG_ERROR("_convert_to_sync_type_str failed!!");
+ err = SE_INTERNAL_DA_ERROR;
+ goto error;
+ }
+
+ interval_str = _convert_to_interval_str(interval);
+ if (interval_str == NULL) {
+ _DEBUG_ERROR("_convert_to_interval_str failed!!");
+ err = SE_INTERNAL_DA_ERROR;
+ goto error;
+ }
+
+ err = _set_profile_info(account_id, profile_name, sync_mode_str, sync_type_str, interval_str);
if (err != SE_INTERNAL_OK) {
_DEBUG_ERROR("failed in __set_profile_info");
goto error;
}
- err = _set_periodic_sync_config(account_id, sync_mode, interval);
+ err = _set_periodic_sync_config(account_id, sync_mode_str, interval_str);
if (err != SE_INTERNAL_OK) {
_DEBUG_ERROR("failed in __set_profile_info");
goto error;