From e1ec5a5a2de572cfdd9e1288da6ed6f64a5c317c Mon Sep 17 00:00:00 2001 From: sanghyuk Ko Date: Tue, 30 Apr 2013 13:30:41 +0900 Subject: [JIRA:N_SE-30007] Get profilesNum failed. [Problem] - [Cause] - [Solution] - When synchronising, edit/delete request block. Change-Id: Ia79cdd01db49fc9472159d210f979d53d6032d29 --- .../framework/task/oma_ds_engine_controller_task.h | 33 +++++- src/agent/framework/event/oma_ds_event_handler.c | 32 ++++-- .../event/oma_ds_platform_event_handler.c | 6 +- .../framework/task/oma_ds_engine_controller_task.c | 127 ++++++++++++++++----- 4 files changed, 156 insertions(+), 42 deletions(-) diff --git a/include/framework/task/oma_ds_engine_controller_task.h b/include/framework/task/oma_ds_engine_controller_task.h index f4b3ccc..c40cc40 100755 --- a/include/framework/task/oma_ds_engine_controller_task.h +++ b/include/framework/task/oma_ds_engine_controller_task.h @@ -36,6 +36,7 @@ typedef struct request_msg_info_s request_msg_info_t; struct request_msg_info_s { int sync_type; unsigned int request_id; + int profile_id; }; #define EC_MSG_TYPE_SYNC_TASK_REQUEST 1 @@ -675,7 +676,7 @@ sync_agent_ec_task_error_e cancel_sync_request_task_process(unsigned int param_c sync_agent_ec_task_error_e reset_all_data_task_process(unsigned int param_cnt, sync_agent_ec_param_param_s ** param_array); /** - * @par Description: This API is callback function which runs when reset function is requested + * @par Description: This API is callback function which runs when all profiles data gets. * * * @par Purpose: @@ -765,6 +766,7 @@ sync_agent_ec_task_error_e refresh_from_service_task_process(unsigned int param_ * @par Important notes: * @param[in] sync_type(SYNC_MODE_MANUAL, SYNC_MODE_PERIODIC, SYNC_MODE_SAN, SYNC_MODE_AUTOCONFIG) * @param[in] request id + * @param[in] profile_id * @param[out] * * @return @@ -780,7 +782,7 @@ sync_agent_ec_task_error_e refresh_from_service_task_process(unsigned int param_ * @code * @endcode */ -void insert_request_msg_info(int sync_type, unsigned int request_id); +void insert_request_msg_info(int sync_type, unsigned int request_id, int profile_id); /** * @par Description: API to delete request_msg_info_t structure from list @@ -835,6 +837,33 @@ void delete_request_msg_info(unsigned int request_id); */ bool get_synchronizing_request_id(unsigned int *request_id); +/** + * @par Description: API to get synchronizing profile id + * + * + * @par Purpose: + * @par Typical use case: + * @par Method of function operation: + * @par Important notes: + * @param[in] + * @param[out] pProfile_id + * + * @return true on success + * false on error + * + * @par Errors: + * + * @pre None. + * @post + * @see + * @remarks None. + * + * @par Sample Code: + * @code + * @endcode + */ +bool get_synchronizing_profile_id(int *pProfile_id); + /** * @par Description: API to get manual sync request id and delete request_msg_info_t structure from list * diff --git a/src/agent/framework/event/oma_ds_event_handler.c b/src/agent/framework/event/oma_ds_event_handler.c index 853536f..3b331d7 100755 --- a/src/agent/framework/event/oma_ds_event_handler.c +++ b/src/agent/framework/event/oma_ds_event_handler.c @@ -301,12 +301,12 @@ int event_callback_delete_profile_sync(sync_agent_event_data_s * request, sync_a _EXTERN_FUNC_ENTER; int result = 0; - int count; + int count = 0; sync_agent_get_event_data_param_int(request, &count); GList *profiles = NULL; int *account_id = 0; - int i; + int i = 0; char *profile = NULL; for (i = 0; i < count; i++) { if (profile != NULL) { @@ -335,16 +335,16 @@ int event_callback_delete_profile_sync(sync_agent_event_data_s * request, sync_a } /* send to engine controller */ - void *in_param_value_array[1] = { &profiles }; - int in_param_index_array[1] = { 0 }; - sync_agent_ec_value_type_e in_param_value_type_array[1] = { SYNC_AGENT_EC_VALUE_TYPE_STRUCT }; + void *in_param_value_array[2] = { account_id, &profiles }; + int in_param_index_array[2] = { 0, 1 }; + sync_agent_ec_value_type_e in_param_value_type_array[2] = { SYNC_AGENT_EC_VALUE_TYPE_INT, SYNC_AGENT_EC_VALUE_TYPE_STRUCT }; unsigned int request_msg_id = 0; - unsigned int out_param_count; + unsigned int out_param_count = 0; sync_agent_ec_task_error_e task_error = SYNC_AGENT_EC_TASK_ERROR_NOT_YET_RUN; sync_agent_ec_param_param_s **param_array = NULL; - sync_agent_request_sync_task(EC_MSG_TYPE_SYNC_TASK_DELETE_PROFILE, 0, 1, in_param_index_array, in_param_value_type_array, in_param_value_array, (int *)&request_msg_id, &task_error, &out_param_count, ¶m_array); + sync_agent_request_sync_task(EC_MSG_TYPE_SYNC_TASK_DELETE_PROFILE, 0, 2, in_param_index_array, in_param_value_type_array, in_param_value_array, (int *)&request_msg_id, &task_error, &out_param_count, ¶m_array); sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); @@ -352,8 +352,10 @@ int event_callback_delete_profile_sync(sync_agent_event_data_s * request, sync_a sync_agent_append_event_data_param(response, SYNC_AGENT_EVENT_PARAM_TYPE_INTEGER, &result); - if (profile != NULL) + if (profile != NULL) { free(profile); + profile = NULL; + } _EXTERN_FUNC_EXIT; return 0; @@ -376,20 +378,30 @@ int event_callback_request_sync_sync(sync_agent_event_data_s * request, sync_age int account_id = get_account_id(profile, false); char *sync_mode = strdup(DEFINE_SYNC_MODE_MANUAL); + if (account_id < 1) { + _DEBUG_ERROR("account_id is invalid!!"); + result = 0; + } else { + _DEBUG_INFO("account_id: [%d]", account_id); + result = 1; + } + void *in_param_value_array[3] = { &account_id, &sync_mode, NULL }; int in_param_index_array[3] = { 0, 1, 2 }; sync_agent_ec_value_type_e in_param_value_type_array[3] = { SYNC_AGENT_EC_VALUE_TYPE_INT, SYNC_AGENT_EC_VALUE_TYPE_STRUCT, SYNC_AGENT_EC_VALUE_TYPE_STRUCT }; unsigned int request_msg_id = 0; sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_REQUEST, 0, 3, in_param_index_array, in_param_value_type_array, in_param_value_array, _request_manual_sync_task_finish_callback, NULL, (int *)&request_msg_id); - insert_request_msg_info(SYNC_MODE_MANUAL, request_msg_id); + insert_request_msg_info(SYNC_MODE_MANUAL, request_msg_id, account_id); error: sync_agent_append_event_data_param(response, SYNC_AGENT_EVENT_PARAM_TYPE_INTEGER, &result); - if (profile != NULL) + if (profile != NULL) { free(profile); + profile = NULL; + } _EXTERN_FUNC_EXIT; return 0; diff --git a/src/agent/framework/event/oma_ds_platform_event_handler.c b/src/agent/framework/event/oma_ds_platform_event_handler.c index 31053ca..b348375 100755 --- a/src/agent/framework/event/oma_ds_platform_event_handler.c +++ b/src/agent/framework/event/oma_ds_platform_event_handler.c @@ -147,7 +147,7 @@ int san_callback_parse(int item_id, void *user_data) unsigned int request_msg_id = 0; sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_REQUEST, 0, 3, in_param_index_array, in_param_type, in_param_value_array, _request_san_sync_task_finish_callback, NULL, (int *)&request_msg_id); - insert_request_msg_info(SYNC_MODE_SAN, request_msg_id); + insert_request_msg_info(SYNC_MODE_SAN, request_msg_id, accountID); sync_agent_close_agent(); @@ -246,7 +246,7 @@ void send_periodic_sync_msg(int scheduler_id, void *data) unsigned int request_msg_id = 0; sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_REQUEST, 0, 3, in_param_index_array, in_param_value_type_array, in_param_value_array, _request_periodic_sync_task_finish_callback, NULL, (int *)&request_msg_id); - insert_request_msg_info(SYNC_MODE_PERIODIC, request_msg_id); + insert_request_msg_info(SYNC_MODE_PERIODIC, request_msg_id, accountId); } error: @@ -323,7 +323,7 @@ int send_ip_push_sync_msg(char *data) unsigned int request_msg_id = 0; sync_agent_request_async_task(EC_MSG_TYPE_SYNC_TASK_REQUEST, 0, 3, in_param_index_array, in_param_value_type_array, in_param_value_array, _request_san_sync_task_finish_callback, NULL, (int *)&request_msg_id); - insert_request_msg_info(SYNC_MODE_SAN, request_msg_id); + insert_request_msg_info(SYNC_MODE_SAN, request_msg_id, accountId); sync_agent_free_fw_account_list(account_info_list); diff --git a/src/agent/framework/task/oma_ds_engine_controller_task.c b/src/agent/framework/task/oma_ds_engine_controller_task.c index 5d5e881..6aedaa6 100755 --- a/src/agent/framework/task/oma_ds_engine_controller_task.c +++ b/src/agent/framework/task/oma_ds_engine_controller_task.c @@ -43,7 +43,7 @@ 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 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); @@ -116,7 +116,7 @@ static void __free_resource_cp(resource_cp_s * resource) _INNER_FUNC_EXIT; } -static request_msg_info_t *_create_request_msg_info(int sync_type, unsigned int request_id) +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)); @@ -124,6 +124,7 @@ static request_msg_info_t *_create_request_msg_info(int sync_type, unsigned int pInfo->sync_type = sync_type; pInfo->request_id = request_id; + pInfo->profile_id = profile_id; _INNER_FUNC_EXIT; return pInfo; @@ -265,19 +266,21 @@ 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, + 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_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_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_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, - 2, param_spec_array); + 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; @@ -614,7 +617,8 @@ sync_agent_ec_task_error_e edit_profile_task_process(unsigned int param_cnt, syn sync_agent_ec_task_error_e err = SYNC_AGENT_EC_TASK_ERROR_RUN_SUCCESS; - int accountId; + int profile_id = 0; + int sync_profile_id = 0; char *profileName = NULL; char *addr = NULL; char *id = NULL; @@ -624,10 +628,10 @@ sync_agent_ec_task_error_e edit_profile_task_process(unsigned int param_cnt, syn int interval = 0; GList *categories = NULL; - bool res; - int result; + bool res = false; + int result = 0; - sync_agent_get_param_value(&(param_array[0]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &accountId); + 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); @@ -637,12 +641,30 @@ sync_agent_ec_task_error_e edit_profile_task_process(unsigned int param_cnt, syn 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); - res = edit_profile(accountId, profileName, addr, id, password, syncMode, syncType, interval, categories); + // get sync_profile_id + res = get_synchronizing_profile_id(&sync_profile_id); + if (res == false) { - err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; - result = 0; - } else - result = 1; + _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); @@ -654,21 +676,43 @@ sync_agent_ec_task_error_e delete_profile_task_process(unsigned int param_cnt, s { _EXTERN_FUNC_ENTER; - bool res; - int result; + 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_STRUCT, &profiles); - res = delete_profiles(profiles); - if (res == 0) { - err = SYNC_AGENT_EC_TASK_ERROR_RUN_FAILED; - result = 0; - } else - result = 1; + 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); - sync_agent_set_param_value(&(param_array[1]->param_value), SYNC_AGENT_EC_VALUE_TYPE_INT, &result); + // 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; @@ -939,11 +983,15 @@ sync_agent_ec_task_error_e get_all_profiles_data_task_process(unsigned int param } -void insert_request_msg_info(int sync_type, unsigned int request_id) +void insert_request_msg_info(int sync_type, unsigned int request_id, int profile_id) { _EXTERN_FUNC_ENTER; - sync_request_id_list = g_list_prepend(sync_request_id_list, _create_request_msg_info(sync_type, request_id)); + _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; } @@ -997,6 +1045,31 @@ bool get_synchronizing_request_id(unsigned int *pRequest_id) 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; -- cgit v1.2.3