Merge branch 'tizen' of ssh://review.tizen.org:29418/platform/core/appfw/pkgmgr-info
[platform/core/appfw/pkgmgr-info.git] / src / server / request_handler / create_db_request_handler.cc
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.
4
5 #include "create_db_request_handler.hh"
6
7 #include <string>
8
9 #include "parcelable_factory.hh"
10 #include "create_db_parcelable.hh"
11 #include "create_db_handler.hh"
12 #include "db_type.hh"
13
14 #include "pkgmgr_parser.h"
15
16 #include "pkgmgrinfo_debug.h"
17
18 namespace pcp = pkgmgr_common::parcel;
19 namespace psd = pkgmgr_server::database;
20
21 namespace pkgmgr_server {
22 namespace request_handler {
23
24 bool CreateDBRequestHandler::HandleRequest(unsigned char* data, int size,
25                                            const std::string& locale) {
26   auto abstract_parcel =
27       pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
28
29   if (abstract_parcel == nullptr ||
30       abstract_parcel->GetType() != pcp::ParcelableType::CreateDB) {
31     _LOGE("Invalid parcel or type");
32     result_ = std::make_shared<pcp::ResultParcelable>(
33         PM_PARSER_R_ERROR, std::vector<std::vector<std::string>>{});
34     return false;
35   }
36
37   auto* parcel = dynamic_cast<pcp::CreateDBParcelable*>(abstract_parcel.get());
38   if (parcel == nullptr) {
39     _LOGE("Parcel is empty");
40     result_ = std::make_shared<pcp::ResultParcelable>(
41         PM_PARSER_R_ERROR, std::vector<std::vector<std::string>>{});
42     return false;
43   }
44
45   psd::CreateDBHandler db(parcel->GetUid(), GetPID());
46   db.SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_CREATE);
47
48   int ret = PM_PARSER_R_ERROR;
49
50   ret = db.Execute();
51
52   result_ = std::make_shared<pcp::ResultParcelable>(
53       ret, std::vector<std::vector<std::string>>{});
54
55   return true;
56 }
57
58 std::vector<uint8_t> CreateDBRequestHandler::ExtractResult() {
59   tizen_base::Parcel parcel;
60
61   parcel.WriteParcelable(*result_);
62   std::vector<uint8_t> raw = parcel.GetRaw();
63
64   result_.reset();
65
66   return raw;
67 }
68
69 }  // namespace request_handler
70 }  // namespace pkgmgr_server