Implement pkgmgrinfo_save_certinfo using client-server architecture
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 4 Mar 2021 10:23:41 +0000 (19:23 +0900)
committer연정현/Tizen Platform Lab(SR)/Staff Engineer/삼성전자 <jungh.yeon@samsung.com>
Fri, 5 Mar 2021 00:03:32 +0000 (09:03 +0900)
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/manager/pkginfo_manager.cc
src/manager/pkginfo_manager.h
src/pkgmgrinfo_certinfo.c

index e6d1b7a..6a81e37 100644 (file)
@@ -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<pkgmgr_common::parcel::AbstractParcelable> 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<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+               std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+                               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 "
index b96b578..9520fc0 100644 (file)
@@ -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
index 5c7e23b..4843de4 100644 (file)
@@ -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(