From 81e06a6995c9f1f2bb9d2bd0b9b8a5320b09c418 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Thu, 4 Mar 2021 19:23:41 +0900 Subject: [PATCH] Implement pkgmgrinfo_save_certinfo using client-server architecture Signed-off-by: Junghyun Yeon --- src/manager/pkginfo_manager.cc | 34 ++++++++++++++++++++++++++++++++++ src/manager/pkginfo_manager.h | 2 ++ src/pkgmgrinfo_certinfo.c | 9 ++------- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/manager/pkginfo_manager.cc b/src/manager/pkginfo_manager.cc index e6d1b7a..6a81e37 100644 --- a/src/manager/pkginfo_manager.cc +++ b/src/manager/pkginfo_manager.cc @@ -29,6 +29,7 @@ #include "common/database/abstract_db_handler.hh" #include "common/database/pkg_set_db_handler.hh" #include "common/parcel/appinfo_parcelable.hh" +#include "common/parcel/certinfo_parcelable.hh" #include "common/parcel/depinfo_parcelable.hh" #include "common/parcel/filter_parcelable.hh" #include "common/parcel/pkginfo_parcelable.hh" @@ -833,6 +834,39 @@ extern "C" EXPORT_API int _parser_delete_manifest_info(manifest_x *mfx, uid_t ui return 0; } +extern "C" EXPORT_API int _pkginfo_insert_certinfo(const char* pkgid, + pkgmgr_certinfo_x* cert, uid_t uid) +{ + std::shared_ptr parcelable( + new pkgmgr_common::parcel::CertInfoParcelable(uid, cert)); + + pkgmgr_client::PkgInfoClient client(parcelable, uid, + pkgmgr_common::ReqType::GET_CERT_INFO); + if (!client.SendRequest()) + return PMINFO_R_ERROR; + + std::shared_ptr return_parcel( + std::static_pointer_cast( + client.GetResultParcel())); + + auto result_list = return_parcel->GetResult(); + if (result_list.size() != 1) { + LOG(ERROR) << "Invalid result"; + return PMINFO_R_ERROR; + } + + if (result_list[0].size() != 1) { + LOG(ERROR) << "Invalid result"; + return PMINFO_R_ERROR; + } + + LOG(ERROR) << "result : " << result_list[0][0]; + if (result_list[0][0] != "SUCCESS") + return PMINFO_R_ERROR; + + return PMINFO_R_OK; +} + extern "C" EXPORT_API int _pkginfo_delete_certinfo(const char *pkgid) { char* query = sqlite3_mprintf("UPDATE package_cert_info SET " diff --git a/src/manager/pkginfo_manager.h b/src/manager/pkginfo_manager.h index b96b578..9520fc0 100644 --- a/src/manager/pkginfo_manager.h +++ b/src/manager/pkginfo_manager.h @@ -76,6 +76,8 @@ int _parser_update_manifest_info(manifest_x *mfx, uid_t uid); int _parser_delete_manifest_info(manifest_x *mfx, uid_t uid); +int _pkginfo_insert_certinfo(const char *pkgid, pkgmgr_certinfo_x* cert, uid_t uid); + int _pkginfo_delete_certinfo(const char *pkgid); #ifdef __cplusplus diff --git a/src/pkgmgrinfo_certinfo.c b/src/pkgmgrinfo_certinfo.c index 5c7e23b..4843de4 100644 --- a/src/pkgmgrinfo_certinfo.c +++ b/src/pkgmgrinfo_certinfo.c @@ -230,13 +230,8 @@ API int pkgmgrinfo_save_certinfo(const char *pkgid, _LOGE("invalid parameter"); return PMINFO_R_EINVAL; } - - // TODO: database should be created? - //_check_create_cert_db(); - - // TODO: use pkginfo-client APIs - - return PMINFO_R_OK; + pkgmgr_certinfo_x *certinfo = (pkgmgr_certinfo_x *)handle; + return _pkginfo_insert_certinfo(pkgid, certinfo, uid); } API int pkgmgrinfo_destroy_certinfo_set_handle( -- 2.7.4