diff options
Diffstat (limited to 'src/agent/framework/task/oma_ds_engine_controller_task.c')
-rwxr-xr-x | src/agent/framework/task/oma_ds_engine_controller_task.c | 1137 |
1 files changed, 1137 insertions, 0 deletions
diff --git a/src/agent/framework/task/oma_ds_engine_controller_task.c b/src/agent/framework/task/oma_ds_engine_controller_task.c new file mode 100755 index 0000000..ba7012d --- /dev/null +++ b/src/agent/framework/task/oma_ds_engine_controller_task.c @@ -0,0 +1,1137 @@ +/* + * oma-ds-agent + * Copyright (c) 2012 Samsung Electronics Co., Ltd. + * + * 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. + */ + +/** + * @OMA_DS_Engine_Controller_Task.c + * @version 0.1 + * @brief This file is the source file of implementation of make and register task to Engine Controller + */ + +#include <string.h> + +#include <sync_agent.h> + +#include "framework/task/oma_ds_engine_controller_task.h" +#include "service-engine/se_account.h" +#include "service-engine/se_sync.h" +#include "service-engine/se_storage.h" + +#ifndef OMADS_AGENT_LOG +#undef LOG_TAG +#define LOG_TAG "OMA_DS_COMMON" +#endif + +static GList *sync_request_id_list = NULL; + +static void _free_sync_categorie_list(void *list); +static void _free_delete_profile_list(void *list); +static void _free_resource_cp_list(void *list); + +static void _request_msg_info_free(request_msg_info_t * info); +static void *_string_copy_struct(void *string); +static request_msg_info_t *_create_request_msg_info(int sync_type, unsigned int request_id); + +static void __free_resource_cp(resource_cp_s * resource); + +static void _free_sync_categorie_list(void *list) +{ + _INNER_FUNC_ENTER; + retm_if(list == NULL, "list is NULL"); + + GList *categories = (GList *) list; + GList *iter = NULL; + for (iter = categories; iter != NULL; iter = g_list_next(iter)) + free_sync_service(iter->data); + + g_list_free(categories); + _INNER_FUNC_EXIT; +} + +static void _free_delete_profile_list(void *list) +{ + _INNER_FUNC_ENTER; + retm_if(list == NULL, "list is NULL"); + + GList *profiles = (GList *) list; + GList *iter = NULL; + for (iter = profiles; iter != NULL; iter = g_list_next(iter)) + free(iter->data); + + g_list_free(profiles); + _INNER_FUNC_EXIT; +} + +static void _free_resource_cp_list(void *list) +{ + _INNER_FUNC_ENTER; + retm_if(list == NULL, "list is NULL"); + + GList *profiles = (GList *) list; + GList *iter = NULL; + for (iter = profiles; iter != NULL; iter = g_list_next(iter)) + __free_resource_cp(iter->data); + + g_list_free(profiles); + _INNER_FUNC_EXIT; +} + +static void __free_resource_cp(resource_cp_s * resource) +{ + _INNER_FUNC_ENTER; + retm_if(resource == NULL, "resource is NULL"); + + if (resource->name != NULL) + free(resource->name); + + if (resource->accept != NULL) + free(resource->accept); + + if (resource->id != NULL) + free(resource->id); + + if (resource->password != NULL) + free(resource->password); + + if (resource->auth_type != NULL) + free(resource->auth_type); + + if (resource->auth_data != NULL) + free(resource->auth_data); + + free(resource); + _INNER_FUNC_EXIT; +} + +static request_msg_info_t *_create_request_msg_info(int sync_type, unsigned int request_id) +{ + _INNER_FUNC_ENTER; + request_msg_info_t *pInfo = (request_msg_info_t *) calloc(1, sizeof(request_msg_info_t)); + retvm_if(pInfo == NULL, NULL, "pInfo is NULL"); + + pInfo->sync_type = sync_type; + pInfo->request_id = request_id; + + _INNER_FUNC_EXIT; + return pInfo; +} + +static void _request_msg_info_free(request_msg_info_t * info) +{ + _INNER_FUNC_ENTER; + + if (info != NULL) + free(info); + + _INNER_FUNC_EXIT; +} + +static void *_string_copy_struct(void *string) +{ + _INNER_FUNC_ENTER; + + void *data = NULL; + data = strdup((const char *)string); + + _INNER_FUNC_EXIT; + return data; +} + +sync_agent_ec_task_spec_s *make_synchronize_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_structure("syncMode", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_structure("sanPackage", NULL, sanPackageParserFree, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *param_spec_array[3] = { pParam_spec1, pParam_spec2, pParam_spec3 }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("synchronize", + synchronize_task_process, NULL, NULL, + 3, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_add_profile_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_structure("profileDirName", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_structure("profileName", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_structure("addr", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_structure("id", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_structure("password", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_structure("syncMode", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_structure("syncType", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_structure("interval", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec9 = sync_agent_alloc_param_spec_structure("categories", NULL, _free_sync_categorie_list, + true, false, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *pParam_spec10 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec11 = sync_agent_alloc_param_spec_int("accountId", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[11] = { pParam_spec1, pParam_spec2, pParam_spec3, pParam_spec4, pParam_spec5, + pParam_spec6, pParam_spec7, pParam_spec8, pParam_spec9, pParam_spec10, pParam_spec11 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("add_profile", + add_profile_task_process, NULL, NULL, + 11, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + sync_agent_unref_param_spec(pParam_spec8); + sync_agent_unref_param_spec(pParam_spec9); + sync_agent_unref_param_spec(pParam_spec10); + sync_agent_unref_param_spec(pParam_spec11); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_edit_profile_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_structure("profileName", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_structure("addr", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_structure("id", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_structure("password", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_structure("syncMode", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_structure("syncType", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_structure("interval", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec9 = sync_agent_alloc_param_spec_structure("categories", NULL, _free_sync_categorie_list, + true, false, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *pParam_spec10 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[10] = { pParam_spec1, pParam_spec2, pParam_spec3, pParam_spec4, pParam_spec5, + pParam_spec6, pParam_spec7, pParam_spec8, pParam_spec9, pParam_spec10 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("edit_profile", + edit_profile_task_process, NULL, NULL, + 10, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + sync_agent_unref_param_spec(pParam_spec8); + sync_agent_unref_param_spec(pParam_spec9); + sync_agent_unref_param_spec(pParam_spec10); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_delete_profile_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_structure("profiles", NULL, _free_delete_profile_list, + true, false, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[2] = { pParam_spec1, pParam_spec2 }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("delete_profile", + delete_profile_task_process, NULL, NULL, + 2, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_get_profile_data_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_structure("profileName", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_structure("addr", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_structure("id", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_structure("password", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_structure("syncMode", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_structure("syncType", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec9 = sync_agent_alloc_param_spec_structure("interval", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec10 = sync_agent_alloc_param_spec_int("lastSessionStatus", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec11 = sync_agent_alloc_param_spec_int("lastSessionTime", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[11] = { pParam_spec1, pParam_spec2, pParam_spec3, + pParam_spec4, pParam_spec5, pParam_spec6, pParam_spec7, pParam_spec8, + pParam_spec9, pParam_spec10, pParam_spec11 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("get_profile_data", + get_profile_data_task_process, NULL, NULL, + 11, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + sync_agent_unref_param_spec(pParam_spec8); + sync_agent_unref_param_spec(pParam_spec9); + sync_agent_unref_param_spec(pParam_spec10); + sync_agent_unref_param_spec(pParam_spec11); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_get_profile_sync_category_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_int("contentType", true, false, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_int("enabled", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_structure("srcURI", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_structure("tgtURI", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_structure("id", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_structure("password", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *param_spec_array[8] = { pParam_spec1, pParam_spec2, pParam_spec3, pParam_spec4, + pParam_spec5, pParam_spec6, pParam_spec7, pParam_spec8 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("get_profile_sync_category", + get_profile_sync_category_task_process, NULL, NULL, + 8, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + sync_agent_unref_param_spec(pParam_spec8); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_get_profile_statistics_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_int("contentType", true, false, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_structure("dbSynced", _string_copy_struct, free, + false, true, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_int("lastSessionTime", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_int("server2Client_Total", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_int("server2Client_NrOfAdd", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_int("server2Client_NrOfDelete", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec9 = sync_agent_alloc_param_spec_int("server2Client_NrOfReplace", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec10 = sync_agent_alloc_param_spec_int("client2Server_Total", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec11 = sync_agent_alloc_param_spec_int("client2Server_NrOfAdd", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec12 = sync_agent_alloc_param_spec_int("client2Server_NrOfDelete", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec13 = sync_agent_alloc_param_spec_int("client2Server_NrOfReplace", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[13] = { pParam_spec1, pParam_spec2, pParam_spec3, + pParam_spec4, pParam_spec5, pParam_spec6, pParam_spec7, pParam_spec8, + pParam_spec9, pParam_spec10, pParam_spec11, pParam_spec12, pParam_spec13 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("get_profile_statistics", + get_profile_statistics_task_process, NULL, NULL, + 13, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + sync_agent_unref_param_spec(pParam_spec8); + sync_agent_unref_param_spec(pParam_spec9); + sync_agent_unref_param_spec(pParam_spec10); + sync_agent_unref_param_spec(pParam_spec11); + sync_agent_unref_param_spec(pParam_spec12); + sync_agent_unref_param_spec(pParam_spec13); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_reset_synchronizing_profiles_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("reset_synchronizing_profiles", + reset_synchronizing_profiles_task_process, NULL, NULL, + 0, NULL); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_add_profile_cp_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_structure("profileName", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_structure("addr", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec3 = sync_agent_alloc_param_spec_structure("id", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec4 = sync_agent_alloc_param_spec_structure("password", _string_copy_struct, free, + true, false, false, NULL, false, NULL, false, NULL); + sync_agent_ec_param_spec_s *pParam_spec5 = sync_agent_alloc_param_spec_structure("categories", NULL, _free_resource_cp_list, + true, false, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_int("accountId", false, true, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[7] = { pParam_spec1, pParam_spec2, pParam_spec3, pParam_spec4, pParam_spec5, + pParam_spec6, pParam_spec7 + }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("add_profile_cp", + add_profile_cp_task_process, NULL, NULL, + 7, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + sync_agent_unref_param_spec(pParam_spec2); + sync_agent_unref_param_spec(pParam_spec3); + sync_agent_unref_param_spec(pParam_spec4); + sync_agent_unref_param_spec(pParam_spec5); + sync_agent_unref_param_spec(pParam_spec6); + sync_agent_unref_param_spec(pParam_spec7); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_refresh_from_service_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("accountId", true, false, false, 0, 0, false, 0, false, 0, 0); + + sync_agent_ec_param_spec_s *param_spec_array[1] = { pParam_spec1 }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("refresh_from_service", + refresh_from_service_task_process, NULL, NULL, + 1, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_cancel_request_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("cancel_sync_request", + cancel_sync_request_task_process, NULL, NULL, + 0, NULL); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_reset_all_data_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *param_spec_array[1] = { pParam_spec1 }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("reset_all_data", + reset_all_data_task_process, NULL, NULL, + 1, param_spec_array); + + sync_agent_unref_param_spec(pParam_spec1); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_spec_s *make_get_all_profiles_data_task() +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_param_spec_s *pParam_spec1 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); + sync_agent_ec_param_spec_s *pParam_spec2 = sync_agent_alloc_param_spec_structure("profilesData", NULL, NULL, + false, true, false, NULL, false, NULL, false, NULL); + + sync_agent_ec_param_spec_s *param_spec_array[2] = { pParam_spec1, pParam_spec2 }; + + sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("get_all_profiles_data", + get_all_profiles_data_task_process, NULL, NULL, + 2, param_spec_array); + + _EXTERN_FUNC_EXIT; + return pTask_spec; +} + +sync_agent_ec_task_error_e synchronize_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId = 0; + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + retvm_if(accountId < 0, SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED, "account id = %d", accountId); + + char *syncMode = NULL; + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncMode); + + san_package_s *pSanPackage = NULL; + sync_agent_get_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &pSanPackage); + + _DEBUG_INFO("accountId = %d", accountId); + _DEBUG_INFO("syncMode = %s", syncMode); + + bool result = synchronize(accountId, syncMode, pSanPackage); + if (result == false) + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e add_profile_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + char *profileDirName = NULL; + char *profileName = NULL; + char *addr = NULL; + char *id = NULL; + char *password = NULL; + char *syncMode = NULL; + char *syncType = NULL; + char *interval = NULL; + GList *categories = NULL; + int accountId; + + bool res; + int result; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileDirName); + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileName); + sync_agent_get_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &addr); + sync_agent_get_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); + sync_agent_get_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); + sync_agent_get_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncMode); + sync_agent_get_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncType); + sync_agent_get_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &interval); + sync_agent_get_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &categories); + + res = add_profile(profileDirName, profileName, addr, id, password, syncMode, syncType, interval, categories, &accountId); + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[9]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[10]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + + /*step 2 : start refresh_from_service for added account */ + void *in_param_value_array[1] = { &accountId }; + int in_param_index_array[1] = { 0 }; + sync_agent_ec_value_type_e in_param_value_type_array[1] = { SYNC_AGENT_EC_VALUE_TYPE_INT }; + unsigned int request_msg_id = 0; + sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_REFRESH_FROM_SERVICE, 0, 1, in_param_index_array, in_param_value_type_array, in_param_value_array, NULL, NULL, (int *)&request_msg_id); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e edit_profile_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId; + char *profileName = NULL; + char *addr = NULL; + char *id = NULL; + char *password = NULL; + char *syncMode = NULL; + char *syncType = NULL; + char *interval = NULL; + GList *categories = NULL; + + bool res; + int result; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileName); + sync_agent_get_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &addr); + sync_agent_get_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); + sync_agent_get_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); + sync_agent_get_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncMode); + sync_agent_get_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncType); + sync_agent_get_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &interval); + sync_agent_get_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &categories); + + res = edit_profile(accountId, profileName, addr, id, password, syncMode, syncType, interval, categories); + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[9]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e delete_profile_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + bool res; + int result; + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + GList *profiles = NULL; + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profiles); + + res = delete_profiles(profiles); + if (res == 0) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + + _EXTERN_FUNC_EXIT; + return err; + +} + +sync_agent_ec_task_error_e get_profile_data_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId = 0; + char *profileName = NULL; + char *addr = NULL; + char *id = NULL; + char *password = NULL; + char *syncMode = NULL; + char *syncType = NULL; + char *interval = NULL; + int lastSessionStatus; + int lastSessionTime; + int result; + bool res; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + retvm_if(accountId < 0, SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED, "account id = %d", accountId); + + res = get_profile_data(accountId, &profileName, &addr, &id, &password, &syncMode, &syncType, &interval, &lastSessionStatus, &lastSessionTime); + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileName); + sync_agent_set_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &addr); + sync_agent_set_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); + sync_agent_set_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); + sync_agent_set_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncMode); + sync_agent_set_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &syncType); + sync_agent_set_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &interval); + sync_agent_set_param_value(&(param_array[9]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &lastSessionStatus); + sync_agent_set_param_value(&(param_array[10]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &lastSessionTime); + + _EXTERN_FUNC_EXIT; + return err; + +} + +sync_agent_ec_task_error_e get_profile_sync_category_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId = 0; + int contentType; + + int enabled = 0; + char *srcURI = NULL; + char *tgtURI = NULL; + char *id = NULL; + char *password = NULL; + bool res; + int result = 0; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + retvm_if(accountId < 0, SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED, "account id = %d", accountId); + + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &contentType); + + res = get_profile_sync_category(accountId, contentType, &enabled, &srcURI, &tgtURI, &id, &password); + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &enabled); + sync_agent_set_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &srcURI); + sync_agent_set_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &tgtURI); + sync_agent_set_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); + sync_agent_set_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e get_profile_statistics_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId = 0; + int contentType; + + char *dbSynced = NULL; + int lastSessionTime = -1; + int server2Client_Total = 0; + int server2Client_NrOfAdd = 0; + int server2Client_NrOfDelete = 0; + int server2Client_NrOfReplace = 0; + int client2Server_Total = 0; + int client2Server_NrOfAdd = 0; + int client2Server_NrOfDelete = 0; + int client2Server_NrOfReplace = 0; + + bool res; + int result; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + retvm_if(accountId < 0, SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED, "account id = %d", accountId); + + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &contentType); + + res = get_profile_statistics(accountId, contentType, &dbSynced, &lastSessionTime, + &server2Client_Total, &server2Client_NrOfAdd, &server2Client_NrOfDelete, &server2Client_NrOfReplace, &client2Server_Total, &client2Server_NrOfAdd, &client2Server_NrOfDelete, &client2Server_NrOfReplace); + + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &dbSynced); + sync_agent_set_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &lastSessionTime); + sync_agent_set_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &server2Client_Total); + sync_agent_set_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &server2Client_NrOfAdd); + sync_agent_set_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &server2Client_NrOfDelete); + sync_agent_set_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &server2Client_NrOfReplace); + sync_agent_set_param_value(&(param_array[9]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &client2Server_Total); + sync_agent_set_param_value(&(param_array[10]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &client2Server_NrOfAdd); + sync_agent_set_param_value(&(param_array[11]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &client2Server_NrOfDelete); + sync_agent_set_param_value(&(param_array[12]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &client2Server_NrOfReplace); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e reset_synchronizing_profiles_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + reset_synchronizing_profiles(); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e add_profile_cp_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + char *profileName = NULL; + char *addr = NULL; + char *id = NULL; + char *password = NULL; + GList *categories = NULL; + int accountId; + + bool res; + int result; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileName); + sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &addr); + sync_agent_get_param_value(&(param_array[2]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); + sync_agent_get_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); + sync_agent_get_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &categories); + + res = add_profile_cp(profileName, addr, id, password, categories, &accountId); + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e refresh_from_service_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + int accountId; + bool res; + + sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + + res = refresh_from_service_all(accountId); + if (res == false) + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e cancel_sync_request_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + cancel_sync_request(); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e reset_all_data_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + int result = 1; + + /* delete all profiles */ + result = delete_all_profiles(); + + /* delete all agent default table */ + result = delete_all_agent_default_table(); + + sync_agent_set_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + + _EXTERN_FUNC_EXIT; + return err; +} + +sync_agent_ec_task_error_e get_all_profiles_data_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array) +{ + _EXTERN_FUNC_ENTER; + + sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; + + bool res; + int result; + GList *profiles_data = NULL; + + res = get_all_profiles_data(&profiles_data); + + if (res == false) { + err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; + result = 0; + } else + result = 1; + + sync_agent_set_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + sync_agent_set_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profiles_data); + + _EXTERN_FUNC_EXIT; + return err; + +} + +void insert_request_msg_info(int sync_type, unsigned int request_id) +{ + _EXTERN_FUNC_ENTER; + + sync_request_id_list = g_list_prepend(sync_request_id_list, _create_request_msg_info(sync_type, request_id)); + + _EXTERN_FUNC_EXIT; +} + +void delete_request_msg_info(unsigned int request_id) +{ + _EXTERN_FUNC_ENTER; + + GList *iter = NULL; + request_msg_info_t *pMsg_info = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->request_id == request_id) { + sync_request_id_list = g_list_remove_link(sync_request_id_list, iter); + break; + } + } + + if (iter != NULL) { + _request_msg_info_free(iter->data); + g_list_free_1(iter); + } + _EXTERN_FUNC_EXIT; +} + +bool get_synchronizing_request_id(unsigned int *pRequest_id) +{ + _EXTERN_FUNC_ENTER; + + bool success = false; + request_msg_info_t *pMsg_info = NULL; + GList *iter = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->sync_type == SYNC_MODE_MANUAL || pMsg_info->sync_type == SYNC_MODE_PERIODIC || pMsg_info->sync_type == SYNC_MODE_SAN) { + success = true; + *pRequest_id = pMsg_info->request_id; + + _request_msg_info_free(pMsg_info); + sync_request_id_list = g_list_delete_link(sync_request_id_list, iter); + + break; + } + } + + _EXTERN_FUNC_EXIT; + return success; +} + +bool get_manual_sync_request_id(unsigned int *pRequest_id) +{ + _EXTERN_FUNC_ENTER; + + bool success = false; + request_msg_info_t *pMsg_info = NULL; + GList *iter = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->sync_type == SYNC_MODE_MANUAL) { + success = true; + *pRequest_id = pMsg_info->request_id; + + _request_msg_info_free(pMsg_info); + sync_request_id_list = g_list_delete_link(sync_request_id_list, iter); + break; + } + } + + _EXTERN_FUNC_EXIT; + return success; +} + +bool get_periodic_sync_request_id(unsigned int *pRequest_id) +{ + _EXTERN_FUNC_ENTER; + + bool success = false; + request_msg_info_t *pMsg_info = NULL; + GList *iter = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->sync_type == SYNC_MODE_PERIODIC) { + success = true; + *pRequest_id = pMsg_info->request_id; + + _request_msg_info_free(pMsg_info); + sync_request_id_list = g_list_delete_link(sync_request_id_list, iter); + + break; + } + } + + _EXTERN_FUNC_EXIT; + return success; +} + +bool get_san_sync_request_id(unsigned int *pRequest_id) +{ + _EXTERN_FUNC_ENTER; + + bool success = false; + request_msg_info_t *pMsg_info = NULL; + GList *iter = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->sync_type == SYNC_MODE_SAN) { + success = true; + *pRequest_id = pMsg_info->request_id; + + _request_msg_info_free(pMsg_info); + sync_request_id_list = g_list_delete_link(sync_request_id_list, iter); + + break; + } + } + + _EXTERN_FUNC_EXIT; + return success; +} + +bool get_auto_configure_request_id(unsigned int *pRequest_id) +{ + _EXTERN_FUNC_ENTER; + + bool success = false; + request_msg_info_t *pMsg_info = NULL; + GList *iter = NULL; + + for (iter = sync_request_id_list; iter != NULL; iter = g_list_next(iter)) { + pMsg_info = iter->data; + + if (pMsg_info->sync_type == SYNC_MODE_AUTOCONFIG) { + success = true; + *pRequest_id = pMsg_info->request_id; + + _request_msg_info_free(pMsg_info); + sync_request_id_list = g_list_delete_link(sync_request_id_list, iter); + + break; + } + } + + _EXTERN_FUNC_EXIT; + return success; +} + +bool cancel_current_sync_task() +{ + _EXTERN_FUNC_ENTER; + + unsigned int request_msg_id_to_cancel = 0; + unsigned int request_msg_id = 0; + bool has_autoconfig = get_auto_configure_request_id(&request_msg_id_to_cancel); + if (has_autoconfig) { + _DEBUG_INFO("has_autoconfig [%d] ", request_msg_id_to_cancel); + sync_agent_cancel_task(request_msg_id_to_cancel); + } else { + bool has_sync = get_synchronizing_request_id(&request_msg_id_to_cancel); + if (has_sync) { + _DEBUG_INFO("has_manual_sync [%d] ", request_msg_id_to_cancel); + sync_agent_cancel_task(request_msg_id_to_cancel); + + /*request network session cancel */ + sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_CANCEL_SYNC_REQUEST, 0, 0, NULL, NULL, NULL, NULL, NULL, (int *)&request_msg_id); + } else { + /* nothing to do */ + } + } + + _EXTERN_FUNC_EXIT; + return true; +} |