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);