From c5d366516b5bf0171878566a008389ae563da3ea Mon Sep 17 00:00:00 2001 From: zph Date: Fri, 23 May 2025 18:35:05 +0800 Subject: [PATCH 1/7] update Signed-off-by: zph --- .../service/udmf/BUILD.gn | 1 + .../udmf/preprocess/udmf_notifier_proxy.cpp | 86 +++++++++++++++ .../udmf/preprocess/udmf_notifier_proxy.h | 48 ++++++++ .../service/udmf/store/runtime_store.cpp | 30 ++++- .../service/udmf/store/runtime_store.h | 4 +- .../service/udmf/store/store.h | 1 + .../service/udmf/udmf_service_impl.cpp | 104 ++++++++++++++++++ .../service/udmf/udmf_service_impl.h | 6 + .../service/udmf/udmf_service_stub.cpp | 56 ++++++++++ .../service/udmf/udmf_service_stub.h | 8 +- 10 files changed, 339 insertions(+), 5 deletions(-) create mode 100644 services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp create mode 100644 services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.h diff --git a/services/distributeddataservice/service/udmf/BUILD.gn b/services/distributeddataservice/service/udmf/BUILD.gn index 8176548a1..3b81c5f3f 100644 --- a/services/distributeddataservice/service/udmf/BUILD.gn +++ b/services/distributeddataservice/service/udmf/BUILD.gn @@ -57,6 +57,7 @@ ohos_source_set("udmf_server") { "permission/uri_permission_manager.cpp", "preprocess/data_handler.cpp", "preprocess/preprocess_utils.cpp", + "preprocess/udmf_notifier_proxy.cpp", "store/runtime_store.cpp", "store/store_account_observer.cpp", "store/store_cache.cpp", diff --git a/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp new file mode 100644 index 000000000..e6833df73 --- /dev/null +++ b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "UDMFNotifierProxy" + +#include "udmf_notifier_proxy.h" +#include "distributeddata_udmf_ipc_interface_code.h" +#include "log_print.h" +#include "message_parcel.h" +#include "message_option.h" +#include "utils/anonymous.h" +#include "udmf_types_util.h" + +namespace OHOS { +namespace UDMF { +#define IPC_SEND(code, reply, ...) \ + ({ \ + int32_t ipcStatus = E_OK; \ + do { \ + MessageParcel request; \ + if (!request.WriteInterfaceToken(GetDescriptor())) { \ + ipcStatus = E_WRITE_PARCEL_ERROR; \ + break; \ + } \ + if (!ITypesUtil::Marshal(request, ##__VA_ARGS__)) { \ + ipcStatus = E_WRITE_PARCEL_ERROR; \ + break; \ + } \ + MessageOption option; \ + auto result = remote_->SendRequest((code), request, reply, option); \ + if (result != 0) { \ + ZLOGE("SendRequest failed, result = %{public}d!", result); \ + ipcStatus = E_IPC; \ + break; \ + } \ + \ + ITypesUtil::Unmarshal(reply, ipcStatus); \ + } while (0); \ + ipcStatus; \ + }) + +UdmfNotifierProxy::UdmfNotifierProxy(const sptr &impl) + : IRemoteProxy(impl) +{ + remote_ = Remote(); +} + +void UdmfNotifierProxy::HandleDelayObserver(const std::string &key, const DataLoadInfo &dataLoadInfo) +{ + MessageParcel reply; + int32_t status = + IPC_SEND(static_cast(UdmfServiceInterfaceCode::HANDLE_DELAY_OBSERVER), reply, key, dataLoadInfo); + if (status != E_OK) { + ZLOGE("status:%{public}d" PRIu64, status); + } +} + +DelayDataCallbackProxy::DelayDataCallbackProxy(const sptr &impl) + : IRemoteProxy(impl) +{ + remote_ = Remote(); +} + +void DelayDataCallbackProxy::DelayDataCallback(const std::string &key, const UnifiedData &data) +{ + MessageParcel reply; + int32_t status = + IPC_SEND(static_cast(UdmfServiceInterfaceCode::HANDLE_DELAY_OBSERVER), reply, key, data); + if (status != E_OK) { + ZLOGE("status:%{public}d" PRIu64, status); + } +} +} // namespace UDMF +} // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.h b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.h new file mode 100644 index 000000000..782ed38cb --- /dev/null +++ b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UDMF_NOTIFIER_PROXY_H +#define UDMF_NOTIFIER_PROXY_H + +#include "iremote_broker.h" +#include "iremote_proxy.h" +#include "iudmf_notifier.h" + +namespace OHOS { +namespace UDMF { +class UdmfNotifierProxy : public IRemoteProxy { +public: + explicit UdmfNotifierProxy(const sptr &impl); + ~UdmfNotifierProxy() = default; + void HandleDelayObserver(const std::string &key, const DataLoadInfo &dataLoadInfo) override; + +private: + static inline BrokerDelegator delegator_; + sptr remote_; +}; + +class DelayDataCallbackProxy : public IRemoteProxy { +public: + explicit DelayDataCallbackProxy(const sptr &impl); + ~DelayDataCallbackProxy() = default; + void DelayDataCallback(const std::string &key, const UnifiedData &data) override; + +private: + static inline BrokerDelegator delegator_; + sptr remote_; +}; +} // namespace UDMF +} // namespace OHOS +#endif // UDMF_NOTIFIER_PROXY_H \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/store/runtime_store.cpp b/services/distributeddataservice/service/udmf/store/runtime_store.cpp index fa6f511e9..ae58f7e77 100644 --- a/services/distributeddataservice/service/udmf/store/runtime_store.cpp +++ b/services/distributeddataservice/service/udmf/store/runtime_store.cpp @@ -100,7 +100,7 @@ Status RuntimeStore::Put(const UnifiedData &unifiedData) std::vector entries; std::string intention = unifiedData.GetRuntime()->key.intention; if (intention == UD_INTENTION_MAP.at(UD_INTENTION_DRAG)) { - PutSummary(unifiedData, entries); + PutSummaryFromUData(unifiedData, entries); } auto status = DataHandler::MarshalToEntries(unifiedData, entries); if (status != E_OK) { @@ -124,7 +124,7 @@ Status RuntimeStore::Get(const std::string &key, UnifiedData &unifiedData) return DataHandler::UnmarshalEntries(key, entries, unifiedData); } -Status RuntimeStore::PutSummary(const UnifiedData &data, std::vector &entries) +Status RuntimeStore::PutSummaryFromUData(const UnifiedData &data, std::vector &entries) { UpdateTime(); UDDetails details {}; @@ -135,7 +135,31 @@ Status RuntimeStore::PutSummary(const UnifiedData &data, std::vector &ent UnifiedDataHelper::GetSummary(data, summary); } - auto propertyKey = data.GetRuntime()->key.GetKeyCommonPrefix(); + auto status = PutSummary(data.GetRuntime()->key, summary, entries); + if (status != E_OK) { + ZLOGE("Put summary failed, status:%{public}d", status); + return status; + } + return E_OK; +} + +Status RuntimeStore::PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) +{ + Summary summary; + UnifiedDataHelper::GetSummaryFromLoadInfo(dataLoadInfo, summary); + + std::vector entries; + auto status = PutSummary(key, summary, entries); + if (status != E_OK) { + ZLOGE("Put summary failed, status:%{public}d", status); + return status; + } + return PutEntries(entries); +} + +Status RuntimeStore::PutSummary(UnifiedKey &key, const Summary &summary, std::vector &entries) +{ + auto propertyKey = key.GetKeyCommonPrefix(); Value value; auto status = DataHandler::MarshalToEntries(summary, value, TAG::TAG_SUMMARY); if (status != E_OK) { diff --git a/services/distributeddataservice/service/udmf/store/runtime_store.h b/services/distributeddataservice/service/udmf/store/runtime_store.h index eb83a3503..f1dee4aa2 100644 --- a/services/distributeddataservice/service/udmf/store/runtime_store.h +++ b/services/distributeddataservice/service/udmf/store/runtime_store.h @@ -43,6 +43,7 @@ public: Status DeleteLocal(const std::string &key) override; Status PutRuntime(const std::string &key, const Runtime &runtime) override; Status GetRuntime(const std::string &key, Runtime &runtime) override; + Status PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) override; void Close() override; bool Init() override; @@ -64,7 +65,8 @@ private: bool BuildMetaDataParam(DistributedData::StoreMetaData &metaData); void NotifySyncProcss(const DevSyncProcessMap &processMap, ProcessCallback callback, const DevNameMap &deviceNameMap); - Status PutSummary(const UnifiedData &data, std::vector &entries); + Status PutSummaryFromUData(const UnifiedData &data, std::vector &entries); + Status PutSummary(UnifiedKey &key, const Summary &summary, std::vector &entries); }; } // namespace UDMF } // namespace OHOS diff --git a/services/distributeddataservice/service/udmf/store/store.h b/services/distributeddataservice/service/udmf/store/store.h index aaf6fade1..b52456406 100644 --- a/services/distributeddataservice/service/udmf/store/store.h +++ b/services/distributeddataservice/service/udmf/store/store.h @@ -39,6 +39,7 @@ public: virtual Status DeleteLocal(const std::string &key) = 0; virtual Status PutRuntime(const std::string &key, const Runtime &runtime) = 0; virtual Status GetRuntime(const std::string &key, Runtime &runtime) = 0; + virtual Status PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) = 0; virtual bool Init() = 0; virtual void Close() = 0; diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 86b9e3d08..5bbbf92cd 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1037,5 +1037,109 @@ bool UdmfServiceImpl::IsValidOptionsNonDrag(UnifiedKey &key, const std::string & } return false; } + +int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) +{ + // generate key + std::string bundleName; + auto tokenId = static_cast(IPCSkeleton::GetCallingTokenID()); + PreProcessUtils::GetHapBundleNameByToken(tokenId, bundleName); + UnifiedKey udkey(UD_INTENTION_MAP.at(UD_INTENTION_DRAG), bundleName, dataLoadInfo.udKey); + key = udkey.GetUnifiedKey(); + + dataLoadCallback_.Insert(key, iface_cast(iUdmfNotifier)); + + // save summary + auto store = StoreCache::GetInstance().GetStore(UD_INTENTION_MAP.at(UD_INTENTION_DRAG)); + if (store == nullptr) { + ZLOGE("Get store failed:%{public}s", key.c_str()); + return E_DB_ERROR; + } + if (store->PutSummaryFromDataLoadInfo(udkey, dataLoadInfo) != E_OK) { + ZLOGE("Put unified data failed:%{public}s", key.c_str()); + return E_DB_ERROR; + } + return E_OK; +} + +int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifiedData) +{ + // set + CustomOption option { + .intention = UD_INTENTION_DRAG, + .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), + }; + // need to change runtime + if (PreProcessUtils::RuntimeDataImputation(unifiedData, option) != E_OK) { + ZLOGE("Imputation failed"); + return E_ERROR; + } + int32_t ret = PreProcessUtils::SetRemoteUri(option.tokenId, unifiedData); + if (ret != E_OK) { + ZLOGE("SetRemoteUri failed, ret: %{public}d, bundleName:%{public}s.", ret, + unifiedData.GetRuntime()->createPackage.c_str()); + return ret; + } + + // get : check privilege + auto it = delayDataCallback_.Find(key); + if (!it.first) { + ZLOGE("DelayData callback no exist, key:%{public}s", key.c_str()); + return E_ERROR; + } + QueryOption query { + .tokenId = it.second.tokenId, + .key = key + }; + if (option.tokenId != query.tokenId && !IsPermissionInCache(query)) { + ZLOGE("No permission"); + return E_NO_PERMISSION; + } + + ret = ProcessUri(query, unifiedData); + if (ret != E_OK) { + ZLOGE("ProcessUri failed:%{public}d", ret); + return E_NO_PERMISSION; + } + privilegeCache_.erase(key); + PreProcessUtils::SetRemoteData(unifiedData); + + TransferToEntriesIfNeed(query, unifiedData); + ZLOGE("zzz key=%{public}s, dataLoadInfo.recordCount=%{public}zu", key.c_str(), unifiedData.GetRecords().size()); + auto callback = iface_cast(it.second.dataCallback); + callback->DelayDataCallback(key, unifiedData); + return E_OK; +} + +int32_t UdmfServiceImpl::GetDelayData(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) +{ + ZLOGD("start"); + QueryOption query { + .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), + .key = dataLoadInfo.udKey + }; + auto status = RetrieveData(query, *unifiedData); + if (status == E_OK) { + return E_OK; + } + if (status != E_NOT_FOUND) { + ZLOGE("Retrieve data failed, key:%{public}s", dataLoadInfo.udKey.c_str()); + return status; + } + + DelayGetDataInfo delayGetDataInfo = { + .dataCallback = iUdmfNotifier, + .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), + }; + delayDataCallback_.Insert(query.key, delayGetDataInfo); + + auto it = dataLoadCallback_.Find(query.key); + if (!it.first) { + ZLOGE("DataLoad callback no exist, key:%{public}s", query.key.c_str()); + return E_ERROR; + } + it.second->HandleDelayObserver(query.key, dataLoadInfo); + return E_OK; +} } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 16b46026b..c7b7ee20f 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -20,6 +20,7 @@ #include "udmf_service_stub.h" #include "kv_store_delegate_manager.h" #include "checker_manager.h" +#include "udmf_notifier_proxy.h" namespace OHOS { namespace UDMF { /* @@ -48,6 +49,9 @@ public: int32_t ClearAsynProcessByKey(const std::string &businessUdKey) override; int32_t ResolveAutoLaunch(const std::string &identifier, DBLaunchParam ¶m) override; int32_t OnUserChange(uint32_t code, const std::string &user, const std::string &account) override; + int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) override; + int32_t SetDelayData(const std::string &key, UnifiedData &unifiedData) override; + int32_t GetDelayData(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) override; private: int32_t SaveData(CustomOption &option, UnifiedData &unifiedData, std::string &key); int32_t RetrieveData(const QueryOption &query, UnifiedData &unifiedData); @@ -84,6 +88,8 @@ private: std::mutex mutex_; std::unordered_map asyncProcessInfoMap_; + ConcurrentMap> dataLoadCallback_; + ConcurrentMap delayDataCallback_; }; } // namespace UDMF } // namespace OHOS diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp index f433413b0..5972bf3c3 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp @@ -289,5 +289,61 @@ int32_t UdmfServiceStub::OnClearAsynProcessByKey(MessageParcel &data, MessagePar } return E_OK; } + +int32_t UdmfServiceStub::OnSetDelayInfo(MessageParcel &data, MessageParcel &reply) +{ + ZLOGE("zzz start"); + DataLoadInfo dataLoadInfo; + sptr iUdmfNotifier; + + if (!ITypesUtil::Unmarshal(data, dataLoadInfo, iUdmfNotifier)) { + ZLOGE("Unmarshal failed!"); + return E_READ_PARCEL_ERROR; + } + std::string key; + int32_t status = SetDelayInfo(dataLoadInfo, iUdmfNotifier, key); + if (!ITypesUtil::Marshal(reply, status, key)) { + ZLOGE("Marshal failed:%{public}d", status); + return E_WRITE_PARCEL_ERROR; + } + return E_OK; +} + +int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &reply) +{ + ZLOGE("zzz start"); + std::string businessUdKey; + UnifiedData unifiedData; + + if (!ITypesUtil::Unmarshal(data, businessUdKey, unifiedData)) { + ZLOGE("Unmarshal failed!"); + return E_READ_PARCEL_ERROR; + } + + int32_t status = SetDelayData(businessUdKey, unifiedData); + if (!ITypesUtil::Marshal(reply, status)) { + ZLOGE("Marshal failed:%{public}d", status); + return E_WRITE_PARCEL_ERROR; + } + return E_OK; +} + +int32_t UdmfServiceStub::OnGetDelayData(MessageParcel &data, MessageParcel &reply) +{ + ZLOGE("zzz start"); + DataLoadInfo dataLoadInfo; + sptr iUdmfNotifier; + if (!ITypesUtil::Unmarshal(data, dataLoadInfo, iUdmfNotifier)) { + ZLOGE("Unmarshal failed!"); + return E_READ_PARCEL_ERROR; + } + auto unifiedData = std::make_shared(); + int32_t status = GetDelayData(dataLoadInfo, iUdmfNotifier, unifiedData); + if (!ITypesUtil::Marshal(reply, status, *unifiedData)) { + ZLOGE("Marshal failed:%{public}d", status); + return E_WRITE_PARCEL_ERROR; + } + return E_OK; +} } // namespace UDMF } // namespace OHOS \ No newline at end of file diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.h b/services/distributeddataservice/service/udmf/udmf_service_stub.h index 793a13d99..9b30bafd2 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.h +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.h @@ -46,6 +46,9 @@ private: int32_t OnObtainAsynProcess(MessageParcel &data, MessageParcel &reply); int32_t OnClearAsynProcessByKey(MessageParcel &data, MessageParcel &reply); int32_t OnInvokeHap(MessageParcel &data, MessageParcel &reply); + int32_t OnSetDelayData(MessageParcel &data, MessageParcel &reply); + int32_t OnSetDelayInfo(MessageParcel &data, MessageParcel &reply); + int32_t OnGetDelayData(MessageParcel &data, MessageParcel &reply); using Handler = int32_t (UdmfServiceStub::*)(MessageParcel &data, MessageParcel &reply); static constexpr Handler HANDLERS[static_cast(UdmfServiceInterfaceCode::CODE_BUTT)] = { @@ -62,7 +65,10 @@ private: &UdmfServiceStub::OnGetAppShareOption, &UdmfServiceStub::OnRemoveAppShareOption, &UdmfServiceStub::OnObtainAsynProcess, - &UdmfServiceStub::OnClearAsynProcessByKey + &UdmfServiceStub::OnClearAsynProcessByKey, + &UdmfServiceStub::OnSetDelayInfo, + &UdmfServiceStub::OnSetDelayData, + &UdmfServiceStub::OnGetDelayData, }; }; } // namespace UDMF -- Gitee From 63cccb8b54e4860f0de4065757efac3c638829a0 Mon Sep 17 00:00:00 2001 From: zph Date: Sat, 24 May 2025 12:02:53 +0800 Subject: [PATCH 2/7] update Signed-off-by: zph --- .../service/udmf/preprocess/udmf_notifier_proxy.cpp | 7 +++---- .../service/udmf/udmf_service_impl.cpp | 9 --------- .../service/udmf/udmf_service_impl.h | 6 ++++-- .../service/udmf/udmf_service_stub.cpp | 6 +++--- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp index e6833df73..503b0a6bc 100644 --- a/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp +++ b/services/distributeddataservice/service/udmf/preprocess/udmf_notifier_proxy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -14,14 +14,14 @@ */ #define LOG_TAG "UDMFNotifierProxy" - #include "udmf_notifier_proxy.h" + #include "distributeddata_udmf_ipc_interface_code.h" #include "log_print.h" #include "message_parcel.h" #include "message_option.h" -#include "utils/anonymous.h" #include "udmf_types_util.h" +#include "utils/anonymous.h" namespace OHOS { namespace UDMF { @@ -45,7 +45,6 @@ namespace UDMF { ipcStatus = E_IPC; \ break; \ } \ - \ ITypesUtil::Unmarshal(reply, ipcStatus); \ } while (0); \ ipcStatus; \ diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 5bbbf92cd..b97ab5795 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1040,16 +1040,13 @@ bool UdmfServiceImpl::IsValidOptionsNonDrag(UnifiedKey &key, const std::string & int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) { - // generate key std::string bundleName; auto tokenId = static_cast(IPCSkeleton::GetCallingTokenID()); PreProcessUtils::GetHapBundleNameByToken(tokenId, bundleName); UnifiedKey udkey(UD_INTENTION_MAP.at(UD_INTENTION_DRAG), bundleName, dataLoadInfo.udKey); key = udkey.GetUnifiedKey(); - dataLoadCallback_.Insert(key, iface_cast(iUdmfNotifier)); - // save summary auto store = StoreCache::GetInstance().GetStore(UD_INTENTION_MAP.at(UD_INTENTION_DRAG)); if (store == nullptr) { ZLOGE("Get store failed:%{public}s", key.c_str()); @@ -1064,12 +1061,10 @@ int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr(IPCSkeleton::GetCallingTokenID()), }; - // need to change runtime if (PreProcessUtils::RuntimeDataImputation(unifiedData, option) != E_OK) { ZLOGE("Imputation failed"); return E_ERROR; @@ -1081,7 +1076,6 @@ int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifi return ret; } - // get : check privilege auto it = delayDataCallback_.Find(key); if (!it.first) { ZLOGE("DelayData callback no exist, key:%{public}s", key.c_str()); @@ -1095,7 +1089,6 @@ int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifi ZLOGE("No permission"); return E_NO_PERMISSION; } - ret = ProcessUri(query, unifiedData); if (ret != E_OK) { ZLOGE("ProcessUri failed:%{public}d", ret); @@ -1105,7 +1098,6 @@ int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifi PreProcessUtils::SetRemoteData(unifiedData); TransferToEntriesIfNeed(query, unifiedData); - ZLOGE("zzz key=%{public}s, dataLoadInfo.recordCount=%{public}zu", key.c_str(), unifiedData.GetRecords().size()); auto callback = iface_cast(it.second.dataCallback); callback->DelayDataCallback(key, unifiedData); return E_OK; @@ -1126,7 +1118,6 @@ int32_t UdmfServiceImpl::GetDelayData(const DataLoadInfo &dataLoadInfo, sptr(IPCSkeleton::GetCallingTokenID()), diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index c7b7ee20f..dfa99394a 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -49,9 +49,11 @@ public: int32_t ClearAsynProcessByKey(const std::string &businessUdKey) override; int32_t ResolveAutoLaunch(const std::string &identifier, DBLaunchParam ¶m) override; int32_t OnUserChange(uint32_t code, const std::string &user, const std::string &account) override; - int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) override; + int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, + std::string &key) override; int32_t SetDelayData(const std::string &key, UnifiedData &unifiedData) override; - int32_t GetDelayData(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) override; + int32_t GetDelayData(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, + std::shared_ptr unifiedData) override; private: int32_t SaveData(CustomOption &option, UnifiedData &unifiedData, std::string &key); int32_t RetrieveData(const QueryOption &query, UnifiedData &unifiedData); diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp index 5972bf3c3..0ae13b18e 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp @@ -292,7 +292,7 @@ int32_t UdmfServiceStub::OnClearAsynProcessByKey(MessageParcel &data, MessagePar int32_t UdmfServiceStub::OnSetDelayInfo(MessageParcel &data, MessageParcel &reply) { - ZLOGE("zzz start"); + ZLOGD("start"); DataLoadInfo dataLoadInfo; sptr iUdmfNotifier; @@ -311,7 +311,7 @@ int32_t UdmfServiceStub::OnSetDelayInfo(MessageParcel &data, MessageParcel &repl int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &reply) { - ZLOGE("zzz start"); + ZLOGD("start"); std::string businessUdKey; UnifiedData unifiedData; @@ -330,7 +330,7 @@ int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &repl int32_t UdmfServiceStub::OnGetDelayData(MessageParcel &data, MessageParcel &reply) { - ZLOGE("zzz start"); + ZLOGD("start"); DataLoadInfo dataLoadInfo; sptr iUdmfNotifier; if (!ITypesUtil::Unmarshal(data, dataLoadInfo, iUdmfNotifier)) { -- Gitee From 2893859091195b4b1dbe3e3b8d9edc088032295c Mon Sep 17 00:00:00 2001 From: zph Date: Sat, 24 May 2025 19:42:35 +0800 Subject: [PATCH 3/7] update Signed-off-by: zph --- services/distributeddataservice/service/test/BUILD.gn | 3 +++ .../service/udmf/udmf_service_impl.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index a5f539cc5..5c73b387d 100644 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -1154,6 +1154,7 @@ ohos_unittest("UdmfServiceImplTest") { ] include_dirs = [ + "${data_service_path}/service/udmf/preprocess", "${data_service_path}/service/udmf/store", "${data_service_path}/service/udmf", "${data_service_path}/framework/include", @@ -1194,6 +1195,7 @@ ohos_unittest("UdmfServiceStubTest") { sources = [ "udmf_service_stub_test.cpp" ] include_dirs = [ + "${data_service_path}/service/udmf/preprocess", "${data_service_path}/service/udmf/store", "${data_service_path}/service/udmf", "${data_service_path}/framework/include", @@ -1256,6 +1258,7 @@ ohos_unittest("UdmfServiceStubMockTest") { "${data_service_path}/service/udmf/permission/uri_permission_manager.cpp", "${data_service_path}/service/udmf/preprocess/data_handler.cpp", "${data_service_path}/service/udmf/preprocess/preprocess_utils.cpp", + "${data_service_path}/service/udmf/preprocess/udmf_notifier_proxy.cpp", "${data_service_path}/service/udmf/store/runtime_store.cpp", "${data_service_path}/service/udmf/store/store_account_observer.cpp", "${data_service_path}/service/udmf/store/store_cache.cpp", diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index b97ab5795..5e525f2a7 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -141,9 +141,8 @@ int32_t UdmfServiceImpl::SaveData(CustomOption &option, UnifiedData &unifiedData if (intention == UD_INTENTION_MAP.at(UD_INTENTION_DRAG)) { int32_t ret = PreProcessUtils::SetRemoteUri(option.tokenId, unifiedData); if (ret != E_OK) { - ZLOGE("SetRemoteUri failed, ret: %{public}d, bundleName:%{public}s.", ret, + ZLOGW("SetRemoteUri failed, ret: %{public}d, bundleName:%{public}s.", ret, unifiedData.GetRuntime()->createPackage.c_str()); - return ret; } } PreProcessUtils::SetRecordUid(unifiedData); @@ -1072,7 +1071,7 @@ int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifi int32_t ret = PreProcessUtils::SetRemoteUri(option.tokenId, unifiedData); if (ret != E_OK) { ZLOGE("SetRemoteUri failed, ret: %{public}d, bundleName:%{public}s.", ret, - unifiedData.GetRuntime()->createPackage.c_str()); + unifiedData.GetRuntime()->createPackage.c_str()); return ret; } @@ -1100,6 +1099,7 @@ int32_t UdmfServiceImpl::SetDelayData(const std::string &key, UnifiedData &unifi TransferToEntriesIfNeed(query, unifiedData); auto callback = iface_cast(it.second.dataCallback); callback->DelayDataCallback(key, unifiedData); + delayDataCallback_.Erase(key); return E_OK; } @@ -1130,6 +1130,7 @@ int32_t UdmfServiceImpl::GetDelayData(const DataLoadInfo &dataLoadInfo, sptrHandleDelayObserver(query.key, dataLoadInfo); + dataLoadCallback_.Erase(query.key); return E_OK; } } // namespace UDMF -- Gitee From 2d352ae3925c6d1b815265c4a43ec9f0615e8e46 Mon Sep 17 00:00:00 2001 From: zph Date: Sat, 24 May 2025 20:27:06 +0800 Subject: [PATCH 4/7] update Signed-off-by: zph --- .../service/udmf/udmf_service_impl.cpp | 4 ++-- .../service/udmf/udmf_service_impl.h | 4 ++-- .../service/udmf/udmf_service_stub.cpp | 8 ++++---- .../service/udmf/udmf_service_stub.h | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 5e525f2a7..a8b0964ba 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1058,7 +1058,7 @@ int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) +int32_t UdmfServiceImpl::GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) { ZLOGD("start"); QueryOption query { diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index dfa99394a..3768a26b5 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -51,8 +51,8 @@ public: int32_t OnUserChange(uint32_t code, const std::string &user, const std::string &account) override; int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) override; - int32_t SetDelayData(const std::string &key, UnifiedData &unifiedData) override; - int32_t GetDelayData(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, + int32_t PushDelayData(const std::string &key, UnifiedData &unifiedData) override; + int32_t GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) override; private: int32_t SaveData(CustomOption &option, UnifiedData &unifiedData, std::string &key); diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp index 0ae13b18e..2292a0784 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp @@ -309,7 +309,7 @@ int32_t UdmfServiceStub::OnSetDelayInfo(MessageParcel &data, MessageParcel &repl return E_OK; } -int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &reply) +int32_t UdmfServiceStub::OnPushDelayData(MessageParcel &data, MessageParcel &reply) { ZLOGD("start"); std::string businessUdKey; @@ -320,7 +320,7 @@ int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &repl return E_READ_PARCEL_ERROR; } - int32_t status = SetDelayData(businessUdKey, unifiedData); + int32_t status = PushDelayData(businessUdKey, unifiedData); if (!ITypesUtil::Marshal(reply, status)) { ZLOGE("Marshal failed:%{public}d", status); return E_WRITE_PARCEL_ERROR; @@ -328,7 +328,7 @@ int32_t UdmfServiceStub::OnSetDelayData(MessageParcel &data, MessageParcel &repl return E_OK; } -int32_t UdmfServiceStub::OnGetDelayData(MessageParcel &data, MessageParcel &reply) +int32_t UdmfServiceStub::OnGetDataIfAvailable(MessageParcel &data, MessageParcel &reply) { ZLOGD("start"); DataLoadInfo dataLoadInfo; @@ -338,7 +338,7 @@ int32_t UdmfServiceStub::OnGetDelayData(MessageParcel &data, MessageParcel &repl return E_READ_PARCEL_ERROR; } auto unifiedData = std::make_shared(); - int32_t status = GetDelayData(dataLoadInfo, iUdmfNotifier, unifiedData); + int32_t status = GetDataIfAvailable(dataLoadInfo, iUdmfNotifier, unifiedData); if (!ITypesUtil::Marshal(reply, status, *unifiedData)) { ZLOGE("Marshal failed:%{public}d", status); return E_WRITE_PARCEL_ERROR; diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.h b/services/distributeddataservice/service/udmf/udmf_service_stub.h index 9b30bafd2..c5f617a9f 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.h +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.h @@ -46,9 +46,9 @@ private: int32_t OnObtainAsynProcess(MessageParcel &data, MessageParcel &reply); int32_t OnClearAsynProcessByKey(MessageParcel &data, MessageParcel &reply); int32_t OnInvokeHap(MessageParcel &data, MessageParcel &reply); - int32_t OnSetDelayData(MessageParcel &data, MessageParcel &reply); + int32_t OnPushDelayData(MessageParcel &data, MessageParcel &reply); int32_t OnSetDelayInfo(MessageParcel &data, MessageParcel &reply); - int32_t OnGetDelayData(MessageParcel &data, MessageParcel &reply); + int32_t OnGetDataIfAvailable(MessageParcel &data, MessageParcel &reply); using Handler = int32_t (UdmfServiceStub::*)(MessageParcel &data, MessageParcel &reply); static constexpr Handler HANDLERS[static_cast(UdmfServiceInterfaceCode::CODE_BUTT)] = { @@ -67,8 +67,8 @@ private: &UdmfServiceStub::OnObtainAsynProcess, &UdmfServiceStub::OnClearAsynProcessByKey, &UdmfServiceStub::OnSetDelayInfo, - &UdmfServiceStub::OnSetDelayData, - &UdmfServiceStub::OnGetDelayData, + &UdmfServiceStub::OnPushDelayData, + &UdmfServiceStub::OnGetDataIfAvailable, }; }; } // namespace UDMF -- Gitee From 072ce0ea048ef7024c14783f2b84c7ddcef43a6b Mon Sep 17 00:00:00 2001 From: zph Date: Sat, 24 May 2025 21:33:47 +0800 Subject: [PATCH 5/7] update Signed-off-by: zph --- .../service/udmf/store/runtime_store.cpp | 32 +++++++------------ .../service/udmf/store/runtime_store.h | 5 ++- .../service/udmf/store/store.h | 2 +- .../service/udmf/udmf_service_impl.cpp | 20 +++++++++--- 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/services/distributeddataservice/service/udmf/store/runtime_store.cpp b/services/distributeddataservice/service/udmf/store/runtime_store.cpp index ae58f7e77..60e59ff40 100644 --- a/services/distributeddataservice/service/udmf/store/runtime_store.cpp +++ b/services/distributeddataservice/service/udmf/store/runtime_store.cpp @@ -100,7 +100,7 @@ Status RuntimeStore::Put(const UnifiedData &unifiedData) std::vector entries; std::string intention = unifiedData.GetRuntime()->key.intention; if (intention == UD_INTENTION_MAP.at(UD_INTENTION_DRAG)) { - PutSummaryFromUData(unifiedData, entries); + PutSummary(unifiedData, entries); } auto status = DataHandler::MarshalToEntries(unifiedData, entries); if (status != E_OK) { @@ -124,7 +124,7 @@ Status RuntimeStore::Get(const std::string &key, UnifiedData &unifiedData) return DataHandler::UnmarshalEntries(key, entries, unifiedData); } -Status RuntimeStore::PutSummaryFromUData(const UnifiedData &data, std::vector &entries) +Status RuntimeStore::PutSummary(const UnifiedData &data, std::vector &entries) { UpdateTime(); UDDetails details {}; @@ -135,29 +135,19 @@ Status RuntimeStore::PutSummaryFromUData(const UnifiedData &data, std::vectorkey, summary, entries); + auto propertyKey = data.GetRuntime()->key.GetKeyCommonPrefix(); + Value value; + auto status = DataHandler::MarshalToEntries(summary, value, TAG::TAG_SUMMARY); if (status != E_OK) { - ZLOGE("Put summary failed, status:%{public}d", status); + ZLOGE("Marshal summary failed, key: %{public}s, status:%{public}d", propertyKey.c_str(), status); return status; } + auto summaryKey = propertyKey + SUMMARY_SUFIX; + entries.push_back({{summaryKey.begin(), summaryKey.end()}, value}); return E_OK; } -Status RuntimeStore::PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) -{ - Summary summary; - UnifiedDataHelper::GetSummaryFromLoadInfo(dataLoadInfo, summary); - - std::vector entries; - auto status = PutSummary(key, summary, entries); - if (status != E_OK) { - ZLOGE("Put summary failed, status:%{public}d", status); - return status; - } - return PutEntries(entries); -} - -Status RuntimeStore::PutSummary(UnifiedKey &key, const Summary &summary, std::vector &entries) +Status RuntimeStore::PutSummary(UnifiedKey &key, const Summary &summary) { auto propertyKey = key.GetKeyCommonPrefix(); Value value; @@ -167,8 +157,8 @@ Status RuntimeStore::PutSummary(UnifiedKey &key, const Summary &summary, std::ve return status; } auto summaryKey = propertyKey + SUMMARY_SUFIX; - entries.push_back({{summaryKey.begin(), summaryKey.end()}, value}); - return E_OK; + std::vector entries{{{summaryKey.begin(), summaryKey.end()}, value}};; + return PutEntries(std::move(entries)); } Status RuntimeStore::GetSummary(UnifiedKey &key, Summary &summary) diff --git a/services/distributeddataservice/service/udmf/store/runtime_store.h b/services/distributeddataservice/service/udmf/store/runtime_store.h index f1dee4aa2..107ac11bc 100644 --- a/services/distributeddataservice/service/udmf/store/runtime_store.h +++ b/services/distributeddataservice/service/udmf/store/runtime_store.h @@ -43,7 +43,7 @@ public: Status DeleteLocal(const std::string &key) override; Status PutRuntime(const std::string &key, const Runtime &runtime) override; Status GetRuntime(const std::string &key, Runtime &runtime) override; - Status PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) override; + Status PutSummary(UnifiedKey &key, const Summary &summary) override; void Close() override; bool Init() override; @@ -65,8 +65,7 @@ private: bool BuildMetaDataParam(DistributedData::StoreMetaData &metaData); void NotifySyncProcss(const DevSyncProcessMap &processMap, ProcessCallback callback, const DevNameMap &deviceNameMap); - Status PutSummaryFromUData(const UnifiedData &data, std::vector &entries); - Status PutSummary(UnifiedKey &key, const Summary &summary, std::vector &entries); + Status PutSummary(const UnifiedData &data, std::vector &entries); }; } // namespace UDMF } // namespace OHOS diff --git a/services/distributeddataservice/service/udmf/store/store.h b/services/distributeddataservice/service/udmf/store/store.h index b52456406..69091ed91 100644 --- a/services/distributeddataservice/service/udmf/store/store.h +++ b/services/distributeddataservice/service/udmf/store/store.h @@ -39,7 +39,7 @@ public: virtual Status DeleteLocal(const std::string &key) = 0; virtual Status PutRuntime(const std::string &key, const Runtime &runtime) = 0; virtual Status GetRuntime(const std::string &key, Runtime &runtime) = 0; - virtual Status PutSummaryFromDataLoadInfo(UnifiedKey &key, const DataLoadInfo &dataLoadInfo) = 0; + virtual Status PutSummary(UnifiedKey &key, const Summary &summary) = 0; virtual bool Init() = 0; virtual void Close() = 0; diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index a8b0964ba..cd2b6daf6 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1051,8 +1051,11 @@ int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptrPutSummaryFromDataLoadInfo(udkey, dataLoadInfo) != E_OK) { - ZLOGE("Put unified data failed:%{public}s", key.c_str()); + + Summary summary; + UnifiedDataHelper::GetSummaryFromLoadInfo(dataLoadInfo, summary); + if (store->PutSummary(udkey, summary) != E_OK) { + ZLOGE("Put summary failed:%{public}s", key.c_str()); return E_DB_ERROR; } return E_OK; @@ -1070,8 +1073,7 @@ int32_t UdmfServiceImpl::PushDelayData(const std::string &key, UnifiedData &unif } int32_t ret = PreProcessUtils::SetRemoteUri(option.tokenId, unifiedData); if (ret != E_OK) { - ZLOGE("SetRemoteUri failed, ret: %{public}d, bundleName:%{public}s.", ret, - unifiedData.GetRuntime()->createPackage.c_str()); + ZLOGE("SetRemoteUri failed, ret:%{public}d, key:%{public}s.", ret, key.c_str()); return ret; } @@ -1098,6 +1100,10 @@ int32_t UdmfServiceImpl::PushDelayData(const std::string &key, UnifiedData &unif TransferToEntriesIfNeed(query, unifiedData); auto callback = iface_cast(it.second.dataCallback); + if (callback == nullptr) { + ZLOGE("Delay data callback is null, key:%{public}s", key.c_str()); + return E_ERROR; + } callback->DelayDataCallback(key, unifiedData); delayDataCallback_.Erase(key); return E_OK; @@ -1110,6 +1116,10 @@ int32_t UdmfServiceImpl::GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sp .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), .key = dataLoadInfo.udKey }; + if (unifiedData == nullptr) { + ZLOGE("Data is null, key:%{public}s", dataLoadInfo.udKey.c_str()); + return E_ERROR; + } auto status = RetrieveData(query, *unifiedData); if (status == E_OK) { return E_OK; @@ -1122,7 +1132,7 @@ int32_t UdmfServiceImpl::GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sp .dataCallback = iUdmfNotifier, .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), }; - delayDataCallback_.Insert(query.key, delayGetDataInfo); + delayDataCallback_.InsertOrAssign(query.key, std::move(delayGetDataInfo)); auto it = dataLoadCallback_.Find(query.key); if (!it.first) { -- Gitee From 5ba910871e5b03c230568fda1460b9eadfda5053 Mon Sep 17 00:00:00 2001 From: zph Date: Sun, 25 May 2025 00:22:30 +0800 Subject: [PATCH 6/7] update Signed-off-by: zph --- .../service/udmf/udmf_service_impl.cpp | 21 ++++++++++--------- .../service/udmf/udmf_service_impl.h | 4 ++-- .../service/udmf/udmf_service_stub.cpp | 15 ++++++++----- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index cd2b6daf6..2721b1d63 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1042,7 +1042,7 @@ int32_t UdmfServiceImpl::SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr(IPCSkeleton::GetCallingTokenID()); PreProcessUtils::GetHapBundleNameByToken(tokenId, bundleName); - UnifiedKey udkey(UD_INTENTION_MAP.at(UD_INTENTION_DRAG), bundleName, dataLoadInfo.udKey); + UnifiedKey udkey(UD_INTENTION_MAP.at(UD_INTENTION_DRAG), bundleName, dataLoadInfo.sequenceKey); key = udkey.GetUnifiedKey(); dataLoadCallback_.Insert(key, iface_cast(iUdmfNotifier)); @@ -1109,15 +1109,16 @@ int32_t UdmfServiceImpl::PushDelayData(const std::string &key, UnifiedData &unif return E_OK; } -int32_t UdmfServiceImpl::GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::shared_ptr unifiedData) +int32_t UdmfServiceImpl::GetDataIfAvailable(const std::string &key, const DataLoadInfo &dataLoadInfo, + sptr iUdmfNotifier, std::shared_ptr unifiedData) { ZLOGD("start"); QueryOption query { .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), - .key = dataLoadInfo.udKey + .key = key }; if (unifiedData == nullptr) { - ZLOGE("Data is null, key:%{public}s", dataLoadInfo.udKey.c_str()); + ZLOGE("Data is null, key:%{public}s", key.c_str()); return E_ERROR; } auto status = RetrieveData(query, *unifiedData); @@ -1125,22 +1126,22 @@ int32_t UdmfServiceImpl::GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sp return E_OK; } if (status != E_NOT_FOUND) { - ZLOGE("Retrieve data failed, key:%{public}s", dataLoadInfo.udKey.c_str()); + ZLOGE("Retrieve data failed, key:%{public}s", key.c_str()); return status; } DelayGetDataInfo delayGetDataInfo = { .dataCallback = iUdmfNotifier, .tokenId = static_cast(IPCSkeleton::GetCallingTokenID()), }; - delayDataCallback_.InsertOrAssign(query.key, std::move(delayGetDataInfo)); + delayDataCallback_.InsertOrAssign(key, std::move(delayGetDataInfo)); - auto it = dataLoadCallback_.Find(query.key); + auto it = dataLoadCallback_.Find(key); if (!it.first) { - ZLOGE("DataLoad callback no exist, key:%{public}s", query.key.c_str()); + ZLOGE("DataLoad callback no exist, key:%{public}s", key.c_str()); return E_ERROR; } - it.second->HandleDelayObserver(query.key, dataLoadInfo); - dataLoadCallback_.Erase(query.key); + it.second->HandleDelayObserver(key, dataLoadInfo); + dataLoadCallback_.Erase(key); return E_OK; } } // namespace UDMF diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.h b/services/distributeddataservice/service/udmf/udmf_service_impl.h index 3768a26b5..09127a317 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.h +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.h @@ -52,8 +52,8 @@ public: int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, std::string &key) override; int32_t PushDelayData(const std::string &key, UnifiedData &unifiedData) override; - int32_t GetDataIfAvailable(const DataLoadInfo &dataLoadInfo, sptr iUdmfNotifier, - std::shared_ptr unifiedData) override; + int32_t GetDataIfAvailable(const std::string &key, const DataLoadInfo &dataLoadInfo, + sptr iUdmfNotifier, std::shared_ptr unifiedData) override; private: int32_t SaveData(CustomOption &option, UnifiedData &unifiedData, std::string &key); int32_t RetrieveData(const QueryOption &query, UnifiedData &unifiedData); diff --git a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp index 2292a0784..9e9a05f14 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_stub.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_stub.cpp @@ -312,15 +312,15 @@ int32_t UdmfServiceStub::OnSetDelayInfo(MessageParcel &data, MessageParcel &repl int32_t UdmfServiceStub::OnPushDelayData(MessageParcel &data, MessageParcel &reply) { ZLOGD("start"); - std::string businessUdKey; + std::string key; UnifiedData unifiedData; - if (!ITypesUtil::Unmarshal(data, businessUdKey, unifiedData)) { + if (!ITypesUtil::Unmarshal(data, key, unifiedData)) { ZLOGE("Unmarshal failed!"); return E_READ_PARCEL_ERROR; } - int32_t status = PushDelayData(businessUdKey, unifiedData); + int32_t status = PushDelayData(key, unifiedData); if (!ITypesUtil::Marshal(reply, status)) { ZLOGE("Marshal failed:%{public}d", status); return E_WRITE_PARCEL_ERROR; @@ -331,14 +331,19 @@ int32_t UdmfServiceStub::OnPushDelayData(MessageParcel &data, MessageParcel &rep int32_t UdmfServiceStub::OnGetDataIfAvailable(MessageParcel &data, MessageParcel &reply) { ZLOGD("start"); + std::string key; DataLoadInfo dataLoadInfo; sptr iUdmfNotifier; - if (!ITypesUtil::Unmarshal(data, dataLoadInfo, iUdmfNotifier)) { + if (!ITypesUtil::Unmarshal(data, key, dataLoadInfo, iUdmfNotifier)) { ZLOGE("Unmarshal failed!"); return E_READ_PARCEL_ERROR; } auto unifiedData = std::make_shared(); - int32_t status = GetDataIfAvailable(dataLoadInfo, iUdmfNotifier, unifiedData); + int32_t status = GetDataIfAvailable(key, dataLoadInfo, iUdmfNotifier, unifiedData); + if (unifiedData == nullptr) { + ZLOGE("Data is null, key:%{public}s", key.c_str()); + return E_ERROR; + } if (!ITypesUtil::Marshal(reply, status, *unifiedData)) { ZLOGE("Marshal failed:%{public}d", status); return E_WRITE_PARCEL_ERROR; -- Gitee From e90637fe59b7469cd1091263528b8ccff4e12ec3 Mon Sep 17 00:00:00 2001 From: zph Date: Sun, 25 May 2025 16:36:50 +0800 Subject: [PATCH 7/7] update Signed-off-by: zph --- .../distributeddataservice/service/udmf/udmf_service_impl.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp index 2721b1d63..f48bb4953 100644 --- a/services/distributeddataservice/service/udmf/udmf_service_impl.cpp +++ b/services/distributeddataservice/service/udmf/udmf_service_impl.cpp @@ -1073,8 +1073,7 @@ int32_t UdmfServiceImpl::PushDelayData(const std::string &key, UnifiedData &unif } int32_t ret = PreProcessUtils::SetRemoteUri(option.tokenId, unifiedData); if (ret != E_OK) { - ZLOGE("SetRemoteUri failed, ret:%{public}d, key:%{public}s.", ret, key.c_str()); - return ret; + ZLOGW("SetRemoteUri failed, ret:%{public}d, key:%{public}s.", ret, key.c_str()); } auto it = delayDataCallback_.Find(key); -- Gitee