From: rohit singh Date: Thu, 27 May 2021 05:16:12 +0000 (+0530) Subject: Modify service-user based API's X-Git-Tag: submit/tizen/20210601.231319~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5cf26dfea4a14c2cab0a2b9ff5fd0acba1ab139b;p=platform%2Fcore%2Fconnectivity%2Fua-manager.git Modify service-user based API's This patch modifies: 1) ua_service_remove_user 2) adds the app_num attribute support to the service-user hierarchy based API's. Change-Id: I6d080b0356b9fb8a3632c0c09e8f057698673faa Signed-off-by: rohit.singh --- diff --git a/ua-daemon/include/ua-manager-core.h b/ua-daemon/include/ua-manager-core.h index a9904f6..d94526e 100644 --- a/ua-daemon/include/ua-manager-core.h +++ b/ua-daemon/include/ua-manager-core.h @@ -109,6 +109,7 @@ typedef struct uam_db_device_info { typedef struct uam_svc_user_info { char* account; /**< Account */ char* svc_name; /**< Service name */ + int app_num; /**< Identity of respective app */ } uam_svc_user_info_t; typedef struct uam_db_user_info { diff --git a/ua-daemon/src/ua-manager-core.c b/ua-daemon/src/ua-manager-core.c index ea17f9f..e85edd7 100755 --- a/ua-daemon/src/ua-manager-core.c +++ b/ua-daemon/src/ua-manager-core.c @@ -199,20 +199,26 @@ static gint __compare_svc_user(gconstpointer data, gconstpointer user_data) 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) @@ -596,6 +602,26 @@ GSList* __search_user(const char *account, int app_num) 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 */ @@ -1005,18 +1031,15 @@ static void __init_svc_user_mapping() 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); } } } @@ -2328,19 +2351,22 @@ int _uam_core_service_add_user(const char *svc_name, const char *account, const } } + __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; } @@ -2402,8 +2428,21 @@ int _uam_core_service_remove_user(const char *svc_name, const char *account, con } } } + __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; } @@ -3247,18 +3286,18 @@ void _uam_core_deinit(void) 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)) { @@ -3447,7 +3486,7 @@ int _uam_core_handle_device_added(int status, /* 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