From 7677945ca0ad5f7487aa22f8ad143da80b29416c Mon Sep 17 00:00:00 2001 From: liuxinbing Date: Fri, 12 Sep 2025 09:31:15 +0800 Subject: [PATCH] add checkscaninfo Signed-off-by: liuxinbing --- wifi/base/inner_api/ienhance_service.h | 8 +++++ .../wifi_manage/libwifi_manager.map | 1 + .../wifi_manage/wifi_scan/BUILD.gn | 1 + .../wifi_manage/wifi_scan/scan_service.cpp | 9 ++++++ .../wifi_scan_sa/wifi_scan_service_impl.cpp | 20 ++++--------- .../wifi_toolkit/config/wifi_scan_config.cpp | 29 +++++++++++++++++++ .../wifi_toolkit/config/wifi_scan_config.h | 5 ++++ 7 files changed, 59 insertions(+), 14 deletions(-) diff --git a/wifi/base/inner_api/ienhance_service.h b/wifi/base/inner_api/ienhance_service.h index 970d1a8e2..115d5e7f3 100644 --- a/wifi/base/inner_api/ienhance_service.h +++ b/wifi/base/inner_api/ienhance_service.h @@ -340,6 +340,14 @@ public: * @return Errcode - operation result */ virtual ErrCode RegisterSensorEnhanceCallback(SensorEnhanceCallback callback) = 0; + + /** + * @Description CheckScanInfo + * + * @param uid - uid function + * @return bool - operation result + */ + virtual bool CheckScanInfo(bool isGetScanInfoList, int uid = 0) = 0; }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map b/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map index 89163f8a9..e93d56e76 100755 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map @@ -169,6 +169,7 @@ "OHOS::Wifi::WifiScanConfig::GetScanControlInfo(OHOS::Wifi::tagScanControlInfo&, int)"; "OHOS::Wifi::WifiScanConfig::SetAppPackageName(std::__h::basic_string, std::__h::allocator> const&)"; "OHOS::Wifi::WifiScanConfig::GetScanInfoList(std::__h::vector>&)"; + "OHOS::Wifi::WifiScanConfig::GetExternalScanInfoList(std::__h::vector>&)"; "OHOS::Wifi::WifiSettings::GetInstance()"; "OHOS::Wifi::WifiSettings::ClearDeviceConfig()"; "OHOS::Wifi::WifiSettings::GetDeviceConfig(std::__h::vector>&, int)"; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/BUILD.gn index dafe53464..65dfbc39d 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/BUILD.gn @@ -122,6 +122,7 @@ if (defined(ohos_lite)) { external_deps = [ "ability_base:want", + "ability_runtime:app_manager", "c_utils:utils", "common_event_service:cesfwk_innerkits", "hilog:libhilog", diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/scan_service.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/scan_service.cpp index aa220129e..136b7967c 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/scan_service.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan/scan_service.cpp @@ -26,6 +26,7 @@ #include "wifi_common_event_helper.h" #include "wifi_code_convert.h" #include "wifi_sensor_scene.h" +#include "wifi_service_manager.h" DEFINE_WIFILOG_SCAN_LABEL("ScanService"); #define MIN(A, B) (((A) >= (B)) ? (B) : (A)) @@ -834,6 +835,10 @@ void ScanService::MergeScanResult(std::vector &results, std::vecto if (WifiConfigCenter::GetInstance().GetWifiScanConfig()->SaveScanInfoList(results) != 0) { WIFI_LOGE("SaveScanInfoList failed.\n"); } + IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); + if (pEnhanceService != nullptr && pEnhanceService->CheckScanInfo(false)) { + WifiConfigCenter::GetInstance().GetWifiScanConfig()->SaveExternalScanInfoList(results); + } WifiConfigCenter::GetInstance().UpdateLinkedInfo(m_instId); } @@ -875,6 +880,10 @@ bool ScanService::StoreFullScanInfo( if (WifiConfigCenter::GetInstance().GetWifiScanConfig()->SaveScanInfoList(results) != 0) { WIFI_LOGE("SaveScanInfoList failed.\n"); } + IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); + if (pEnhanceService != nullptr && pEnhanceService->CheckScanInfo(false)) { + WifiConfigCenter::GetInstance().GetWifiScanConfig()->SaveExternalScanInfoList(results); + } return true; } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan_sa/wifi_scan_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan_sa/wifi_scan_service_impl.cpp index 19ac7b046..ef47ac933 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan_sa/wifi_scan_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_scan_sa/wifi_scan_service_impl.cpp @@ -134,19 +134,6 @@ ErrCode WifiScanServiceImpl::Scan(bool compatible) GetScanInitiatorName(), WifiScanFailReason::PERMISSION_DENIED); return WIFI_OPT_PERMISSION_DENIED; } - } else { - if (!WifiAuthCenter::IsSystemAccess()) { - WIFI_LOGE("Scan:NOT System APP, PERMISSION_DENIED!"); - WriteWifiScanApiFailHiSysEvent(WifiConfigCenter::GetInstance().GetWifiScanConfig()->GetScanDeviceInfo(). - GetScanInitiatorName(), WifiScanFailReason::PERMISSION_DENIED); - return WIFI_OPT_NON_SYSTEMAPP; - } - if (WifiPermissionUtils::VerifyWifiConnectionPermission() == PERMISSION_DENIED) { - WIFI_LOGE("Scan:VerifyWifiConnectionPermission PERMISSION_DENIED!"); - WriteWifiScanApiFailHiSysEvent(WifiConfigCenter::GetInstance().GetWifiScanConfig()->GetScanDeviceInfo(). - GetScanInitiatorName(), WifiScanFailReason::PERMISSION_DENIED); - return WIFI_OPT_PERMISSION_DENIED; - } } if (!IsScanServiceRunning()) { @@ -292,8 +279,13 @@ ErrCode WifiScanServiceImpl::GetScanInfoList(std::vector &result, return WIFI_OPT_PERMISSION_DENIED; } } - WifiConfigCenter::GetInstance().GetWifiScanConfig()->GetScanInfoList(result); +#ifndef OHOS_ARCH_LITE + IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); + if (pEnhanceService != nullptr && pEnhanceService->CheckScanInfo(true, GetCallingUid())) { + WifiConfigCenter::GetInstance().GetWifiScanConfig()->GetExternalScanInfoList(result); + } +#endif if (!compatible) { #ifdef SUPPORT_RANDOM_MAC_ADDR if (WifiPermissionUtils::VerifyGetWifiPeersMacPermission() == PERMISSION_DENIED || diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.cpp index 98ac0743f..315f56bd7 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.cpp @@ -333,6 +333,14 @@ int WifiScanConfig::SaveScanInfoList(const std::vector &results) return 0; } +int WifiScanConfig::SaveExternalScanInfoList(const std::vector &results) +{ + std::unique_lock lock(mScanMutex); + externalWifiScanInfoList_.clear(); + externalWifiScanInfoList_ = results; + return 0; +} + int WifiScanConfig::ClearScanInfoList() { if (WifiConfigCenter::GetInstance().HasWifiActive()) { @@ -343,6 +351,7 @@ int WifiScanConfig::ClearScanInfoList() #endif std::unique_lock lock(mScanMutex); mWifiScanInfoList.clear(); + externalWifiScanInfoList_.clear(); return 0; } @@ -375,6 +384,26 @@ int WifiScanConfig::GetScanInfoList(std::vector &results) return 0; } +int WifiScanConfig::GetExternalScanInfoList(std::vector &results) +{ + std::unique_lock lock(mScanMutex); + int64_t currentTime = GetElapsedMicrosecondsSinceBoot(); + for (auto iter = externalWifiScanInfoList_.begin(); iter != externalWifiScanInfoList_.end();) { + if (iter->disappearCount >= WIFI_DISAPPEAR_TIMES) { + continue; + } + if (iter->timestamp > currentTime - WIFI_GET_SCAN_INFO_VALID_TIMESTAMP) { + results.push_back(*iter); + } + ++iter; + } + if (results.empty()) { + results.assign(externalWifiScanInfoList_.begin(), externalWifiScanInfoList_.end()); + } + LOGI("WifiSettings::GetExternalScanInfoList size = %{public}zu", results.size()); + return 0; +} + void WifiScanConfig::GetScanInfoListInner(std::vector &results) { std::unique_lock lock(mScanMutex); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.h b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.h index 7cabc1ec8..1bc78facd 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_scan_config.h @@ -71,10 +71,14 @@ public: int SaveScanInfoList(const std::vector &results); + int SaveExternalScanInfoList(const std::vector &results); + int ClearScanInfoList(); int GetScanInfoList(std::vector &results); + int GetExternalScanInfoList(std::vector &results); + void GetScanInfoListInner(std::vector &results); void RecordWifiCategory(const std::string bssid, WifiCategory category); @@ -98,6 +102,7 @@ private: std::mutex mScanMutex; std::map mWifiCategoryRecord; std::vector mWifiScanInfoList; + std::vector externalWifiScanInfoList_ = {}; std::map hilinkAbilityRecord; }; } // namespace Wifi -- Gitee