1 /*
2 * Copyright (c) 2022-2023 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
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 HILOGI("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 }
46
ServiceReverseStub()47 ServiceReverseStub::ServiceReverseStub()
48 {
49 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_FILE_READY)] =
50 &ServiceReverseStub::CmdBackupOnFileReady;
51 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_SUB_TASK_STARTED)] =
52 &ServiceReverseStub::CmdBackupOnBundleStarted;
53 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_SUB_TASK_FINISHED)] =
54 &ServiceReverseStub::CmdBackupOnBundleFinished;
55 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_BACKUP_ON_TASK_FINISHED)] =
56 &ServiceReverseStub::CmdBackupOnAllBundlesFinished;
57
58 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_SUB_TASK_STARTED)] =
59 &ServiceReverseStub::CmdRestoreOnBundleStarted;
60 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_SUB_TASK_FINISHED)] =
61 &ServiceReverseStub::CmdRestoreOnBundleFinished;
62 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_TASK_FINISHED)] =
63 &ServiceReverseStub::CmdRestoreOnAllBundlesFinished;
64 opToInterfaceMap_[static_cast<uint32_t>(IServiceReverseInterfaceCode::SERVICER_RESTORE_ON_FILE_READY)] =
65 &ServiceReverseStub::CmdRestoreOnFileReady;
66 }
67
CmdBackupOnFileReady(MessageParcel & data,MessageParcel & reply)68 int32_t ServiceReverseStub::CmdBackupOnFileReady(MessageParcel &data, MessageParcel &reply)
69 {
70 auto bundleName = data.ReadString();
71 auto fileName = data.ReadString();
72 int fd = data.ReadFileDescriptor();
73 BackupOnFileReady(bundleName, fileName, fd);
74 return BError(BError::Codes::OK);
75 }
76
CmdBackupOnBundleStarted(MessageParcel & data,MessageParcel & reply)77 int32_t ServiceReverseStub::CmdBackupOnBundleStarted(MessageParcel &data, MessageParcel &reply)
78 {
79 int32_t errCode = data.ReadInt32();
80 auto bundleName = data.ReadString();
81 BackupOnBundleStarted(errCode, bundleName);
82 return BError(BError::Codes::OK);
83 }
84
CmdBackupOnBundleFinished(MessageParcel & data,MessageParcel & reply)85 int32_t ServiceReverseStub::CmdBackupOnBundleFinished(MessageParcel &data, MessageParcel &reply)
86 {
87 int32_t errCode = data.ReadInt32();
88 auto bundleName = data.ReadString();
89 BackupOnBundleFinished(errCode, bundleName);
90 return BError(BError::Codes::OK);
91 }
92
CmdBackupOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)93 int32_t ServiceReverseStub::CmdBackupOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
94 {
95 int32_t errCode = data.ReadInt32();
96 BackupOnAllBundlesFinished(errCode);
97 return BError(BError::Codes::OK);
98 }
99
CmdRestoreOnBundleStarted(MessageParcel & data,MessageParcel & reply)100 int32_t ServiceReverseStub::CmdRestoreOnBundleStarted(MessageParcel &data, MessageParcel &reply)
101 {
102 int32_t errCode = data.ReadInt32();
103 auto bundleName = data.ReadString();
104 RestoreOnBundleStarted(errCode, bundleName);
105 return BError(BError::Codes::OK);
106 }
107
CmdRestoreOnBundleFinished(MessageParcel & data,MessageParcel & reply)108 int32_t ServiceReverseStub::CmdRestoreOnBundleFinished(MessageParcel &data, MessageParcel &reply)
109 {
110 int32_t errCode = data.ReadInt32();
111 auto bundleName = data.ReadString();
112 RestoreOnBundleFinished(errCode, bundleName);
113 return BError(BError::Codes::OK);
114 }
115
CmdRestoreOnAllBundlesFinished(MessageParcel & data,MessageParcel & reply)116 int32_t ServiceReverseStub::CmdRestoreOnAllBundlesFinished(MessageParcel &data, MessageParcel &reply)
117 {
118 int32_t errCode = data.ReadInt32();
119 RestoreOnAllBundlesFinished(errCode);
120 return BError(BError::Codes::OK);
121 }
122
CmdRestoreOnFileReady(MessageParcel & data,MessageParcel & reply)123 int32_t ServiceReverseStub::CmdRestoreOnFileReady(MessageParcel &data, MessageParcel &reply)
124 {
125 auto bundleName = data.ReadString();
126 auto fileName = data.ReadString();
127 int fd = data.ReadFileDescriptor();
128 RestoreOnFileReady(bundleName, fileName, fd);
129 return BError(BError::Codes::OK);
130 }
131 } // namespace OHOS::FileManagement::Backup