Remove code duplicacy in service add/remove user 28/282028/1
authorAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 26 Sep 2022 08:40:25 +0000 (14:10 +0530)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 26 Sep 2022 08:58:28 +0000 (14:28 +0530)
Change-Id: Id4440a883d83b76dbfb95f0491e1ae5e09df7ae9
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
ua-daemon/src/ua-manager-core.c

index 004b7928c64790143b317243451a6140d2fd106f..348d527748af1d0504e736761c3d7488bdb7ee1d 100755 (executable)
@@ -2322,153 +2322,137 @@ static int _uam_core_update_svc_dev_info_discriminant(const char *device_id,
        return UAM_ERROR_NONE;
 }
 
-int _uam_core_service_add_user(const char *svc_name, const char *account, const int app_num)
+static int __uam_core_db_service_add_remove_user(const int app_num, uam_db_service_info_t *service,
+                                               uam_db_user_info_t *user, gboolean is_add)
 {
-       FUNC_ENTRY;
        GSList *l;
        int ret = UAM_ERROR_NONE;
-       uam_db_user_info_t *user;
-       uam_db_service_info_t *service;
-
-       retv_if(NULL == account, UAM_ERROR_INVALID_PARAMETER);
-       retv_if(NULL == svc_name, UAM_ERROR_INVALID_PARAMETER);
 
-       /* Retrieve user from list */
-       l = __search_user(account, app_num);
-       retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
-       user = l->data;
-
-       /* Retrieve service from list */
-       l = __search_service(services, svc_name, app_num);
-       retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
-
-       service = l->data;
+       retv_if(NULL == user, UAM_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == service, UAM_ERROR_INVALID_PARAMETER);
 
        retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
        for (l = user->devices; NULL != l; l = g_slist_next(l)) {
                uam_db_device_info_t *device = l->data;
-               GSList *l1;
-
                if (!device)
                        continue;
 
+               GSList *l1;
                for (l1 = device->tech_list; NULL != l1; l1 = g_slist_next(l1)) {
                        uam_db_tech_info_t *tech = l1->data;
-                       char *mac;
-                       GSList *l2;
-
                        if (!tech)
                                continue;
 
-                       l2 = __search_service(tech->svc_list, svc_name, app_num);
-                       if (NULL != l2)
-                               continue;
+                       char *mac = __get_mac_addr(tech);
+                       GSList *l2 = __search_service(tech->svc_list, service->name, app_num);
 
-                       __add_service_to_dev_tech_mapping(tech, service);
+                       if (is_add) {
+                               if (NULL != l2)
+                                       continue;
 
-                       mac = __get_mac_addr(tech);
+                               __add_service_to_dev_tech_mapping(tech, service);
 
-                       /* Insert device service info to db */
-                       ret = _uam_db_insert_device_service_info(device->device_id,
-                                               tech->tech_type, mac, service->name, service->cycle,
-                                               device->discriminant, 0, app_num);
-                       if (UAM_ERROR_NONE != ret) {
-                               UAM_WARN("Device service addition to persistent DB failed");
-                               __uam_db_end_transaction(0);
-                               return ret;
-                       }
+                               /* Insert device service info to db */
+                               ret = _uam_db_insert_device_service_info(device->device_id,
+                                                       tech->tech_type, mac, service->name, service->cycle,
+                                                       device->discriminant, 0, app_num);
+                               if (UAM_ERROR_NONE != ret) {
+                                       UAM_WARN("Device service addition to persistent DB failed");
+                                       __uam_db_end_transaction(0);
+                                       return ret;
+                               }
 
-                       ret = _uam_core_update_svc_dev_info(device->device_id, tech->tech_type,
-                                               service->name, device->discriminant, 0, NULL, app_num);
-                       if (UAM_ERROR_NONE != ret) {
-                               UAM_WARN("Device service addition to service device mapping failed");
-                               __uam_db_end_transaction(0);
-                               return ret;
+                               ret = _uam_core_update_svc_dev_info(device->device_id, tech->tech_type,
+                                                       service->name, device->discriminant, 0, NULL, app_num);
+                               if (UAM_ERROR_NONE != ret) {
+                                       UAM_WARN("Device service addition to service device mapping failed");
+                                       __uam_db_end_transaction(0);
+                                       return ret;
+                               }
+                       } else {
+                               if (NULL == l2)
+                                       continue;
+
+                               UAM_DBG("Service %s found, remove it from list", service->name);
+                               __remove_service_to_dev_tech_mapping(
+                                               tech, (uam_db_service_info_t *)l2->data);
+
+                               /* Remove service-device from DB */
+                               ret = _uam_db_delete_device_service_info(device->device_id,
+                                               tech->tech_type, mac, service->name, app_num);
+                               if (UAM_ERROR_NONE != ret) {
+                                       UAM_WARN("Device service removal from persistent DB failed");
+                                       __uam_db_end_transaction(0);
+                                       return ret;
+                               }
                        }
                }
        }
 
        __uam_db_end_transaction(1);
-
-       /* Add service to user mapping */
-       l = __search_svc_user(svc_name, account, app_num);
-
-       if (!l) {
-               uam_svc_user_info_t *svc_user = g_new0(uam_svc_user_info_t, 1);
-               svc_user->svc_name = g_strdup(svc_name);
-               svc_user->account = g_strdup(account);
-               svc_user->app_num = app_num;
-
-               svc_users = g_slist_prepend(svc_users, svc_user);
-       } else {
-               UAM_INFO("USER SERVICE MAPPING ALLREADY PRESENT.");
-       }
-
-       FUNC_EXIT;
        return ret;
 }
 
-int _uam_core_service_remove_user(const char *svc_name, const char *account, const int app_num)
+static int __uam_core_service_add_remove_user(const char *svc_name,
+                       const char *account, const int app_num, gboolean is_add)
 {
-       FUNC_ENTRY;
        GSList *l;
        uam_db_user_info_t *user;
-       int ret = UAM_ERROR_NONE;
+       uam_db_service_info_t *service;
 
        retv_if(NULL == account, UAM_ERROR_INVALID_PARAMETER);
        retv_if(NULL == svc_name, UAM_ERROR_INVALID_PARAMETER);
-       retv_if(app_num <= 0, UAM_ERROR_INVALID_PARAMETER);
 
        /* Retrieve user from list */
        l = __search_user(account, app_num);
        retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
-
        user = l->data;
 
        /* Retrieve service from list */
        l = __search_service(services, svc_name, app_num);
        retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
 
-       retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
-       for (l = user->devices; NULL != l; l = g_slist_next(l)) {
-               uam_db_device_info_t *device = l->data;
-               GSList *l1;
-
-               if (!device)
-                       continue;
+       service = l->data;
 
-               for (l1 = device->tech_list; NULL != l1; l1 = g_slist_next(l1)) {
-                       uam_db_tech_info_t *tech = l1->data;
-                       char *mac;
-                       GSList *l2;
+       return __uam_core_db_service_add_remove_user(app_num, service, user, is_add);
+}
 
-                       if (!tech)
-                               continue;
+int _uam_core_service_add_user(const char *svc_name, const char *account, const int app_num)
+{
+       FUNC_ENTRY;
+       GSList *l;
+       int ret = UAM_ERROR_NONE;
 
-                       l2 = __search_service(tech->svc_list, svc_name, app_num);
-                       if (NULL == l2)
-                               continue;
+       ret = __uam_core_service_add_remove_user(svc_name, account, app_num, TRUE);
+       retv_if(UAM_ERROR_NONE != ret, ret);
 
-                       UAM_DBG("Service %s found, remove it from list", svc_name);
-                       __remove_service_to_dev_tech_mapping(
-                                       tech, (uam_db_service_info_t *)l2->data);
+       /* Add service to user mapping */
+       l = __search_svc_user(svc_name, account, app_num);
+       if (!l) {
+               uam_svc_user_info_t *svc_user = g_new0(uam_svc_user_info_t, 1);
+               svc_user->svc_name = g_strdup(svc_name);
+               svc_user->account = g_strdup(account);
+               svc_user->app_num = app_num;
 
-                       mac = __get_mac_addr(tech);
-                       /* Remove service-device from DB */
-                       ret = _uam_db_delete_device_service_info(device->device_id,
-                                       tech->tech_type, mac, svc_name, app_num);
-                       if (UAM_ERROR_NONE != ret) {
-                               UAM_WARN("Device service removal from persistent DB failed");
-                               __uam_db_end_transaction(0);
-                               return ret;
-                       }
-               }
+               svc_users = g_slist_prepend(svc_users, svc_user);
+       } else {
+               UAM_INFO("USER SERVICE MAPPING ALLREADY PRESENT.");
        }
 
-       __uam_db_end_transaction(1);
+       FUNC_EXIT;
+       return ret;
+}
+
+int _uam_core_service_remove_user(const char *svc_name, const char *account, const int app_num)
+{
+       FUNC_ENTRY;
+       GSList *l;
+       int ret = UAM_ERROR_NONE;
 
-       /* Removne service-user mapping from svc_users */
+       ret = __uam_core_service_add_remove_user(svc_name, account, app_num, FALSE);
+       retv_if(UAM_ERROR_NONE != ret, ret);
 
+       /* Remove service-user mapping from svc_users */
        l = __search_svc_user(svc_name, account, app_num);
        retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);