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