• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "wifi_settings.h"
16 #include <algorithm>
17 #include "define.h"
18 #include "wifi_global_func.h"
19 #include "wifi_log.h"
20 
21 namespace OHOS {
22 namespace Wifi {
GetInstance()23 WifiSettings &WifiSettings::GetInstance()
24 {
25     static WifiSettings gWifiSettings;
26     return gWifiSettings;
27 }
28 
WifiSettings()29 WifiSettings::WifiSettings()
30     : mWifiStaCapabilities(0),
31       mWifiState(0),
32       mScanAlwaysActive(false),
33       mHotspotState(static_cast<int>(ApState::AP_STATE_CLOSED)),
34       mP2pState(static_cast<int>(P2pState::P2P_STATE_CLOSED)),
35       mP2pDiscoverState(0),
36       mP2pConnectState(0),
37       mApMaxConnNum(0),
38       mLastSelectedNetworkId(-1),
39       mLastSelectedTimeVal(0),
40       mScreenState(MODE_STATE_OPEN),
41       mAirplaneModeState(MODE_STATE_CLOSE),
42       mAppRunningModeState(ScanMode::SYS_FOREGROUND_SCAN),
43       mPowerSavingModeState(MODE_STATE_CLOSE),
44       mFreezeModeState(MODE_STATE_CLOSE),
45       mNoChargerPlugModeState(MODE_STATE_CLOSE)
46 {}
47 
~WifiSettings()48 WifiSettings::~WifiSettings()
49 {
50     SyncDeviceConfig();
51     SyncHotspotConfig();
52     SyncBlockList();
53     SyncWifiConfig();
54     SyncWifiP2pGroupInfoConfig();
55     SyncP2pVendorConfig();
56 }
57 
InitWifiConfig()58 void WifiSettings::InitWifiConfig()
59 {
60     if (mSavedWifiConfig.LoadConfig() < 0) {
61         return;
62     }
63     std::vector<WifiConfig> tmp;
64     mSavedWifiConfig.GetValue(tmp);
65     if (tmp.size() > 0) {
66         mWifiConfig = tmp[0];
67         mScanAlwaysActive = mWifiConfig.scanAlwaysSwitch;
68     }
69     return;
70 }
71 
InitHotspotConfig()72 void WifiSettings::InitHotspotConfig()
73 {
74     /* init hotspot config */
75     if (mSavedHotspotConfig.LoadConfig() >= 0) {
76         std::vector<HotspotConfig> tmp;
77         mSavedHotspotConfig.GetValue(tmp);
78         if (tmp.size() > 0) {
79             mHotspotConfig = tmp[0];
80         } else {
81             InitDefaultHotspotConfig();
82         }
83     } else {
84         InitDefaultHotspotConfig();
85     }
86     /* init block list info */
87     if (mSavedBlockInfo.LoadConfig() >= 0) {
88         std::vector<StationInfo> tmp;
89         mSavedBlockInfo.GetValue(tmp);
90         for (std::size_t i = 0; i < tmp.size(); ++i) {
91             StationInfo &item = tmp[i];
92             mBlockListInfo.emplace(item.bssid, item);
93         }
94     }
95     return;
96 }
97 
InitP2pVendorConfig()98 void WifiSettings::InitP2pVendorConfig()
99 {
100     if (mSavedWifiP2pVendorConfig.LoadConfig() >= 0) {
101         std::vector<P2pVendorConfig> tmp;
102         mSavedWifiP2pVendorConfig.GetValue(tmp);
103         if (tmp.size() > 0) {
104             mP2pVendorConfig = tmp[0];
105         } else {
106             InitDefaultP2pVendorConfig();
107         }
108     } else {
109         InitDefaultP2pVendorConfig();
110     }
111     return;
112 }
113 
Init()114 int WifiSettings::Init()
115 {
116     mCountryCode = "CN";
117     InitGetApMaxConnNum();
118 
119     /* read ini config */
120     mSavedDeviceConfig.SetConfigFilePath(DEVICE_CONFIG_FILE_PATH);
121     mSavedHotspotConfig.SetConfigFilePath(HOTSPOT_CONFIG_FILE_PATH);
122     mSavedBlockInfo.SetConfigFilePath(BLOCK_LIST_FILE_PATH);
123     mSavedWifiConfig.SetConfigFilePath(WIFI_CONFIG_FILE_PATH);
124     mSavedWifiP2pGroupInfo.SetConfigFilePath(WIFI_P2P_GROUP_INFO_FILE_PATH);
125     mSavedWifiP2pVendorConfig.SetConfigFilePath(WIFI_P2P_VENDOR_CONFIG_FILE_PATH);
126     mTrustListPolicies.SetConfigFilePath(WIFI_TRUST_LIST_POLICY_FILE_PATH);
127     mMovingFreezePolicy.SetConfigFilePath(WIFI_MOVING_FREEZE_POLICY_FILE_PATH);
128     mSavedWifiStoreRandomMac.SetConfigFilePath(WIFI_STA_RANDOM_MAC_FILE_PATH);
129     InitWifiConfig();
130     ReloadDeviceConfig();
131     InitHotspotConfig();
132     InitP2pVendorConfig();
133     ReloadWifiP2pGroupInfoConfig();
134     InitScanControlInfo();
135     ReloadTrustListPolicies();
136     ReloadMovingFreezePolicy();
137 
138     return 0;
139 }
140 
GetWifiStaCapabilities() const141 int WifiSettings::GetWifiStaCapabilities() const
142 {
143     return mWifiStaCapabilities;
144 }
145 
SetWifiStaCapabilities(int capabilities)146 int WifiSettings::SetWifiStaCapabilities(int capabilities)
147 {
148     mWifiStaCapabilities = capabilities;
149     return 0;
150 }
151 
GetWifiState() const152 int WifiSettings::GetWifiState() const
153 {
154     return mWifiState.load();
155 }
156 
SetWifiState(int state)157 int WifiSettings::SetWifiState(int state)
158 {
159     mWifiState = state;
160     return 0;
161 }
162 
GetScanAlwaysState() const163 bool WifiSettings::GetScanAlwaysState() const
164 {
165     return mScanAlwaysActive.load();
166 }
167 
SetScanAlwaysState(bool isActive)168 int WifiSettings::SetScanAlwaysState(bool isActive)
169 {
170     mScanAlwaysActive = isActive;
171     mWifiConfig.scanAlwaysSwitch = isActive;
172     return 0;
173 }
174 
SaveScanInfoList(const std::vector<WifiScanInfo> & results)175 int WifiSettings::SaveScanInfoList(const std::vector<WifiScanInfo> &results)
176 {
177     std::unique_lock<std::mutex> lock(mInfoMutex);
178     mWifiScanInfoList = results;
179     return 0;
180 }
181 
GetScanInfoList(std::vector<WifiScanInfo> & results)182 int WifiSettings::GetScanInfoList(std::vector<WifiScanInfo> &results)
183 {
184     struct timespec clkTime = {0, 0};
185     clock_gettime(CLOCK_MONOTONIC, &clkTime);
186     int64_t curr = static_cast<int64_t>(clkTime.tv_sec) * MSEC * MSEC + clkTime.tv_nsec / MSEC; /* us */
187     std::unique_lock<std::mutex> lock(mInfoMutex);
188     for (auto iter = mWifiScanInfoList.begin(); iter != mWifiScanInfoList.end(); ++iter) {
189         if (iter->timestamp + WIFI_GET_SCAN_INFO_VALID_TIMESTAMP * MSEC * MSEC < curr) {
190             continue;
191         }
192         results.push_back(*iter);
193     }
194     return 0;
195 }
196 
GetScanControlInfo(ScanControlInfo & info)197 int WifiSettings::GetScanControlInfo(ScanControlInfo &info)
198 {
199     std::unique_lock<std::mutex> lock(mInfoMutex);
200     info = mScanControlInfo;
201     return 0;
202 }
203 
GetP2pInfo(WifiP2pLinkedInfo & linkedInfo)204 int WifiSettings::GetP2pInfo(WifiP2pLinkedInfo &linkedInfo)
205 {
206     std::unique_lock<std::mutex> lock(mInfoMutex);
207     linkedInfo = mWifiP2pInfo;
208     return 0;
209 }
210 
SaveP2pInfo(WifiP2pLinkedInfo & linkedInfo)211 int WifiSettings::SaveP2pInfo(WifiP2pLinkedInfo &linkedInfo)
212 {
213     std::unique_lock<std::mutex> lock(mInfoMutex);
214     mWifiP2pInfo = linkedInfo;
215     return 0;
216 }
217 
SetScanControlInfo(const ScanControlInfo & info)218 int WifiSettings::SetScanControlInfo(const ScanControlInfo &info)
219 {
220     std::unique_lock<std::mutex> lock(mInfoMutex);
221     mScanControlInfo = info;
222     return 0;
223 }
224 
AddDeviceConfig(const WifiDeviceConfig & config)225 int WifiSettings::AddDeviceConfig(const WifiDeviceConfig &config)
226 {
227     std::unique_lock<std::mutex> lock(mConfigMutex);
228     auto iter = mWifiDeviceConfig.find(config.networkId);
229     if (iter != mWifiDeviceConfig.end()) {
230         iter->second = config;
231     } else {
232         mWifiDeviceConfig.emplace(std::make_pair(config.networkId, config));
233     }
234     return config.networkId;
235 }
236 
RemoveDevice(int networkId)237 int WifiSettings::RemoveDevice(int networkId)
238 {
239     std::unique_lock<std::mutex> lock(mConfigMutex);
240     auto iter = mWifiDeviceConfig.find(networkId);
241     if (iter != mWifiDeviceConfig.end()) {
242         mWifiDeviceConfig.erase(iter);
243     }
244     return 0;
245 }
246 
ClearDeviceConfig(void)247 void WifiSettings::ClearDeviceConfig(void)
248 {
249     std::unique_lock<std::mutex> lock(mConfigMutex);
250     mWifiDeviceConfig.clear();
251     return;
252 }
253 
GetDeviceConfig(std::vector<WifiDeviceConfig> & results)254 int WifiSettings::GetDeviceConfig(std::vector<WifiDeviceConfig> &results)
255 {
256     if (!deviceConfigLoadFlag.test_and_set()) {
257         LOGE("Reload wifi config");
258         ReloadDeviceConfig();
259     }
260     std::unique_lock<std::mutex> lock(mConfigMutex);
261     for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
262         results.push_back(iter->second);
263     }
264     return 0;
265 }
266 
GetDeviceConfig(const int & networkId,WifiDeviceConfig & config)267 int WifiSettings::GetDeviceConfig(const int &networkId, WifiDeviceConfig &config)
268 {
269     if (!deviceConfigLoadFlag.test_and_set()) {
270         LOGE("Reload wifi config");
271         ReloadDeviceConfig();
272     }
273     std::unique_lock<std::mutex> lock(mConfigMutex);
274     for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
275         if (iter->second.networkId == networkId) {
276             config = iter->second;
277             return 0;
278         }
279     }
280     return -1;
281 }
282 
GetDeviceConfig(const std::string & index,const int & indexType,WifiDeviceConfig & config)283 int WifiSettings::GetDeviceConfig(const std::string &index, const int &indexType, WifiDeviceConfig &config)
284 {
285     if (!deviceConfigLoadFlag.test_and_set()) {
286         LOGE("Reload wifi config");
287         ReloadDeviceConfig();
288     }
289     std::unique_lock<std::mutex> lock(mConfigMutex);
290     if (indexType == DEVICE_CONFIG_INDEX_SSID) {
291         for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
292             if (iter->second.ssid == index) {
293                 config = iter->second;
294                 return 0;
295             }
296         }
297     } else {
298         for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
299             if (iter->second.bssid == index) {
300                 config = iter->second;
301                 return 0;
302             }
303         }
304     }
305     return -1;
306 }
307 
GetDeviceConfig(const std::string & ssid,const std::string & keymgmt,WifiDeviceConfig & config)308 int WifiSettings::GetDeviceConfig(const std::string &ssid, const std::string &keymgmt, WifiDeviceConfig &config)
309 {
310     if (!deviceConfigLoadFlag.test_and_set()) {
311         LOGE("Reload wifi config");
312         ReloadDeviceConfig();
313     }
314     std::unique_lock<std::mutex> lock(mConfigMutex);
315     for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
316         if ((iter->second.ssid == ssid) && (iter->second.keyMgmt == keymgmt)) {
317             config = iter->second;
318             return 0;
319         }
320     }
321     return -1;
322 }
323 
GetHiddenDeviceConfig(std::vector<WifiDeviceConfig> & results)324 int WifiSettings::GetHiddenDeviceConfig(std::vector<WifiDeviceConfig> &results)
325 {
326     if (!deviceConfigLoadFlag.test_and_set()) {
327         LOGE("Reload wifi config");
328         ReloadDeviceConfig();
329     }
330     std::unique_lock<std::mutex> lock(mConfigMutex);
331     for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); iter++) {
332         if (iter->second.hiddenSSID) {
333             results.push_back(iter->second);
334         }
335     }
336     return 0;
337 }
338 
SetDeviceState(int networkId,int state,bool bSetOther)339 int WifiSettings::SetDeviceState(int networkId, int state, bool bSetOther)
340 {
341     if (state < 0 || state >= (int)WifiDeviceConfigStatus::UNKNOWN) {
342         return -1;
343     }
344     std::unique_lock<std::mutex> lock(mConfigMutex);
345     auto iter = mWifiDeviceConfig.find(networkId);
346     if (iter == mWifiDeviceConfig.end()) {
347         return -1;
348     }
349     iter->second.status = state;
350     if (bSetOther && state == (int)WifiDeviceConfigStatus::ENABLED) {
351         for (iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); ++iter) {
352             if (iter->first != networkId && iter->second.status == state) {
353                 iter->second.status = 1;
354             }
355         }
356     }
357     return 0;
358 }
359 
SyncWifiP2pGroupInfoConfig()360 int WifiSettings::SyncWifiP2pGroupInfoConfig()
361 {
362     std::unique_lock<std::mutex> lock(mP2pMutex);
363     mSavedWifiP2pGroupInfo.SetValue(mGroupInfoList);
364     return mSavedWifiP2pGroupInfo.SaveConfig();
365 }
366 
ReloadWifiP2pGroupInfoConfig()367 int WifiSettings::ReloadWifiP2pGroupInfoConfig()
368 {
369     std::unique_lock<std::mutex> lock(mP2pMutex);
370     if (mSavedWifiP2pGroupInfo.LoadConfig()) {
371         return -1;
372     }
373     mSavedWifiP2pGroupInfo.GetValue(mGroupInfoList);
374     return 0;
375 }
376 
SetWifiP2pGroupInfo(const std::vector<WifiP2pGroupInfo> & groups)377 int WifiSettings::SetWifiP2pGroupInfo(const std::vector<WifiP2pGroupInfo> &groups)
378 {
379     std::unique_lock<std::mutex> lock(mP2pMutex);
380     mGroupInfoList = groups;
381     return 0;
382 }
383 
RemoveWifiP2pGroupInfo()384 int WifiSettings::RemoveWifiP2pGroupInfo()
385 {
386     std::unique_lock<std::mutex> lock(mP2pMutex);
387     mGroupInfoList.clear();
388     return 0;
389 }
390 
GetWifiP2pGroupInfo(std::vector<WifiP2pGroupInfo> & groups)391 int WifiSettings::GetWifiP2pGroupInfo(std::vector<WifiP2pGroupInfo> &groups)
392 {
393     std::unique_lock<std::mutex> lock(mP2pMutex);
394     groups = mGroupInfoList;
395     return 0;
396 }
397 
SyncDeviceConfig()398 int WifiSettings::SyncDeviceConfig()
399 {
400 #ifndef CONFIG_NO_CONFIG_WRITE
401     std::unique_lock<std::mutex> lock(mConfigMutex);
402     std::vector<WifiDeviceConfig> tmp;
403     for (auto iter = mWifiDeviceConfig.begin(); iter != mWifiDeviceConfig.end(); ++iter) {
404         tmp.push_back(iter->second);
405     }
406     mSavedDeviceConfig.SetValue(tmp);
407     return mSavedDeviceConfig.SaveConfig();
408 #else
409     return 0;
410 #endif
411 }
412 
ReloadDeviceConfig()413 int WifiSettings::ReloadDeviceConfig()
414 {
415 #ifndef CONFIG_NO_CONFIG_WRITE
416     int ret = mSavedDeviceConfig.LoadConfig();
417     if (ret < 0) {
418         deviceConfigLoadFlag.clear();
419         LOGE("Loading device config failed: %{public}d", ret);
420         return -1;
421     }
422     deviceConfigLoadFlag.test_and_set();
423     std::vector<WifiDeviceConfig> tmp;
424     mSavedDeviceConfig.GetValue(tmp);
425     std::unique_lock<std::mutex> lock(mConfigMutex);
426     mWifiDeviceConfig.clear();
427     for (std::size_t i = 0; i < tmp.size(); ++i) {
428         WifiDeviceConfig &item = tmp[i];
429         item.networkId = i;
430         mWifiDeviceConfig.emplace(item.networkId, item);
431     }
432     return 0;
433 #else
434     std::unique_lock<std::mutex> lock(mConfigMutex);
435     mWifiDeviceConfig.clear();
436     return 0;
437 #endif
438 }
439 
AddWpsDeviceConfig(const WifiDeviceConfig & config)440 int WifiSettings::AddWpsDeviceConfig(const WifiDeviceConfig &config)
441 {
442     int ret = mSavedDeviceConfig.LoadConfig();
443     if (ret < 0) {
444         LOGE("Add Wps config loading config failed: %{public}d", ret);
445         return -1;
446     }
447     std::vector<WifiDeviceConfig> tmp;
448     mSavedDeviceConfig.GetValue(tmp);
449     std::unique_lock<std::mutex> lock(mConfigMutex);
450     mWifiDeviceConfig.clear();
451     mWifiDeviceConfig.emplace(0, config);
452     for (std::size_t i = 0; i < tmp.size(); ++i) {
453         WifiDeviceConfig &item = tmp[i];
454         item.networkId = i + 1;
455         mWifiDeviceConfig.emplace(item.networkId, item);
456     }
457     return 0;
458 }
459 
GetIpInfo(IpInfo & info)460 int WifiSettings::GetIpInfo(IpInfo &info)
461 {
462     std::unique_lock<std::mutex> lock(mInfoMutex);
463     info = mWifiIpInfo;
464     return 0;
465 }
466 
SaveIpInfo(const IpInfo & info)467 int WifiSettings::SaveIpInfo(const IpInfo &info)
468 {
469     std::unique_lock<std::mutex> lock(mInfoMutex);
470     mWifiIpInfo = info;
471     return 0;
472 }
473 
GetLinkedInfo(WifiLinkedInfo & info)474 int WifiSettings::GetLinkedInfo(WifiLinkedInfo &info)
475 {
476     std::unique_lock<std::mutex> lock(mInfoMutex);
477     info = mWifiLinkedInfo;
478     return 0;
479 }
480 
SaveLinkedInfo(const WifiLinkedInfo & info)481 int WifiSettings::SaveLinkedInfo(const WifiLinkedInfo &info)
482 {
483     std::unique_lock<std::mutex> lock(mInfoMutex);
484     mWifiLinkedInfo = info;
485     return 0;
486 }
487 
SetMacAddress(const std::string & macAddress)488 int WifiSettings::SetMacAddress(const std::string &macAddress)
489 {
490     std::unique_lock<std::mutex> lock(mStaMutex);
491     mMacAddress = macAddress;
492     return 0;
493 }
494 
GetMacAddress(std::string & macAddress)495 int WifiSettings::GetMacAddress(std::string &macAddress)
496 {
497     std::unique_lock<std::mutex> lock(mStaMutex);
498     macAddress = mMacAddress;
499     return 0;
500 }
501 
ReloadStaRandomMac()502 int WifiSettings::ReloadStaRandomMac()
503 {
504     if (mSavedWifiStoreRandomMac.LoadConfig()) {
505         return -1;
506     }
507     std::unique_lock<std::mutex> lock(mStaMutex);
508     mWifiStoreRandomMac.clear();
509     mSavedWifiStoreRandomMac.GetValue(mWifiStoreRandomMac);
510     return 0;
511 }
512 
AddRandomMac(WifiStoreRandomMac & randomMacInfo)513 bool WifiSettings::AddRandomMac(WifiStoreRandomMac &randomMacInfo)
514 {
515     std::unique_lock<std::mutex> lock(mStaMutex);
516     bool isConnected = false;
517 
518     for (auto &ele : mWifiStoreRandomMac) {
519         if ((randomMacInfo.ssid == ele.ssid) && (randomMacInfo.keyMgmt == ele.keyMgmt)) {
520             ele.peerBssid = randomMacInfo.peerBssid;
521             randomMacInfo.randomMac = ele.randomMac;
522             isConnected = true;
523             break;
524         } else if (randomMacInfo.peerBssid == ele.peerBssid && (randomMacInfo.keyMgmt == ele.keyMgmt) &&
525                    (randomMacInfo.keyMgmt == "NONE")) {
526             isConnected = false;
527         } else if (randomMacInfo.peerBssid == ele.peerBssid && (randomMacInfo.keyMgmt == ele.keyMgmt) &&
528                    (randomMacInfo.keyMgmt != "NONE")) {
529             ele.ssid = randomMacInfo.ssid;
530             randomMacInfo.randomMac = ele.randomMac;
531             isConnected = true;
532         } else {
533             isConnected = false;
534         }
535     }
536 
537     if (!isConnected) {
538         mWifiStoreRandomMac.push_back(randomMacInfo);
539     }
540 
541     mSavedWifiStoreRandomMac.SetValue(mWifiStoreRandomMac);
542     mSavedWifiStoreRandomMac.SaveConfig();
543     return isConnected;
544 }
545 
546 
SetCountryCode(const std::string & countryCode)547 int WifiSettings::SetCountryCode(const std::string &countryCode)
548 {
549     std::unique_lock<std::mutex> lock(mStaMutex);
550     std::string tmpCode = countryCode;
551     std::transform(countryCode.begin(), countryCode.end(), tmpCode.begin(), ::toupper);
552     mCountryCode = tmpCode;
553     return 0;
554 }
555 
GetCountryCode(std::string & countryCode)556 int WifiSettings::GetCountryCode(std::string &countryCode)
557 {
558     std::unique_lock<std::mutex> lock(mStaMutex);
559     countryCode = mCountryCode;
560     return 0;
561 }
562 
GetHotspotState()563 int WifiSettings::GetHotspotState()
564 {
565     return mHotspotState.load();
566 }
567 
SetHotspotState(int state)568 int WifiSettings::SetHotspotState(int state)
569 {
570     mHotspotState = state;
571     return 0;
572 }
573 
SetHotspotConfig(const HotspotConfig & config)574 int WifiSettings::SetHotspotConfig(const HotspotConfig &config)
575 {
576     std::unique_lock<std::mutex> lock(mApMutex);
577     mHotspotConfig = config;
578     return 0;
579 }
580 
GetHotspotConfig(HotspotConfig & config)581 int WifiSettings::GetHotspotConfig(HotspotConfig &config)
582 {
583     std::unique_lock<std::mutex> lock(mApMutex);
584     config = mHotspotConfig;
585     return 0;
586 }
587 
SyncHotspotConfig()588 int WifiSettings::SyncHotspotConfig()
589 {
590     std::unique_lock<std::mutex> lock(mApMutex);
591     std::vector<HotspotConfig> tmp;
592     tmp.push_back(mHotspotConfig);
593     mSavedHotspotConfig.SetValue(tmp);
594     return mSavedHotspotConfig.SaveConfig();
595 }
596 
SetP2pVendorConfig(const P2pVendorConfig & config)597 int WifiSettings::SetP2pVendorConfig(const P2pVendorConfig &config)
598 {
599     std::unique_lock<std::mutex> lock(mP2pMutex);
600     mP2pVendorConfig = config;
601     return 0;
602 }
603 
GetP2pVendorConfig(P2pVendorConfig & config)604 int WifiSettings::GetP2pVendorConfig(P2pVendorConfig &config)
605 {
606     std::unique_lock<std::mutex> lock(mP2pMutex);
607     config = mP2pVendorConfig;
608     return 0;
609 }
610 
SyncP2pVendorConfig()611 int WifiSettings::SyncP2pVendorConfig()
612 {
613     std::unique_lock<std::mutex> lock(mP2pMutex);
614     std::vector<P2pVendorConfig> tmp;
615     tmp.push_back(mP2pVendorConfig);
616     mSavedWifiP2pVendorConfig.SetValue(tmp);
617     return mSavedWifiP2pVendorConfig.SaveConfig();
618 }
619 
GetStationList(std::vector<StationInfo> & results)620 int WifiSettings::GetStationList(std::vector<StationInfo> &results)
621 {
622     std::unique_lock<std::mutex> lock(mInfoMutex);
623     for (auto iter = mConnectStationInfo.begin(); iter != mConnectStationInfo.end(); iter++) {
624         results.push_back(iter->second);
625     }
626     return 0;
627 }
628 
ManageStation(const StationInfo & info,int mode)629 int WifiSettings::ManageStation(const StationInfo &info, int mode)
630 {
631     std::unique_lock<std::mutex> lock(mInfoMutex);
632     auto iter = mConnectStationInfo.find(info.bssid);
633     if (MODE_ADD == mode || MODE_UPDATE == mode) {
634         if (iter != mConnectStationInfo.end()) {
635             iter->second = info;
636         } else {
637             mConnectStationInfo.emplace(std::make_pair(info.bssid, info));
638         }
639     } else if (MODE_DEL == mode) {
640         if (iter != mConnectStationInfo.end()) {
641             mConnectStationInfo.erase(iter);
642         }
643     } else {
644         return -1;
645     }
646     return 0;
647 }
648 
FindConnStation(const StationInfo & info)649 int WifiSettings::FindConnStation(const StationInfo &info)
650 {
651     std::unique_lock<std::mutex> lock(mInfoMutex);
652     auto iter = mConnectStationInfo.find(info.bssid);
653     if (iter == mConnectStationInfo.end()) {
654         return -1;
655     }
656     return 0;
657 }
658 
ClearStationList()659 int WifiSettings::ClearStationList()
660 {
661     std::unique_lock<std::mutex> lock(mInfoMutex);
662     mConnectStationInfo.clear();
663     return 0;
664 }
665 
GetBlockList(std::vector<StationInfo> & results)666 int WifiSettings::GetBlockList(std::vector<StationInfo> &results)
667 {
668     std::unique_lock<std::mutex> lock(mInfoMutex);
669     for (auto iter = mBlockListInfo.begin(); iter != mBlockListInfo.end(); iter++) {
670         results.push_back(iter->second);
671     }
672     return 0;
673 }
674 
ManageBlockList(const StationInfo & info,int mode)675 int WifiSettings::ManageBlockList(const StationInfo &info, int mode)
676 {
677     std::unique_lock<std::mutex> lock(mInfoMutex);
678     auto iter = mBlockListInfo.find(info.bssid);
679     if (MODE_ADD == mode || MODE_UPDATE == mode) {
680         if (iter != mBlockListInfo.end()) {
681             iter->second = info;
682         } else {
683             mBlockListInfo.emplace(std::make_pair(info.bssid, info));
684         }
685     } else if (MODE_DEL == mode) {
686         if (iter != mBlockListInfo.end()) {
687             mBlockListInfo.erase(iter);
688         }
689     } else {
690         return -1;
691     }
692     return 0;
693 }
694 
SyncBlockList()695 int WifiSettings::SyncBlockList()
696 {
697     std::unique_lock<std::mutex> lock(mInfoMutex);
698     std::vector<StationInfo> tmp;
699     for (auto iter = mBlockListInfo.begin(); iter != mBlockListInfo.end(); ++iter) {
700         tmp.push_back(iter->second);
701     }
702     mSavedBlockInfo.SetValue(tmp);
703     return mSavedBlockInfo.SaveConfig();
704 }
705 
GetValidBands(std::vector<BandType> & bands)706 int WifiSettings::GetValidBands(std::vector<BandType> &bands)
707 {
708     std::unique_lock<std::mutex> lock(mInfoMutex);
709 
710     auto it = mValidChannels.find(BandType::BAND_2GHZ);
711     if (it != mValidChannels.end() && it->second.size() > 0) {
712         bands.push_back(BandType::BAND_2GHZ);
713     }
714     it = mValidChannels.find(BandType::BAND_5GHZ);
715     if (it != mValidChannels.end() && it->second.size() > 0) {
716         bands.push_back(BandType::BAND_5GHZ);
717     }
718     return 0;
719 }
720 
SetValidChannels(const ChannelsTable & channelsInfo)721 int WifiSettings::SetValidChannels(const ChannelsTable &channelsInfo)
722 {
723     std::unique_lock<std::mutex> lock(mInfoMutex);
724     mValidChannels = channelsInfo;
725 
726     return 0;
727 }
728 
GetValidChannels(ChannelsTable & channelsInfo)729 int WifiSettings::GetValidChannels(ChannelsTable &channelsInfo)
730 {
731     std::unique_lock<std::mutex> lock(mInfoMutex);
732     channelsInfo = mValidChannels;
733 
734     return 0;
735 }
736 
ClearValidChannels()737 int WifiSettings::ClearValidChannels()
738 {
739     std::unique_lock<std::mutex> lock(mInfoMutex);
740     mValidChannels.clear();
741     return 0;
742 }
743 
SetP2pState(int state)744 int WifiSettings::SetP2pState(int state)
745 {
746     mP2pState = state;
747     return 0;
748 }
749 
GetP2pState()750 int WifiSettings::GetP2pState()
751 {
752     return mP2pState.load();
753 }
754 
SetP2pDiscoverState(int state)755 int WifiSettings::SetP2pDiscoverState(int state)
756 {
757     mP2pDiscoverState = state;
758     return 0;
759 }
760 
GetP2pDiscoverState()761 int WifiSettings::GetP2pDiscoverState()
762 {
763     return mP2pDiscoverState.load();
764 }
765 
SetP2pConnectedState(int state)766 int WifiSettings::SetP2pConnectedState(int state)
767 {
768     mP2pConnectState = state;
769     return 0;
770 }
771 
GetP2pConnectedState()772 int WifiSettings::GetP2pConnectedState()
773 {
774     return mP2pConnectState.load();
775 }
776 
GetSignalLevel(const int & rssi,const int & band)777 int WifiSettings::GetSignalLevel(const int &rssi, const int &band)
778 {
779     int level = 0;
780     do {
781         if (band == static_cast<int>(BandType::BAND_2GHZ)) {
782             if (rssi < mWifiConfig.firstRssiLevel2G) {
783                 break;
784             }
785             ++level;
786             if (rssi < mWifiConfig.secondRssiLevel2G) {
787                 break;
788             }
789             ++level;
790             if (rssi < mWifiConfig.thirdRssiLevel2G) {
791                 break;
792             }
793             ++level;
794             if (rssi < mWifiConfig.fourthRssiLevel2G) {
795                 break;
796             }
797             ++level;
798         }
799         if (band == static_cast<int>(BandType::BAND_5GHZ)) {
800             if (rssi < mWifiConfig.firstRssiLevel5G) {
801                 break;
802             }
803             ++level;
804             if (rssi < mWifiConfig.secondRssiLevel5G) {
805                 break;
806             }
807             ++level;
808             if (rssi < mWifiConfig.thirdRssiLevel5G) {
809                 break;
810             }
811             ++level;
812             if (rssi < mWifiConfig.fourthRssiLevel5G) {
813                 break;
814             }
815             ++level;
816         }
817     } while (0);
818     return level;
819 }
820 
GetApMaxConnNum()821 int WifiSettings::GetApMaxConnNum()
822 {
823     return mApMaxConnNum;
824 }
825 
InitDefaultHotspotConfig()826 void WifiSettings::InitDefaultHotspotConfig()
827 {
828     mHotspotConfig.SetSecurityType(KeyMgmt::WPA_PSK);
829     mHotspotConfig.SetBand(BandType::BAND_2GHZ);
830     mHotspotConfig.SetChannel(AP_CHANNEL_DEFAULT);
831     mHotspotConfig.SetMaxConn(GetApMaxConnNum());
832     mHotspotConfig.SetSsid("OHOS_" + GetRandomStr(RANDOM_STR_LEN));
833     mHotspotConfig.SetPreSharedKey("12345678");
834 }
835 
InitDefaultP2pVendorConfig()836 void WifiSettings::InitDefaultP2pVendorConfig()
837 {
838     mP2pVendorConfig.SetRandomMacSupport(false);
839     mP2pVendorConfig.SetIsAutoListen(false);
840     mP2pVendorConfig.SetDeviceName("");
841     mP2pVendorConfig.SetPrimaryDeviceType("");
842     mP2pVendorConfig.SetSecondaryDeviceType("");
843 }
844 
InitGetApMaxConnNum()845 void WifiSettings::InitGetApMaxConnNum()
846 {
847     /* query drivers capability, support max connection num. */
848     mApMaxConnNum = MAX_AP_CONN;
849 }
850 
InitScanControlForbidList(void)851 void WifiSettings::InitScanControlForbidList(void)
852 {
853     /* Disable external scanning during scanning. */
854     ScanForbidMode forbidMode;
855     forbidMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
856     forbidMode.scanScene = SCAN_SCENE_SCANNING;
857     mScanControlInfo.scanForbidList.push_back(forbidMode);
858 
859     /* Disable external scanning when the screen is shut down. */
860     forbidMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
861     forbidMode.scanScene = SCAN_SCENE_SCREEN_OFF;
862     mScanControlInfo.scanForbidList.push_back(forbidMode);
863 
864     /* Disable all scans in connection */
865     forbidMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
866     forbidMode.scanScene = SCAN_SCENE_CONNECTING;
867     mScanControlInfo.scanForbidList.push_back(forbidMode);
868     forbidMode.scanMode = ScanMode::PNO_SCAN;
869     forbidMode.scanScene = SCAN_SCENE_CONNECTING;
870     mScanControlInfo.scanForbidList.push_back(forbidMode);
871     forbidMode.scanMode = ScanMode::SYSTEM_TIMER_SCAN;
872     forbidMode.scanScene = SCAN_SCENE_CONNECTING;
873     mScanControlInfo.scanForbidList.push_back(forbidMode);
874 
875     /* Deep sleep disables all scans. */
876     forbidMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
877     forbidMode.scanScene = SCAN_SCENE_DEEP_SLEEP;
878     mScanControlInfo.scanForbidList.push_back(forbidMode);
879     forbidMode.scanMode = ScanMode::PNO_SCAN;
880     forbidMode.scanScene = SCAN_SCENE_DEEP_SLEEP;
881     mScanControlInfo.scanForbidList.push_back(forbidMode);
882     forbidMode.scanMode = ScanMode::SYSTEM_TIMER_SCAN;
883     forbidMode.scanScene = SCAN_SCENE_DEEP_SLEEP;
884     mScanControlInfo.scanForbidList.push_back(forbidMode);
885 
886     /* PNO scanning disabled */
887     forbidMode.scanMode = ScanMode::PNO_SCAN;
888     forbidMode.scanScene = SCAN_SCENE_CONNECTED;
889     mScanControlInfo.scanForbidList.push_back(forbidMode);
890     return;
891 }
892 
InitScanControlIntervalList(void)893 void WifiSettings::InitScanControlIntervalList(void)
894 {
895     /* Foreground app: 4 times in 2 minutes for a single application */
896     ScanIntervalMode scanIntervalMode;
897     scanIntervalMode.scanScene = SCAN_SCENE_FREQUENCY_ORIGIN;
898     scanIntervalMode.scanMode = ScanMode::APP_FOREGROUND_SCAN;
899     scanIntervalMode.isSingle = true;
900     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_FIXED;
901     scanIntervalMode.interval = FOREGROUND_SCAN_CONTROL_INTERVAL;
902     scanIntervalMode.count = FOREGROUND_SCAN_CONTROL_TIMES;
903     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
904 
905     /* Backend apps: once every 30 minutes */
906     scanIntervalMode.scanScene = SCAN_SCENE_FREQUENCY_ORIGIN;
907     scanIntervalMode.scanMode = ScanMode::APP_BACKGROUND_SCAN;
908     scanIntervalMode.isSingle = false;
909     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_FIXED;
910     scanIntervalMode.interval = BACKGROUND_SCAN_CONTROL_INTERVAL;
911     scanIntervalMode.count = BACKGROUND_SCAN_CONTROL_TIMES;
912     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
913 
914     /* no charger plug */
915     /* All app: If the scanning interval is less than 5s for five  */
916     /* consecutive times, the scanning can be performed only after */
917     /* the scanning interval is greater than 5s. */
918     const int frequencyContinueInterval = 5;
919     const int frequencyContinueCount = 5;
920     scanIntervalMode.scanScene = SCAN_SCENE_FREQUENCY_CUSTOM;
921     scanIntervalMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
922     scanIntervalMode.isSingle = false;
923     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_CONTINUE;
924     scanIntervalMode.interval = frequencyContinueInterval;
925     scanIntervalMode.count = frequencyContinueCount;
926     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
927 
928     /* no charger plug */
929     /* Single app: If all scanning interval in 10 times is less than */
930     /* the threshold (20s), the app is added to the blocklist and  */
931     /* cannot initiate scanning. */
932     const int frequencyBlocklistInterval = 20;
933     const int frequencyBlocklistCount = 10;
934     scanIntervalMode.scanScene = SCAN_SCENE_FREQUENCY_CUSTOM;
935     scanIntervalMode.scanMode = ScanMode::ALL_EXTERN_SCAN;
936     scanIntervalMode.isSingle = true;
937     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_BLOCKLIST;
938     scanIntervalMode.interval = frequencyBlocklistInterval;
939     scanIntervalMode.count = frequencyBlocklistCount;
940     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
941 
942     /* PNO scanning every 20 seconds */
943     scanIntervalMode.scanScene = SCAN_SCENE_ALL;
944     scanIntervalMode.scanMode = ScanMode::PNO_SCAN;
945     scanIntervalMode.isSingle = false;
946     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_FIXED;
947     scanIntervalMode.interval = PNO_SCAN_CONTROL_INTERVAL;
948     scanIntervalMode.count = PNO_SCAN_CONTROL_TIMES;
949     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
950 
951     /*
952      * The system scans for 20 seconds, multiplies 2 each time,
953      * and performs scanning every 160 seconds.
954      */
955     scanIntervalMode.scanScene = SCAN_SCENE_ALL;
956     scanIntervalMode.scanMode = ScanMode::SYSTEM_TIMER_SCAN;
957     scanIntervalMode.isSingle = false;
958     scanIntervalMode.intervalMode = IntervalMode::INTERVAL_EXP;
959     scanIntervalMode.interval = SYSTEM_TIMER_SCAN_CONTROL_INTERVAL;
960     scanIntervalMode.count = SYSTEM_TIMER_SCAN_CONTROL_TIMES;
961     mScanControlInfo.scanIntervalList.push_back(scanIntervalMode);
962     return;
963 }
964 
InitScanControlInfo()965 void WifiSettings::InitScanControlInfo()
966 {
967     InitScanControlForbidList();
968     InitScanControlIntervalList();
969 }
970 
EnableNetwork(int networkId,bool disableOthers)971 bool WifiSettings::EnableNetwork(int networkId, bool disableOthers)
972 {
973     if (disableOthers) {
974         SetUserLastSelectedNetworkId(networkId);
975     }
976     return true;
977 }
978 
SetUserLastSelectedNetworkId(int networkId)979 void WifiSettings::SetUserLastSelectedNetworkId(int networkId)
980 {
981     mLastSelectedNetworkId = networkId;
982     mLastSelectedTimeVal = time(NULL);
983 }
984 
GetUserLastSelectedNetworkId()985 int WifiSettings::GetUserLastSelectedNetworkId()
986 {
987     return mLastSelectedNetworkId;
988 }
989 
GetUserLastSelectedNetworkTimeVal()990 time_t WifiSettings::GetUserLastSelectedNetworkTimeVal()
991 {
992     return mLastSelectedTimeVal;
993 }
994 
SyncWifiConfig()995 int WifiSettings::SyncWifiConfig()
996 {
997     std::vector<WifiConfig> tmp;
998     tmp.push_back(mWifiConfig);
999     mSavedWifiConfig.SetValue(tmp);
1000     return mSavedWifiConfig.SaveConfig();
1001 }
1002 
GetCanUseStaWhenAirplaneMode()1003 bool WifiSettings::GetCanUseStaWhenAirplaneMode()
1004 {
1005     return mWifiConfig.staAirplaneMode;
1006 }
1007 
SetCanUseStaWhenAirplaneMode(bool bCan)1008 int WifiSettings::SetCanUseStaWhenAirplaneMode(bool bCan)
1009 {
1010     mWifiConfig.staAirplaneMode = bCan;
1011     return 0;
1012 }
1013 
GetCanOpenStaWhenAirplaneMode()1014 bool WifiSettings::GetCanOpenStaWhenAirplaneMode()
1015 {
1016     return mWifiConfig.canOpenStaWhenAirplane;
1017 }
1018 
GetStaLastRunState()1019 bool WifiSettings::GetStaLastRunState()
1020 {
1021     return mWifiConfig.staLastState;
1022 }
1023 
SetStaLastRunState(bool bRun)1024 int WifiSettings::SetStaLastRunState(bool bRun)
1025 {
1026     mWifiConfig.staLastState = bRun;
1027     SyncWifiConfig();
1028     return 0;
1029 }
1030 
GetDhcpIpType()1031 int WifiSettings::GetDhcpIpType()
1032 {
1033     return mWifiConfig.dhcpIpType;
1034 }
1035 
SetDhcpIpType(int dhcpIpType)1036 int WifiSettings::SetDhcpIpType(int dhcpIpType)
1037 {
1038     mWifiConfig.dhcpIpType = dhcpIpType;
1039     return 0;
1040 }
1041 
GetDefaultWifiInterface()1042 std::string WifiSettings::GetDefaultWifiInterface()
1043 {
1044     return mWifiConfig.defaultWifiInterface;
1045 }
1046 
SetScreenState(const int & state)1047 void WifiSettings::SetScreenState(const int &state)
1048 {
1049     mScreenState = state;
1050 }
1051 
GetScreenState() const1052 int WifiSettings::GetScreenState() const
1053 {
1054     return mScreenState;
1055 }
1056 
SetAirplaneModeState(const int & state)1057 void WifiSettings::SetAirplaneModeState(const int &state)
1058 {
1059     mAirplaneModeState = state;
1060 }
1061 
GetAirplaneModeState() const1062 int WifiSettings::GetAirplaneModeState() const
1063 {
1064     return mAirplaneModeState;
1065 }
1066 
SetAppRunningState(ScanMode appRunMode)1067 void WifiSettings::SetAppRunningState(ScanMode appRunMode)
1068 {
1069     if (static_cast<int>(appRunMode) < static_cast<int>(ScanMode::APP_FOREGROUND_SCAN) ||
1070         static_cast<int>(appRunMode) > static_cast<int>(ScanMode::SYS_BACKGROUND_SCAN)) {
1071         return;
1072     }
1073     mAppRunningModeState = appRunMode;
1074 }
1075 
GetAppRunningState() const1076 ScanMode WifiSettings::GetAppRunningState() const
1077 {
1078     return mAppRunningModeState;
1079 }
1080 
SetPowerSavingModeState(const int & state)1081 void WifiSettings::SetPowerSavingModeState(const int &state)
1082 {
1083     mPowerSavingModeState = state;
1084 }
1085 
GetPowerSavingModeState() const1086 int WifiSettings::GetPowerSavingModeState() const
1087 {
1088     return mPowerSavingModeState;
1089 }
1090 
SetAppPackageName(const std::string & appPackageName)1091 void WifiSettings::SetAppPackageName(const std::string &appPackageName)
1092 {
1093     mAppPackageName = appPackageName;
1094 }
1095 
GetAppPackageName() const1096 const std::string& WifiSettings::GetAppPackageName() const
1097 {
1098     return mAppPackageName;
1099 }
1100 
SetFreezeModeState(int state)1101 void WifiSettings::SetFreezeModeState(int state)
1102 {
1103     mFreezeModeState = state;
1104 }
1105 
GetFreezeModeState() const1106 int WifiSettings::GetFreezeModeState() const
1107 {
1108     return mFreezeModeState;
1109 }
1110 
SetNoChargerPlugModeState(int state)1111 void WifiSettings::SetNoChargerPlugModeState(int state)
1112 {
1113     mNoChargerPlugModeState = state;
1114 }
1115 
GetNoChargerPlugModeState() const1116 int WifiSettings::GetNoChargerPlugModeState() const
1117 {
1118     return mNoChargerPlugModeState;
1119 }
1120 
SetWhetherToAllowNetworkSwitchover(bool bSwitch)1121 int WifiSettings::SetWhetherToAllowNetworkSwitchover(bool bSwitch)
1122 {
1123     mWifiConfig.whetherToAllowNetworkSwitchover = bSwitch;
1124     return 0;
1125 }
1126 
GetWhetherToAllowNetworkSwitchover()1127 bool WifiSettings::GetWhetherToAllowNetworkSwitchover()
1128 {
1129     return mWifiConfig.whetherToAllowNetworkSwitchover;
1130 }
1131 
SetScoretacticsScoreSlope(const int & score)1132 int WifiSettings::SetScoretacticsScoreSlope(const int &score)
1133 {
1134     mWifiConfig.scoretacticsScoreSlope = score;
1135     return 0;
1136 }
1137 
GetScoretacticsScoreSlope()1138 int WifiSettings::GetScoretacticsScoreSlope()
1139 {
1140     return mWifiConfig.scoretacticsScoreSlope;
1141 }
1142 
SetScoretacticsInitScore(const int & score)1143 int WifiSettings::SetScoretacticsInitScore(const int &score)
1144 {
1145     mWifiConfig.scoretacticsInitScore = score;
1146     return 0;
1147 }
1148 
GetScoretacticsInitScore()1149 int WifiSettings::GetScoretacticsInitScore()
1150 {
1151     return mWifiConfig.scoretacticsInitScore;
1152 }
1153 
SetScoretacticsSameBssidScore(const int & score)1154 int WifiSettings::SetScoretacticsSameBssidScore(const int &score)
1155 {
1156     mWifiConfig.scoretacticsSameBssidScore = score;
1157     return 0;
1158 }
1159 
GetScoretacticsSameBssidScore()1160 int WifiSettings::GetScoretacticsSameBssidScore()
1161 {
1162     return mWifiConfig.scoretacticsSameBssidScore;
1163 }
1164 
SetScoretacticsSameNetworkScore(const int & score)1165 int WifiSettings::SetScoretacticsSameNetworkScore(const int &score)
1166 {
1167     mWifiConfig.scoretacticsSameNetworkScore = score;
1168     return 0;
1169 }
1170 
GetScoretacticsSameNetworkScore()1171 int WifiSettings::GetScoretacticsSameNetworkScore()
1172 {
1173     return mWifiConfig.scoretacticsSameNetworkScore;
1174 }
1175 
SetScoretacticsFrequency5GHzScore(const int & score)1176 int WifiSettings::SetScoretacticsFrequency5GHzScore(const int &score)
1177 {
1178     mWifiConfig.scoretacticsFrequency5GHzScore = score;
1179     return 0;
1180 }
1181 
GetScoretacticsFrequency5GHzScore()1182 int WifiSettings::GetScoretacticsFrequency5GHzScore()
1183 {
1184     return mWifiConfig.scoretacticsFrequency5GHzScore;
1185 }
1186 
SetScoretacticsLastSelectionScore(const int & score)1187 int WifiSettings::SetScoretacticsLastSelectionScore(const int &score)
1188 {
1189     mWifiConfig.scoretacticsLastSelectionScore = score;
1190     return 0;
1191 }
1192 
GetScoretacticsLastSelectionScore()1193 int WifiSettings::GetScoretacticsLastSelectionScore()
1194 {
1195     return mWifiConfig.scoretacticsLastSelectionScore;
1196 }
1197 
SetScoretacticsSecurityScore(const int & score)1198 int WifiSettings::SetScoretacticsSecurityScore(const int &score)
1199 {
1200     mWifiConfig.scoretacticsSecurityScore = score;
1201     return 0;
1202 }
1203 
GetScoretacticsSecurityScore()1204 int WifiSettings::GetScoretacticsSecurityScore()
1205 {
1206     return mWifiConfig.scoretacticsSecurityScore;
1207 }
1208 
SetSavedDeviceAppraisalPriority(const int & priority)1209 int WifiSettings::SetSavedDeviceAppraisalPriority(const int &priority)
1210 {
1211     mWifiConfig.savedDeviceAppraisalPriority = priority;
1212     return 0;
1213 }
1214 
GetSavedDeviceAppraisalPriority()1215 int WifiSettings::GetSavedDeviceAppraisalPriority()
1216 {
1217     return mWifiConfig.savedDeviceAppraisalPriority;
1218 }
1219 
IsModulePreLoad(const std::string & name)1220 bool WifiSettings::IsModulePreLoad(const std::string &name)
1221 {
1222     if (name == WIFI_SERVICE_STA) {
1223         return mWifiConfig.preLoadSta;
1224     } else if (name == WIFI_SERVICE_SCAN) {
1225         return mWifiConfig.preLoadScan;
1226     } else if (name == WIFI_SERVICE_AP) {
1227         return mWifiConfig.preLoadAp;
1228     } else if (name == WIFI_SERVICE_P2P) {
1229         return mWifiConfig.preLoadP2p;
1230     } else if (name == WIFI_SERVICE_AWARE) {
1231         return mWifiConfig.preLoadAware;
1232     } else {
1233         return false;
1234     }
1235 }
1236 
GetSupportHwPnoFlag()1237 bool WifiSettings::GetSupportHwPnoFlag()
1238 {
1239     return mWifiConfig.supportHwPnoFlag;
1240 }
1241 
GetMinRssi2Dot4Ghz()1242 int WifiSettings::GetMinRssi2Dot4Ghz()
1243 {
1244     return mWifiConfig.minRssi2Dot4Ghz;
1245 }
1246 
GetMinRssi5Ghz()1247 int WifiSettings::GetMinRssi5Ghz()
1248 {
1249     return mWifiConfig.minRssi5Ghz;
1250 }
1251 
GetStrDnsBak() const1252 std::string WifiSettings::GetStrDnsBak() const
1253 {
1254     return mWifiConfig.strDnsBak;
1255 }
1256 
IsLoadStabak() const1257 bool WifiSettings::IsLoadStabak() const
1258 {
1259     return mWifiConfig.isLoadStabak;
1260 }
1261 
SetP2pDeviceName(const std::string & deviceName)1262 int WifiSettings::SetP2pDeviceName(const std::string &deviceName)
1263 {
1264     std::unique_lock<std::mutex> lock(mP2pMutex);
1265     mP2pVendorConfig.SetDeviceName(deviceName);
1266     return mSavedWifiP2pVendorConfig.SaveConfig();
1267 }
1268 
ReloadTrustListPolicies()1269 const std::vector<TrustListPolicy>& WifiSettings::ReloadTrustListPolicies()
1270 {
1271     std::unique_lock<std::mutex> lock(mStaMutex);
1272     mTrustListPolicies.LoadConfig();
1273     if (mTrustListPolicies.GetValue().size() <= 0) {
1274         std::vector<TrustListPolicy> policies;
1275         TrustListPolicy policy;
1276         policies.push_back(policy);
1277         mTrustListPolicies.SetValue(policies);
1278         mTrustListPolicies.SaveConfig();
1279         mTrustListPolicies.LoadConfig();
1280     }
1281 
1282     return mTrustListPolicies.GetValue();
1283 }
1284 
ReloadMovingFreezePolicy()1285 const MovingFreezePolicy &WifiSettings::ReloadMovingFreezePolicy()
1286 {
1287     std::unique_lock<std::mutex> lock(mStaMutex);
1288     mMovingFreezePolicy.LoadConfig();
1289 
1290     if (mMovingFreezePolicy.GetValue().size() <= 0) {
1291         std::vector<MovingFreezePolicy> policies;
1292         MovingFreezePolicy policy;
1293         policies.push_back(policy);
1294         mMovingFreezePolicy.SetValue(policies);
1295         mMovingFreezePolicy.SaveConfig();
1296         mMovingFreezePolicy.LoadConfig();
1297     }
1298 
1299     if (mMovingFreezePolicy.GetValue().size() <= 0) {
1300         return mFPolicy;
1301     }
1302     return mMovingFreezePolicy.GetValue()[0];
1303 }
1304 
GetConnectTimeoutBssid()1305 std::string WifiSettings::GetConnectTimeoutBssid()
1306 {
1307     std::unique_lock<std::mutex> lock(mStaMutex);
1308     const int timeout = 30; // 30s
1309     if (mBssidToTimeoutTime.second - static_cast<int>(time(0)) > timeout) {
1310         return "";
1311     }
1312     return mBssidToTimeoutTime.first;
1313 }
1314 
SetConnectTimeoutBssid(std::string & bssid)1315 int WifiSettings::SetConnectTimeoutBssid(std::string &bssid)
1316 {
1317     std::unique_lock<std::mutex> lock(mStaMutex);
1318     time_t now = time(0);
1319     mBssidToTimeoutTime = std::make_pair(bssid, static_cast<int>(now));
1320     return 0;
1321 }
1322 } // namespace Wifi
1323 } // namespace OHOS