From 6cf410b65ab05a63af33a136277e2e90534bb416 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 9 Sep 2016 20:56:17 +0900 Subject: [PATCH] Add a new API to retrieve the alias info Change-Id: I14d920c44027e259be8708e8782ed22df54adacf Signed-off-by: Hwankyu Jhun --- include/aul_svc.h | 15 +++++++++++++++ include/aul_svc_db.h | 4 +++- src/service.c | 31 +++++++++++++++++++++++++++++++ src/service_db.c | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) diff --git a/include/aul_svc.h b/include/aul_svc.h index 8ae1da2..6e2e133 100755 --- a/include/aul_svc.h +++ b/include/aul_svc.h @@ -1155,6 +1155,21 @@ int aul_svc_set_alias_appid_for_uid(const char *alias_appid, int aul_svc_unset_alias_appid(const char *alias_appid); int aul_svc_unset_alias_appid_for_uid(const char *alias_appid, uid_t uid); +/** + * @par Description: + * This API retrieves all alias information. + * + * @param[in] callback The callback function to be invoked + * @param[in] user_data The user data to be passed to the callback function + * + * @return 0 if success, negative value(<0) if fail + */ +int aul_svc_foreach_alias_info(void (*callback)(const char *alias_appid, + const char *appid, void *data), void *user_data); +int aul_svc_foreach_alias_info_for_uid(void (*callback)(const char *alias_appid, + const char *appid, void *data), + uid_t uid, void *user_data); + #ifdef __cplusplus } #endif diff --git a/include/aul_svc_db.h b/include/aul_svc_db.h index f380536..824a526 100755 --- a/include/aul_svc_db.h +++ b/include/aul_svc_db.h @@ -55,7 +55,9 @@ int _svc_db_add_alias_appid(const char *alias_appid, const char *appid, int _svc_db_delete_alias_appid(const char *alias_appid, uid_t uid); int _svc_db_get_appid_from_alias_info(const char *alias_appid, char **appid, uid_t uid); - +int _svc_db_foreach_alias_info(void (*callback)(const char *alias_appid, const + char *appid, void *data), + uid_t uid, void *user_data); #ifdef __cplusplus } diff --git a/src/service.c b/src/service.c index 0d7c139..c353d91 100755 --- a/src/service.c +++ b/src/service.c @@ -1469,3 +1469,34 @@ API int aul_svc_unset_alias_appid_for_uid(const char *alias_appid, uid_t uid) return AUL_SVC_RET_OK; } +API int aul_svc_foreach_alias_info(void (*callback)(const char *alias_appid, + const char *appid, void *data), void *user_data) +{ + return aul_svc_foreach_alias_info_for_uid(callback, getuid(), + user_data); +} + +API int aul_svc_foreach_alias_info_for_uid(void (*callback)( + const char *alias_appid, const char *appid, + void *data), uid_t uid, void *user_data) +{ + int ret; + + if (callback == NULL) { + _E("Invalid parameter"); + return AUL_SVC_RET_EINVAL; + } + + ret = _svc_db_check_perm(uid, true); + if (ret < 0) { + _E("Permission error: %d", ret); + return AUL_SVC_RET_EILLACC; + } + + ret = _svc_db_foreach_alias_info(callback, uid, user_data); + if (ret < 0) + return AUL_SVC_RET_ERROR; + + return AUL_SVC_RET_OK; +} + diff --git a/src/service_db.c b/src/service_db.c index 8d84c8c..9931b35 100755 --- a/src/service_db.c +++ b/src/service_db.c @@ -932,3 +932,43 @@ end: return result; } +int _svc_db_foreach_alias_info(void (*callback)(const char *alias_appid, + const char *appid, void *data), + uid_t uid, void *user_data) +{ + int ret; + sqlite3_stmt *stmt = NULL; + const char *query = "SELECT alias_appid, appid FROM alias_info;"; + const char *alias_id; + const char *id; + bool invoked = false; + + if (__init(uid, true) < 0) + return -1; + + ret = sqlite3_prepare_v2(svc_db, query, strlen(query), &stmt, NULL); + if (ret != SQLITE_OK) { + _E("sqlite3_prepare_v2() error: %d(%s)", + ret, sqlite3_errmsg(svc_db)); + __fini(); + return -1; + } + + while (sqlite3_step(stmt) == SQLITE_ROW) { + alias_id = (const char *)sqlite3_column_text(stmt, 0); + id = (const char *)sqlite3_column_text(stmt, 1); + callback(alias_id, id, user_data); + invoked = true; + } + + sqlite3_finalize(stmt); + __fini(); + + if (!invoked) { + _E("alias info is empty"); + return -1; + } + + return 0; +} + -- 2.7.4