[JIRA:N_SE-30007] Get profilesNum failed.
authorsanghyuk Ko <sanghyuk.ko@samsung.com>
Tue, 30 Apr 2013 04:30:41 +0000 (13:30 +0900)
committersanghyuk Ko <sanghyuk.ko@samsung.com>
Tue, 30 Apr 2013 06:36:42 +0000 (15:36 +0900)
[Problem]
-
[Cause]
-
[Solution]
- When synchronising, edit/delete request block.

Change-Id: Ia79cdd01db49fc9472159d210f979d53d6032d29

include/framework/task/oma_ds_engine_controller_task.h
src/agent/framework/event/oma_ds_event_handler.c
src/agent/framework/event/oma_ds_platform_event_handler.c
src/agent/framework/task/oma_ds_engine_controller_task.c

index f4b3ccc..c40cc40 100755 (executable)
@@ -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
@@ -836,6 +838,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
  *
  *
index 853536f..3b331d7 100755 (executable)
@@ -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, &param_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, &param_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;
index 31053ca..b348375 100755 (executable)
@@ -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);
 
index 5d5e881..6aedaa6 100755 (executable)
@@ -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;