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 #define LOG_TAG "KVDBServiceStub"
16 #include "kvdb_service_stub.h"
17
18 #include "ipc_skeleton.h"
19 #include "kv_types_util.h"
20 #include "log_print.h"
21 #include "utils/anonymous.h"
22 #include "utils/constant.h"
23 namespace OHOS::DistributedKv {
24 using namespace OHOS::DistributedData;
25 const KVDBServiceStub::Handler
26 KVDBServiceStub::HANDLERS[static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_BUTT)] = {
27 &KVDBServiceStub::OnGetStoreIds,
28 &KVDBServiceStub::OnBeforeCreate,
29 &KVDBServiceStub::OnAfterCreate,
30 &KVDBServiceStub::OnDelete,
31 &KVDBServiceStub::OnSync,
32 &KVDBServiceStub::OnRegServiceNotifier,
33 &KVDBServiceStub::OnUnregServiceNotifier,
34 &KVDBServiceStub::OnSetSyncParam,
35 &KVDBServiceStub::OnGetSyncParam,
36 &KVDBServiceStub::OnEnableCap,
37 &KVDBServiceStub::OnDisableCap,
38 &KVDBServiceStub::OnSetCapability,
39 &KVDBServiceStub::OnAddSubInfo,
40 &KVDBServiceStub::OnRmvSubInfo,
41 &KVDBServiceStub::OnSubscribe,
42 &KVDBServiceStub::OnUnsubscribe,
43 &KVDBServiceStub::OnGetBackupPassword,
44 &KVDBServiceStub::OnCloudSync,
45 &KVDBServiceStub::OnNotifyDataChange,
46 &KVDBServiceStub::OnSetConfig,
47 &KVDBServiceStub::OnPutSwitch,
48 &KVDBServiceStub::OnGetSwitch,
49 &KVDBServiceStub::OnSubscribeSwitchData,
50 &KVDBServiceStub::OnUnsubscribeSwitchData,
51 &KVDBServiceStub::OnClose,
52 &KVDBServiceStub::OnRemoveDeviceData,
53 };
54
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply)55 int KVDBServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply)
56 {
57 ZLOGI("code:%{public}u callingPid:%{public}u", code, IPCSkeleton::GetCallingPid());
58 std::u16string local = KVDBServiceStub::GetDescriptor();
59 std::u16string remote = data.ReadInterfaceToken();
60 if (local != remote) {
61 ZLOGE("local is not equal to remote");
62 return -1;
63 }
64
65 if (static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_HEAD) > code ||
66 code >= static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_BUTT) || HANDLERS[code] == nullptr) {
67 ZLOGE("not support code:%{public}u, BUTT:%{public}d", code,
68 static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_BUTT));
69 return -1;
70 }
71 auto [status, storeInfo] = GetStoreInfo(code, data);
72 if (status != ERR_NONE) {
73 return status;
74 }
75 if (CheckPermission(code, storeInfo)) {
76 return (this->*HANDLERS[code])({ storeInfo.bundleName }, { storeInfo.storeId }, data, reply);
77 }
78 ZLOGE("PERMISSION_DENIED uid:%{public}d appId:%{public}s storeId:%{public}s", storeInfo.uid,
79 storeInfo.bundleName.c_str(), Anonymous::Change(storeInfo.storeId).c_str());
80
81 if (!ITypesUtil::Marshal(reply, static_cast<int32_t>(PERMISSION_DENIED))) {
82 ZLOGE("Marshal PERMISSION_DENIED code:%{public}u appId:%{public}s storeId:%{public}s", code,
83 storeInfo.bundleName.c_str(), Anonymous::Change(storeInfo.storeId).c_str());
84 return IPC_STUB_WRITE_PARCEL_ERR;
85 }
86 return ERR_NONE;
87 }
88
GetStoreInfo(uint32_t code,MessageParcel & data)89 std::pair<int32_t, KVDBServiceStub::StoreInfo> KVDBServiceStub::GetStoreInfo(uint32_t code, MessageParcel &data)
90 {
91 AppId appId;
92 StoreId storeId;
93 if (!ITypesUtil::Unmarshal(data, appId, storeId)) {
94 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s",
95 appId.appId.c_str(), Anonymous::Change(storeId.storeId).c_str());
96 return { IPC_STUB_INVALID_DATA_ERR, StoreInfo() };
97 }
98 appId.appId = Constant::TrimCopy(appId.appId);
99 storeId.storeId = Constant::TrimCopy(storeId.storeId);
100 StoreInfo info;
101 info.uid = IPCSkeleton::GetCallingUid();
102 info.tokenId = IPCSkeleton::GetCallingTokenID();
103 info.bundleName = std::move(appId.appId);
104 info.storeId = std::move(storeId.storeId);
105 return { ERR_NONE, info };
106 }
107
CheckPermission(uint32_t code,const StoreInfo & storeInfo)108 bool KVDBServiceStub::CheckPermission(uint32_t code, const StoreInfo &storeInfo)
109 {
110 if (code >= static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_PUT_SWITCH) &&
111 code <= static_cast<uint32_t>(KVDBServiceInterfaceCode::TRANS_UNSUBSCRIBE_SWITCH_DATA)) {
112 return CheckerManager::GetInstance().IsSwitches(storeInfo);
113 }
114 return CheckerManager::GetInstance().IsValid(storeInfo);
115 }
116
OnGetStoreIds(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)117 int32_t KVDBServiceStub::OnGetStoreIds(
118 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
119 {
120 std::vector<StoreId> storeIds;
121 int32_t status = GetStoreIds(appId, storeIds);
122 if (!ITypesUtil::Marshal(reply, status, storeIds)) {
123 ZLOGE("Marshal status:0x%{public}d storeIds:%{public}zu", status, storeIds.size());
124 return IPC_STUB_WRITE_PARCEL_ERR;
125 }
126 return ERR_NONE;
127 }
128
OnBeforeCreate(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)129 int32_t KVDBServiceStub::OnBeforeCreate(
130 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
131 {
132 Options options;
133 if (!ITypesUtil::Unmarshal(data, options)) {
134 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
135 Anonymous::Change(storeId.storeId).c_str());
136 return IPC_STUB_INVALID_DATA_ERR;
137 }
138 int32_t status = BeforeCreate(appId, storeId, options);
139 if (!ITypesUtil::Marshal(reply, status)) {
140 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
141 Anonymous::Change(storeId.storeId).c_str());
142 return IPC_STUB_WRITE_PARCEL_ERR;
143 }
144 return ERR_NONE;
145 }
146
OnAfterCreate(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)147 int32_t KVDBServiceStub::OnAfterCreate(
148 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
149 {
150 Options options;
151 std::vector<uint8_t> password;
152 if (!ITypesUtil::Unmarshal(data, options, password)) {
153 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
154 Anonymous::Change(storeId.storeId).c_str());
155 return IPC_STUB_INVALID_DATA_ERR;
156 }
157 int32_t status = AfterCreate(appId, storeId, options, password);
158 password.assign(password.size(), 0);
159 if (!ITypesUtil::Marshal(reply, status)) {
160 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
161 Anonymous::Change(storeId.storeId).c_str());
162 return IPC_STUB_WRITE_PARCEL_ERR;
163 }
164 return ERR_NONE;
165 }
166
OnDelete(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)167 int32_t KVDBServiceStub::OnDelete(const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
168 {
169 int32_t status = Delete(appId, storeId);
170 if (!ITypesUtil::Marshal(reply, status)) {
171 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
172 Anonymous::Change(storeId.storeId).c_str());
173 return IPC_STUB_WRITE_PARCEL_ERR;
174 }
175 return ERR_NONE;
176 }
177
OnClose(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)178 int32_t KVDBServiceStub::OnClose(const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
179 {
180 int32_t status = Close(appId, storeId);
181 if (!ITypesUtil::Marshal(reply, status)) {
182 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
183 Anonymous::Change(storeId.storeId).c_str());
184 return IPC_STUB_WRITE_PARCEL_ERR;
185 }
186 return ERR_NONE;
187 }
188
OnSync(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)189 int32_t KVDBServiceStub::OnSync(const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
190 {
191 SyncInfo syncInfo;
192 if (!ITypesUtil::Unmarshal(data, syncInfo.seqId, syncInfo.mode, syncInfo.devices, syncInfo.delay, syncInfo.query)) {
193 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
194 Anonymous::Change(storeId.storeId).c_str());
195 return IPC_STUB_INVALID_DATA_ERR;
196 }
197 int32_t status = Sync(appId, storeId, syncInfo);
198 if (!ITypesUtil::Marshal(reply, status)) {
199 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
200 Anonymous::Change(storeId.storeId).c_str());
201 return IPC_STUB_WRITE_PARCEL_ERR;
202 }
203 return ERR_NONE;
204 }
205
OnCloudSync(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)206 int32_t KVDBServiceStub::OnCloudSync(
207 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
208 {
209 SyncInfo syncInfo;
210 if (!ITypesUtil::Unmarshal(data, syncInfo.seqId)) {
211 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
212 Anonymous::Change(storeId.storeId).c_str());
213 return IPC_STUB_INVALID_DATA_ERR;
214 }
215 int32_t status = CloudSync(appId, storeId, syncInfo);
216 if (!ITypesUtil::Marshal(reply, status)) {
217 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
218 Anonymous::Change(storeId.storeId).c_str());
219 return IPC_STUB_WRITE_PARCEL_ERR;
220 }
221 return ERR_NONE;
222 }
223
OnNotifyDataChange(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)224 int32_t KVDBServiceStub::OnNotifyDataChange(
225 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
226 {
227 uint64_t delay = 0;
228 if (!ITypesUtil::Unmarshal(data, delay)) {
229 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
230 Anonymous::Change(storeId.storeId).c_str());
231 return IPC_STUB_INVALID_DATA_ERR;
232 }
233 int32_t status = NotifyDataChange(appId, storeId, delay);
234 if (!ITypesUtil::Marshal(reply, status)) {
235 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s",
236 status, appId.appId.c_str(), Anonymous::Change(storeId.storeId).c_str());
237 return IPC_STUB_WRITE_PARCEL_ERR;
238 }
239 return ERR_NONE;
240 }
241
OnRegServiceNotifier(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)242 int32_t KVDBServiceStub::OnRegServiceNotifier(
243 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
244 {
245 sptr<IRemoteObject> remoteObj;
246 if (!ITypesUtil::Unmarshal(data, remoteObj)) {
247 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
248 Anonymous::Change(storeId.storeId).c_str());
249 return IPC_STUB_INVALID_DATA_ERR;
250 }
251 auto notifier = (remoteObj == nullptr) ? nullptr : iface_cast<IKVDBNotifier>(remoteObj);
252 int32_t status = RegServiceNotifier(appId, notifier);
253 if (!ITypesUtil::Marshal(reply, status)) {
254 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
255 Anonymous::Change(storeId.storeId).c_str());
256 return IPC_STUB_WRITE_PARCEL_ERR;
257 }
258 return ERR_NONE;
259 }
260
OnUnregServiceNotifier(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)261 int32_t KVDBServiceStub::OnUnregServiceNotifier(
262 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
263 {
264 int32_t status = UnregServiceNotifier(appId);
265 if (!ITypesUtil::Marshal(reply, status)) {
266 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
267 Anonymous::Change(storeId.storeId).c_str());
268 return IPC_STUB_WRITE_PARCEL_ERR;
269 }
270 return ERR_NONE;
271 }
272
OnSetSyncParam(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)273 int32_t KVDBServiceStub::OnSetSyncParam(
274 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
275 {
276 KvSyncParam syncParam;
277 if (!ITypesUtil::Unmarshal(data, syncParam.allowedDelayMs)) {
278 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
279 Anonymous::Change(storeId.storeId).c_str());
280 return IPC_STUB_INVALID_DATA_ERR;
281 }
282 int32_t status = SetSyncParam(appId, storeId, syncParam);
283 if (!ITypesUtil::Marshal(reply, status)) {
284 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
285 Anonymous::Change(storeId.storeId).c_str());
286 return IPC_STUB_WRITE_PARCEL_ERR;
287 }
288 return ERR_NONE;
289 }
290
OnGetSyncParam(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)291 int32_t KVDBServiceStub::OnGetSyncParam(
292 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
293 {
294 KvSyncParam syncParam;
295 int32_t status = GetSyncParam(appId, storeId, syncParam);
296 if (!ITypesUtil::Marshal(reply, status, syncParam.allowedDelayMs)) {
297 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
298 Anonymous::Change(storeId.storeId).c_str());
299 return IPC_STUB_WRITE_PARCEL_ERR;
300 }
301 return ERR_NONE;
302 }
303
OnEnableCap(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)304 int32_t KVDBServiceStub::OnEnableCap(
305 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
306 {
307 int32_t status = EnableCapability(appId, storeId);
308 if (!ITypesUtil::Marshal(reply, status)) {
309 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
310 Anonymous::Change(storeId.storeId).c_str());
311 return IPC_STUB_WRITE_PARCEL_ERR;
312 }
313 return ERR_NONE;
314 }
315
OnDisableCap(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)316 int32_t KVDBServiceStub::OnDisableCap(
317 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
318 {
319 int32_t status = DisableCapability(appId, storeId);
320 if (!ITypesUtil::Marshal(reply, status)) {
321 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
322 Anonymous::Change(storeId.storeId).c_str());
323 return IPC_STUB_WRITE_PARCEL_ERR;
324 }
325 return ERR_NONE;
326 }
327
OnSetCapability(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)328 int32_t KVDBServiceStub::OnSetCapability(
329 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
330 {
331 std::vector<std::string> local;
332 std::vector<std::string> remote;
333 if (!ITypesUtil::Unmarshal(data, local, remote)) {
334 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
335 Anonymous::Change(storeId.storeId).c_str());
336 return IPC_STUB_INVALID_DATA_ERR;
337 }
338 int32_t status = SetCapability(appId, storeId, local, remote);
339 if (!ITypesUtil::Marshal(reply, status)) {
340 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
341 Anonymous::Change(storeId.storeId).c_str());
342 return IPC_STUB_WRITE_PARCEL_ERR;
343 }
344 return ERR_NONE;
345 }
346
OnAddSubInfo(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)347 int32_t KVDBServiceStub::OnAddSubInfo(const AppId &appId, const StoreId &storeId, MessageParcel &data,
348 MessageParcel &reply)
349 {
350 SyncInfo syncInfo;
351 if (!ITypesUtil::Unmarshal(data, syncInfo.seqId, syncInfo.devices, syncInfo.query)) {
352 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
353 Anonymous::Change(storeId.storeId).c_str());
354 return IPC_STUB_INVALID_DATA_ERR;
355 }
356 int32_t status = AddSubscribeInfo(appId, storeId, syncInfo);
357 if (!ITypesUtil::Marshal(reply, status)) {
358 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
359 Anonymous::Change(storeId.storeId).c_str());
360 return IPC_STUB_WRITE_PARCEL_ERR;
361 }
362 return ERR_NONE;
363 }
364
OnRmvSubInfo(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)365 int32_t KVDBServiceStub::OnRmvSubInfo(const AppId &appId, const StoreId &storeId, MessageParcel &data,
366 MessageParcel &reply)
367 {
368 SyncInfo syncInfo;
369 if (!ITypesUtil::Unmarshal(data, syncInfo.seqId, syncInfo.devices, syncInfo.query)) {
370 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
371 Anonymous::Change(storeId.storeId).c_str());
372 return IPC_STUB_INVALID_DATA_ERR;
373 }
374 int32_t status = RmvSubscribeInfo(appId, storeId, syncInfo);
375 if (!ITypesUtil::Marshal(reply, status)) {
376 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
377 Anonymous::Change(storeId.storeId).c_str());
378 return IPC_STUB_WRITE_PARCEL_ERR;
379 }
380 return ERR_NONE;
381 }
382
OnSubscribe(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)383 int32_t KVDBServiceStub::OnSubscribe(
384 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
385 {
386 sptr<IRemoteObject> remoteObj;
387 if (!ITypesUtil::Unmarshal(data, remoteObj)) {
388 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
389 Anonymous::Change(storeId.storeId).c_str());
390 return IPC_STUB_INVALID_DATA_ERR;
391 }
392 auto observer = (remoteObj == nullptr) ? nullptr : iface_cast<IKvStoreObserver>(remoteObj);
393 int32_t status = Subscribe(appId, storeId, observer);
394 if (!ITypesUtil::Marshal(reply, status)) {
395 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
396 Anonymous::Change(storeId.storeId).c_str());
397 return IPC_STUB_WRITE_PARCEL_ERR;
398 }
399 return ERR_NONE;
400 }
401
OnUnsubscribe(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)402 int32_t KVDBServiceStub::OnUnsubscribe(
403 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
404 {
405 sptr<IRemoteObject> remoteObj;
406 if (!ITypesUtil::Unmarshal(data, remoteObj)) {
407 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
408 Anonymous::Change(storeId.storeId).c_str());
409 return IPC_STUB_INVALID_DATA_ERR;
410 }
411 auto observer = (remoteObj == nullptr) ? nullptr : iface_cast<IKvStoreObserver>(remoteObj);
412 int32_t status = Unsubscribe(appId, storeId, observer);
413 if (!ITypesUtil::Marshal(reply, status)) {
414 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
415 Anonymous::Change(storeId.storeId).c_str());
416 return IPC_STUB_WRITE_PARCEL_ERR;
417 }
418 return ERR_NONE;
419 }
420
OnGetBackupPassword(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)421 int32_t KVDBServiceStub::OnGetBackupPassword(
422 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
423 {
424 int32_t passwordType;
425 if (!ITypesUtil::Unmarshal(data, passwordType)) {
426 ZLOGE("Unmarshal type failed, appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
427 Anonymous::Change(storeId.storeId).c_str());
428 return IPC_STUB_INVALID_DATA_ERR;
429 }
430 std::vector<uint8_t> password;
431 int32_t status = GetBackupPassword(appId, storeId, password, passwordType);
432 if (!ITypesUtil::Marshal(reply, status, password)) {
433 ZLOGE("Marshal status:0x%{public}x appId:%{public}s storeId:%{public}s", status, appId.appId.c_str(),
434 Anonymous::Change(storeId.storeId).c_str());
435 password.assign(password.size(), 0);
436 return IPC_STUB_WRITE_PARCEL_ERR;
437 }
438 password.assign(password.size(), 0);
439 return ERR_NONE;
440 }
441
OnPutSwitch(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)442 int32_t KVDBServiceStub::OnPutSwitch(
443 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
444 {
445 SwitchData switchData;
446 if (!ITypesUtil::Unmarshal(data, switchData)) {
447 ZLOGE("Unmarshal appId:%{public}s", appId.appId.c_str());
448 return IPC_STUB_INVALID_DATA_ERR;
449 }
450 int32_t status = PutSwitch(appId, switchData);
451 if (!ITypesUtil::Marshal(reply, status)) {
452 ZLOGE("Marshal status:0x%{public}x appId:%{public}s", status, appId.appId.c_str());
453 return IPC_STUB_WRITE_PARCEL_ERR;
454 }
455 return ERR_NONE;
456 }
457
OnGetSwitch(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)458 int32_t KVDBServiceStub::OnGetSwitch(
459 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
460 {
461 std::string networkId;
462 if (!ITypesUtil::Unmarshal(data, networkId)) {
463 ZLOGE("Unmarshal appId:%{public}s networkId:%{public}s",
464 appId.appId.c_str(), Anonymous::Change(networkId).c_str());
465 return IPC_STUB_INVALID_DATA_ERR;
466 }
467 SwitchData switchData;
468 int32_t status = GetSwitch(appId, networkId, switchData);
469 if (!ITypesUtil::Marshal(reply, status, switchData)) {
470 ZLOGE("Marshal status:0x%{public}x appId:%{public}s networkId:%{public}s",
471 status, appId.appId.c_str(), Anonymous::Change(networkId).c_str());
472 return IPC_STUB_WRITE_PARCEL_ERR;
473 }
474 return ERR_NONE;
475 }
476
OnSubscribeSwitchData(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)477 int32_t KVDBServiceStub::OnSubscribeSwitchData(
478 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
479 {
480 int32_t status = SubscribeSwitchData(appId);
481 if (!ITypesUtil::Marshal(reply, status)) {
482 ZLOGE("Marshal status:0x%{public}x appId:%{public}s", status, appId.appId.c_str());
483 return IPC_STUB_WRITE_PARCEL_ERR;
484 }
485 return ERR_NONE;
486 }
487
OnUnsubscribeSwitchData(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)488 int32_t KVDBServiceStub::OnUnsubscribeSwitchData(
489 const AppId &appId, const StoreId &storeId, MessageParcel &data, MessageParcel &reply)
490 {
491 int32_t status = UnsubscribeSwitchData(appId);
492 if (!ITypesUtil::Marshal(reply, status)) {
493 ZLOGE("Marshal status:0x%{public}x appId:%{public}s", status, appId.appId.c_str());
494 return IPC_STUB_WRITE_PARCEL_ERR;
495 }
496 return ERR_NONE;
497 }
498
OnSetConfig(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)499 int32_t KVDBServiceStub::OnSetConfig(const AppId &appId, const StoreId &storeId, MessageParcel &data,
500 MessageParcel &reply)
501 {
502 StoreConfig storeConfig;
503 if (!ITypesUtil::Unmarshal(data, storeConfig)) {
504 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
505 Anonymous::Change(storeId.storeId).c_str());
506 return IPC_STUB_INVALID_DATA_ERR;
507 }
508 int32_t status = SetConfig(appId, storeId, storeConfig);
509 if (!ITypesUtil::Marshal(reply, status)) {
510 ZLOGE("Marshal status:0x%{public}x appId:%{public}s", status, appId.appId.c_str());
511 return IPC_STUB_WRITE_PARCEL_ERR;
512 }
513 return ERR_NONE;
514 }
515
OnRemoveDeviceData(const AppId & appId,const StoreId & storeId,MessageParcel & data,MessageParcel & reply)516 int32_t KVDBServiceStub::OnRemoveDeviceData(const AppId &appId, const StoreId &storeId, MessageParcel &data,
517 MessageParcel &reply)
518 {
519 std::string device;
520 if (!ITypesUtil::Unmarshal(data, device)) {
521 ZLOGE("Unmarshal appId:%{public}s storeId:%{public}s", appId.appId.c_str(),
522 Anonymous::Change(storeId.storeId).c_str());
523 return IPC_STUB_INVALID_DATA_ERR;
524 }
525 int32_t status = RemoveDeviceData(appId, storeId, device);
526 if (!ITypesUtil::Marshal(reply, status)) {
527 ZLOGE("Marshal status:0x%{public}x appId:%{public}s", status, appId.appId.c_str());
528 return IPC_STUB_WRITE_PARCEL_ERR;
529 }
530 return ERR_NONE;
531 }
532 } // namespace OHOS::DistributedKv
533