1 /*
2 * Copyright (c) 2022-2024 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 "service_reverse_stub.h"
17
18 #include <cstdint>
19 #include <sstream>
20
21 #include "b_error/b_error.h"
22 #include "filemgmt_libhilog.h"
23
24 namespace OHOS::FileManagement::Backup {
25 using namespace std;
26 const int INVALID_FD = -1;
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)27 int32_t ServiceReverseStub::OnRemoteRequest(uint32_t code,
28 MessageParcel &data,
29 MessageParcel &reply,
30 MessageOption &option)
31 {
32 const std::u16string descriptor = ServiceReverseStub::GetDescriptor();
33 const std::u16string remoteDescriptor = data.ReadInterfaceToken();
34 if (descriptor != remoteDescriptor) {
35 return BError(BError::Codes::SA_INVAL_ARG, "Invalid remote descriptor");
36 }
37
38 HILOGD("Begin to call procedure indexed %{public}u", code);
39 auto interfaceIndex = opToInterfaceMap_.find(code);
40 if (interfaceIndex == opToInterfaceMap_.end() || !interfaceIndex->second) {
41 HILOGE("Cannot response request %{public}d : unknown procedure", code);
42 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
43 }
44 return (this->*(interfaceIndex->second))(data, reply);
45 }
ServiceReverseStubSupplement()46 void ServiceReverseStub::ServiceReverseStubSupplement()
47 {
48 opToInterfaceMap_[static_cast<uint32_t>(
49 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_SCANNED_INFO)] =
50 &ServiceReverseStub::CmdIncrementalBackupOnScanningInfo;
51 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_FILE_READY)] =
52 &ServiceReverseStub::CmdIncrementalRestoreOnFileReady;
53 opToInterfaceMap_[static_cast<uint32_t>(
54 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_SUB_TASK_STARTED)] =
55 &ServiceReverseStub::CmdIncrementalRestoreOnBundleStarted;
56 opToInterfaceMap_[static_cast<uint32_t>(
57 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_RESULT_REPORT)] =
58 &ServiceReverseStub::CmdIncrementalRestoreOnResultReport;
59 opToInterfaceMap_[static_cast<uint32_t>(
60 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_SUB_TASK_FINISHED)] =
61 &ServiceReverseStub::CmdIncrementalRestoreOnBundleFinished;
62 opToInterfaceMap_[static_cast<uint32_t>(
63 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_TASK_FINISHED)] =
64 &ServiceReverseStub::CmdIncrementalRestoreOnAllBundlesFinished;
65 opToInterfaceMap_[static_cast<uint32_t>(
66 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_RESTORE_ON_PROCESS_INFO)] =
67 &ServiceReverseStub::CmdIncrementalRestoreOnProcessInfo;
68 }
69
ServiceReverseStub()70 ServiceReverseStub::ServiceReverseStub()
71 {
72 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_FILE_READY)] =
73 &ServiceReverseStub::CmdBackupOnFileReady;
74 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_SUB_TASK_STARTED)] =
75 &ServiceReverseStub::CmdBackupOnBundleStarted;
76 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_RESULT_REPORT)] =
77 &ServiceReverseStub::CmdBackupOnResultReport;
78 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_SUB_TASK_FINISHED)] =
79 &ServiceReverseStub::CmdBackupOnBundleFinished;
80 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_TASK_FINISHED)] =
81 &ServiceReverseStub::CmdBackupOnAllBundlesFinished;
82 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_PROCESS_INFO)] =
83 &ServiceReverseStub::CmdBackupOnProcessInfo;
84 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_SCANNED_INFO)] =
85 &ServiceReverseStub::CmdBackupOnScanningInfo;
86
87 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_FILE_READY)] =
88 &ServiceReverseStub::CmdRestoreOnFileReady;
89 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_SUB_TASK_STARTED)] =
90 &ServiceReverseStub::CmdRestoreOnBundleStarted;
91 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_RESULT_REPORT)] =
92 &ServiceReverseStub::CmdRestoreOnResultReport;
93 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_SUB_TASK_FINISHED)] =
94 &ServiceReverseStub::CmdRestoreOnBundleFinished;
95 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_TASK_FINISHED)] =
96 &ServiceReverseStub::CmdRestoreOnAllBundlesFinished;
97 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_PROCESS_INFO)] =
98 &ServiceReverseStub::CmdRestoreOnProcessInfo;
99
100 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_FILE_READY)] =
101 &ServiceReverseStub::CmdIncrementalBackupOnFileReady;
102 opToInterfaceMap_[static_cast<uint32_t>(
103 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_SUB_TASK_STARTED)] =
104 &ServiceReverseStub::CmdIncrementalBackupOnBundleStarted;
105 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_RESULT_REPORT)]
106 = &ServiceReverseStub::CmdIncrementalBackupOnResultReport;
107 opToInterfaceMap_[static_cast<uint32_t>(
108 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_SUB_TASK_FINISHED)] =
109 &ServiceReverseStub::CmdIncrementalBackupOnBundleFinished;
110 opToInterfaceMap_[static_cast<uint32_t>(
111 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_TASK_FINISHED)] =
112 &ServiceReverseStub::CmdIncrementalBackupOnAllBundlesFinished;
113 opToInterfaceMap_[static_cast<uint32_t>(
114 IServiceReverseInterfaceCode::SERVICER_INCREMENTAL_BACKUP_ON_PROCESS_INFO)] =
115 &ServiceReverseStub::CmdIncrementalBackupOnProcessInfo;
116 ServiceReverseStubSupplement();
117 }
118
CmdBackupOnFileReady(MessageParcel & data,MessageParcel & reply)119 int32_t ServiceReverseStub::CmdBackupOnFileReady(MessageParcel &data, MessageParcel &reply)
120 {
121 auto bundleName = data.ReadString();
122 auto fileName = data.ReadString();
123 int fd = INVALID_FD;
124 bool fdFlag = data.ReadBool();
125 if (fdFlag == true) {
126 fd = data.ReadFileDescriptor();
127 }
128 int32_t errCode = data.ReadInt32();
129 BackupOnFileReady(bundleName, fileName, fd, errCode);
130 return BError(BError::Codes::OK);
131 }
132
CmdBackupOnResultReport(MessageParcel & data,MessageParcel & reply)133 int32_t ServiceReverseStub::CmdBackupOnResultReport(MessageParcel &data, MessageParcel &reply)
134 {
135 std::string result = data.ReadString();
136 std::string bundleName = data.ReadString();
137 BackupOnResultReport(result, bundleName);
138 return BError(BError::Codes::OK);
139 }
140
CmdBackupOnBundleStarted(MessageParcel & data,MessageParcel & reply)141 int32_t ServiceReverseStub::CmdBackupOnBundleStarted(MessageParcel &data, MessageParcel &reply)
142 {
143 int32_t errCode = data.ReadInt32();
144 auto bundleName = data.ReadString();
145 BackupOnBundleStarted(errCode, bundleName);
146 return BError(BError::Codes::OK);
147 }
148
CmdBackupOnBundleFinished(MessageParcel & data,MessageParcel & reply)149 int32_t ServiceReverseStub::CmdBackupOnBundleFinished(MessageParcel &data, MessageParcel &reply)
150 {
151 int32_t errCode = data.ReadInt32();
152 auto bundleName = data.ReadString();
153 BackupOnBundleFinished(errCode, bundleName);
154 return BError(BError::Codes::OK);
155 }
156
CmdBackupOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)157 int32_t ServiceReverseStub::CmdBackupOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
158 {
159 int32_t errCode = data.ReadInt32();
160 BackupOnAllBundlesFinished(errCode);
161 return BError(BError::Codes::OK);
162 }
163
CmdBackupOnProcessInfo(MessageParcel & data,MessageParcel & reply)164 int32_t ServiceReverseStub::CmdBackupOnProcessInfo(MessageParcel &data, MessageParcel &reply)
165 {
166 std::string bundleName = data.ReadString();
167 std::string processInfo = data.ReadString();
168 BackupOnProcessInfo(bundleName, processInfo);
169 return BError(BError::Codes::OK);
170 }
171
CmdBackupOnScanningInfo(MessageParcel & data,MessageParcel & reply)172 int32_t ServiceReverseStub::CmdBackupOnScanningInfo(MessageParcel &data, MessageParcel &reply)
173 {
174 std::string scannedInfo = data.ReadString();
175 BackupOnScanningInfo(scannedInfo);
176 return BError(BError::Codes::OK);
177 }
178
CmdRestoreOnBundleStarted(MessageParcel & data,MessageParcel & reply)179 int32_t ServiceReverseStub::CmdRestoreOnBundleStarted(MessageParcel &data, MessageParcel &reply)
180 {
181 int32_t errCode = data.ReadInt32();
182 auto bundleName = data.ReadString();
183 RestoreOnBundleStarted(errCode, bundleName);
184 return BError(BError::Codes::OK);
185 }
186
CmdRestoreOnBundleFinished(MessageParcel & data,MessageParcel & reply)187 int32_t ServiceReverseStub::CmdRestoreOnBundleFinished(MessageParcel &data, MessageParcel &reply)
188 {
189 int32_t errCode = data.ReadInt32();
190 auto bundleName = data.ReadString();
191 RestoreOnBundleFinished(errCode, bundleName);
192 return BError(BError::Codes::OK);
193 }
194
CmdRestoreOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)195 int32_t ServiceReverseStub::CmdRestoreOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
196 {
197 int32_t errCode = data.ReadInt32();
198 RestoreOnAllBundlesFinished(errCode);
199 return BError(BError::Codes::OK);
200 }
201
CmdRestoreOnFileReady(MessageParcel & data,MessageParcel & reply)202 int32_t ServiceReverseStub::CmdRestoreOnFileReady(MessageParcel &data, MessageParcel &reply)
203 {
204 auto bundleName = data.ReadString();
205 auto fileName = data.ReadString();
206 int fd = INVALID_FD;
207 bool fdFlag = data.ReadBool();
208 if (fdFlag == true) {
209 fd = data.ReadFileDescriptor();
210 }
211 int32_t errCode = data.ReadInt32();
212 RestoreOnFileReady(bundleName, fileName, fd, errCode);
213 return BError(BError::Codes::OK);
214 }
215
CmdRestoreOnResultReport(MessageParcel & data,MessageParcel & reply)216 int32_t ServiceReverseStub::CmdRestoreOnResultReport(MessageParcel &data, MessageParcel &reply)
217 {
218 std::string result;
219 if (!data.ReadString(result)) {
220 return BError(BError::Codes::EXT_INVAL_ARG, "Failed to read result").GetCode();
221 }
222 std::string bundleName;
223 if (!data.ReadString(bundleName)) {
224 return BError(BError::Codes::EXT_INVAL_ARG, "Failed to read bundleName").GetCode();
225 }
226 ErrCode errCode;
227 if (!data.ReadInt32(errCode)) {
228 return BError(BError::Codes::EXT_INVAL_ARG, "Failed to read errCode").GetCode();
229 }
230 RestoreOnResultReport(result, bundleName, errCode);
231 return BError(BError::Codes::OK);
232 }
233
CmdRestoreOnProcessInfo(MessageParcel & data,MessageParcel & reply)234 int32_t ServiceReverseStub::CmdRestoreOnProcessInfo(MessageParcel &data, MessageParcel &reply)
235 {
236 std::string bundleName = data.ReadString();
237 std::string processInfo = data.ReadString();
238 RestoreOnProcessInfo(bundleName, processInfo);
239 return BError(BError::Codes::OK);
240 }
241
CmdIncrementalBackupOnFileReady(MessageParcel & data,MessageParcel & reply)242 int32_t ServiceReverseStub::CmdIncrementalBackupOnFileReady(MessageParcel &data, MessageParcel &reply)
243 {
244 auto bundleName = data.ReadString();
245 auto fileName = data.ReadString();
246 int fd = INVALID_FD;
247 int manifestFd = INVALID_FD;
248 bool fdFlag = data.ReadBool();
249 if (fdFlag == true) {
250 fd = data.ReadFileDescriptor();
251 manifestFd = data.ReadFileDescriptor();
252 }
253 int32_t errCode = data.ReadInt32();
254 IncrementalBackupOnFileReady(bundleName, fileName, fd, manifestFd, errCode);
255 return BError(BError::Codes::OK);
256 }
257
CmdIncrementalBackupOnBundleStarted(MessageParcel & data,MessageParcel & reply)258 int32_t ServiceReverseStub::CmdIncrementalBackupOnBundleStarted(MessageParcel &data, MessageParcel &reply)
259 {
260 int32_t errCode = data.ReadInt32();
261 auto bundleName = data.ReadString();
262 IncrementalBackupOnBundleStarted(errCode, bundleName);
263 return BError(BError::Codes::OK);
264 }
265
CmdIncrementalBackupOnResultReport(MessageParcel & data,MessageParcel & reply)266 int32_t ServiceReverseStub::CmdIncrementalBackupOnResultReport(MessageParcel &data, MessageParcel &reply)
267 {
268 std::string result = data.ReadString();
269 std::string bundleName = data.ReadString();
270 IncrementalBackupOnResultReport(result, bundleName);
271 return BError(BError::Codes::OK);
272 }
273
CmdIncrementalBackupOnBundleFinished(MessageParcel & data,MessageParcel & reply)274 int32_t ServiceReverseStub::CmdIncrementalBackupOnBundleFinished(MessageParcel &data, MessageParcel &reply)
275 {
276 int32_t errCode = data.ReadInt32();
277 auto bundleName = data.ReadString();
278 IncrementalBackupOnBundleFinished(errCode, bundleName);
279 return BError(BError::Codes::OK);
280 }
281
CmdIncrementalBackupOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)282 int32_t ServiceReverseStub::CmdIncrementalBackupOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
283 {
284 int32_t errCode = data.ReadInt32();
285 IncrementalBackupOnAllBundlesFinished(errCode);
286 return BError(BError::Codes::OK);
287 }
288
CmdIncrementalBackupOnProcessInfo(MessageParcel & data,MessageParcel & reply)289 int32_t ServiceReverseStub::CmdIncrementalBackupOnProcessInfo(MessageParcel &data, MessageParcel &reply)
290 {
291 std::string bundleName = data.ReadString();
292 std::string processInfo = data.ReadString();
293 IncrementalBackupOnProcessInfo(bundleName, processInfo);
294 return BError(BError::Codes::OK);
295 }
296
CmdIncrementalBackupOnScanningInfo(MessageParcel & data,MessageParcel & reply)297 int32_t ServiceReverseStub::CmdIncrementalBackupOnScanningInfo(MessageParcel &data, MessageParcel &reply)
298 {
299 std::string scannedInfo = data.ReadString();
300 IncrementalBackupOnScanningInfo(scannedInfo);
301 return BError(BError::Codes::OK);
302 }
303
CmdIncrementalRestoreOnBundleStarted(MessageParcel & data,MessageParcel & reply)304 int32_t ServiceReverseStub::CmdIncrementalRestoreOnBundleStarted(MessageParcel &data, MessageParcel &reply)
305 {
306 int32_t errCode = data.ReadInt32();
307 auto bundleName = data.ReadString();
308 IncrementalRestoreOnBundleStarted(errCode, bundleName);
309 return BError(BError::Codes::OK);
310 }
311
CmdIncrementalRestoreOnBundleFinished(MessageParcel & data,MessageParcel & reply)312 int32_t ServiceReverseStub::CmdIncrementalRestoreOnBundleFinished(MessageParcel &data, MessageParcel &reply)
313 {
314 int32_t errCode = data.ReadInt32();
315 auto bundleName = data.ReadString();
316 IncrementalRestoreOnBundleFinished(errCode, bundleName);
317 return BError(BError::Codes::OK);
318 }
319
CmdIncrementalRestoreOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)320 int32_t ServiceReverseStub::CmdIncrementalRestoreOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
321 {
322 int32_t errCode = data.ReadInt32();
323 IncrementalRestoreOnAllBundlesFinished(errCode);
324 return BError(BError::Codes::OK);
325 }
326
CmdIncrementalRestoreOnFileReady(MessageParcel & data,MessageParcel & reply)327 int32_t ServiceReverseStub::CmdIncrementalRestoreOnFileReady(MessageParcel &data, MessageParcel &reply)
328 {
329 auto bundleName = data.ReadString();
330 auto fileName = data.ReadString();
331 int fd = INVALID_FD;
332 int manifestFd = INVALID_FD;
333 bool fdFlag = data.ReadBool();
334 if (fdFlag == true) {
335 fd = data.ReadFileDescriptor();
336 manifestFd = data.ReadFileDescriptor();
337 }
338 int32_t errCode = data.ReadInt32();
339 IncrementalRestoreOnFileReady(bundleName, fileName, fd, manifestFd, errCode);
340 return BError(BError::Codes::OK);
341 }
342
CmdIncrementalRestoreOnResultReport(MessageParcel & data,MessageParcel & reply)343 int32_t ServiceReverseStub::CmdIncrementalRestoreOnResultReport(MessageParcel &data, MessageParcel &reply)
344 {
345 auto result = data.ReadString();
346 auto bundleName = data.ReadString();
347 ErrCode errCode = data.ReadInt32();
348 IncrementalRestoreOnResultReport(result, bundleName, errCode);
349 return BError(BError::Codes::OK);
350 }
351
CmdIncrementalRestoreOnProcessInfo(MessageParcel & data,MessageParcel & reply)352 int32_t ServiceReverseStub::CmdIncrementalRestoreOnProcessInfo(MessageParcel &data, MessageParcel &reply)
353 {
354 auto bundleName = data.ReadString();
355 auto processInfo = data.ReadString();
356 IncrementalRestoreOnProcessInfo(bundleName, processInfo);
357 return BError(BError::Codes::OK);
358 }
359 } // namespace OHOS::FileManagement::Backup