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