From d73f4c172db6d4dfeda6c3d1d205db70cfc46062 Mon Sep 17 00:00:00 2001 From: chenshuo Date: Fri, 24 May 2024 21:59:13 +0800 Subject: [PATCH 1/2] modify staticprofile Signed-off-by: chenshuo --- .../distributed_device_profile_constants.h | 1 + common/src/utils/profile_utils.cpp | 5 +- .../src/authority/trust_group_manager.cpp | 4 +- .../src/devicemanager/dp_device_manager.cpp | 4 +- .../static_capability_loader.h | 14 +++-- .../device_profile_manager.cpp | 30 ++++----- .../static_profile_manager.cpp | 2 +- .../switch_profile_manager.cpp | 6 +- .../static_capability_collector.cpp | 4 +- .../static_capability_loader.cpp | 62 +++++++++++++++---- services/core/src/utils/profile_cache.cpp | 31 +++++++--- .../static_capability_loader_test.cpp | 38 ++++++++---- 12 files changed, 139 insertions(+), 62 deletions(-) diff --git a/common/include/constants/distributed_device_profile_constants.h b/common/include/constants/distributed_device_profile_constants.h index 98542a61..142ae311 100644 --- a/common/include/constants/distributed_device_profile_constants.h +++ b/common/include/constants/distributed_device_profile_constants.h @@ -375,6 +375,7 @@ constexpr char SUPPORT_STATIC_VAL = '1'; const std::string STATIC_CAP_HANDLER_NAME = "service_name"; const std::string STATIC_CAP_HANDLER_LOC = "handler_loc"; const std::string DMS_HANDLER_LOC = "libdistributed_sdk.z.so"; +const std::string STATIC_VERSION_RULES = "^(\\d+\\.){3}\\d+$"; } // namespace DistributedDeviceProfile } // namespace OHOS #endif // OHOS_DP_DISTRIBUTED_DEVICE_PROFILE_CONSTANTS_H diff --git a/common/src/utils/profile_utils.cpp b/common/src/utils/profile_utils.cpp index cc81f46a..5e1cf1fd 100644 --- a/common/src/utils/profile_utils.cpp +++ b/common/src/utils/profile_utils.cpp @@ -557,8 +557,9 @@ bool ProfileUtils::IsPropertyValid(const std::map& pro bool ProfileUtils::IsPropertyValid(const std::map& propertyMap, const std::string& property, uint32_t minValue, uint32_t maxValue) { - if (propertyMap.count(property) != 0 && static_cast(minValue) < std::atoi(propertyMap.at(property).c_str()) - && std::atoi(propertyMap.at(property).c_str()) < static_cast(maxValue)) { + if (propertyMap.count(property) != 0 && + static_cast(minValue) < std::atoi(propertyMap.at(property).c_str()) && + std::atoi(propertyMap.at(property).c_str()) < static_cast(maxValue)) { return true; } return false; diff --git a/old/services/core/src/authority/trust_group_manager.cpp b/old/services/core/src/authority/trust_group_manager.cpp index 47f07599..14058ba9 100644 --- a/old/services/core/src/authority/trust_group_manager.cpp +++ b/old/services/core/src/authority/trust_group_manager.cpp @@ -122,8 +122,8 @@ bool TrustGroupManager::CheckGroupsInfo(const char* returnGroups, uint32_t group } // check group type is whether (same count or point to point) or not - if (groupInfo.groupType == GroupType::IDENTICAL_ACCOUNT_GROUP - || groupInfo.groupType == GroupType::PEER_TO_PEER_GROUP) { + if (groupInfo.groupType == GroupType::IDENTICAL_ACCOUNT_GROUP || + groupInfo.groupType == GroupType::PEER_TO_PEER_GROUP) { HILOGI("check success type = %{public}d", groupInfo.groupType); return true; } diff --git a/old/services/core/src/devicemanager/dp_device_manager.cpp b/old/services/core/src/devicemanager/dp_device_manager.cpp index e9c5d5de..ceb0eb9f 100644 --- a/old/services/core/src/devicemanager/dp_device_manager.cpp +++ b/old/services/core/src/devicemanager/dp_device_manager.cpp @@ -409,8 +409,8 @@ void DpDeviceManager::AutoSync(const DistributedHardware::DmDeviceInfo &deviceIn return; } int32_t osType = DEFAULT_OS_TYPE; - if (extraData.contains(DistributedHardware::PARAM_KEY_OS_TYPE) - && extraData[DistributedHardware::PARAM_KEY_OS_TYPE].is_number_integer()) { + if (extraData.contains(DistributedHardware::PARAM_KEY_OS_TYPE) && + extraData[DistributedHardware::PARAM_KEY_OS_TYPE].is_number_integer()) { osType = extraData[DistributedHardware::PARAM_KEY_OS_TYPE].get(); } HILOGI("osType=%{public}d", osType); diff --git a/services/core/include/staticcapabilityloader/static_capability_loader.h b/services/core/include/staticcapabilityloader/static_capability_loader.h index dbd7fe3d..ff165205 100644 --- a/services/core/include/staticcapabilityloader/static_capability_loader.h +++ b/services/core/include/staticcapabilityloader/static_capability_loader.h @@ -40,20 +40,24 @@ public: private: int32_t LoadJsonFile(const std::string& filePath, std::string& fileContent); int32_t GetStaticCapability(const cJSON* const staticCapabilityJson, std::string& staticCapability); - int32_t GetStaticInfo(const cJSON* const staticInfoJson, std::string& staticVersion, + int32_t GetStaticInfo(const cJSON* const staticInfoJson, const std::string& staticCapability, + std::string& staticVersion, std::unordered_map& charProfiles); + int32_t GetStaticInfoByVersion(const std::string& deviceId, const std::string& staticCapability, + const cJSON* const staticInfoJson, const std::string& staticVersion, std::unordered_map& charProfiles); - int32_t GetStaticInfoByVersion(const std::string& deviceId, const cJSON* const staticInfoJson, - const std::string& staticVersion, std::unordered_map& charProfiles); cJSON* GetLatestStaticInfoJson(const cJSON* const staticInfoJson); cJSON* GetStaticInfoJsonByVersion(const cJSON* const staticInfoJson, const std::string& staticVersion); int32_t GetStaticVersion(const cJSON* const staticInfoJson, std::string& staticVersion); - int32_t GenerateStaticProfiles(const std::string& deviceId, const cJSON* const staticInfoJson, - std::unordered_map& charProfiles); + int32_t GenerateStaticProfiles(const std::string& deviceId, const std::string& staticCapability, + const cJSON* const staticInfoJson, std::unordered_map& charProfiles); void InitStaticCapability(int32_t size, std::string& staticCapability); void SetStaticCapability(const cJSON* const staticCapabilities, std::string& staticCapability); void SetStaticCapabilityFlag(const std::string& handlerName, const std::string& handlerLoc, std::string& staticCapability); bool GetStaticCapabilityValue(const std::string& handlerLoc); + bool HasStaticCapability(const std::string& serviceId, const std::string& staticCapability); + bool StaticVersionCheck(const std::string& peerVersion, const std::string& localVersion); + bool IsValidVersion(const std::string& version); }; } } diff --git a/services/core/src/deviceprofilemanager/device_profile_manager.cpp b/services/core/src/deviceprofilemanager/device_profile_manager.cpp index 3062e603..57dedc65 100644 --- a/services/core/src/deviceprofilemanager/device_profile_manager.cpp +++ b/services/core/src/deviceprofilemanager/device_profile_manager.cpp @@ -80,7 +80,7 @@ int32_t DeviceProfileManager::ReInit() int32_t DeviceProfileManager::PutDeviceProfile(const DeviceProfile& deviceProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::PutDeviceProfile(deviceProfileStore_, deviceProfile); @@ -96,7 +96,7 @@ int32_t DeviceProfileManager::PutDeviceProfile(const DeviceProfile& deviceProfil int32_t DeviceProfileManager::PutServiceProfile(const ServiceProfile& serviceProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::PutServiceProfile(deviceProfileStore_, serviceProfile); @@ -112,7 +112,7 @@ int32_t DeviceProfileManager::PutServiceProfile(const ServiceProfile& servicePro int32_t DeviceProfileManager::PutServiceProfileBatch(const std::vector& serviceProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::PutServiceProfileBatch(deviceProfileStore_, serviceProfiles); @@ -128,7 +128,7 @@ int32_t DeviceProfileManager::PutServiceProfileBatch(const std::vector lock(dynamicStoreMutex_); res = ProfileControlUtils::PutCharacteristicProfile(deviceProfileStore_, charProfile); @@ -144,7 +144,7 @@ int32_t DeviceProfileManager::PutCharacteristicProfile(const CharacteristicProfi int32_t DeviceProfileManager::PutCharacteristicProfileBatch(const std::vector& charProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::PutCharacteristicProfileBatch(deviceProfileStore_, charProfiles); @@ -160,7 +160,7 @@ int32_t DeviceProfileManager::PutCharacteristicProfileBatch(const std::vector lock(dynamicStoreMutex_); res = ProfileControlUtils::GetDeviceProfile(deviceProfileStore_, deviceId, deviceProfile); @@ -177,7 +177,7 @@ int32_t DeviceProfileManager::GetServiceProfile(const std::string& deviceId, con ServiceProfile& serviceProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::GetServiceProfile(deviceProfileStore_, deviceId, serviceName, @@ -195,7 +195,7 @@ int32_t DeviceProfileManager::GetCharacteristicProfile(const std::string& device const std::string& characteristicKey, CharacteristicProfile& charProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::GetCharacteristicProfile(deviceProfileStore_, deviceId, serviceName, @@ -212,7 +212,7 @@ int32_t DeviceProfileManager::GetCharacteristicProfile(const std::string& device int32_t DeviceProfileManager::DeleteServiceProfile(const std::string& deviceId, const std::string& serviceName) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::DeleteServiceProfile(deviceProfileStore_, deviceId, serviceName); @@ -229,7 +229,7 @@ int32_t DeviceProfileManager::DeleteCharacteristicProfile(const std::string& dev const std::string& characteristicKey) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::DeleteCharacteristicProfile(deviceProfileStore_, deviceId, serviceName, @@ -246,7 +246,7 @@ int32_t DeviceProfileManager::DeleteCharacteristicProfile(const std::string& dev int32_t DeviceProfileManager::GetAllDeviceProfile(std::vector& deviceProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::GetAllDeviceProfile(deviceProfileStore_, deviceProfiles); @@ -262,7 +262,7 @@ int32_t DeviceProfileManager::GetAllDeviceProfile(std::vector& de int32_t DeviceProfileManager::GetAllServiceProfile(std::vector& serviceProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::GetAllServiceProfile(deviceProfileStore_, serviceProfiles); @@ -278,7 +278,7 @@ int32_t DeviceProfileManager::GetAllServiceProfile(std::vector& int32_t DeviceProfileManager::GetAllCharacteristicProfile(std::vector& charProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(dynamicStoreMutex_); res = ProfileControlUtils::GetAllCharacteristicProfile(deviceProfileStore_, charProfiles); @@ -418,8 +418,8 @@ int32_t DeviceProfileManager::DeviceOnlineAutoSync(const std::string& peerNetwor HILOGI("call! peerNetworkId=%{public}s", ProfileUtils::GetAnonyString(peerNetworkId).c_str()); std::vector deviceList{peerNetworkId}; std::vector onlineDevices = ProfileUtils::FilterOnlineDevices(deviceList); - if (onlineDevices.empty() - || std::find(onlineDevices.begin(), onlineDevices.end(), peerNetworkId) == onlineDevices.end()) { + if (onlineDevices.empty() || + std::find(onlineDevices.begin(), onlineDevices.end(), peerNetworkId) == onlineDevices.end()) { HILOGE("Params is invalid! peerNetworkId=%{public}s", ProfileUtils::GetAnonyString(peerNetworkId).c_str()); return DP_INVALID_PARAMS; } diff --git a/services/core/src/deviceprofilemanager/static_profile_manager.cpp b/services/core/src/deviceprofilemanager/static_profile_manager.cpp index b2c6979d..3b8f99aa 100644 --- a/services/core/src/deviceprofilemanager/static_profile_manager.cpp +++ b/services/core/src/deviceprofilemanager/static_profile_manager.cpp @@ -174,7 +174,7 @@ int32_t StaticProfileManager::GenerateStaticInfoProfile(const CharacteristicProf std::string staticCapabilityValue = staticCapabilityValueItem->valuestring; cJSON_Delete(charValueJson); StaticCapabilityLoader::GetInstance().LoadStaticProfiles(staticCapabilityProfile.GetDeviceId(), - staticCapabilityVersion, staticCapabilityValue, staticInfoProfiles); + staticCapabilityValue, staticCapabilityVersion, staticInfoProfiles); return DP_SUCCESS; } } // namespace DistributedDeviceProfile diff --git a/services/core/src/deviceprofilemanager/switch_profile_manager.cpp b/services/core/src/deviceprofilemanager/switch_profile_manager.cpp index 71abc676..833183f1 100644 --- a/services/core/src/deviceprofilemanager/switch_profile_manager.cpp +++ b/services/core/src/deviceprofilemanager/switch_profile_manager.cpp @@ -72,7 +72,7 @@ int32_t SwitchProfileManager::ReInit() int32_t SwitchProfileManager::PutCharacteristicProfile(const CharacteristicProfile& charProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(switchProfileMutex_); res = ProfileControlUtils::PutSwitchCharacteristicProfile(APP_ID, charProfile); @@ -88,7 +88,7 @@ int32_t SwitchProfileManager::PutCharacteristicProfile(const CharacteristicProfi int32_t SwitchProfileManager::PutCharacteristicProfileBatch(const std::vector& charProfiles) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(switchProfileMutex_); res = ProfileControlUtils::PutSwitchCharacteristicProfileBatch(APP_ID, charProfiles); @@ -105,7 +105,7 @@ int32_t SwitchProfileManager::GetCharacteristicProfile(const std::string& device const std::string& characteristicKey, CharacteristicProfile& charProfile) { HILOGI("call!"); - int32_t res; + int32_t res = 0; { std::lock_guard lock(switchProfileMutex_); res = ProfileControlUtils::GetSwitchCharacteristicProfile(APP_ID, deviceId, serviceName, characteristicKey, diff --git a/services/core/src/staticcapabilitycollector/static_capability_collector.cpp b/services/core/src/staticcapabilitycollector/static_capability_collector.cpp index 44ed26e5..7409d6ed 100644 --- a/services/core/src/staticcapabilitycollector/static_capability_collector.cpp +++ b/services/core/src/staticcapabilitycollector/static_capability_collector.cpp @@ -44,8 +44,8 @@ int32_t StaticCapabilityCollector::CollectStaticCapability() { HILOGI("call!"); std::string staticCapability = ""; - if (StaticCapabilityLoader::GetInstance().LoadStaticCapability(staticCapability) != DP_SUCCESS - || staticCapability.empty()) { + if (StaticCapabilityLoader::GetInstance().LoadStaticCapability(staticCapability) != DP_SUCCESS || + staticCapability.empty()) { HILOGE("staticCapability is invalid!"); return DP_STATIC_COLLECT_FAIL; } diff --git a/services/core/src/staticcapabilityloader/static_capability_loader.cpp b/services/core/src/staticcapabilityloader/static_capability_loader.cpp index 5847bb9b..0e34dacb 100644 --- a/services/core/src/staticcapabilityloader/static_capability_loader.cpp +++ b/services/core/src/staticcapabilityloader/static_capability_loader.cpp @@ -15,6 +15,7 @@ #include #include +#include #include "static_capability_loader.h" @@ -54,7 +55,6 @@ int32_t StaticCapabilityLoader::LoadStaticCapability(std::string& staticCapabili HILOGE("Load json failed, result: %{public}d!", loadJsonResult); return loadJsonResult; } - HILOGI("fileContent : %{public}s", fileContent.c_str()); cJSON* staticCapabilityJson = cJSON_Parse(fileContent.c_str()); if (!cJSON_IsObject(staticCapabilityJson)) { HILOGE("Static capability json parse failed!"); @@ -123,8 +123,8 @@ int32_t StaticCapabilityLoader::GetStaticCapability(const cJSON* const staticCap return DP_SUCCESS; } -int32_t StaticCapabilityLoader::GetStaticInfo(const cJSON* const staticInfoJson, std::string& staticVersion, - std::unordered_map& charProfiles) +int32_t StaticCapabilityLoader::GetStaticInfo(const cJSON* const staticInfoJson, const std::string& staticCapability, + std::string& staticVersion, std::unordered_map& charProfiles) { HILOGI("call!"); if (!cJSON_IsObject(staticInfoJson)) { @@ -138,11 +138,12 @@ int32_t StaticCapabilityLoader::GetStaticInfo(const cJSON* const staticInfoJson, } GetStaticVersion(lastStaticInfoJson, staticVersion); std::string localDeviceId = ContentSensorManagerUtils::GetInstance().ObtainLocalUdid(); - GenerateStaticProfiles(localDeviceId, lastStaticInfoJson, charProfiles); + GenerateStaticProfiles(localDeviceId, staticCapability, lastStaticInfoJson, charProfiles); return DP_SUCCESS; } -int32_t StaticCapabilityLoader::GetStaticInfoByVersion(const std::string& deviceId, const cJSON* const staticInfoJson, +int32_t StaticCapabilityLoader::GetStaticInfoByVersion(const std::string& deviceId, + const std::string& staticCapability, const cJSON* const staticInfoJson, const std::string& staticVersion, std::unordered_map& charProfiles) { HILOGI("call!"); @@ -163,7 +164,7 @@ int32_t StaticCapabilityLoader::GetStaticInfoByVersion(const std::string& device HILOGE("staticInfoJson is nullptr!"); return DP_GET_STATIC_INFO_FAIL; } - GenerateStaticProfiles(deviceId, json, charProfiles); + GenerateStaticProfiles(deviceId, staticCapability, json, charProfiles); return DP_SUCCESS; } @@ -221,11 +222,12 @@ cJSON* StaticCapabilityLoader::GetStaticInfoJsonByVersion(const cJSON* const sta continue; } std::string version = versionItem->valuestring; - if (staticVersion == version) { + if (StaticVersionCheck(staticVersion, version)) { HILOGI("Get staticInfoJson Success!"); return item; } } + HILOGE("staticInfoJson not found"); return NULL; } @@ -245,8 +247,8 @@ int32_t StaticCapabilityLoader::GetStaticVersion(const cJSON* const lastStaticIn return DP_SUCCESS; } -int32_t StaticCapabilityLoader::GenerateStaticProfiles(const std::string& deviceId, const cJSON* const staticInfoJson, - std::unordered_map& charProfiles) +int32_t StaticCapabilityLoader::GenerateStaticProfiles(const std::string& deviceId, const std::string& staticCapability, + const cJSON* const staticInfoJson, std::unordered_map& charProfiles) { HILOGI("call!"); if (deviceId.empty() || deviceId.size() > MAX_STRING_LEN) { @@ -279,6 +281,11 @@ int32_t StaticCapabilityLoader::GenerateStaticProfiles(const std::string& device continue; } std::string serviceId = abilityKeyItem->valuestring; + if (!HasStaticCapability(serviceId, staticCapability)) { + HILOGW("service: %{public}s does not have static capability", serviceId.c_str()); + continue; + } + HILOGD("service: %{public}s has static capability", serviceId.c_str()); char* abilityValue = cJSON_Print(abilityValueItem); if (abilityValue == NULL) { HILOGE("Get abilityValue fail!"); @@ -313,7 +320,7 @@ int32_t StaticCapabilityLoader::LoadStaticInfo(const std::string& staticCapabili cJSON_Delete(staticInfoJson); return DP_PARSE_STATIC_INFO_FAIL; } - int32_t getInfoResult = GetStaticInfo(staticInfoJson, staticVersion, charProfiles); + int32_t getInfoResult = GetStaticInfo(staticInfoJson, staticCapability, staticVersion, charProfiles); if (getInfoResult != DP_SUCCESS) { HILOGE("Get static info result %{public}d!", getInfoResult); cJSON_Delete(staticInfoJson); @@ -352,7 +359,8 @@ int32_t StaticCapabilityLoader::LoadStaticProfiles(const std::string& deviceId, cJSON_Delete(staticInfoJson); return DP_PARSE_STATIC_INFO_FAIL; } - int32_t getInfoResult = GetStaticInfoByVersion(deviceId, staticInfoJson, staticVersion, charProfiles); + int32_t getInfoResult = GetStaticInfoByVersion(deviceId, staticCapability, staticInfoJson, + staticVersion, charProfiles); if (getInfoResult != DP_SUCCESS) { HILOGE("Get static info result %{public}d!", getInfoResult); cJSON_Delete(staticInfoJson); @@ -459,5 +467,37 @@ bool StaticCapabilityLoader::GetStaticCapabilityValue(const std::string& handler dlclose(so_handler); return isSupportStaticCapability; } +bool StaticCapabilityLoader::HasStaticCapability(const std::string& serviceId, const std::string& staticCapability) +{ + HILOGI("call!"); + int32_t capabilityFlag = static_cast(CAPABILITY_FLAG_MAP.at(serviceId)); + if (capabilityFlag >= static_cast(staticCapability.size())) { + HILOGE("HasStaticCapability fail, capabilityFlag is out of range, serviceId: %{public}s", + ProfileUtils::GetAnonyString(serviceId).c_str()); + return false; + } + return staticCapability[capabilityFlag] == SUPPORT_STATIC_VAL; +} + +bool StaticCapabilityLoader::StaticVersionCheck(const std::string& peerVersion, const std::string& localVersion) +{ + HILOGI("call!"); + if (peerVersion == localVersion) { + HILOGI("staticVersion equal"); + return true; + } + if (!IsValidVersion(peerVersion) || !IsValidVersion(localVersion)) { + HILOGE("Params are valid"); + return false; + } + return true; +} + +bool StaticCapabilityLoader::IsValidVersion(const std::string& version) +{ + std::regex rule(STATIC_VERSION_RULES); + return std::regex_match(version, rule); +} + } // namespace DistributedDeviceProfile } // namespace OHOS \ No newline at end of file diff --git a/services/core/src/utils/profile_cache.cpp b/services/core/src/utils/profile_cache.cpp index d5bbd5af..dbfff053 100644 --- a/services/core/src/utils/profile_cache.cpp +++ b/services/core/src/utils/profile_cache.cpp @@ -40,6 +40,23 @@ int32_t ProfileCache::Init() HILOGI("call!"); RefreshProfileCache(); syncListenerDeathRecipient_ = sptr(new SyncSubscriberDeathRecipient); + std::vector allOnlineDeviceInfo; + int32_t res = + DistributedHardware::DeviceManager::GetInstance().GetTrustedDeviceList(DP_PKG_NAME, "", allOnlineDeviceInfo); + if (res != DP_SUCCESS || allOnlineDeviceInfo.empty()) { + HILOGW("GetTrustedDeviceList failed"); + } + + std::string udid = EMPTY_STRING; + std::lock_guard lock(onlineDeviceLock_); + for (const auto& dmDeviceInfo : allOnlineDeviceInfo) { + if (!ProfileUtils::GetUdidByNetworkId(dmDeviceInfo.networkId, udid)) { + HILOGE("get udid by networkId failed"); + continue; + } + onlineDevMap_[udid] = dmDeviceInfo.networkId; + HILOGI("Init add %{public}s", ProfileUtils::GetAnonyString(udid).c_str()); + } return DP_SUCCESS; } @@ -603,9 +620,9 @@ bool ProfileCache::IsSwitchValid(const CharacteristicProfile& charProfile, } //Verify and intercept the input switch key and value. if (operate == SWITCH_OPERATE_PUT) { - if (charProfile.GetCharacteristicValue().empty() - || (charProfile.GetCharacteristicValue() != SWITCH_OFF - && charProfile.GetCharacteristicValue() != SWITCH_ON)) { + if (charProfile.GetCharacteristicValue().empty() || + (charProfile.GetCharacteristicValue() != SWITCH_OFF && + charProfile.GetCharacteristicValue() != SWITCH_ON)) { HILOGE("params invalid"); return false; } @@ -649,7 +666,7 @@ void ProfileCache::SetCurSwitch(uint32_t newSwitch) void ProfileCache::OnNodeOnline(const std::string& peerNetworkId) { HILOGI("call! peerNetworkId=%{public}s", ProfileUtils::GetAnonyString(peerNetworkId).c_str()); - std::string udid; + std::string udid = EMPTY_STRING; if (!ProfileUtils::GetUdidByNetworkId(peerNetworkId, udid)) { HILOGE("get udid by networkId failed"); return; @@ -664,7 +681,7 @@ void ProfileCache::OnNodeOnline(const std::string& peerNetworkId) void ProfileCache::OnNodeOffline(const std::string& peerNetworkId) { HILOGI("call! peerNetworkId=%{public}s", ProfileUtils::GetAnonyString(peerNetworkId).c_str()); - std::string udid; + std::string udid = EMPTY_STRING; if (!ProfileUtils::GetUdidByNetworkId(peerNetworkId, udid)) { HILOGE("get udid by networkId failed"); return; @@ -748,8 +765,8 @@ int32_t ProfileCache::GetUdidByNetWorkId(const std::string& networkId, std::stri int32_t ProfileCache::GetServiceNameByPos(int32_t pos, const std::unordered_map& switchServiceMap, std::string& serviceName) { - if (pos <= (int32_t)SwitchFlag::SWITCH_FLAG_MIN || pos >= (int32_t)SwitchFlag::SWITCH_FLAG_MAX - || switchServiceMap.empty()) { + if (pos <= (int32_t)SwitchFlag::SWITCH_FLAG_MIN || pos >= (int32_t)SwitchFlag::SWITCH_FLAG_MAX || + switchServiceMap.empty()) { HILOGE("params are invalid"); return DP_INVALID_PARAMS; } diff --git a/services/core/test/unittest/static_capability_loader_test.cpp b/services/core/test/unittest/static_capability_loader_test.cpp index 7245d047..7efbfe4a 100644 --- a/services/core/test/unittest/static_capability_loader_test.cpp +++ b/services/core/test/unittest/static_capability_loader_test.cpp @@ -33,6 +33,9 @@ using namespace std; namespace { const std::string TAG = "StaticCapabilityLoaderTest"; } + +std::string staticCapability = EMPTY_STRING; + class StaticCapabilityLoaderTest : public testing::Test { public: static void SetUpTestCase(); @@ -223,9 +226,10 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfo_001, TestSize.Level1) { std::unordered_map charProfiles; cJSON *staticInfoJson = cJSON_CreateObject(); - std::string staticVersion; + std::string staticVersion = EMPTY_STRING; int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticVersion, charProfiles); + StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticCapability, + staticVersion, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); cJSON_Delete(staticInfoJson); } @@ -242,7 +246,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfo_002, TestSize.Level1) cJSON_AddItemToObject(staticInfoJson, "test", cJSON_CreateString("test")); std::string staticVersion; int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticVersion, charProfiles); + StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticCapability, + staticVersion, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); cJSON_Delete(staticInfoJson); } @@ -260,7 +265,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfo_003, TestSize.Level1) cJSON_AddItemToObject(staticInfoJson, "test2", cJSON_CreateString("test2")); std::string staticVersion; int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticVersion, charProfiles); + StaticCapabilityLoader::GetInstance().GetStaticInfo(staticInfoJson, staticCapability, + staticVersion, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); cJSON_Delete(staticInfoJson); } @@ -277,7 +283,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfoByVersion_001, TestSize.Level1 cJSON *staticInfoJson = cJSON_CreateObject(); std::string staticVersion = "1.0"; int32_t ret = OHOS::DistributedDeviceProfile::StaticCapabilityLoader:: - GetInstance().GetStaticInfoByVersion(deviceId, staticInfoJson, staticVersion, charProfiles); + GetInstance().GetStaticInfoByVersion(deviceId, staticCapability, + staticInfoJson, staticVersion, charProfiles); EXPECT_EQ(ret, DP_INVALID_PARAM); cJSON_Delete(staticInfoJson); } @@ -294,7 +301,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfoByVersion_002, TestSize.Level1 cJSON *staticInfoJson = nullptr; std::string staticVersion = "1.0"; int32_t ret = OHOS::DistributedDeviceProfile::StaticCapabilityLoader:: - GetInstance().GetStaticInfoByVersion(deviceId, staticInfoJson, staticVersion, charProfiles); + GetInstance().GetStaticInfoByVersion(deviceId, staticCapability, + staticInfoJson, staticVersion, charProfiles); EXPECT_EQ(ret, DP_INVALID_PARAM); } @@ -310,7 +318,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfoByVersion_003, TestSize.Level1 cJSON *staticInfoJson = cJSON_CreateObject(); std::string staticVersion = ""; int32_t ret = OHOS::DistributedDeviceProfile::StaticCapabilityLoader:: - GetInstance().GetStaticInfoByVersion(deviceId, staticInfoJson, staticVersion, charProfiles); + GetInstance().GetStaticInfoByVersion(deviceId, staticCapability, + staticInfoJson, staticVersion, charProfiles); EXPECT_EQ(ret, DP_INVALID_PARAM); cJSON_Delete(staticInfoJson); } @@ -327,7 +336,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GetStaticInfoByVersion_004, TestSize.Level1 cJSON *staticInfoJson = cJSON_CreateObject(); std::string staticVersion = "1.0"; int32_t ret = OHOS::DistributedDeviceProfile::StaticCapabilityLoader:: - GetInstance().GetStaticInfoByVersion(deviceId, staticInfoJson, staticVersion, charProfiles); + GetInstance().GetStaticInfoByVersion(deviceId, staticCapability, + staticInfoJson, staticVersion, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); } @@ -462,7 +472,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GenerateStaticProfiles_001, TestSize.Level1 std::unordered_map charProfiles; cJSON *staticInfoJson = cJSON_CreateObject(); int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GenerateStaticProfiles("", staticInfoJson, charProfiles); + StaticCapabilityLoader::GetInstance().GenerateStaticProfiles("", staticCapability, + staticInfoJson, charProfiles); EXPECT_EQ(ret, DP_INVALID_PARAM); cJSON_Delete(staticInfoJson); } @@ -479,7 +490,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GenerateStaticProfiles_002, TestSize.Level1 cJSON *staticInfoJson = cJSON_CreateObject(); std::string longDeviceId(MAX_STRING_LEN + 1, 'a'); int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(longDeviceId, staticInfoJson, charProfiles); + StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(longDeviceId, staticCapability, + staticInfoJson, charProfiles); EXPECT_EQ(ret, DP_INVALID_PARAM); cJSON_Delete(staticInfoJson); } @@ -494,7 +506,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GenerateStaticProfiles_003, TestSize.Level1 std::string deviceId = "deviceId"; std::unordered_map charProfiles; int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(deviceId, nullptr, charProfiles); + StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(deviceId, staticCapability, + nullptr, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); } @@ -510,7 +523,8 @@ HWTEST_F(StaticCapabilityLoaderTest, GenerateStaticProfiles_004, TestSize.Level1 cJSON *staticInfoJson = cJSON_CreateObject(); cJSON_AddItemToObject(staticInfoJson, ABILITY_KEY.c_str(), cJSON_CreateString("not an array")); int32_t ret = OHOS::DistributedDeviceProfile:: - StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(deviceId, staticInfoJson, charProfiles); + StaticCapabilityLoader::GetInstance().GenerateStaticProfiles(deviceId, staticCapability, + staticInfoJson, charProfiles); EXPECT_EQ(ret, DP_GET_STATIC_INFO_FAIL); cJSON_Delete(staticInfoJson); } -- Gitee From 1070f77a07ca9bc25df2900cf5f360c8e22f91c5 Mon Sep 17 00:00:00 2001 From: chenshuo Date: Sat, 25 May 2024 16:22:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=80=82=E9=85=8D=E9=9D=99=E6=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenshuo --- .../distributed_device_profile_constants.h | 1 + common/include/utils/profile_utils.h | 5 +- common/src/utils/profile_utils.cpp | 41 +++++------ services/core/src/utils/profile_cache.cpp | 6 +- .../core/test/unittest/profile_utils_test.cpp | 72 ------------------- 5 files changed, 27 insertions(+), 98 deletions(-) diff --git a/common/include/constants/distributed_device_profile_constants.h b/common/include/constants/distributed_device_profile_constants.h index 142ae311..be93bb21 100644 --- a/common/include/constants/distributed_device_profile_constants.h +++ b/common/include/constants/distributed_device_profile_constants.h @@ -145,6 +145,7 @@ constexpr uint32_t NUM_1U = 1; constexpr uint32_t NUM_8U = 8; constexpr uint16_t CUR_SWITCH_LEN = 1; const std::string DP_PKG_NAME = "deviceprofile"; +const std::string IS_NUMSTRING_RULES = "^[-+]?[0-9]+$"; /* rdb constants */ const std::string RDB_PATH = "/data/service/el1/public/database/distributed_device_profile_service/"; const std::string DATABASE_NAME = "dp_rdb.db"; diff --git a/common/include/utils/profile_utils.h b/common/include/utils/profile_utils.h index e0b91e4e..aac9cd2f 100644 --- a/common/include/utils/profile_utils.h +++ b/common/include/utils/profile_utils.h @@ -78,14 +78,11 @@ public: int32_t maxValue); static bool IsPropertyValid(const std::map& propertyMap, const std::string& property, int32_t minValue, int32_t maxValue); - static bool IsPropertyValid(const std::map& propertyMap, const std::string& property, - uint32_t minValue, uint32_t maxValue); - static bool IsPropertyValid(const std::map& propertyMap, const std::string& property, - int64_t minValue, int64_t maxValue); static bool GetIntValue(const ValuesBucket& values, const std::string& property, int32_t& value); static bool GetStringValue(const ValuesBucket& values, const std::string& property, std::string& value); static bool GetLongValue(const ValuesBucket& values, const std::string& property, int64_t& value); static bool GetUdidByNetworkId(const std::string& networkId, std::string& udid); + static bool IsNumStr(const std::string& inString); }; } // namespace DistributedDeviceProfile } // namespace OHOS diff --git a/common/src/utils/profile_utils.cpp b/common/src/utils/profile_utils.cpp index 5e1cf1fd..f847d232 100644 --- a/common/src/utils/profile_utils.cpp +++ b/common/src/utils/profile_utils.cpp @@ -13,10 +13,13 @@ * limitations under the License. */ -#include #include -#include #include +#include + +#include +#include + #include "profile_utils.h" #include "distributed_device_profile_log.h" #include "distributed_device_profile_errors.h" @@ -547,32 +550,30 @@ bool ProfileUtils::IsPropertyValid(const std::map& pro bool ProfileUtils::IsPropertyValid(const std::map& propertyMap, const std::string& property, int32_t minValue, int32_t maxValue) { - if (propertyMap.count(property) != 0 && minValue < std::atoi(propertyMap.at(property).c_str()) && - std::atoi(propertyMap.at(property).c_str()) < maxValue) { - return true; + if (property.empty()) { + HILOGE("property is empty"); + return false; } - return false; -} - -bool ProfileUtils::IsPropertyValid(const std::map& propertyMap, const std::string& property, - uint32_t minValue, uint32_t maxValue) -{ - if (propertyMap.count(property) != 0 && - static_cast(minValue) < std::atoi(propertyMap.at(property).c_str()) && - std::atoi(propertyMap.at(property).c_str()) < static_cast(maxValue)) { + std::string propertyValue = propertyMap.at(property); + if (!IsNumStr(propertyValue)) { + HILOGE("%{public}s is not numeric string", propertyValue.c_str()); + return false; + } + if (propertyMap.count(property) != 0 && minValue < std::atoi(propertyValue.c_str()) && + std::atoi(propertyValue.c_str()) < maxValue) { return true; } return false; } -bool ProfileUtils::IsPropertyValid(const std::map& propertyMap, const std::string& property, - int64_t minValue, int64_t maxValue) +bool ProfileUtils::IsNumStr(const std::string& inString) { - if (propertyMap.count(property) != 0 && minValue < std::atoi(propertyMap.at(property).c_str()) && - std::atoi(propertyMap.at(property).c_str()) < maxValue) { - return true; + if (inString.empty()) { + HILOGE("inString is empty"); + return false; } - return false; + std::regex isNumStrRule(IS_NUMSTRING_RULES); + return std::regex_match(inString, isNumStrRule); } bool ProfileUtils::GetIntValue(const ValuesBucket& values, const std::string& property, int32_t& value) diff --git a/services/core/src/utils/profile_cache.cpp b/services/core/src/utils/profile_cache.cpp index dbfff053..b1e32d25 100644 --- a/services/core/src/utils/profile_cache.cpp +++ b/services/core/src/utils/profile_cache.cpp @@ -44,14 +44,16 @@ int32_t ProfileCache::Init() int32_t res = DistributedHardware::DeviceManager::GetInstance().GetTrustedDeviceList(DP_PKG_NAME, "", allOnlineDeviceInfo); if (res != DP_SUCCESS || allOnlineDeviceInfo.empty()) { - HILOGW("GetTrustedDeviceList failed"); + HILOGW("GetTrustedDeviceList failed, res: %{public}d", res); + return DP_SUCCESS; } std::string udid = EMPTY_STRING; std::lock_guard lock(onlineDeviceLock_); for (const auto& dmDeviceInfo : allOnlineDeviceInfo) { if (!ProfileUtils::GetUdidByNetworkId(dmDeviceInfo.networkId, udid)) { - HILOGE("get udid by networkId failed"); + HILOGE("get udid by networkId failed, networkId:%{public}s", + ProfileUtils::GetAnonyString(dmDeviceInfo.networkId).c_str()); continue; } onlineDevMap_[udid] = dmDeviceInfo.networkId; diff --git a/services/core/test/unittest/profile_utils_test.cpp b/services/core/test/unittest/profile_utils_test.cpp index 89b0392c..c733f43a 100644 --- a/services/core/test/unittest/profile_utils_test.cpp +++ b/services/core/test/unittest/profile_utils_test.cpp @@ -886,16 +886,6 @@ HWTEST_F(ProfileUtilsTest, IsPropertyValid001, TestSize.Level1) int32_t minValue = 0; bool res2 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); EXPECT_EQ(false, res2); - - uint32_t u32MinValue = 0; - uint32_t u32MaxValue = 1; - bool res3 = ProfileUtils::IsPropertyValid(propertyMap, property, u32MinValue, u32MaxValue); - EXPECT_EQ(false, res3); - - int64_t i64MinValue = 0; - int64_t i64MaxValue = 1; - bool res4 = ProfileUtils::IsPropertyValid(propertyMap, property, i64MinValue, i64MaxValue); - EXPECT_EQ(false, res4); } /** @@ -959,68 +949,6 @@ HWTEST_F(ProfileUtilsTest, IsPropertyValid003, TestSize.Level1) EXPECT_EQ(false, res4); } -/** - * @tc.name: IsPropertyValid004 - * @tc.desc: IsPropertyValid overload 3. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(ProfileUtilsTest, IsPropertyValid004, TestSize.Level1) -{ - map propertyMap; - string property = "property"; - string value = "5"; - propertyMap[property] = value; - uint32_t maxValue = 10; - uint32_t minValue = 0; - bool res1 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(true, res1); - - maxValue = 0; - bool res2 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res2); - - value = "0"; - propertyMap[property] = value; - bool res3 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res3); - - propertyMap.erase(property); - bool res4 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res4); -} - -/** - * @tc.name: IsPropertyValid005 - * @tc.desc: IsPropertyValid overload 4. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(ProfileUtilsTest, IsPropertyValid005, TestSize.Level1) -{ - map propertyMap; - string property = "property"; - string value = "5"; - propertyMap[property] = value; - int64_t maxValue = 10; - int64_t minValue = 0; - bool res1 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(true, res1); - - maxValue = 0; - bool res2 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res2); - - value = "0"; - propertyMap[property] = value; - bool res3 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res3); - - propertyMap.erase(property); - bool res4 = ProfileUtils::IsPropertyValid(propertyMap, property, minValue, maxValue); - EXPECT_EQ(false, res4); -} - /** * @tc.name: GetIntValue001 * @tc.desc: GetIntValue failed, ValuesBucket is empty. -- Gitee