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