• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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