diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.cpp index a035eb98907e57dcbe953edfda47912497b61dc1..557ae40078880966d020ca4a7c7b3be61031f18a 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.cpp @@ -48,6 +48,7 @@ constexpr int MIN_RSSI = -128; constexpr int INTERNET_ACCESS_AWARD = 2; constexpr int EMPTY_NETWORK_STATUS_HISTORY_AWARD = 1; constexpr int MAX_HISTORY_NETWORK_STATUS_NUM = 10; +constexpr int WIFI_SECURE_SCORE = 1; constexpr int HISTORY_NETWORK_STATUS_WEIGHTED_SCORE[MAX_HISTORY_NETWORK_STATUS_NUM] = { 81920, 40960, 20480, 10240, 5120, 2560, 1280, 640, 320, 160}; } @@ -229,6 +230,17 @@ double RssiLevelBonusScorer::Score(NetworkCandidate &networkCandidate) return 0; } +WifiExtScorer::WifiExtScorer() : SimpleWifiScorer("WifiExtScorer") {} + +double WifiExtScorer::Score(NetworkCandidate &networkCandidate) +{ + int32_t levelScore = 0; + if (networkCandidate.wifiDeviceConfig.isSecureWifi) { + levelScore += WIFI_SECURE_SCORE; + } + return levelScore; +} + SignalLevelScorer::SignalLevelScorer() : SimpleWifiScorer("SignalLevelScorer") {} double SignalLevelScorer::Score(NetworkCandidate &networkCandidate) @@ -267,6 +279,7 @@ SavedNetworkScorer::SavedNetworkScorer(const std::string &scorerName) : Composit AddScorer(std::make_shared()); AddScorer(std::make_shared()); AddScorer(std::make_shared()); + AddScorer(std::make_shared()); ExternalWifiCommonBuildManager::GetInstance().BuildScore( TagType::HAS_INTERNET_NETWORK_SELECTOR_SCORE_WIFI_CATEGORY_TAG, *this); } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.h index 5136c9f93eacea719dbd44d7e21029dec6011c41..aa680fe839e9b8666766becca77797fee05daad5 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_scorer_impl.h @@ -137,6 +137,12 @@ public: double Score(NetworkCandidate &networkCandidate) override; }; +class WifiExtScorer : public SimpleWifiScorer { +public: + WifiExtScorer(); + double Score(NetworkCandidate &networkCandidate) override; +}; + class SignalLevelScorer : public SimpleWifiScorer { public: SignalLevelScorer(); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.cpp index b4630aafd64e0114e2155a5d9c749851b09a5ef8..97a4368ce04cd4158cbf325c1e477a40ce498e25 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.cpp @@ -59,12 +59,17 @@ WifiSecurityDetect::WifiSecurityDetect() void WifiSecurityDetect::DealStaConnChanged(OperateResState state, const WifiLinkedInfo &info, int instId) { - if (state == OperateResState::CONNECT_AP_CONNECTED) { + std::unique_lock lock(shareDetectMutex_); + if (state == OperateResState::CONNECT_NETWORK_ENABLED) { currentConnectedNetworkId_ = info.networkId; - SecurityDetect(info); + if (!networkDetecting_.load()) { + networkDetecting_.store(true); + SecurityDetect(info); + } } else if (state == OperateResState::DISCONNECT_DISCONNECTED) { PopupNotification(WifiNotification::CLOSE, info.networkId); - currentConnectedNetworkId_ = -1; + currentConnectedNetworkId_.store(-1); + networkDetecting_.store(false); } else { return; } @@ -77,7 +82,12 @@ StaServiceCallback WifiSecurityDetect::GetStaCallback() const void WifiSecurityDetect::SetDatashareReady() { - datashareReady_ = true; + datashareReady_.store(true); +} + +void WifiSecurityDetect::SetChangeNetworkid(int networkId) +{ + currentConnectedNetworkId_.store(networkId); } std::shared_ptr WifiSecurityDetect::CreateDataShareHelper() @@ -185,6 +195,7 @@ ErrCode WifiSecurityDetect::SecurityDetectResult( SecurityModelResult model = future.get(); return SecurityModelJsonResult(model, result); } else { + WIFI_LOGE("RequestSecurityModelResultSync timeout"); return WIFI_OPT_FAILED; } } @@ -394,6 +405,20 @@ void WifiSecurityDetect::PopupNotification(int status, int networkid) std::string bundleName = WifiSettings::GetInstance().GetPackageName("SECURITY_BUNDLE"); want.SetElementName(bundleName, "WlanNotificationAbility"); if (status == 1) { + if (!IsSettingSecurityDetectOn()) { + WIFI_LOGI("The SecurityDetect is off"); + return; + } + if (networkid == -1) { + WIFI_LOGI("The networkid is off"); + return; + } + if (currentConnectedNetworkId_.load() != networkid) { + WIFI_LOGI("The networkid is changed current networkid:%{public}d detect networkid:%{public}d", + currentConnectedNetworkId_.load(), + networkid); + return; + } want.SetParam("notificationType", WifiNotification::OPEN); } else { want.SetParam("notificationType", WifiNotification::CLOSE); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.h index d4915d8651972e10b9078b54c456bb808a4a34ae..5211df541652e722e4ce8759b9b0bb530d37baa3 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.h @@ -71,6 +71,7 @@ public: bool IsSettingSecurityDetectOn(); Uri AssembleUri(const std::string &key); void SetDatashareReady(); + void SetChangeNetworkid(int networkid); void RegisterSecurityDetectObserver(); void SecurityDetect(const WifiLinkedInfo &info); void PopupNotification(int status, int networkid); @@ -78,9 +79,11 @@ public: private: std::unique_ptr securityDetectThread_ = nullptr; StaServiceCallback staCallback_; - int currentConnectedNetworkId_ = -1; + std::atomic currentConnectedNetworkId_ {-1}; std::atomic datashareReady_ {false}; + std::atomic networkDetecting_ {false}; std::mutex shareSecurityObserverMutex_; + std::mutex shareDetectMutex_; std::atomic isSecurityDetectObservered_ {false}; void DealStaConnChanged(OperateResState state, const WifiLinkedInfo &info, int instId); bool IsSecurityDetectTimeout(const int &networkId); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/BUILD.gn index 0bf3248f535d93953add3c36dc0064a901c11d2a..ba1cf6819b9c27177cc252ed3ec86faf0554a733 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/BUILD.gn @@ -66,6 +66,7 @@ local_base_include_dirs = [ "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure", "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p", "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_pro", + "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect", ] if (defined(ohos_lite)) { @@ -217,6 +218,11 @@ if (defined(ohos_lite)) { defines += [ "EXTENSIBLE_AUTHENTICATION" ] external_deps += ["netmanager_ext:ethernet_manager_if",] } + + if (wifi_feature_with_security_detect) { + defines += [ "WIFI_SECURITY_DETECT_ENABLE" ] + external_deps += [ "data_share:datashare_consumer" ] + } if (defined(global_parts_info) && defined(global_parts_info.telephony_core_service) && diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp index f4fd08d4320a5ff690ae9571c5a41fa2c4687446..c1f4da0be4aaf014f9c359c462dfb0d14a67c803 100755 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp @@ -43,6 +43,9 @@ #ifdef WIFI_CONFIG_UPDATE #include "wifi_config_update.h" #endif +#ifdef WIFI_SECURITY_DETECT_ENABLE +#include "wifi_security_detect.h" +#endif #include "wifi_notification_util.h" #include "wifi_net_stats_manager.h" #include "wifi_history_record_manager.h" @@ -4386,6 +4389,9 @@ ErrCode StaStateMachine::StartConnectToNetwork(int networkId, const std::string BlockConnectService::GetInstance().EnableNetworkSelectStatus(networkId); #ifndef OHOS_ARCH_LITE BlockConnectService::GetInstance().ReleaseUnusableBssidSet(); +#ifdef WIFI_SECURITY_DETECT_ENABLE + WifiSecurityDetect::GetInstance().SetChangeNetworkid(networkId); +#endif #endif WifiSettings::GetInstance().SetUserConnectChoice(networkId); } diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_ext/wifi_security_detect_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_ext/wifi_security_detect_test.cpp index 7c1bf18259a62174c1a4b4bbd5439a1e06f31c6c..b18a03aafc9a687ae807c70a817f682e0483f98b 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_ext/wifi_security_detect_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_ext/wifi_security_detect_test.cpp @@ -21,12 +21,12 @@ namespace Wifi { HWTEST_F(WifiSecurityDetectTest, DealStaConnChangedTest01, TestSize.Level1) { - OperateResState state = OperateResState::CONNECT_AP_CONNECTED; + OperateResState state = OperateResState::CONNECT_NETWORK_ENABLED; WifiLinkedInfo info; info.networkId = 1; int instId = 1; wifiSecurityDetect_->DealStaConnChanged(state, info, instId); - EXPECT_EQ(wifiSecurityDetect_->currentConnectedNetworkId_, info.networkId); + EXPECT_EQ(wifiSecurityDetect_->networkDetecting_, true); } HWTEST_F(WifiSecurityDetectTest, DealStaConnChangedTest02, TestSize.Level1) diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_new/BUILD.gn b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_new/BUILD.gn index ecc6a0a36c3102486fc13e425ae319571d943355..5d32a0ff8d22871dde68db303dc7e7115b98b8d6 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_new/BUILD.gn +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta_new/BUILD.gn @@ -148,6 +148,18 @@ ohos_unittest("wifi_sta_new_unittest") { "FEATURE_SELF_CURE_SUPPORT", ] + if (wifi_feature_with_security_detect) { + external_deps += [ + "data_share:datashare_consumer", + "security_guard:libsg_classify_sdk", + ] + defines += [ "WIFI_SECURITY_DETECT_ENABLE" ] + sources += [ + "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect.cpp", + "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_security_detect/wifi_security_detect_observer.cpp", + ] + } + part_name = "wifi" subsystem_name = "communication" testonly = true