retv_if(NULL == tmp_svc_user->account, -1);
if (g_strcmp0(svc_user->svc_name, tmp_svc_user->svc_name) == 0)
- return g_strcmp0(svc_user->account, tmp_svc_user->account);
+ if (g_strcmp0(svc_user->account, tmp_svc_user->account) == 0)
+ return svc_user->app_num == tmp_svc_user->app_num ? 0 : -1;
+ else
+ return -1;
else
- return g_strcmp0(svc_user->svc_name, tmp_svc_user->svc_name);
+ return -1;
}
static gint __compare_svc_user_account(gconstpointer data, gconstpointer user_data)
{
const uam_svc_user_info_t *svc_user = data;
- const char *account = user_data;
+ const uam_db_user_info_t *user = user_data;
retv_if(NULL == svc_user, -1);
- retv_if(NULL == account, -1);
+ retv_if(NULL == user, -1);
- return g_strcmp0(svc_user->account, account);
+ if (g_strcmp0(svc_user->account, user->account) == 0)
+ return svc_user->app_num == user->app_num ? 0 : -1;
+ else
+ return -1;
}
static gint __compare_payload(gconstpointer data, gconstpointer user_data)
return l;
}
+GSList* __search_svc_user(const char* svc_name, const char* account, int app_num)
+{
+ GSList* l;
+
+ uam_svc_user_info_t *svc_user;
+
+ 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;
+
+ l = g_slist_find_custom(svc_users, svc_user, __compare_svc_user);
+
+ free_n_null(&(svc_user->svc_name));
+ free_n_null(&(svc_user->account));
+ free_n_null(&svc_user);
+
+ return l;
+}
+
GSList* __search_device(const char *device_id, int app_num)
{
/* Search device in existing device list */
if (!user_info)
continue;
- uam_svc_user_info_t *svc_user = g_new0(uam_svc_user_info_t, 1);
+ tmp = __search_svc_user(svc_dev->service, user_info->account, svc_dev->app_num);
+ if (!tmp) {
- svc_user->svc_name = g_strdup(svc_dev->service);
- svc_user->account = g_strdup(user_info->account);
+ uam_svc_user_info_t *svc_user = g_new0(uam_svc_user_info_t, 1);
+ svc_user->svc_name = g_strdup(svc_dev->service);
+ svc_user->account = g_strdup(user_info->account);
+ svc_user->app_num = svc_dev->app_num;
- tmp = g_slist_find_custom(svc_users, svc_user, __compare_svc_user);
- if (!tmp)
svc_users = g_slist_prepend(svc_users, svc_user);
- else {
- free_n_null(&(svc_user->svc_name));
- free_n_null(&(svc_user->account));
- free_n_null(&svc_user);
}
}
}
}
}
+ __uam_db_end_transaction(1);
+
/* Add service to user mapping */
- 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);
+ 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;
- l = g_slist_find_custom(svc_users, svc_user, __compare_svc_user);
- if (!l)
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;
}
}
}
}
+
__uam_db_end_transaction(1);
+ /* Removne service-user mapping from svc_users */
+
+ l = __search_svc_user(svc_name, account, app_num);
+ retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
+
+ uam_svc_user_info_t *svc_user = l->data;
+ svc_users = g_slist_remove_all(svc_users, svc_user);
+
+ g_free(svc_user->svc_name);
+ g_free(svc_user->account);
+ g_free(svc_user);
+
FUNC_EXIT;
return UAM_ERROR_NONE;
}
svc_devs = NULL;
/* Release allocated memory for service users */
- for (l = svc_users; NULL != l; l = g_slist_next(l)) {
- uam_svc_user_info_t *svc_user = l->data;
+ for (l = svc_users; NULL != l; l = g_slist_next(l)) {
+ uam_svc_user_info_t *svc_user = l->data;
- if (!svc_user)
- continue;
+ if (!svc_user)
+ continue;
- g_free(svc_user->svc_name);
- g_free(svc_user->account);
- g_free(svc_user);
- }
- g_slist_free(svc_users);
- svc_users = NULL;
+ g_free(svc_user->svc_name);
+ g_free(svc_user->account);
+ g_free(svc_user);
+ }
+ g_slist_free(svc_users);
+ svc_users = NULL;
/* Release allocated memory for payloads */
for (l = payloads; NULL != l; l = g_slist_next(l)) {
/* Add device to user mapped service */
uam_svc_user_info_t* svc_user = NULL;
- l = g_slist_find_custom(svc_users, user->account, __compare_svc_user_account);
+ l = g_slist_find_custom(svc_users, user, __compare_svc_user_account);
if (!l)
UAM_WARN("User service mapping not found.");
else