1 /*
2 * Copyright (C) 2021-2022 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
16 #include "wifi_idl_client.h"
17 #include <cstdio>
18 #include "wifi_global_func.h"
19 #include "wifi_log.h"
20 #include "wifi_idl_define.h"
21 #include "wifi_idl_inner_interface.h"
22 #include "i_wifi.h"
23 #include "i_wifi_chip.h"
24 #include "i_wifi_chip_event_callback.h"
25 #include "i_wifi_hotspot_iface.h"
26 #include "i_wifi_sta_iface.h"
27 #include "i_wifi_supplicant_iface.h"
28 #include "i_wifi_p2p_iface.h"
29
30 #undef LOG_TAG
31 #define LOG_TAG "WifiIdlClient"
32
33 namespace OHOS {
34 namespace Wifi {
35 const int BUFFER_SIZE = 4096;
36
37 #define CHECK_CLIENT_NOT_NULL \
38 do { \
39 if (pRpcClient == nullptr) { \
40 return WIFI_IDL_OPT_FAILED; \
41 } \
42 } while (0)
43
WifiIdlClient()44 WifiIdlClient::WifiIdlClient()
45 {
46 pRpcClient = nullptr;
47 }
48
~WifiIdlClient()49 WifiIdlClient::~WifiIdlClient()
50 {
51 if (pRpcClient != nullptr) {
52 ReleaseRpcClient(pRpcClient);
53 pRpcClient = nullptr;
54 }
55 }
56
InitClient(void)57 int WifiIdlClient::InitClient(void)
58 {
59 const std::string idlSockPath = CONFIG_ROOR_DIR"/unix_sock.sock";
60 pRpcClient = CreateRpcClient(idlSockPath.c_str());
61 if (pRpcClient == nullptr) {
62 LOGE("init rpc client failed!");
63 return -1;
64 }
65 return 0;
66 }
67
ExitAllClient(void)68 void WifiIdlClient::ExitAllClient(void)
69 {
70 LOGI("Exit all client!");
71 if (pRpcClient == nullptr) {
72 return;
73 }
74 NotifyClear();
75 return;
76 }
77
StartWifi(void)78 WifiErrorNo WifiIdlClient::StartWifi(void)
79 {
80 CHECK_CLIENT_NOT_NULL;
81 return Start();
82 }
83
StopWifi(void)84 WifiErrorNo WifiIdlClient::StopWifi(void)
85 {
86 CHECK_CLIENT_NOT_NULL;
87 return Stop();
88 }
89
ReqConnect(int networkId)90 WifiErrorNo WifiIdlClient::ReqConnect(int networkId)
91 {
92 CHECK_CLIENT_NOT_NULL;
93 return Connect(networkId);
94 }
95
ReqReconnect(void)96 WifiErrorNo WifiIdlClient::ReqReconnect(void)
97 {
98 CHECK_CLIENT_NOT_NULL;
99 return Reconnect();
100 }
101
ReqReassociate(void)102 WifiErrorNo WifiIdlClient::ReqReassociate(void)
103 {
104 CHECK_CLIENT_NOT_NULL;
105 return Reassociate();
106 }
107
ReqDisconnect(void)108 WifiErrorNo WifiIdlClient::ReqDisconnect(void)
109 {
110 CHECK_CLIENT_NOT_NULL;
111 return Disconnect();
112 }
113
GetStaCapabilities(unsigned int & capabilities)114 WifiErrorNo WifiIdlClient::GetStaCapabilities(unsigned int &capabilities)
115 {
116 CHECK_CLIENT_NOT_NULL;
117 return GetCapabilities((uint32_t *)&capabilities);
118 }
119
GetStaDeviceMacAddress(std::string & mac)120 WifiErrorNo WifiIdlClient::GetStaDeviceMacAddress(std::string &mac)
121 {
122 CHECK_CLIENT_NOT_NULL;
123 char szMac[WIFI_IDL_BSSID_LENGTH + 1] = {0};
124 int len = WIFI_IDL_BSSID_LENGTH + 1;
125 WifiErrorNo err = GetDeviceMacAddress((unsigned char *)szMac, &len);
126 if (err == WIFI_IDL_OPT_OK) {
127 mac = std::string(szMac);
128 }
129 return err;
130 }
131
GetSupportFrequencies(int band,std::vector<int> & frequencies)132 WifiErrorNo WifiIdlClient::GetSupportFrequencies(int band, std::vector<int> &frequencies)
133 {
134 CHECK_CLIENT_NOT_NULL;
135
136 int values[WIFI_IDL_GET_MAX_BANDS] = {0};
137 int size = WIFI_IDL_GET_MAX_BANDS;
138
139 if (GetFrequencies(band, values, &size) != 0) {
140 return WIFI_IDL_OPT_FAILED;
141 }
142
143 for (int i = 0; i < size; i++) {
144 frequencies.push_back(values[i]);
145 }
146
147 return WIFI_IDL_OPT_OK;
148 }
149
SetConnectMacAddr(const std::string & mac)150 WifiErrorNo WifiIdlClient::SetConnectMacAddr(const std::string &mac)
151 {
152 CHECK_CLIENT_NOT_NULL;
153 if (CheckMacIsValid(mac) != 0) {
154 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
155 }
156 int len = mac.length();
157 return SetAssocMacAddr((unsigned char *)mac.c_str(), len);
158 }
159
SetScanMacAddress(const std::string & mac)160 WifiErrorNo WifiIdlClient::SetScanMacAddress(const std::string &mac)
161 {
162 CHECK_CLIENT_NOT_NULL;
163 if (CheckMacIsValid(mac) != 0) {
164 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
165 }
166 int len = mac.length();
167 return SetScanningMacAddress((unsigned char *)mac.c_str(), len);
168 }
169
DisconnectLastRoamingBssid(const std::string & mac)170 WifiErrorNo WifiIdlClient::DisconnectLastRoamingBssid(const std::string &mac)
171 {
172 CHECK_CLIENT_NOT_NULL;
173 if (CheckMacIsValid(mac) != 0) {
174 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
175 }
176 int len = mac.length();
177 return DeauthLastRoamingBssid((unsigned char *)mac.c_str(), len);
178 }
179
ReqGetSupportFeature(long & feature)180 WifiErrorNo WifiIdlClient::ReqGetSupportFeature(long &feature)
181 {
182 CHECK_CLIENT_NOT_NULL;
183 return GetSupportFeature(&feature);
184 }
185
SendRequest(const WifiStaRequest & request)186 WifiErrorNo WifiIdlClient::SendRequest(const WifiStaRequest &request)
187 {
188 CHECK_CLIENT_NOT_NULL;
189 /* RunCmd */
190 LOGD("Start run cmd %{public}d about iface %s", request.cmdId, request.ifName.c_str());
191 return WIFI_IDL_OPT_OK;
192 }
193
SetTxPower(int power)194 WifiErrorNo WifiIdlClient::SetTxPower(int power)
195 {
196 CHECK_CLIENT_NOT_NULL;
197 return SetWifiTxPower((int32_t)power);
198 }
199
Scan(const WifiScanParam & scanParam)200 WifiErrorNo WifiIdlClient::Scan(const WifiScanParam &scanParam)
201 {
202 CHECK_CLIENT_NOT_NULL;
203 ScanSettings settings;
204 if (memset_s(&settings, sizeof(settings), 0, sizeof(settings)) != EOK) {
205 return WIFI_IDL_OPT_FAILED;
206 }
207 bool bfail = false;
208 do {
209 if (scanParam.hiddenNetworkSsid.size() > 0) {
210 settings.hiddenSsidSize = scanParam.hiddenNetworkSsid.size();
211 settings.hiddenSsid = ConVectorToCArrayString(scanParam.hiddenNetworkSsid);
212 if (settings.hiddenSsid == nullptr) {
213 bfail = true;
214 break;
215 }
216 }
217 if (scanParam.scanFreqs.size() > 0) {
218 settings.freqSize = scanParam.scanFreqs.size();
219 settings.freqs = (int *)calloc(settings.freqSize, sizeof(int));
220 if (settings.freqs == nullptr) {
221 bfail = true;
222 break;
223 }
224 for (int i = 0; i < settings.freqSize; ++i) {
225 settings.freqs[i] = scanParam.scanFreqs[i];
226 }
227 }
228 if (scanParam.scanStyle > 0) {
229 settings.scanStyle = scanParam.scanStyle;
230 }
231 } while (0);
232 WifiErrorNo err = WIFI_IDL_OPT_FAILED;
233 if (!bfail) {
234 err = StartScan(&settings);
235 }
236 if (settings.freqs != nullptr) {
237 free(settings.freqs);
238 settings.freqs = nullptr;
239 }
240 if (settings.hiddenSsid != nullptr) {
241 for (int i = 0; i < settings.hiddenSsidSize; ++i) {
242 free(settings.hiddenSsid[i]);
243 settings.hiddenSsid[i] = nullptr;
244 }
245 free(settings.hiddenSsid);
246 settings.hiddenSsid = nullptr;
247 }
248 return err;
249 }
250
ReqGetNetworkList(std::vector<WifiWpaNetworkInfo> & networkList)251 WifiErrorNo WifiIdlClient::ReqGetNetworkList(std::vector<WifiWpaNetworkInfo> &networkList)
252 {
253 CHECK_CLIENT_NOT_NULL;
254 WifiNetworkInfo infos[WIFI_IDL_GET_MAX_NETWORK_LIST];
255 if (memset_s(infos, sizeof(infos), 0, sizeof(infos)) != EOK) {
256 return WIFI_IDL_OPT_FAILED;
257 }
258 int size = WIFI_IDL_GET_MAX_NETWORK_LIST;
259 WifiErrorNo err = GetNetworkList(infos, &size);
260 if (err != WIFI_IDL_OPT_OK) {
261 return err;
262 }
263 for (int i = 0; i < size; ++i) {
264 WifiWpaNetworkInfo tmp;
265 tmp.id = infos[i].id;
266 tmp.ssid = infos[i].ssid;
267 tmp.bssid = infos[i].bssid;
268 tmp.flag = infos[i].flags;
269 networkList.emplace_back(tmp);
270 }
271 return err;
272 }
273
QueryScanInfos(std::vector<InterScanInfo> & scanInfos)274 WifiErrorNo WifiIdlClient::QueryScanInfos(std::vector<InterScanInfo> &scanInfos)
275 {
276 CHECK_CLIENT_NOT_NULL;
277 int size = WIFI_IDL_GET_MAX_SCAN_INFO;
278 ScanInfo* results = GetScanInfos(&size);
279 if (results == NULL) {
280 return size == 0 ? WIFI_IDL_OPT_OK : WIFI_IDL_OPT_FAILED;
281 }
282 for (int i = 0; i < size; ++i) {
283 InterScanInfo tmp;
284 tmp.ssid = results[i].ssid;
285 tmp.bssid = results[i].bssid;
286 tmp.frequency = results[i].frequency;
287 tmp.rssi = results[i].signalLevel;
288 tmp.timestamp = results[i].timestamp;
289 tmp.capabilities = results[i].capability;
290 tmp.channelWidth = (WifiChannelWidth)results[i].channelWidth;
291 tmp.centerFrequency0 = results[i].centerFrequency0;
292 tmp.centerFrequency1 = results[i].centerFrequency1;
293 for (int j = 0; j < results[i].ieSize; ++j) {
294 WifiInfoElem infoElemTmp;
295 int infoElemSize = results[i].infoElems[j].size;
296 infoElemTmp.id = results[i].infoElems[j].id;
297 for (int k = 0; k < infoElemSize; ++k) {
298 infoElemTmp.content.emplace_back(results[i].infoElems[j].content[k]);
299 }
300 if (results[i].infoElems[j].content) {
301 free(results[i].infoElems[j].content);
302 }
303 tmp.infoElems.emplace_back(infoElemTmp);
304 }
305 if (results[i].infoElems) {
306 free(results[i].infoElems);
307 }
308 scanInfos.emplace_back(tmp);
309 }
310 free(results);
311 results = nullptr;
312 return WIFI_IDL_OPT_OK;
313 }
314
ConvertPnoScanParam(const WifiPnoScanParam & param,PnoScanSettings * pSettings) const315 WifiErrorNo WifiIdlClient::ConvertPnoScanParam(const WifiPnoScanParam ¶m, PnoScanSettings *pSettings) const
316 {
317 if (param.scanInterval > 0) {
318 pSettings->scanInterval = param.scanInterval;
319 }
320 pSettings->minRssi2Dot4Ghz = param.minRssi2Dot4Ghz;
321 pSettings->minRssi5Ghz = param.minRssi5Ghz;
322 if (param.hiddenSsid.size() > 0) {
323 pSettings->hiddenSsidSize = param.hiddenSsid.size();
324 pSettings->hiddenSsid = ConVectorToCArrayString(param.hiddenSsid);
325 if (pSettings->hiddenSsid == nullptr) {
326 return WIFI_IDL_OPT_FAILED;
327 }
328 }
329 if (param.savedSsid.size() > 0) {
330 pSettings->savedSsidSize = param.savedSsid.size();
331 pSettings->savedSsid = ConVectorToCArrayString(param.savedSsid);
332 if (pSettings->savedSsid == nullptr) {
333 return WIFI_IDL_OPT_FAILED;
334 }
335 }
336 if (param.scanFreqs.size() > 0) {
337 pSettings->freqSize = param.scanFreqs.size();
338 pSettings->freqs = (int *)calloc(pSettings->freqSize, sizeof(int));
339 if (pSettings->freqs == nullptr) {
340 return WIFI_IDL_OPT_FAILED;
341 }
342 for (int i = 0; i < pSettings->freqSize; ++i) {
343 pSettings->freqs[i] = param.scanFreqs[i];
344 }
345 }
346 return WIFI_IDL_OPT_OK;
347 }
348
ReqStartPnoScan(const WifiPnoScanParam & scanParam)349 WifiErrorNo WifiIdlClient::ReqStartPnoScan(const WifiPnoScanParam &scanParam)
350 {
351 CHECK_CLIENT_NOT_NULL;
352 PnoScanSettings settings;
353 if (memset_s(&settings, sizeof(settings), 0, sizeof(settings)) != EOK) {
354 return WIFI_IDL_OPT_FAILED;
355 }
356 WifiErrorNo err = ConvertPnoScanParam(scanParam, &settings);
357 if (err == WIFI_IDL_OPT_OK) {
358 err = StartPnoScan(&settings);
359 }
360 if (settings.freqs != nullptr) {
361 free(settings.freqs);
362 settings.freqs = nullptr;
363 }
364 if (settings.hiddenSsid != nullptr) {
365 for (int i = 0; i < settings.hiddenSsidSize; ++i) {
366 free(settings.hiddenSsid[i]);
367 settings.hiddenSsid[i] = nullptr;
368 }
369 free(settings.hiddenSsid);
370 settings.hiddenSsid = nullptr;
371 }
372 if (settings.savedSsid != nullptr) {
373 for (int i = 0; i < settings.savedSsidSize; ++i) {
374 free(settings.savedSsid[i]);
375 settings.savedSsid[i] = nullptr;
376 }
377 free(settings.savedSsid);
378 settings.savedSsid = nullptr;
379 }
380 return err;
381 }
382
ReqStopPnoScan(void)383 WifiErrorNo WifiIdlClient::ReqStopPnoScan(void)
384 {
385 CHECK_CLIENT_NOT_NULL;
386 return StopPnoScan();
387 }
388
RemoveDevice(int networkId)389 WifiErrorNo WifiIdlClient::RemoveDevice(int networkId)
390 {
391 CHECK_CLIENT_NOT_NULL;
392 if (networkId < 0) {
393 return WIFI_IDL_OPT_INVALID_PARAM;
394 }
395 return RemoveNetwork(networkId);
396 }
397
ClearDeviceConfig(void) const398 WifiErrorNo WifiIdlClient::ClearDeviceConfig(void) const
399 {
400 CHECK_CLIENT_NOT_NULL;
401 return RemoveNetwork(-1);
402 }
403
GetNextNetworkId(int & networkId)404 WifiErrorNo WifiIdlClient::GetNextNetworkId(int &networkId)
405 {
406 CHECK_CLIENT_NOT_NULL;
407 return AddNetwork(&networkId);
408 }
409
ReqEnableNetwork(int networkId)410 WifiErrorNo WifiIdlClient::ReqEnableNetwork(int networkId)
411 {
412 CHECK_CLIENT_NOT_NULL;
413 return EnableNetwork(networkId);
414 }
415
ReqDisableNetwork(int networkId)416 WifiErrorNo WifiIdlClient::ReqDisableNetwork(int networkId)
417 {
418 CHECK_CLIENT_NOT_NULL;
419 return DisableNetwork(networkId);
420 }
421
GetDeviceConfig(WifiIdlGetDeviceConfig & config)422 WifiErrorNo WifiIdlClient::GetDeviceConfig(WifiIdlGetDeviceConfig &config)
423 {
424 CHECK_CLIENT_NOT_NULL;
425 GetNetworkConfig conf;
426 if (memset_s(&conf, sizeof(conf), 0, sizeof(conf)) != EOK) {
427 return WIFI_IDL_OPT_FAILED;
428 }
429 conf.networkId = config.networkId;
430 if (strncpy_s(conf.param, sizeof(conf.param), config.param.c_str(), config.param.length()) != EOK) {
431 return WIFI_IDL_OPT_FAILED;
432 }
433 int ret = WpaGetNetwork(&conf);
434 if (ret != WIFI_IDL_OPT_OK) {
435 return WIFI_IDL_OPT_FAILED;
436 }
437 config.value = conf.value;
438 return WIFI_IDL_OPT_OK;
439 }
440
PushDeviceConfigString(SetNetworkConfig * pConfig,DeviceConfigType type,const std::string & msg) const441 int WifiIdlClient::PushDeviceConfigString(
442 SetNetworkConfig *pConfig, DeviceConfigType type, const std::string &msg) const
443 {
444 if (msg.length() > 0) {
445 pConfig->cfgParam = type;
446 if (strncpy_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), msg.c_str(), msg.length()) != EOK) {
447 return 0;
448 }
449 return 1;
450 } else {
451 return 0;
452 }
453 }
454
PushDeviceConfigInt(SetNetworkConfig * pConfig,DeviceConfigType type,int i) const455 int WifiIdlClient::PushDeviceConfigInt(SetNetworkConfig *pConfig, DeviceConfigType type, int i) const
456 {
457 pConfig->cfgParam = type;
458 if (snprintf_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), sizeof(pConfig->cfgValue) - 1, "%d", i) < 0) {
459 return 0;
460 }
461 return 1;
462 }
463
PushDeviceConfigAuthAlgorithm(SetNetworkConfig * pConfig,DeviceConfigType type,unsigned int alg) const464 int WifiIdlClient::PushDeviceConfigAuthAlgorithm(
465 SetNetworkConfig *pConfig, DeviceConfigType type, unsigned int alg) const
466 {
467 pConfig->cfgParam = type;
468 if (alg & 0x1) {
469 if (strcat_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), "OPEN ") != EOK) {
470 return 0;
471 }
472 }
473 if (alg & 0x2) {
474 if (strcat_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), "OPEN SHARED ") != EOK) {
475 return 0;
476 }
477 }
478 if (alg & 0x4) {
479 if (strcat_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), "LEAP ") != EOK) {
480 return 0;
481 }
482 }
483 return 1;
484 }
485
CheckValidDeviceConfig(const WifiIdlDeviceConfig & config) const486 WifiErrorNo WifiIdlClient::CheckValidDeviceConfig(const WifiIdlDeviceConfig &config) const
487 {
488 if (config.psk.length() > 0) {
489 if (config.psk.length() < WIFI_IDL_PSK_MIN_LENGTH || config.psk.length() > WIFI_IDL_PSK_MAX_LENGTH) {
490 return WIFI_IDL_OPT_FAILED;
491 }
492 }
493 if (config.authAlgorithms >= AUTH_ALGORITHM_MAX) { /* max is 0111 */
494 return WIFI_IDL_OPT_FAILED;
495 }
496 return WIFI_IDL_OPT_OK;
497 }
498
SetDeviceConfig(int networkId,const WifiIdlDeviceConfig & config)499 WifiErrorNo WifiIdlClient::SetDeviceConfig(int networkId, const WifiIdlDeviceConfig &config)
500 {
501 CHECK_CLIENT_NOT_NULL;
502 if (CheckValidDeviceConfig(config) != WIFI_IDL_OPT_OK) {
503 LOGE("SetDeviceConfig, CheckValidDeviceConfig return error!");
504 return WIFI_IDL_OPT_FAILED;
505 }
506 SetNetworkConfig conf[DEVICE_CONFIG_END_POS];
507 if (memset_s(conf, sizeof(conf), 0, sizeof(conf)) != EOK) {
508 LOGE("SetDeviceConfig, memset_s return error!");
509 return WIFI_IDL_OPT_FAILED;
510 }
511 int num = 0;
512 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_SSID, config.ssid);
513 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_PSK, config.psk);
514 if (config.keyMgmt == KEY_MGMT_NONE || config.keyMgmt == KEY_MGMT_WEP) {
515 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_KEYMGMT, KEY_MGMT_NONE);
516 } else {
517 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_KEYMGMT, config.keyMgmt);
518 }
519 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_EAP, config.eap);
520 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_IDENTITY, config.identity);
521 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_PASSWORD, config.password);
522 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_EAP_CLIENT_CERT, config.clientCert);
523 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_EAP_PRIVATE_KEY, config.privateKey);
524 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_BSSID, config.bssid);
525 int i = 0;
526 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_WEP_KEY_0, config.wepKeys[i++]);
527 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_WEP_KEY_1, config.wepKeys[i++]);
528 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_WEP_KEY_2, config.wepKeys[i++]);
529 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_WEP_KEY_3, config.wepKeys[i++]);
530 if (config.priority >= 0) {
531 num += PushDeviceConfigInt(conf + num, DEVICE_CONFIG_PRIORITY, config.priority);
532 }
533 if (config.scanSsid == 1) {
534 num += PushDeviceConfigInt(conf + num, DEVICE_CONFIG_SCAN_SSID, config.scanSsid);
535 }
536 if (config.wepKeyIdx >= 0) {
537 num += PushDeviceConfigInt(conf + num, DEVICE_CONFIG_WEP_KEY_IDX, config.wepKeyIdx);
538 }
539 if (config.authAlgorithms > 0) {
540 num += PushDeviceConfigAuthAlgorithm(conf + num, DEVICE_CONFIG_AUTH_ALGORITHMS, config.authAlgorithms);
541 }
542 if (config.phase2Method != static_cast<int>(Phase2Method::NONE)) {
543 std::string strPhase2Method = WifiEapConfig::Phase2MethodToStr(config.eap, config.phase2Method);
544 num += PushDeviceConfigString(conf + num, DEVICE_CONFIG_EAP_PHASE2METHOD, strPhase2Method);
545 }
546 if (num == 0) {
547 return WIFI_IDL_OPT_OK;
548 }
549 return SetNetwork(networkId, conf, num);
550 }
551
SetWpsBssid(int networkId,const std::string & bssid)552 WifiErrorNo WifiIdlClient::SetWpsBssid(int networkId, const std::string &bssid)
553 {
554 CHECK_CLIENT_NOT_NULL;
555 SetNetworkConfig conf;
556 int num = PushDeviceConfigString(&conf, DEVICE_CONFIG_BSSID, bssid);
557 if (num == 0) {
558 LOGE("SetWpsBssid, PushDeviceConfigString return error!");
559 return WIFI_IDL_OPT_OK;
560 }
561
562 return SetNetwork(networkId, &conf, num);
563 }
564
SaveDeviceConfig(void)565 WifiErrorNo WifiIdlClient::SaveDeviceConfig(void)
566 {
567 CHECK_CLIENT_NOT_NULL;
568 return SaveNetworkConfig();
569 }
570
ReqRegisterStaEventCallback(const WifiEventCallback & callback)571 WifiErrorNo WifiIdlClient::ReqRegisterStaEventCallback(const WifiEventCallback &callback)
572 {
573 CHECK_CLIENT_NOT_NULL;
574 IWifiEventCallback cEventCallback;
575 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
576 return WIFI_IDL_OPT_FAILED;
577 }
578 if (callback.onConnectChanged != nullptr) {
579 cEventCallback.onConnectChanged = OnConnectChanged;
580 cEventCallback.onBssidChanged = OnBssidChanged;
581 cEventCallback.onWpaStateChanged = OnWpaStateChanged;
582 cEventCallback.onSsidWrongkey = OnWpaSsidWrongKey;
583 cEventCallback.onWpsOverlap = OnWpsOverlap;
584 cEventCallback.onWpsTimeOut = OnWpsTimeOut;
585 cEventCallback.onWpsConnectionFull = OnWpaConnectionFull;
586 cEventCallback.onWpsConnectionReject = OnWpaConnectionReject;
587 }
588 return RegisterStaEventCallback(cEventCallback);
589 }
590
ReqStartWpsPbcMode(const WifiIdlWpsConfig & config)591 WifiErrorNo WifiIdlClient::ReqStartWpsPbcMode(const WifiIdlWpsConfig &config)
592 {
593 CHECK_CLIENT_NOT_NULL;
594 WifiWpsParam param;
595 if (memset_s(¶m, sizeof(param), 0, sizeof(param)) != EOK) {
596 return WIFI_IDL_OPT_FAILED;
597 }
598 param.anyFlag = config.anyFlag;
599 param.multiAp = config.multiAp;
600 if (strncpy_s(param.bssid, sizeof(param.bssid), config.bssid.c_str(), config.bssid.length()) != EOK) {
601 return WIFI_IDL_OPT_FAILED;
602 }
603 return StartWpsPbcMode(¶m);
604 }
605
ReqStartWpsPinMode(const WifiIdlWpsConfig & config,int & pinCode)606 WifiErrorNo WifiIdlClient::ReqStartWpsPinMode(const WifiIdlWpsConfig &config, int &pinCode)
607 {
608 CHECK_CLIENT_NOT_NULL;
609 WifiWpsParam param;
610 if (memset_s(¶m, sizeof(param), 0, sizeof(param)) != EOK) {
611 return WIFI_IDL_OPT_FAILED;
612 }
613 param.anyFlag = config.anyFlag;
614 param.multiAp = config.multiAp;
615 if (strncpy_s(param.bssid, sizeof(param.bssid), config.bssid.c_str(), config.bssid.length()) != EOK) {
616 return WIFI_IDL_OPT_FAILED;
617 }
618 if (!config.pinCode.empty()) {
619 if (strncpy_s(param.pinCode, sizeof(param.pinCode), config.pinCode.c_str(), config.pinCode.length()) != EOK) {
620 return WIFI_IDL_OPT_FAILED;
621 }
622 }
623 return StartWpsPinMode(¶m, &pinCode);
624 }
625
ReqStopWps()626 WifiErrorNo WifiIdlClient::ReqStopWps()
627 {
628 CHECK_CLIENT_NOT_NULL;
629 return StopWps();
630 }
631
ReqGetRoamingCapabilities(WifiIdlRoamCapability & capability)632 WifiErrorNo WifiIdlClient::ReqGetRoamingCapabilities(WifiIdlRoamCapability &capability)
633 {
634 CHECK_CLIENT_NOT_NULL;
635 WifiRoamCapability tmp;
636 if (memset_s(&tmp, sizeof(tmp), 0, sizeof(tmp)) != EOK) {
637 return WIFI_IDL_OPT_FAILED;
638 }
639 WifiErrorNo err = GetRoamingCapabilities(&tmp);
640 if (err == WIFI_IDL_OPT_OK) {
641 capability.maxBlocklistSize = tmp.maxBlocklistSize;
642 capability.maxTrustlistSize = tmp.maxTrustlistSize;
643 }
644 return err;
645 }
646
ConVectorToCArrayString(const std::vector<std::string> & vec) const647 char **WifiIdlClient::ConVectorToCArrayString(const std::vector<std::string> &vec) const
648 {
649 int size = vec.size();
650 if (size == 0) {
651 return nullptr;
652 }
653 char **list = (char **)calloc(size, sizeof(char *));
654 if (list == nullptr) {
655 return nullptr;
656 }
657 int i = 0;
658 for (; i < size; ++i) {
659 int len = vec[i].length();
660 list[i] = (char *)calloc(len + 1, sizeof(char));
661 if (list[i] == nullptr) {
662 break;
663 }
664 if (strncpy_s(list[i], len + 1, vec[i].c_str(), len) != EOK) {
665 break;
666 }
667 }
668 if (i < size) {
669 for (int j = 0; j <= i; ++j) {
670 free(list[j]);
671 }
672 free(list);
673 list = nullptr;
674 return nullptr;
675 } else {
676 return list;
677 }
678 }
679
ReqSetRoamConfig(const WifiIdlRoamConfig & config)680 WifiErrorNo WifiIdlClient::ReqSetRoamConfig(const WifiIdlRoamConfig &config)
681 {
682 CHECK_CLIENT_NOT_NULL;
683 char **blocklist = nullptr;
684 int blocksize = config.blocklistBssids.size();
685 char **trustlist = nullptr;
686 int trustsize = config.trustlistBssids.size();
687 if (blocksize == 0 && trustsize == 0) {
688 return WIFI_IDL_OPT_FAILED;
689 }
690 WifiErrorNo err = WIFI_IDL_OPT_FAILED;
691 do {
692 if (blocksize > 0) {
693 blocklist = ConVectorToCArrayString(config.blocklistBssids);
694 if (blocklist == nullptr) {
695 break;
696 }
697 }
698 if (trustsize > 0) {
699 trustlist = ConVectorToCArrayString(config.trustlistBssids);
700 if (trustlist == nullptr) {
701 break;
702 }
703 }
704 err = SetRoamConfig(blocklist, blocksize, trustlist, trustsize);
705 } while (0);
706 if (blocklist != nullptr) {
707 for (int i = 0; i < blocksize; ++i) {
708 free(blocklist[i]);
709 blocklist[i] = nullptr;
710 }
711 free(blocklist);
712 blocklist = nullptr;
713 }
714 if (trustlist != nullptr) {
715 for (int i = 0; i < trustsize; ++i) {
716 free(trustlist[i]);
717 trustlist[i] = nullptr;
718 }
719 free(trustlist);
720 trustlist = nullptr;
721 }
722 return err;
723 }
724
ReqGetConnectSignalInfo(const std::string & endBssid,WifiWpaSignalInfo & info) const725 WifiErrorNo WifiIdlClient::ReqGetConnectSignalInfo(const std::string &endBssid, WifiWpaSignalInfo &info) const
726 {
727 CHECK_CLIENT_NOT_NULL;
728 WpaSignalInfo req = {0};
729 WifiErrorNo err = GetConnectSignalInfo(endBssid.c_str(), &req);
730 if (err == WIFI_IDL_OPT_OK) {
731 info.signal = req.signal;
732 info.txrate = req.txrate;
733 info.rxrate = req.rxrate;
734 info.noise = req.noise;
735 info.frequency = req.frequency;
736 }
737 return err;
738 }
739
StartAp(int id)740 WifiErrorNo WifiIdlClient::StartAp(int id)
741 {
742 CHECK_CLIENT_NOT_NULL;
743 return StartSoftAp(id);
744 }
745
StopAp(int id)746 WifiErrorNo WifiIdlClient::StopAp(int id)
747 {
748 CHECK_CLIENT_NOT_NULL;
749 return StopSoftAp(id);
750 }
751
SetSoftApConfig(const HotspotConfig & config,int id)752 WifiErrorNo WifiIdlClient::SetSoftApConfig(const HotspotConfig &config, int id)
753 {
754 CHECK_CLIENT_NOT_NULL;
755 HostapdConfig tmp;
756 if (memset_s(&tmp, sizeof(tmp), 0, sizeof(tmp)) != EOK) {
757 return WIFI_IDL_OPT_FAILED;
758 }
759 tmp.ssidLen = config.GetSsid().length();
760 if (strncpy_s(tmp.ssid, sizeof(tmp.ssid), config.GetSsid().c_str(), tmp.ssidLen) != EOK) {
761 return WIFI_IDL_OPT_FAILED;
762 }
763 std::string preSharedKey = config.GetPreSharedKey();
764 tmp.preSharedKeyLen = preSharedKey.length();
765 if (strncpy_s(tmp.preSharedKey, sizeof(tmp.preSharedKey), preSharedKey.c_str(), tmp.preSharedKeyLen) != EOK) {
766 return WIFI_IDL_OPT_FAILED;
767 }
768 tmp.securityType = static_cast<int>(config.GetSecurityType());
769 tmp.band = static_cast<int>(config.GetBand());
770 tmp.channel = config.GetChannel();
771 tmp.maxConn = config.GetMaxConn();
772 return SetHostapdConfig(&tmp, id);
773 }
774
GetStationList(std::vector<std::string> & result,int id)775 WifiErrorNo WifiIdlClient::GetStationList(std::vector<std::string> &result, int id)
776 {
777 CHECK_CLIENT_NOT_NULL;
778
779 char *staInfos = new (std::nothrow) char[BUFFER_SIZE]();
780 if (staInfos == nullptr) {
781 return WIFI_IDL_OPT_FAILED;
782 }
783 int32_t size = BUFFER_SIZE;
784 WifiErrorNo err = GetStaInfos(staInfos, &size, id);
785 if (err != WIFI_IDL_OPT_OK) {
786 delete[] staInfos;
787 return WIFI_IDL_OPT_FAILED;
788 }
789 std::string strStaInfo = std::string(staInfos);
790 SplitString(strStaInfo, ",", result);
791 delete[] staInfos;
792 return WIFI_IDL_OPT_OK;
793 }
794
AddBlockByMac(const std::string & mac,int id)795 WifiErrorNo WifiIdlClient::AddBlockByMac(const std::string &mac, int id)
796 {
797 CHECK_CLIENT_NOT_NULL;
798 if (CheckMacIsValid(mac) != 0) {
799 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
800 }
801 int len = mac.length();
802 return SetMacFilter((unsigned char *)mac.c_str(), len, id);
803 }
804
DelBlockByMac(const std::string & mac,int id)805 WifiErrorNo WifiIdlClient::DelBlockByMac(const std::string &mac, int id)
806 {
807 CHECK_CLIENT_NOT_NULL;
808 if (CheckMacIsValid(mac) != 0) {
809 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
810 }
811 int len = mac.length();
812 return DelMacFilter((unsigned char *)mac.c_str(), len, id);
813 }
814
RemoveStation(const std::string & mac,int id)815 WifiErrorNo WifiIdlClient::RemoveStation(const std::string &mac, int id)
816 {
817 CHECK_CLIENT_NOT_NULL;
818 if (CheckMacIsValid(mac) != 0) {
819 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
820 }
821 int len = mac.length();
822 return DisassociateSta((unsigned char *)mac.c_str(), len, id);
823 }
824
GetFrequenciesByBand(int32_t band,std::vector<int> & frequencies,int id)825 WifiErrorNo WifiIdlClient::GetFrequenciesByBand(int32_t band, std::vector<int> &frequencies, int id)
826 {
827 CHECK_CLIENT_NOT_NULL;
828
829 int values[WIFI_IDL_GET_MAX_BANDS] = {0};
830 int size = WIFI_IDL_GET_MAX_BANDS;
831 if (GetValidFrequenciesForBand(band, values, &size, id) != 0) {
832 return WIFI_IDL_OPT_FAILED;
833 }
834
835 for (int i = 0; i < size; i++) {
836 frequencies.push_back(values[i]);
837 }
838
839 return WIFI_IDL_OPT_OK;
840 }
841
RegisterApEvent(IWifiApMonitorEventCallback callback,int id) const842 WifiErrorNo WifiIdlClient::RegisterApEvent(IWifiApMonitorEventCallback callback, int id) const
843 {
844 CHECK_CLIENT_NOT_NULL;
845 IWifiApEventCallback cEventCallback;
846 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
847 return WIFI_IDL_OPT_FAILED;
848 }
849 if (callback.onStaJoinOrLeave != nullptr) {
850 cEventCallback.onStaJoinOrLeave = OnApStaJoinOrLeave;
851 cEventCallback.onApEnableOrDisable = OnApEnableOrDisable;
852 }
853
854 return RegisterAsscociatedEvent(cEventCallback, id);
855 }
856
SetWifiCountryCode(const std::string & code,int id)857 WifiErrorNo WifiIdlClient::SetWifiCountryCode(const std::string &code, int id)
858 {
859 CHECK_CLIENT_NOT_NULL;
860 if (code.length() != WIFI_IDL_COUNTRY_CODE_LENGTH) {
861 return WIFI_IDL_OPT_INVALID_PARAM;
862 }
863 return SetCountryCode(code.c_str(), id);
864 }
865
ReqDisconnectStaByMac(const std::string & mac,int id)866 WifiErrorNo WifiIdlClient::ReqDisconnectStaByMac(const std::string &mac, int id)
867 {
868 CHECK_CLIENT_NOT_NULL;
869 if (CheckMacIsValid(mac) != 0) {
870 return WIFI_IDL_OPT_INPUT_MAC_INVALID;
871 }
872 return DisassociateSta((unsigned char *)mac.c_str(), strlen(mac.c_str()), id);
873 }
874
ReqGetPowerModel(int & model,int id)875 WifiErrorNo WifiIdlClient::ReqGetPowerModel(int& model, int id)
876 {
877 CHECK_CLIENT_NOT_NULL;
878 return WpaGetPowerModel(&model, id);
879 }
880
ReqSetPowerModel(const int & model,int id)881 WifiErrorNo WifiIdlClient::ReqSetPowerModel(const int& model, int id)
882 {
883 CHECK_CLIENT_NOT_NULL;
884 return WpaSetPowerModel(model, id);
885 }
886
GetWifiChipObject(int id,IWifiChip & chip)887 WifiErrorNo WifiIdlClient::GetWifiChipObject(int id, IWifiChip &chip)
888 {
889 CHECK_CLIENT_NOT_NULL;
890 LOGD("Get wifi chip object accord %{public}d, %{public}d", id, chip.i);
891 return WIFI_IDL_OPT_OK;
892 }
893
GetChipIds(std::vector<int> & ids)894 WifiErrorNo WifiIdlClient::GetChipIds(std::vector<int> &ids)
895 {
896 CHECK_CLIENT_NOT_NULL;
897 LOGD("start GetChipIds %{public}zu", ids.size()); /* fixed compile error, -Werror,-Wunused-parameter */
898 return WIFI_IDL_OPT_OK;
899 }
900
GetUsedChipId(int & id)901 WifiErrorNo WifiIdlClient::GetUsedChipId(int &id)
902 {
903 CHECK_CLIENT_NOT_NULL;
904 id = 0; /* fixed compile error, -Werror,-Wunused-parameter */
905 return WIFI_IDL_OPT_OK;
906 }
907
GetChipCapabilities(int & capabilities)908 WifiErrorNo WifiIdlClient::GetChipCapabilities(int &capabilities)
909 {
910 CHECK_CLIENT_NOT_NULL;
911 capabilities = 0; /* fixed compile error, -Werror,-Wunused-parameter */
912 return WIFI_IDL_OPT_OK;
913 }
914
GetSupportedModes(std::vector<int> & modes)915 WifiErrorNo WifiIdlClient::GetSupportedModes(std::vector<int> &modes)
916 {
917 CHECK_CLIENT_NOT_NULL;
918 int size = WIFI_IDL_INTERFACE_SUPPORT_COMBINATIONS;
919 int supportModes[WIFI_IDL_INTERFACE_SUPPORT_COMBINATIONS] = {0};
920 WifiErrorNo err = GetSupportedComboModes(supportModes, &size);
921 if (err == WIFI_IDL_OPT_OK) {
922 for (int i = 0; i < size; ++i) {
923 modes.push_back(supportModes[i]);
924 }
925 }
926 return err;
927 }
928
ConfigRunModes(int mode)929 WifiErrorNo WifiIdlClient::ConfigRunModes(int mode)
930 {
931 CHECK_CLIENT_NOT_NULL;
932 LOGD("start ConfigRunModes mode %{public}d", mode);
933 return WIFI_IDL_OPT_OK;
934 }
935
GetCurrentMode(int & mode)936 WifiErrorNo WifiIdlClient::GetCurrentMode(int &mode)
937 {
938 CHECK_CLIENT_NOT_NULL;
939 mode = 0; /* fixed compile error, -Werror,-Wunused-parameter */
940 return WIFI_IDL_OPT_OK;
941 }
942
RegisterChipEventCallback(WifiChipEventCallback & callback)943 WifiErrorNo WifiIdlClient::RegisterChipEventCallback(WifiChipEventCallback &callback)
944 {
945 CHECK_CLIENT_NOT_NULL;
946 IWifiChipEventCallback cEventCallback;
947 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
948 return WIFI_IDL_OPT_FAILED;
949 }
950 cEventCallback.onIfaceAdded = callback.onIfaceAdded;
951 cEventCallback.onIfaceRemoved = callback.onIfaceRemoved;
952 return RegisterEventCallback(cEventCallback);
953 }
954
RequestFirmwareDebugInfo(std::string & debugInfo)955 WifiErrorNo WifiIdlClient::RequestFirmwareDebugInfo(std::string &debugInfo)
956 {
957 CHECK_CLIENT_NOT_NULL;
958 debugInfo.clear(); /* fixed compile error, -Werror,-Wunused-parameter */
959 return WIFI_IDL_OPT_OK;
960 }
961
ReqIsSupportDbdc(bool & isSupport) const962 WifiErrorNo WifiIdlClient::ReqIsSupportDbdc(bool &isSupport) const
963 {
964 CHECK_CLIENT_NOT_NULL;
965 return IsChipSupportDbdc(&isSupport);
966 }
967
ReqIsSupportCsa(bool & isSupport) const968 WifiErrorNo WifiIdlClient::ReqIsSupportCsa(bool &isSupport) const
969 {
970 CHECK_CLIENT_NOT_NULL;
971 return IsChipSupportCsa(&isSupport);
972 }
973
ReqIsSupportRadarDetect(bool & isSupport) const974 WifiErrorNo WifiIdlClient::ReqIsSupportRadarDetect(bool &isSupport) const
975 {
976 CHECK_CLIENT_NOT_NULL;
977 return IsChipSupportRadarDetect(&isSupport);
978 }
979
ReqIsSupportDfsChannel(bool & isSupport) const980 WifiErrorNo WifiIdlClient::ReqIsSupportDfsChannel(bool &isSupport) const
981 {
982 CHECK_CLIENT_NOT_NULL;
983 return IsChipSupportDfsChannel(&isSupport);
984 }
985
ReqIsSupportIndoorChannel(bool & isSupport) const986 WifiErrorNo WifiIdlClient::ReqIsSupportIndoorChannel(bool &isSupport) const
987 {
988 CHECK_CLIENT_NOT_NULL;
989 return IsChipSupportIndoorChannel(&isSupport);
990 }
991
ReqStartSupplicant(void)992 WifiErrorNo WifiIdlClient::ReqStartSupplicant(void)
993 {
994 CHECK_CLIENT_NOT_NULL;
995 return StartSupplicant();
996 }
997
ReqStopSupplicant(void)998 WifiErrorNo WifiIdlClient::ReqStopSupplicant(void)
999 {
1000 CHECK_CLIENT_NOT_NULL;
1001 return StopSupplicant();
1002 }
1003
ReqConnectSupplicant(void)1004 WifiErrorNo WifiIdlClient::ReqConnectSupplicant(void)
1005 {
1006 CHECK_CLIENT_NOT_NULL;
1007 return ConnectSupplicant();
1008 }
1009
ReqDisconnectSupplicant(void)1010 WifiErrorNo WifiIdlClient::ReqDisconnectSupplicant(void)
1011 {
1012 CHECK_CLIENT_NOT_NULL;
1013 return DisconnectSupplicant();
1014 }
1015
ReqRequestToSupplicant(const std::string & request)1016 WifiErrorNo WifiIdlClient::ReqRequestToSupplicant(const std::string &request)
1017 {
1018 CHECK_CLIENT_NOT_NULL;
1019 unsigned char *p = (unsigned char *)request.c_str();
1020 return RequestToSupplicant(p, request.length());
1021 }
1022
ReqRegisterSupplicantEventCallback(SupplicantEventCallback & callback)1023 WifiErrorNo WifiIdlClient::ReqRegisterSupplicantEventCallback(SupplicantEventCallback &callback)
1024 {
1025 CHECK_CLIENT_NOT_NULL;
1026 ISupplicantEventCallback cEventCallback;
1027 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
1028 return WIFI_IDL_OPT_FAILED;
1029 }
1030 if (callback.onScanNotify != nullptr) {
1031 cEventCallback.onScanNotify = OnScanNotify;
1032 }
1033 return RegisterSupplicantEventCallback(cEventCallback);
1034 }
1035
ReqUnRegisterSupplicantEventCallback(void)1036 WifiErrorNo WifiIdlClient::ReqUnRegisterSupplicantEventCallback(void)
1037 {
1038 CHECK_CLIENT_NOT_NULL;
1039 ISupplicantEventCallback cEventCallback;
1040 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
1041 return WIFI_IDL_OPT_FAILED;
1042 }
1043 return RegisterSupplicantEventCallback(cEventCallback);
1044 }
1045
ReqSetPowerSave(bool enable)1046 WifiErrorNo WifiIdlClient::ReqSetPowerSave(bool enable)
1047 {
1048 CHECK_CLIENT_NOT_NULL;
1049 int mode = 0;
1050 if (enable) {
1051 mode = 1;
1052 }
1053
1054 return SetPowerSave(mode);
1055 }
1056
ReqWpaSetCountryCode(const std::string & countryCode)1057 WifiErrorNo WifiIdlClient::ReqWpaSetCountryCode(const std::string &countryCode)
1058 {
1059 CHECK_CLIENT_NOT_NULL;
1060 if (countryCode.length() != WIFI_IDL_COUNTRY_CODE_LENGTH) {
1061 return WIFI_IDL_OPT_INVALID_PARAM;
1062 }
1063 return WpaSetCountryCode(countryCode.c_str());
1064 }
1065
ReqWpaGetCountryCode(std::string & countryCode)1066 WifiErrorNo WifiIdlClient::ReqWpaGetCountryCode(std::string &countryCode)
1067 {
1068 CHECK_CLIENT_NOT_NULL;
1069 const int idlCountryCodeLen = 32;
1070 char code[idlCountryCodeLen] = {0};
1071 WifiErrorNo ret = WpaGetCountryCode(code, idlCountryCodeLen);
1072 if (ret == WIFI_IDL_OPT_OK) {
1073 countryCode = code;
1074 }
1075 return ret;
1076 }
1077
ReqWpaAutoConnect(int enable)1078 WifiErrorNo WifiIdlClient::ReqWpaAutoConnect(int enable)
1079 {
1080 CHECK_CLIENT_NOT_NULL;
1081 return WpaAutoConnect(enable);
1082 }
1083
ReqWpaBlocklistClear()1084 WifiErrorNo WifiIdlClient::ReqWpaBlocklistClear()
1085 {
1086 CHECK_CLIENT_NOT_NULL;
1087 return WpaBlocklistClear();
1088 }
1089
ReqP2pStart(void) const1090 WifiErrorNo WifiIdlClient::ReqP2pStart(void) const
1091 {
1092 CHECK_CLIENT_NOT_NULL;
1093 return P2pStart();
1094 }
1095
ReqP2pStop(void) const1096 WifiErrorNo WifiIdlClient::ReqP2pStop(void) const
1097 {
1098 CHECK_CLIENT_NOT_NULL;
1099 return P2pStop();
1100 }
1101
ReqP2pSetDeviceName(const std::string & name) const1102 WifiErrorNo WifiIdlClient::ReqP2pSetDeviceName(const std::string &name) const
1103 {
1104 CHECK_CLIENT_NOT_NULL;
1105 return P2pSetDeviceName(name.c_str());
1106 }
1107
ReqP2pSetSsidPostfixName(const std::string & postfixName) const1108 WifiErrorNo WifiIdlClient::ReqP2pSetSsidPostfixName(const std::string &postfixName) const
1109 {
1110 CHECK_CLIENT_NOT_NULL;
1111 return P2pSetSsidPostfixName(postfixName.c_str());
1112 }
1113
ReqP2pSetWpsDeviceType(const std::string & type) const1114 WifiErrorNo WifiIdlClient::ReqP2pSetWpsDeviceType(const std::string &type) const
1115 {
1116 CHECK_CLIENT_NOT_NULL;
1117 return P2pSetWpsDeviceType(type.c_str());
1118 }
1119
ReqP2pSetWpsSecondaryDeviceType(const std::string & type) const1120 WifiErrorNo WifiIdlClient::ReqP2pSetWpsSecondaryDeviceType(const std::string &type) const
1121 {
1122 CHECK_CLIENT_NOT_NULL;
1123 return P2pSetWpsSecondaryDeviceType(type.c_str());
1124 }
1125
ReqP2pSetWpsConfigMethods(const std::string & config) const1126 WifiErrorNo WifiIdlClient::ReqP2pSetWpsConfigMethods(const std::string &config) const
1127 {
1128 CHECK_CLIENT_NOT_NULL;
1129 return P2pSetWpsConfigMethods(config.c_str());
1130 }
1131
ReqP2pGetDeviceAddress(std::string & deviceAddress) const1132 WifiErrorNo WifiIdlClient::ReqP2pGetDeviceAddress(std::string &deviceAddress) const
1133 {
1134 CHECK_CLIENT_NOT_NULL;
1135 char address[WIFI_IDL_P2P_DEV_ADDRESS_LEN] = {0};
1136 WifiErrorNo ret = P2pGetDeviceAddress(address, WIFI_IDL_P2P_DEV_ADDRESS_LEN);
1137 if (ret == WIFI_IDL_OPT_OK) {
1138 deviceAddress = address;
1139 }
1140 return ret;
1141 }
1142
ReqP2pFlush() const1143 WifiErrorNo WifiIdlClient::ReqP2pFlush() const
1144 {
1145 CHECK_CLIENT_NOT_NULL;
1146 return P2pFlush();
1147 }
1148
ReqP2pFlushService() const1149 WifiErrorNo WifiIdlClient::ReqP2pFlushService() const
1150 {
1151 CHECK_CLIENT_NOT_NULL;
1152 return P2pFlushService();
1153 }
1154
ReqP2pSaveConfig() const1155 WifiErrorNo WifiIdlClient::ReqP2pSaveConfig() const
1156 {
1157 CHECK_CLIENT_NOT_NULL;
1158 return P2pSaveConfig();
1159 }
1160
ReqP2pRegisterCallback(const P2pHalCallback & callbacks) const1161 WifiErrorNo WifiIdlClient::ReqP2pRegisterCallback(const P2pHalCallback &callbacks) const
1162 {
1163 CHECK_CLIENT_NOT_NULL;
1164
1165 IWifiEventP2pCallback cEventCallback;
1166 if (memset_s(&cEventCallback, sizeof(cEventCallback), 0, sizeof(cEventCallback)) != EOK) {
1167 return WIFI_IDL_OPT_FAILED;
1168 }
1169 if (callbacks.onConnectSupplicant != nullptr) {
1170 cEventCallback.onP2pSupplicantConnect = OnP2pConnectSupplicant;
1171 cEventCallback.onDeviceFound = OnP2pDeviceFound;
1172 cEventCallback.onDeviceLost = OnP2pDeviceLost;
1173 cEventCallback.onGoNegotiationRequest = OnP2pGoNegotiationRequest;
1174 cEventCallback.onGoNegotiationSuccess = OnP2pGoNegotiationSuccess;
1175 cEventCallback.onGoNegotiationFailure = OnP2pGoNegotiationFailure;
1176 cEventCallback.onInvitationReceived = OnP2pInvitationReceived;
1177 cEventCallback.onInvitationResult = OnP2pInvitationResult;
1178 cEventCallback.onGroupFormationSuccess = OnP2pGroupFormationSuccess;
1179 cEventCallback.onGroupFormationFailure = OnP2pGroupFormationFailure;
1180 cEventCallback.onGroupStarted = OnP2pGroupStarted;
1181 cEventCallback.onGroupRemoved = OnP2pGroupRemoved;
1182 cEventCallback.onProvisionDiscoveryPbcRequest = OnP2pProvisionDiscoveryPbcRequest;
1183 cEventCallback.onProvisionDiscoveryPbcResponse = OnP2pProvisionDiscoveryPbcResponse;
1184 cEventCallback.onProvisionDiscoveryEnterPin = OnP2pProvisionDiscoveryEnterPin;
1185 cEventCallback.onProvisionDiscoveryShowPin = OnP2pProvisionDiscoveryShowPin;
1186 cEventCallback.onProvisionDiscoveryFailure = OnP2pProvisionDiscoveryFailure;
1187 cEventCallback.onFindStopped = OnP2pFindStopped;
1188 cEventCallback.onServiceDiscoveryResponse = OnP2pServiceDiscoveryResponse;
1189 cEventCallback.onStaDeauthorized = OnP2pStaDeauthorized;
1190 cEventCallback.onStaAuthorized = OnP2pStaAuthorized;
1191 cEventCallback.connectSupplicantFailed = OnP2pConnectSupplicantFailed;
1192 cEventCallback.onP2pServDiscReq = OnP2pServDiscReq;
1193 cEventCallback.onP2pIfaceCreated = OnP2pIfaceCreated;
1194 }
1195
1196 return RegisterP2pEventCallback(cEventCallback);
1197 }
1198
ReqP2pSetupWpsPbc(const std::string & groupInterface,const std::string & bssid) const1199 WifiErrorNo WifiIdlClient::ReqP2pSetupWpsPbc(const std::string &groupInterface, const std::string &bssid) const
1200 {
1201 CHECK_CLIENT_NOT_NULL;
1202 return P2pSetupWpsPbc(groupInterface.c_str(), bssid.c_str());
1203 }
1204
ReqP2pSetupWpsPin(const std::string & groupInterface,const std::string & address,const std::string & pin,std::string & result) const1205 WifiErrorNo WifiIdlClient::ReqP2pSetupWpsPin(
1206 const std::string &groupInterface, const std::string &address, const std::string &pin, std::string &result) const
1207 {
1208 CHECK_CLIENT_NOT_NULL;
1209 if (!pin.empty() && pin.size() != WIFI_IDL_PIN_CODE_LENGTH) {
1210 return WIFI_IDL_OPT_INVALID_PARAM;
1211 }
1212 char szPinCode[WIFI_IDL_PIN_CODE_LENGTH + 1] = {0};
1213 WifiErrorNo ret =
1214 P2pSetupWpsPin(groupInterface.c_str(), address.c_str(), pin.c_str(), szPinCode, sizeof(szPinCode));
1215 if (ret == WIFI_IDL_OPT_OK) {
1216 result = szPinCode;
1217 }
1218 return ret;
1219 }
1220
ReqP2pRemoveNetwork(int networkId) const1221 WifiErrorNo WifiIdlClient::ReqP2pRemoveNetwork(int networkId) const
1222 {
1223 CHECK_CLIENT_NOT_NULL;
1224 return P2pRemoveNetwork(networkId);
1225 }
1226
ReqP2pListNetworks(std::map<int,WifiP2pGroupInfo> & mapGroups) const1227 WifiErrorNo WifiIdlClient::ReqP2pListNetworks(std::map<int, WifiP2pGroupInfo> &mapGroups) const
1228 {
1229 CHECK_CLIENT_NOT_NULL;
1230 P2pNetworkList infoList = {0};
1231 WifiErrorNo ret = P2pListNetworks(&infoList);
1232 if (ret != WIFI_IDL_OPT_OK) {
1233 return ret;
1234 }
1235 if (infoList.infos == nullptr) {
1236 return ret;
1237 }
1238 for (int i = 0; i < infoList.infoNum; ++i) {
1239 WifiP2pGroupInfo groupInfo;
1240 groupInfo.SetNetworkId(infoList.infos[i].id);
1241 groupInfo.SetGroupName(infoList.infos[i].ssid);
1242 WifiP2pDevice device;
1243 device.SetDeviceAddress(infoList.infos[i].bssid);
1244 groupInfo.SetOwner(device);
1245 if (strstr(infoList.infos[i].flags, "P2P-PERSISTENT") != nullptr) {
1246 groupInfo.SetIsPersistent(true);
1247 }
1248 mapGroups.insert(std::pair<int, WifiP2pGroupInfo>(infoList.infos[i].id, groupInfo));
1249 }
1250 free(infoList.infos);
1251 infoList.infos = nullptr;
1252 return ret;
1253 }
1254
ReqP2pSetGroupMaxIdle(const std::string & groupInterface,size_t time) const1255 WifiErrorNo WifiIdlClient::ReqP2pSetGroupMaxIdle(const std::string &groupInterface, size_t time) const
1256 {
1257 CHECK_CLIENT_NOT_NULL;
1258 return P2pSetGroupMaxIdle(groupInterface.c_str(), time);
1259 }
1260
ReqP2pSetPowerSave(const std::string & groupInterface,bool enable) const1261 WifiErrorNo WifiIdlClient::ReqP2pSetPowerSave(const std::string &groupInterface, bool enable) const
1262 {
1263 CHECK_CLIENT_NOT_NULL;
1264 int flag = enable;
1265 return P2pSetPowerSave(groupInterface.c_str(), flag);
1266 }
1267
ReqP2pSetWfdEnable(bool enable) const1268 WifiErrorNo WifiIdlClient::ReqP2pSetWfdEnable(bool enable) const
1269 {
1270 CHECK_CLIENT_NOT_NULL;
1271 int flag = enable;
1272 return P2pSetWfdEnable(flag);
1273 }
1274
ReqP2pSetWfdDeviceConfig(const std::string & config) const1275 WifiErrorNo WifiIdlClient::ReqP2pSetWfdDeviceConfig(const std::string &config) const
1276 {
1277 CHECK_CLIENT_NOT_NULL;
1278 return P2pSetWfdDeviceConfig(config.c_str());
1279 }
1280
ReqP2pStartFind(size_t timeout) const1281 WifiErrorNo WifiIdlClient::ReqP2pStartFind(size_t timeout) const
1282 {
1283 CHECK_CLIENT_NOT_NULL;
1284 return P2pStartFind(timeout);
1285 }
1286
ReqP2pStopFind() const1287 WifiErrorNo WifiIdlClient::ReqP2pStopFind() const
1288 {
1289 CHECK_CLIENT_NOT_NULL;
1290 return P2pStopFind();
1291 }
1292
ReqP2pSetExtListen(bool enable,size_t period,size_t interval) const1293 WifiErrorNo WifiIdlClient::ReqP2pSetExtListen(bool enable, size_t period, size_t interval) const
1294 {
1295 CHECK_CLIENT_NOT_NULL;
1296 if (enable) {
1297 if (period < WIFI_IDL_P2P_LISTEN_MIN_TIME || period > WIFI_IDL_P2P_LISTEN_MAX_TIME ||
1298 interval < WIFI_IDL_P2P_LISTEN_MIN_TIME || interval > WIFI_IDL_P2P_LISTEN_MAX_TIME || period > interval) {
1299 return WIFI_IDL_OPT_INVALID_PARAM;
1300 }
1301 }
1302 int flag = enable;
1303 return P2pSetExtListen(flag, period, interval);
1304 }
1305
ReqP2pSetListenChannel(size_t channel,unsigned char regClass) const1306 WifiErrorNo WifiIdlClient::ReqP2pSetListenChannel(size_t channel, unsigned char regClass) const
1307 {
1308 CHECK_CLIENT_NOT_NULL;
1309 return P2pSetListenChannel(channel, regClass);
1310 }
1311
ReqP2pConnect(const WifiP2pConfigInternal & config,bool isJoinExistingGroup,std::string & pin) const1312 WifiErrorNo WifiIdlClient::ReqP2pConnect(const WifiP2pConfigInternal &config, bool isJoinExistingGroup,
1313 std::string &pin) const
1314 {
1315 CHECK_CLIENT_NOT_NULL;
1316 P2pConnectInfo info = {0};
1317 info.mode = isJoinExistingGroup;
1318 info.persistent = config.GetNetId();
1319 if (isJoinExistingGroup) {
1320 info.goIntent = 0;
1321 } else {
1322 info.goIntent = config.GetGroupOwnerIntent();
1323 }
1324 if (info.goIntent < WIFI_IDL_P2P_MIN_GO_INTENT || info.goIntent > WIFI_IDL_P2P_MAX_GO_INTENT) {
1325 info.goIntent = WIFI_IDL_P2P_DEFAULT_GO_INTENT;
1326 }
1327 std::string address = config.GetDeviceAddress();
1328 if (address.size() < WIFI_IDL_BSSID_LENGTH) {
1329 LOGI("ReqP2pConnect Device Address is too short");
1330 return WIFI_IDL_OPT_INVALID_PARAM;
1331 }
1332 WpsMethod mode = config.GetWpsInfo().GetWpsMethod();
1333 if (mode == WpsMethod::WPS_METHOD_LABEL) {
1334 mode = WpsMethod::WPS_METHOD_KEYPAD;
1335 }
1336 info.provdisc = (int)mode;
1337 std::string pinCode = config.GetWpsInfo().GetPin();
1338 if (mode == WpsMethod::WPS_METHOD_PBC && !pinCode.empty()) {
1339 LOGI("ReqP2pConnect Expected empty pin for PBC.");
1340 return WIFI_IDL_OPT_INVALID_PARAM;
1341 }
1342 if (strncpy_s(info.peerDevAddr, sizeof(info.peerDevAddr), address.c_str(), address.length()) != EOK ||
1343 strncpy_s(info.pin, sizeof(info.pin), pinCode.c_str(), pinCode.length()) != EOK) {
1344 return WIFI_IDL_OPT_FAILED;
1345 }
1346 WifiErrorNo ret = P2pConnect(&info);
1347 if (ret == WIFI_IDL_OPT_OK) {
1348 pin = info.pin;
1349 }
1350 return ret;
1351 }
1352
ReqP2pCancelConnect() const1353 WifiErrorNo WifiIdlClient::ReqP2pCancelConnect() const
1354 {
1355 CHECK_CLIENT_NOT_NULL;
1356 return P2pCancelConnect();
1357 }
1358
ReqP2pProvisionDiscovery(const WifiP2pConfigInternal & config) const1359 WifiErrorNo WifiIdlClient::ReqP2pProvisionDiscovery(const WifiP2pConfigInternal &config) const
1360 {
1361 CHECK_CLIENT_NOT_NULL;
1362 WpsMethod mode = config.GetWpsInfo().GetWpsMethod();
1363 if (mode == WpsMethod::WPS_METHOD_LABEL) {
1364 mode = WpsMethod::WPS_METHOD_DISPLAY;
1365 } else if (mode == WpsMethod::WPS_METHOD_DISPLAY) {
1366 mode = WpsMethod::WPS_METHOD_KEYPAD;
1367 } else if (mode == WpsMethod::WPS_METHOD_KEYPAD) {
1368 mode = WpsMethod::WPS_METHOD_DISPLAY;
1369 } else if (mode != WpsMethod::WPS_METHOD_PBC) {
1370 return WIFI_IDL_OPT_FAILED;
1371 }
1372 return P2pProvisionDiscovery(config.GetDeviceAddress().c_str(), static_cast<int>(mode));
1373 }
1374
ReqP2pAddGroup(bool isPersistent,int networkId,int freq) const1375 WifiErrorNo WifiIdlClient::ReqP2pAddGroup(bool isPersistent, int networkId, int freq) const
1376 {
1377 CHECK_CLIENT_NOT_NULL;
1378 int flag = isPersistent;
1379 return P2pAddGroup(flag, networkId, freq);
1380 }
1381
ReqP2pRemoveGroup(const std::string & groupInterface) const1382 WifiErrorNo WifiIdlClient::ReqP2pRemoveGroup(const std::string &groupInterface) const
1383 {
1384 CHECK_CLIENT_NOT_NULL;
1385 return P2pRemoveGroup(groupInterface.c_str());
1386 }
1387
ReqP2pInvite(const WifiP2pGroupInfo & group,const std::string & deviceAddr) const1388 WifiErrorNo WifiIdlClient::ReqP2pInvite(const WifiP2pGroupInfo &group, const std::string &deviceAddr) const
1389 {
1390 CHECK_CLIENT_NOT_NULL;
1391 return P2pInvite(group.IsPersistent(),
1392 deviceAddr.c_str(),
1393 group.GetOwner().GetDeviceAddress().c_str(),
1394 group.GetInterface().c_str());
1395 }
1396
ReqP2pReinvoke(int networkId,const std::string & deviceAddr) const1397 WifiErrorNo WifiIdlClient::ReqP2pReinvoke(int networkId, const std::string &deviceAddr) const
1398 {
1399 CHECK_CLIENT_NOT_NULL;
1400 return P2pReinvoke(networkId, deviceAddr.c_str());
1401 }
1402
ReqP2pGetGroupCapability(const std::string & deviceAddress,uint32_t & cap) const1403 WifiErrorNo WifiIdlClient::ReqP2pGetGroupCapability(const std::string &deviceAddress, uint32_t &cap) const
1404 {
1405 CHECK_CLIENT_NOT_NULL;
1406 int capacity = 0;
1407 WifiErrorNo ret = P2pGetGroupCapability(deviceAddress.c_str(), &capacity);
1408 if (ret == WIFI_IDL_OPT_OK) {
1409 cap = capacity;
1410 }
1411 return ret;
1412 }
1413
ReqP2pAddService(const WifiP2pServiceInfo & info) const1414 WifiErrorNo WifiIdlClient::ReqP2pAddService(const WifiP2pServiceInfo &info) const
1415 {
1416 CHECK_CLIENT_NOT_NULL;
1417 WifiErrorNo ret = WIFI_IDL_OPT_OK;
1418 P2pServiceInfo servInfo = {0};
1419 std::vector<std::string> queryList = info.GetQueryList();
1420 for (auto iter = queryList.begin(); iter != queryList.end(); iter++) {
1421 std::vector<std::string> vec;
1422 SplitString(*iter, " ", vec);
1423 if (vec.size() < WIFI_IDL_P2P_SERVICE_TYPE_MIN_SIZE) {
1424 return WIFI_IDL_OPT_FAILED;
1425 }
1426 if (memset_s(&servInfo, sizeof(servInfo), 0, sizeof(servInfo)) != EOK) {
1427 return WIFI_IDL_OPT_FAILED;
1428 }
1429 const std::string &tmp = vec[WIFI_IDL_P2P_SERVICE_TYPE_2_POS];
1430 if (vec[0] == "upnp") {
1431 servInfo.mode = 0;
1432 servInfo.version = atoi(vec[1].c_str());
1433 if (strncpy_s(servInfo.name, sizeof(servInfo.name), tmp.c_str(), tmp.length()) != EOK) {
1434 return WIFI_IDL_OPT_FAILED;
1435 }
1436 ret = P2pAddService(&servInfo);
1437 } else if (vec[0] == "bonjour") {
1438 servInfo.mode = 1;
1439 if (strncpy_s(servInfo.query, sizeof(servInfo.query), vec[1].c_str(), vec[1].length()) != EOK ||
1440 strncpy_s(servInfo.resp, sizeof(servInfo.resp), tmp.c_str(), tmp.length()) != EOK) {
1441 return WIFI_IDL_OPT_FAILED;
1442 }
1443 ret = P2pAddService(&servInfo);
1444 } else {
1445 ret = WIFI_IDL_OPT_FAILED;
1446 }
1447 if (ret != WIFI_IDL_OPT_OK) {
1448 break;
1449 }
1450 }
1451 return ret;
1452 }
1453
ReqP2pRemoveService(const WifiP2pServiceInfo & info) const1454 WifiErrorNo WifiIdlClient::ReqP2pRemoveService(const WifiP2pServiceInfo &info) const
1455 {
1456 CHECK_CLIENT_NOT_NULL;
1457 WifiErrorNo ret = WIFI_IDL_OPT_OK;
1458 P2pServiceInfo servInfo = {0};
1459 std::vector<std::string> queryList = info.GetQueryList();
1460 for (auto iter = queryList.begin(); iter != queryList.end(); iter++) {
1461 std::vector<std::string> vec;
1462 SplitString(*iter, " ", vec);
1463 if (vec.size() < WIFI_IDL_P2P_SERVICE_TYPE_MIN_SIZE) {
1464 return WIFI_IDL_OPT_FAILED;
1465 }
1466 if (memset_s(&servInfo, sizeof(servInfo), 0, sizeof(servInfo)) != EOK) {
1467 return WIFI_IDL_OPT_FAILED;
1468 }
1469 const std::string &tmp = vec[WIFI_IDL_P2P_SERVICE_TYPE_2_POS];
1470 if (vec[0] == "upnp") {
1471 servInfo.mode = 0;
1472 servInfo.version = atoi(vec[1].c_str());
1473 if (strncpy_s(servInfo.name, sizeof(servInfo.name), tmp.c_str(), tmp.length()) != EOK) {
1474 return WIFI_IDL_OPT_FAILED;
1475 }
1476 ret = P2pRemoveService(&servInfo);
1477 } else if (vec[0] == "bonjour") {
1478 servInfo.mode = 1;
1479 if (strncpy_s(servInfo.query, sizeof(servInfo.query), vec[1].c_str(), vec[1].length()) != EOK) {
1480 return WIFI_IDL_OPT_FAILED;
1481 }
1482 ret = P2pRemoveService(&servInfo);
1483 } else {
1484 ret = WIFI_IDL_OPT_FAILED;
1485 }
1486 if (ret != WIFI_IDL_OPT_OK) {
1487 break;
1488 }
1489 }
1490 return ret;
1491 }
1492
ReqP2pReqServiceDiscovery(const std::string & deviceAddress,const std::vector<unsigned char> & tlvs,std::string & reqID) const1493 WifiErrorNo WifiIdlClient::ReqP2pReqServiceDiscovery(
1494 const std::string &deviceAddress, const std::vector<unsigned char> &tlvs, std::string &reqID) const
1495 {
1496 CHECK_CLIENT_NOT_NULL;
1497 if (deviceAddress.size() != WIFI_IDL_BSSID_LENGTH || tlvs.empty()) {
1498 return WIFI_IDL_OPT_INVALID_PARAM;
1499 }
1500 unsigned size = (tlvs.size() << 1) + 1;
1501 char *pTlvs = (char *)calloc(size, sizeof(char));
1502 if (pTlvs == nullptr || Val2HexChar(tlvs, pTlvs, size) < 0) {
1503 free(pTlvs);
1504 pTlvs = nullptr;
1505 return WIFI_IDL_OPT_FAILED;
1506 }
1507 char retBuf[WIFI_IDL_P2P_TMP_BUFFER_SIZE_128] = {0};
1508 WifiErrorNo ret = P2pReqServiceDiscovery(deviceAddress.c_str(), pTlvs, retBuf, sizeof(retBuf));
1509 if (ret == WIFI_IDL_OPT_OK) {
1510 reqID = retBuf;
1511 }
1512 free(pTlvs);
1513 pTlvs = nullptr;
1514 return ret;
1515 }
1516
ReqP2pCancelServiceDiscovery(const std::string & id) const1517 WifiErrorNo WifiIdlClient::ReqP2pCancelServiceDiscovery(const std::string &id) const
1518 {
1519 CHECK_CLIENT_NOT_NULL;
1520 return P2pCancelServiceDiscovery(id.c_str());
1521 }
1522
ReqP2pSetRandomMac(bool enable) const1523 WifiErrorNo WifiIdlClient::ReqP2pSetRandomMac(bool enable) const
1524 {
1525 CHECK_CLIENT_NOT_NULL;
1526 int flag = enable;
1527 return P2pSetRandomMac(flag);
1528 }
1529
ReqP2pSetMiracastType(int type) const1530 WifiErrorNo WifiIdlClient::ReqP2pSetMiracastType(int type) const
1531 {
1532 CHECK_CLIENT_NOT_NULL;
1533 return P2pSetMiracastType(type);
1534 }
1535
ReqSetPersistentReconnect(int mode) const1536 WifiErrorNo WifiIdlClient::ReqSetPersistentReconnect(int mode) const
1537 {
1538 CHECK_CLIENT_NOT_NULL;
1539 return P2pSetPersistentReconnect(mode);
1540 }
1541
ReqRespServiceDiscovery(const WifiP2pDevice & device,int frequency,int dialogToken,const std::vector<unsigned char> & tlvs) const1542 WifiErrorNo WifiIdlClient::ReqRespServiceDiscovery(
1543 const WifiP2pDevice &device, int frequency, int dialogToken, const std::vector<unsigned char> &tlvs) const
1544 {
1545 CHECK_CLIENT_NOT_NULL;
1546 if (tlvs.empty()) {
1547 return WIFI_IDL_OPT_INVALID_PARAM;
1548 }
1549 unsigned size = (tlvs.size() << 1) + 1;
1550 char *pTlvs = (char *)calloc(size, sizeof(char));
1551 if (pTlvs == nullptr || Val2HexChar(tlvs, pTlvs, size) < 0) {
1552 if (pTlvs != nullptr) {
1553 free(pTlvs);
1554 pTlvs = nullptr;
1555 }
1556 return WIFI_IDL_OPT_FAILED;
1557 }
1558 WifiErrorNo ret = P2pRespServerDiscovery(device.GetDeviceAddress().c_str(), frequency, dialogToken, pTlvs);
1559 free(pTlvs);
1560 pTlvs = nullptr;
1561 return ret;
1562 }
1563
ReqSetServiceDiscoveryExternal(bool isExternalProcess) const1564 WifiErrorNo WifiIdlClient::ReqSetServiceDiscoveryExternal(bool isExternalProcess) const
1565 {
1566 CHECK_CLIENT_NOT_NULL;
1567 return P2pSetServDiscExternal(isExternalProcess);
1568 }
1569
ReqGetP2pPeer(const std::string & deviceAddress,WifiP2pDevice & device) const1570 WifiErrorNo WifiIdlClient::ReqGetP2pPeer(const std::string &deviceAddress, WifiP2pDevice &device) const
1571 {
1572 CHECK_CLIENT_NOT_NULL;
1573 P2pDeviceInfo peerInfo;
1574 if (memset_s(&peerInfo, sizeof(peerInfo), 0, sizeof(peerInfo)) != EOK) {
1575 return WIFI_IDL_OPT_FAILED;
1576 }
1577 WifiErrorNo ret = P2pGetPeer(deviceAddress.c_str(), &peerInfo);
1578 if (ret == WIFI_IDL_OPT_OK) {
1579 device.SetDeviceAddress(peerInfo.p2pDeviceAddress);
1580 device.SetDeviceName(peerInfo.deviceName);
1581 device.SetPrimaryDeviceType(peerInfo.primaryDeviceType);
1582 device.SetWpsConfigMethod(peerInfo.configMethods);
1583 device.SetDeviceCapabilitys(peerInfo.deviceCapabilities);
1584 device.SetGroupCapabilitys(peerInfo.groupCapabilities);
1585 device.SetNetworkName(peerInfo.operSsid);
1586 }
1587 return ret;
1588 }
1589
ReqP2pGetSupportFrequencies(int band,std::vector<int> & frequencies) const1590 WifiErrorNo WifiIdlClient::ReqP2pGetSupportFrequencies(int band, std::vector<int> &frequencies) const
1591 {
1592 CHECK_CLIENT_NOT_NULL;
1593 int values[WIFI_IDL_GET_MAX_BANDS] = {0};
1594 int size = WIFI_IDL_GET_MAX_BANDS;
1595
1596 if (P2pGetFrequencies(band, values, &size) != 0) {
1597 return WIFI_IDL_OPT_FAILED;
1598 }
1599
1600 for (int i = 0; i < size; i++) {
1601 frequencies.push_back(values[i]);
1602 }
1603
1604 return WIFI_IDL_OPT_OK;
1605 }
1606
PushP2pGroupConfigString(P2pGroupConfig * pConfig,P2pGroupConfigType type,const std::string & str) const1607 int WifiIdlClient::PushP2pGroupConfigString(
1608 P2pGroupConfig *pConfig, P2pGroupConfigType type, const std::string &str) const
1609 {
1610 if (str.length() > 0) {
1611 pConfig->cfgParam = type;
1612 if (strncpy_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), str.c_str(), str.length()) != EOK) {
1613 return 0;
1614 }
1615 return 1;
1616 } else {
1617 return 0;
1618 }
1619 }
1620
PushP2pGroupConfigInt(P2pGroupConfig * pConfig,P2pGroupConfigType type,int i) const1621 int WifiIdlClient::PushP2pGroupConfigInt(P2pGroupConfig *pConfig, P2pGroupConfigType type, int i) const
1622 {
1623 pConfig->cfgParam = type;
1624 if (snprintf_s(pConfig->cfgValue, sizeof(pConfig->cfgValue), sizeof(pConfig->cfgValue) - 1, "%d", i) < 0) {
1625 return 0;
1626 }
1627 return 1;
1628 }
1629
ReqP2pSetGroupConfig(int networkId,const IdlP2pGroupConfig & config) const1630 WifiErrorNo WifiIdlClient::ReqP2pSetGroupConfig(int networkId, const IdlP2pGroupConfig &config) const
1631 {
1632 CHECK_CLIENT_NOT_NULL;
1633 P2pGroupConfig conf[GROUP_CONFIG_END_POS];
1634 if (memset_s(conf, sizeof(conf), 0, sizeof(conf)) != EOK) {
1635 return WIFI_IDL_OPT_FAILED;
1636 }
1637 int num = 0;
1638 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_SSID, config.ssid);
1639 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_BSSID, config.bssid);
1640 // If the PSK length is less than 8 or greater than 63, Do not set this psk field.
1641 if (config.psk.length() >= WIFI_IDL_PSK_MIN_LENGTH && config.psk.length() < WIFI_IDL_PSK_MAX_LENGTH) {
1642 std::string tmp = "\"" + config.psk + "\"";
1643 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_PSK, tmp);
1644 } else if (config.psk.length() == WIFI_IDL_PSK_MAX_LENGTH) {
1645 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_PSK, config.psk);
1646 }
1647 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_PROTO, config.proto);
1648 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_KEY_MGMT, config.keyMgmt);
1649 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_PAIRWISE, config.pairwise);
1650 num += PushP2pGroupConfigString(conf + num, GROUP_CONFIG_AUTH_ALG, config.authAlg);
1651
1652 num += PushP2pGroupConfigInt(conf + num, GROUP_CONFIG_MODE, config.mode);
1653 num += PushP2pGroupConfigInt(conf + num, GROUP_CONFIG_DISABLED, config.disabled);
1654 if (num == 0) {
1655 return WIFI_IDL_OPT_OK;
1656 }
1657 return P2pSetGroupConfig(networkId, conf, num);
1658 }
1659
ReqP2pGetGroupConfig(int networkId,IdlP2pGroupConfig & config) const1660 WifiErrorNo WifiIdlClient::ReqP2pGetGroupConfig(int networkId, IdlP2pGroupConfig &config) const
1661 {
1662 CHECK_CLIENT_NOT_NULL;
1663 P2pGroupConfig confs[GROUP_CONFIG_END_POS];
1664 if (memset_s(confs, sizeof(confs), 0, sizeof(confs)) != EOK) {
1665 return WIFI_IDL_OPT_FAILED;
1666 }
1667 int size = static_cast<P2pGroupConfigType>(GROUP_CONFIG_SSID);
1668 for (; size < GROUP_CONFIG_END_POS; size++) {
1669 confs[size].cfgParam = static_cast<P2pGroupConfigType>(size);
1670 }
1671 if (P2pGetGroupConfig(networkId, confs, size) != 0) {
1672 return WIFI_IDL_OPT_FAILED;
1673 }
1674 config.ssid = confs[GROUP_CONFIG_SSID].cfgValue;
1675 config.bssid = confs[GROUP_CONFIG_BSSID].cfgValue;
1676 config.psk = confs[GROUP_CONFIG_PSK].cfgValue;
1677 config.proto = confs[GROUP_CONFIG_PROTO].cfgValue;
1678 config.keyMgmt = confs[GROUP_CONFIG_KEY_MGMT].cfgValue;
1679 config.pairwise = confs[GROUP_CONFIG_PAIRWISE].cfgValue;
1680 config.authAlg = confs[GROUP_CONFIG_AUTH_ALG].cfgValue;
1681 config.mode = atoi(confs[GROUP_CONFIG_MODE].cfgValue);
1682 config.disabled = atoi(confs[GROUP_CONFIG_DISABLED].cfgValue);
1683 return WIFI_IDL_OPT_OK;
1684 }
1685
ReqP2pAddNetwork(int & networkId) const1686 WifiErrorNo WifiIdlClient::ReqP2pAddNetwork(int &networkId) const
1687 {
1688 CHECK_CLIENT_NOT_NULL;
1689 return P2pAddNetwork(&networkId);
1690 }
1691
ReqP2pHid2dConnect(const Hid2dConnectConfig & config) const1692 WifiErrorNo WifiIdlClient::ReqP2pHid2dConnect(const Hid2dConnectConfig &config) const
1693 {
1694 CHECK_CLIENT_NOT_NULL;
1695 Hid2dConnectInfo info;
1696 if (memset_s(&info, sizeof(info), 0, sizeof(info)) != EOK) {
1697 return WIFI_IDL_OPT_FAILED;
1698 }
1699 if (strncpy_s(info.ssid, sizeof(info.ssid), config.GetSsid().c_str(), config.GetSsid().length()) != EOK) {
1700 return WIFI_IDL_OPT_FAILED;
1701 }
1702 if (strncpy_s(info.bssid, sizeof(info.bssid), config.GetBssid().c_str(), config.GetBssid().length()) != EOK) {
1703 return WIFI_IDL_OPT_FAILED;
1704 }
1705 if (strncpy_s(info.passphrase, sizeof(info.passphrase),
1706 config.GetPreSharedKey().c_str(), config.GetPreSharedKey().length()) != EOK) {
1707 return WIFI_IDL_OPT_FAILED;
1708 }
1709 info.frequency = config.GetFrequency();
1710 WifiErrorNo ret = Hid2dConnect(&info);
1711 return ret;
1712 }
1713
ReqWpaSetSuspendMode(bool mode) const1714 WifiErrorNo WifiIdlClient::ReqWpaSetSuspendMode(bool mode) const
1715 {
1716 CHECK_CLIENT_NOT_NULL;
1717 return SetSuspendMode(mode);
1718 }
1719 } // namespace Wifi
1720 } // namespace OHOS
1721