Fix wrong type size
[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 "create_db_parcelable.hh"
10 #include "create_db_handler.hh"
11 #include "db_type.hh"
12 #include "parcelable_factory.hh"
13 #include "utils/logging.hh"
14
15 #include "pkgmgr_parser.h"
16
17 #include "pkgmgrinfo_debug.h"
18
19 namespace pcp = pkgmgr_common::parcel;
20 namespace psd = pkgmgr_server::database;
21
22 namespace pkgmgr_server {
23 namespace request_handler {
24
25 bool CreateDBRequestHandler::HandleRequest(unsigned char* data, size_t size,
26     const std::string& locale) {
27   auto abstract_parcel =
28       pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
29
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>{});
35     return false;
36   }
37
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>{});
43     return false;
44   }
45
46   psd::CreateDBHandler db(parcel->GetUid(), GetPID());
47   db.SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_CREATE);
48
49   int ret = PM_PARSER_R_ERROR;
50
51   ret = db.Execute();
52
53   result_ = std::make_shared<pcp::ResultParcelable>(
54       ret, std::vector<pcp::StrArgs>{});
55
56   return true;
57 }
58
59 }  // namespace request_handler
60 }  // namespace pkgmgr_server