1 // Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
5 #include "create_db_request_handler.hh"
9 #include "create_db_parcelable.hh"
10 #include "create_db_handler.hh"
12 #include "parcelable_factory.hh"
13 #include "utils/logging.hh"
15 #include "pkgmgr_parser.h"
17 #include "pkgmgrinfo_debug.h"
19 namespace pcp = pkgmgr_common::parcel;
20 namespace psd = pkgmgr_server::database;
22 namespace pkgmgr_server {
23 namespace request_handler {
25 bool CreateDBRequestHandler::HandleRequest(const unsigned char* data, int size,
26 const std::string& locale) {
27 auto abstract_parcel =
28 pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
30 if (abstract_parcel == nullptr ||
31 abstract_parcel->GetType() != pcp::ParcelableType::CreateDB) {
32 LOG(ERROR) << "Invalid parcel or type";
33 result_ = std::make_shared<pcp::ResultParcelable>(
34 PM_PARSER_R_ERROR, std::vector<pcp::StrArgs>{});
38 auto* parcel = dynamic_cast<pcp::CreateDBParcelable*>(abstract_parcel.get());
39 if (parcel == nullptr) {
40 LOG(ERROR) << "Parcel is empty";
41 result_ = std::make_shared<pcp::ResultParcelable>(
42 PM_PARSER_R_ERROR, std::vector<pcp::StrArgs>{});
46 psd::CreateDBHandler db(parcel->GetUid(), GetPID());
47 db.SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_CREATE);
49 int ret = PM_PARSER_R_ERROR;
53 result_ = std::make_shared<pcp::ResultParcelable>(
54 ret, std::vector<pcp::StrArgs>{});
59 std::vector<uint8_t> CreateDBRequestHandler::ExtractResult() {
60 tizen_base::Parcel parcel;
62 parcel.WriteParcelable(*result_);
63 std::vector<uint8_t> raw = parcel.GetRaw();
70 } // namespace request_handler
71 } // namespace pkgmgr_server