/* * 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 #include #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, int profile_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, int profile_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; pInfo->profile_id = profile_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("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_int("syncMode", true, false, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec6 = sync_agent_alloc_param_spec_int("syncType", true, false, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_int("interval", true, false, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec8 = 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_spec9 = sync_agent_alloc_param_spec_int("result", false, true, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec10 = 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[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("add_profile", add_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_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_int("syncMode", true, false, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec7 = sync_agent_alloc_param_spec_int("syncType", true, false, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec8 = sync_agent_alloc_param_spec_int("interval", true, false, false, 0, 0, false, 0, false, 0, 0); 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_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("profiles", NULL, _free_delete_profile_list, true, false, false, NULL, false, NULL, false, NULL); 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 *param_spec_array[3] = { pParam_spec1, pParam_spec2, pParam_spec3 }; sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("delete_profile", delete_profile_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_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("profile_dir_name", _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("profile_name", _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("addr", _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("id", _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("password", _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_int("syncMode", false, true, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec9 = sync_agent_alloc_param_spec_int("syncType", false, true, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec10 = sync_agent_alloc_param_spec_int("interval", false, true, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec11 = sync_agent_alloc_param_spec_int("lastSessionStatus", false, true, false, 0, 0, false, 0, false, 0, 0); sync_agent_ec_param_spec_s *pParam_spec12 = 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[12] = { pParam_spec1, pParam_spec2, pParam_spec3, pParam_spec4, pParam_spec5, pParam_spec6, pParam_spec7, pParam_spec8, pParam_spec9, pParam_spec10, pParam_spec11, pParam_spec12 }; sync_agent_ec_task_spec_s *pTask_spec = sync_agent_alloc_simple_task_spec("get_profile_data", get_profile_data_task_process, NULL, NULL, 12, 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); _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_int("srcURI", false, true, false, 0, 0, false, 0, false, 0, 0); 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 *profileName = NULL; char *addr = NULL; char *id = NULL; char *password = NULL; int syncMode = 0; int syncType = 0; int interval = 0; 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_INT, &syncMode); sync_agent_get_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &syncType); sync_agent_get_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &interval); sync_agent_get_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &categories); res = add_profile(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[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); sync_agent_set_param_value(&(param_array[9]->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 profile_id = 0; int sync_profile_id = 0; char *profileName = NULL; char *addr = NULL; char *id = NULL; char *password = NULL; int syncMode = 0; int syncType = 0; int interval = 0; GList *categories = NULL; bool res = false; int result = 0; sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &profile_id); 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_INT, &syncMode); sync_agent_get_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &syncType); sync_agent_get_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &interval); sync_agent_get_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &categories); // get sync_profile_id res = get_synchronizing_profile_id(&sync_profile_id); if (res == false) { _DEBUG_INFO("get_synchronizing_profile_id failed!!"); } _DEBUG_INFO("profile_id: [%d]", profile_id); _DEBUG_INFO("sync_profile_id: [%d]", sync_profile_id); if (sync_profile_id != profile_id) { res = edit_profile(profile_id, profileName, addr, id, password, syncMode, syncType, interval, categories); if (res == false) { err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; _DEBUG_INFO("edit_profile failed!!"); result = 0; } else { _DEBUG_INFO("edit_profile success!!"); result = 1; } } else { _DEBUG_INFO("profile is synchronising!!"); result = 2; } 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 = false; int result = 0; sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; int profile_id = 0; int sync_profile_id = 0; GList *profiles = NULL; sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &profile_id); sync_agent_get_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profiles); // get sync_profile_id res = get_synchronizing_profile_id(&sync_profile_id); if (res == false) { _DEBUG_INFO("get_synchronizing_profile_id failed!!"); } _DEBUG_INFO("profile_id: [%d]", profile_id); _DEBUG_INFO("sync_profile_id: [%d]", sync_profile_id); if (sync_profile_id != profile_id) { res = delete_profiles(profiles); if (res == 0) { err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; _DEBUG_INFO("delete_profiles failed!!"); result = 0; } else { _DEBUG_INFO("delete_profiles success!!"); result = 1; } } else { _DEBUG_INFO("profile is synchronising!!"); result = 2; } sync_agent_set_param_value(&(param_array[2]->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 *profile_dir_name = NULL; char *profileName = NULL; char *addr = NULL; char *id = NULL; char *password = NULL; int sync_mode = 0; int syncType = 0; int interval = 0; 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 < 1, SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED, "account id = %d", accountId); res = get_profile_data(accountId, &profile_dir_name, &profileName, &addr, &id, &password, &sync_mode, &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, &profile_dir_name); sync_agent_set_param_value(&(param_array[3]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &profileName); sync_agent_set_param_value(&(param_array[4]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &addr); sync_agent_set_param_value(&(param_array[5]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &id); sync_agent_set_param_value(&(param_array[6]->param_value), SYNC_AGENT_EC_VALUE_TYPE_STRUCT, &password); sync_agent_set_param_value(&(param_array[7]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &sync_mode); sync_agent_set_param_value(&(param_array[8]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &syncType); sync_agent_set_param_value(&(param_array[9]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &interval); sync_agent_set_param_value(&(param_array[10]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &lastSessionStatus); sync_agent_set_param_value(&(param_array[11]->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; int srcURI = 0; 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_INT, &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, int profile_id) { _EXTERN_FUNC_ENTER; _DEBUG_INFO("sync_type: [%d]", sync_type); _DEBUG_INFO("request_id: [%d]", request_id); _DEBUG_INFO("profile_id: [%d]", profile_id); sync_request_id_list = g_list_prepend(sync_request_id_list, _create_request_msg_info(sync_type, request_id, profile_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_synchronizing_profile_id(int *pProfile_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; *pProfile_id = pMsg_info->profile_id; sync_request_id_list = g_list_first(sync_request_id_list); 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; }