• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "sys_installer_manager_helper.h"
17 
18 #include "action_processer.h"
19 #include "log/log.h"
20 #include "package/cert_verify.h"
21 #include "package/pkg_manager.h"
22 #include "utils.h"
23 #include "pkg_verify.h"
24 #include "ab_update.h"
25 
26 namespace OHOS {
27 namespace SysInstaller {
28 using namespace Hpackage;
29 using namespace Updater;
30 
SysInstallerInit(const std::string & taskId)31 int32_t SysInstallerManagerHelper::SysInstallerInit(const std::string &taskId)
32 {
33     LOG(INFO) << "SysInstallerInit taskId : " << taskId;
34     std::shared_ptr<StatusManager> statusManager = nullptr;
35     {
36         std::lock_guard<std::recursive_mutex> lock(statusLock_);
37         if (statusManagerMap_.count(taskId) > 0) {
38             LOG(INFO) << "is has been init";
39             return 0;
40         }
41 
42         statusManager = std::make_shared<StatusManager>();
43         statusManagerMap_.emplace(taskId, statusManager);
44         statusManager->Init();
45     }
46 
47     std::lock_guard<std::recursive_mutex> lock(processerLock_);
48     std::shared_ptr<ActionProcesser> actionProcesser = std::make_shared<ActionProcesser>(statusManager);
49     actionProcesserMap_.emplace(taskId, actionProcesser);
50     return 0;
51 }
52 
StartUpdatePackageZip(const std::string & taskId,const std::string & pkgPath)53 int32_t SysInstallerManagerHelper::StartUpdatePackageZip(const std::string &taskId, const std::string &pkgPath)
54 {
55     LOG(INFO) << "StartUpdatePackageZip start taskId : " << taskId;
56     std::shared_ptr<StatusManager> statusManager = GetStatusManager(taskId);
57     if (statusManager == nullptr) {
58         LOG(ERROR) << "statusManager nullptr";
59         return -1;
60     }
61 
62     std::shared_ptr<ActionProcesser> actionProcesser = GetActionProcesser(taskId);
63     if (actionProcesser == nullptr) {
64         LOG(ERROR) << "actionProcesser nullptr";
65         return -1;
66     }
67 
68     if (actionProcesser->IsRunning()) {
69         LOG(ERROR) << "ActionProcesser IsRunning";
70         return -1;
71     }
72     std::vector<std::string> filePath = {};
73     filePath.push_back(pkgPath);
74     actionProcesser->AddAction(std::make_unique<PkgVerify>(statusManager, filePath));
75     actionProcesser->AddAction(std::make_unique<ABUpdate>(statusManager, pkgPath));
76     actionProcesser->Start();
77     return 0;
78 }
79 
SetUpdateCallback(const std::string & taskId,const sptr<ISysInstallerCallback> & updateCallback)80 int32_t SysInstallerManagerHelper::SetUpdateCallback(const std::string &taskId,
81     const sptr<ISysInstallerCallback> &updateCallback)
82 {
83     std::shared_ptr<StatusManager> statusManager = GetStatusManager(taskId);
84     if (statusManager == nullptr) {
85         LOG(ERROR) << "statusManager nullptr";
86         return -1;
87     }
88     return statusManager->SetUpdateCallback(updateCallback);
89 }
90 
GetUpdateStatus(const std::string & taskId)91 int32_t SysInstallerManagerHelper::GetUpdateStatus(const std::string &taskId)
92 {
93     std::shared_ptr<StatusManager> statusManager = GetStatusManager(taskId);
94     if (statusManager == nullptr) {
95         LOG(ERROR) << "statusManager nullptr";
96         return -1;
97     }
98     return statusManager->GetUpdateStatus();
99 }
100 
StartUpdateParaZip(const std::string & taskId,const std::string & pkgPath,const std::string & location,const std::string & cfgDir)101 int32_t SysInstallerManagerHelper::StartUpdateParaZip(const std::string &taskId, const std::string &pkgPath,
102     const std::string &location, const std::string &cfgDir)
103 {
104     return -1;
105 }
106 
StartDeleteParaZip(const std::string & taskId,const std::string & location,const std::string & cfgDir)107 int32_t SysInstallerManagerHelper::StartDeleteParaZip(const std::string &taskId,
108     const std::string &location, const std::string &cfgDir)
109 {
110     return -1;
111 }
112 
AccDecompressAndVerifyPkg(const std::string & taskId,const std::string & srcPath,const std::string & dstPath,const uint32_t type)113 int32_t SysInstallerManagerHelper::AccDecompressAndVerifyPkg(const std::string &taskId,
114     const std::string &srcPath, const std::string &dstPath, const uint32_t type)
115 {
116     return -1;
117 }
118 
AccDeleteDir(const std::string & taskId,const std::string & dstPath)119 int32_t SysInstallerManagerHelper::AccDeleteDir(const std::string &taskId, const std::string &dstPath)
120 {
121     return -1;
122 }
123 
StartUpdateVabPackageZip(const std::string & taskId,const std::vector<std::string> & pkgPath)124 int32_t SysInstallerManagerHelper::StartUpdateVabPackageZip(const std::string &taskId,
125     const std::vector<std::string> &pkgPath)
126 {
127     return -1;
128 }
129 
CancelUpdateVabPackageZip(const std::string & taskId)130 int32_t SysInstallerManagerHelper::CancelUpdateVabPackageZip(const std::string &taskId)
131 {
132     return -1;
133 }
134 
StartVabMerge(const std::string & taskId)135 int32_t SysInstallerManagerHelper::StartVabMerge(const std::string &taskId)
136 {
137     return -1;
138 }
139 
CreateVabSnapshotCowImg(const std::unordered_map<std::string,uint64_t> & partitionInfo)140 int32_t SysInstallerManagerHelper::CreateVabSnapshotCowImg(const std::unordered_map<std::string,
141                                                            uint64_t> &partitionInfo)
142 {
143     return -1;
144 }
145 
ClearVabMetadataAndCow()146 int32_t SysInstallerManagerHelper::ClearVabMetadataAndCow()
147 {
148     return -1;
149 }
150 
GetUpdateResult(const std::string & taskId,const std::string & taskType,const std::string & resultType)151 std::string SysInstallerManagerHelper::GetUpdateResult(const std::string &taskId, const std::string &taskType,
152     const std::string &resultType)
153 {
154     LOG(INFO) << "GetUpdateResult start taskId : " << taskId;
155     std::shared_ptr<ActionProcesser> actionProcesser = GetActionProcesser(taskId);
156     if (actionProcesser == nullptr) {
157         LOG(ERROR) << "actionProcesser nullptr";
158         return "has not task";
159     }
160 
161     if (actionProcesser->IsRunning()) {
162         LOG(ERROR) << "ActionProcesser IsRunning";
163         return "task is running";
164     }
165 
166     {
167         std::lock_guard<std::recursive_mutex> lock(statusLock_);
168         auto inter = statusManagerMap_.find(taskId);
169         if (inter != statusManagerMap_.end()) {
170             statusManagerMap_.erase(inter);
171         }
172     }
173 
174     {
175         std::lock_guard<std::recursive_mutex> lock(processerLock_);
176         auto inter = actionProcesserMap_.find(taskId);
177         if (inter != actionProcesserMap_.end()) {
178             actionProcesserMap_.erase(inter);
179         }
180     }
181     return "success";
182 }
183 
GetStatusManager(const std::string & taskId)184 std::shared_ptr<StatusManager> SysInstallerManagerHelper::GetStatusManager(const std::string &taskId)
185 {
186     std::lock_guard<std::recursive_mutex> lock(statusLock_);
187     auto inter = statusManagerMap_.find(taskId);
188     if (inter != statusManagerMap_.end()) {
189         return inter->second;
190     }
191     return nullptr;
192 }
193 
GetActionProcesser(const std::string & taskId)194 std::shared_ptr<ActionProcesser> SysInstallerManagerHelper::GetActionProcesser(const std::string &taskId)
195 {
196     std::lock_guard<std::recursive_mutex> lock(processerLock_);
197     auto inter = actionProcesserMap_.find(taskId);
198     if (inter != actionProcesserMap_.end()) {
199         return inter->second;
200     }
201     return nullptr;
202 }
203 
VabUpdateActive()204 int32_t SysInstallerManagerHelper::VabUpdateActive()
205 {
206     return -1;
207 }
208 
GetMetadataResult(const std::string & action,bool & result)209 int32_t SysInstallerManagerHelper::GetMetadataResult(const std::string &action, bool &result)
210 {
211     return -1;
212 }
213 
StartAbSync()214 int32_t SysInstallerManagerHelper::StartAbSync()
215 {
216     return -1;
217 }
218 
SetCpuAffinity(const std::string & taskId,unsigned int reservedCores)219 int32_t SysInstallerManagerHelper::SetCpuAffinity(const std::string &taskId, unsigned int reservedCores)
220 {
221     return -1;
222 }
223 
InstallCloudRom(const std::string & taskId,InstallMode installMode,const std::vector<FeatureInfo> & featureInfos,RebootStatus rebootStatus)224 int32_t SysInstallerManagerHelper::InstallCloudRom(const std::string &taskId,
225     InstallMode installMode, const std::vector<FeatureInfo> &featureInfos, RebootStatus rebootStatus)
226 {
227     return -1;
228 }
229 
UninstallCloudRom(const std::string & taskId,const std::vector<FeatureInfo> & featureInfos,RebootStatus rebootStatus)230 int32_t SysInstallerManagerHelper::UninstallCloudRom(const std::string &taskId,
231     const std::vector<FeatureInfo> &featureInfos, RebootStatus rebootStatus)
232 {
233     return -1;
234 }
235 
GetFeatureStatus(const std::vector<FeatureInfo> & featureInfos,std::vector<FeatureStatus> & statusInfos)236 int32_t SysInstallerManagerHelper::GetFeatureStatus(const std::vector<FeatureInfo> &featureInfos,
237     std::vector<FeatureStatus> &statusInfos)
238 {
239     return -1;
240 }
241 
GetAllFeatureStatus(const std::string & baseVersion,std::vector<FeatureStatus> & statusInfos)242 int32_t SysInstallerManagerHelper::GetAllFeatureStatus(const std::string &baseVersion,
243     std::vector<FeatureStatus> &statusInfos)
244 {
245     return -1;
246 }
247 
ClearCloudRom(const std::string & baseVersion,const std::string & featureName)248 int32_t SysInstallerManagerHelper::ClearCloudRom(const std::string &baseVersion,
249     const std::string &featureName)
250 {
251     return -1;
252 }
253 } // namespace SysInstaller
254 } // namespace OHOS
255