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