1 /*
2 * Copyright (C) 2023 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 #ifdef HDI_WPA_INTERFACE_SUPPORT
17 #include "wifi_hdi_wpa_sta_impl.h"
18 #include "wifi_hdi_util.h"
19 #include "wifi_log.h"
20 #include "stub_collector.h"
21 #include "wifi_native_define.h"
22
23 #undef LOG_TAG
24 #define LOG_TAG "WifiHdiWpaStaImpl"
25 #define COLUMN_INDEX_ZERO 0
26 #define COLUMN_INDEX_ONE 1
27 #define COLUMN_INDEX_TWO 2
28 #define COLUMN_INDEX_THREE 3
29 #define COLUMN_INDEX_FOUR 4
30 #define COLUMN_INDEX_FIVE 5
31 #define REPLY_BUF_LENGTH (4096 * 10)
32 #define ETH_ADDR_LEN 6
33
34 #ifndef INSTID_WLAN0
35 #define INSTID_WLAN0 (0)
36 #endif
37 #ifndef INSTID_WLAN1
38 #define INSTID_WLAN1 (1)
39 #endif
40
41 const int QUOTATION_MARKS_FLAG_YES = 0;
42 const int QUOTATION_MARKS_FLAG_NO = 1;
43
44 static struct IWpaCallback *g_hdiWpaStaCallbackObj[STA_INSTANCE_MAX_NUM];
45 static WpaSsidField g_wpaSsidFields[] = {
46 {DEVICE_CONFIG_SSID, "ssid", QUOTATION_MARKS_FLAG_YES},
47 {DEVICE_CONFIG_PSK, "psk", QUOTATION_MARKS_FLAG_YES},
48 {DEVICE_CONFIG_KEYMGMT, "key_mgmt", QUOTATION_MARKS_FLAG_NO},
49 {DEVICE_CONFIG_PRIORITY, "priority", QUOTATION_MARKS_FLAG_NO},
50 {DEVICE_CONFIG_SCAN_SSID, "scan_ssid", QUOTATION_MARKS_FLAG_NO},
51 {DEVICE_CONFIG_EAP, "eap", QUOTATION_MARKS_FLAG_NO},
52 {DEVICE_CONFIG_IDENTITY, "identity", QUOTATION_MARKS_FLAG_YES},
53 {DEVICE_CONFIG_PASSWORD, "password", QUOTATION_MARKS_FLAG_YES},
54 {DEVICE_CONFIG_BSSID, "bssid", QUOTATION_MARKS_FLAG_NO},
55 {DEVICE_CONFIG_AUTH_ALGORITHMS, "auth_alg", QUOTATION_MARKS_FLAG_NO},
56 {DEVICE_CONFIG_WEP_KEY_IDX, "wep_tx_keyidx", QUOTATION_MARKS_FLAG_NO},
57 {DEVICE_CONFIG_WEP_KEY_0, "wep_key0", QUOTATION_MARKS_FLAG_NO},
58 {DEVICE_CONFIG_WEP_KEY_1, "wep_key1", QUOTATION_MARKS_FLAG_NO},
59 {DEVICE_CONFIG_WEP_KEY_2, "wep_key2", QUOTATION_MARKS_FLAG_NO},
60 {DEVICE_CONFIG_WEP_KEY_3, "wep_key3", QUOTATION_MARKS_FLAG_NO},
61 {DEVICE_CONFIG_EAP_CLIENT_CERT, "client_cert", QUOTATION_MARKS_FLAG_YES},
62 {DEVICE_CONFIG_EAP_PRIVATE_KEY, "private_key", QUOTATION_MARKS_FLAG_YES},
63 {DEVICE_CONFIG_EAP_PHASE2METHOD, "phase2", QUOTATION_MARKS_FLAG_YES},
64 {DEVICE_CONFIG_IEEE80211W, "ieee80211w", QUOTATION_MARKS_FLAG_NO},
65 {DEVICE_CONFIG_ALLOW_PROTOCOLS, "proto", QUOTATION_MARKS_FLAG_NO},
66 {DEVICE_CONFIG_GROUP_CIPHERS, "group", QUOTATION_MARKS_FLAG_NO},
67 {DEVICE_CONFIG_PAIRWISE_CIPHERS, "pairwise", QUOTATION_MARKS_FLAG_NO},
68 {DEVICE_CONFIG_SAE_PASSWD, "sae_password", QUOTATION_MARKS_FLAG_YES},
69 {DEVICE_CONFIG_EAP_CA_CERT, "ca_cert", QUOTATION_MARKS_FLAG_YES},
70 {DEVICE_CONFIG_EAP_CERT_PWD, "private_key_passwd", QUOTATION_MARKS_FLAG_YES},
71 {DEVICE_CONFIG_GROUP_MGMT_CIPHERS, "group_mgmt", QUOTATION_MARKS_FLAG_NO},
72 {DEVICE_CONFIG_WAPI_PSK, "wapi_psk", QUOTATION_MARKS_FLAG_YES},
73 {DEVICE_CONFIG_WAPI_PSK_TYPE, "psk_key_type", QUOTATION_MARKS_FLAG_NO},
74 {DEVICE_CONFIG_WAPI_USER_CERT, "wapi_user_sel_cert", QUOTATION_MARKS_FLAG_YES},
75 {DEVICE_CONFIG_WAPI_CA_CERT, "wapi_ca_cert", QUOTATION_MARKS_FLAG_YES},
76 };
77
GetInstId(const char * ifaceName)78 static int GetInstId(const char *ifaceName)
79 {
80 int inst = INSTID_WLAN0;
81 if (ifaceName == NULL) {
82 LOGE("GetInstId ifaceName is null");
83 return inst;
84 }
85 for (int instId = 0; instId < STA_INSTANCE_MAX_NUM; instId++) {
86 const char *hdiStaIfname = GetHdiStaIfaceName(instId);
87 if (hdiStaIfname == NULL) {
88 continue;
89 }
90 if (strcmp(ifaceName, hdiStaIfname) == 0) {
91 inst = instId;
92 break;
93 }
94 }
95 LOGI("GetInstId ifaceName = %{public}sm instId = %{public}d", ifaceName, inst);
96 return inst;
97 }
98
RegisterEventCallback(const char * ifaceName)99 static WifiErrorNo RegisterEventCallback(const char *ifaceName)
100 {
101 LOGI("RegisterEventCallback enter! ifaceName = %{public}s", ifaceName);
102 pthread_mutex_lock(GetWpaObjMutex());
103 int instId = GetInstId(ifaceName);
104 if (g_hdiWpaStaCallbackObj[instId] == NULL) {
105 pthread_mutex_unlock(GetWpaObjMutex());
106 LOGE("RegisterEventCallback: g_hdiWpaStaCallbackObj is NULL");
107 return WIFI_HAL_OPT_FAILED;
108 }
109
110 struct IWpaInterface *wpaObj = GetWpaInterface();
111 if (wpaObj == NULL) {
112 pthread_mutex_unlock(GetWpaObjMutex());
113 LOGE("RegisterEventCallback: wpaObj is NULL");
114 return WIFI_HAL_OPT_FAILED;
115 }
116
117 int32_t result = wpaObj->RegisterWpaEventCallback(wpaObj, g_hdiWpaStaCallbackObj[instId], ifaceName);
118 if (result != HDF_SUCCESS) {
119 pthread_mutex_unlock(GetWpaObjMutex());
120 LOGE("RegisterEventCallback: RegisterEventCallback failed result:%{public}d", result);
121 return WIFI_HAL_OPT_FAILED;
122 }
123
124 pthread_mutex_unlock(GetWpaObjMutex());
125 LOGI("RegisterEventCallback success.");
126 return WIFI_HAL_OPT_OK;
127 }
128
UnRegisterEventCallback(const char * ifaceName)129 static WifiErrorNo UnRegisterEventCallback(const char *ifaceName)
130 {
131 LOGI("UnRegisterEventCallback enter! ifaceName = %{public}s", ifaceName);
132 if (ifaceName == NULL) {
133 LOGE("UnRegisterEventCallback ifaceName is null");
134 return WIFI_HAL_OPT_FAILED;
135 }
136 pthread_mutex_lock(GetWpaObjMutex());
137 int instId = GetInstId(ifaceName);
138 LOGI("UnRegisterEventCallback enter! instId = %{public}d", instId);
139 if (g_hdiWpaStaCallbackObj[instId] != NULL) {
140 struct IWpaInterface *wpaObj = GetWpaInterface();
141 if (wpaObj == NULL) {
142 pthread_mutex_unlock(GetWpaObjMutex());
143 LOGE("UnRegisterEventCallback: wpaObj is NULL");
144 return WIFI_HAL_OPT_FAILED;
145 }
146
147 int32_t result = wpaObj->UnregisterWpaEventCallback(wpaObj, g_hdiWpaStaCallbackObj[instId], ifaceName);
148 if (result != HDF_SUCCESS) {
149 pthread_mutex_unlock(GetWpaObjMutex());
150 LOGE("UnRegisterEventCallback: UnregisterEventCallback failed result:%{public}d", result);
151 return WIFI_HAL_OPT_FAILED;
152 }
153 StubCollectorRemoveObject(IWPACALLBACK_INTERFACE_DESC, g_hdiWpaStaCallbackObj[instId]);
154 free(g_hdiWpaStaCallbackObj[instId]);
155 g_hdiWpaStaCallbackObj[instId] = NULL;
156 }
157
158 pthread_mutex_unlock(GetWpaObjMutex());
159 LOGI("UnRegisterEventCallback success.");
160 return WIFI_HAL_OPT_OK;
161 }
162
CalcQuotationMarksFlag(int pos,const char value[WIFI_NETWORK_CONFIG_VALUE_LENGTH])163 static int CalcQuotationMarksFlag(int pos, const char value[WIFI_NETWORK_CONFIG_VALUE_LENGTH])
164 {
165 int flag = g_wpaSsidFields[pos].flag;
166 const int HEX_PSK_MAX_LEN = 64;
167 int len = strlen(value);
168 /* if the psk length is 64, it's hex format and don't need quotation marks */
169 if (pos == DEVICE_CONFIG_PSK && len >= HEX_PSK_MAX_LEN) {
170 flag = QUOTATION_MARKS_FLAG_NO;
171 }
172 if (pos == DEVICE_CONFIG_WEP_KEY_0 ||
173 pos == DEVICE_CONFIG_WEP_KEY_1 ||
174 pos == DEVICE_CONFIG_WEP_KEY_2 ||
175 pos == DEVICE_CONFIG_WEP_KEY_3) {
176 const int WEP_KEY_LEN1 = 5;
177 const int WEP_KEY_LEN2 = 13;
178 const int WEP_KEY_LEN3 = 16;
179 /* For wep key, ASCII format need quotation marks, hex format is not required */
180 if (len == WEP_KEY_LEN1 || len == WEP_KEY_LEN2 || len == WEP_KEY_LEN3) {
181 flag = QUOTATION_MARKS_FLAG_YES;
182 }
183 }
184 return flag;
185 }
186
SetNetwork(int networkId,SetNetworkConfig conf,const char * ifaceName)187 static WifiErrorNo SetNetwork(int networkId, SetNetworkConfig conf, const char *ifaceName)
188 {
189 if (ifaceName == NULL) {
190 LOGE("GetInstId ifaceName is null");
191 return WIFI_HAL_OPT_FAILED;
192 }
193 int pos = -1;
194 for (unsigned i = 0; i < sizeof(g_wpaSsidFields) / sizeof(g_wpaSsidFields[0]); ++i) {
195 if (g_wpaSsidFields[i].field == conf.cfgParam) {
196 pos = i;
197 break;
198 }
199 }
200 if (pos < 0) {
201 LOGE("SetNetwork: unsupported param: %{public}d", conf.cfgParam);
202 return WIFI_HAL_OPT_INVALID_PARAM;
203 }
204
205 char tmpCfgValue[WIFI_NETWORK_CONFIG_VALUE_LENGTH] = {0};
206 if (CalcQuotationMarksFlag(pos, conf.cfgValue) == QUOTATION_MARKS_FLAG_YES) {
207 if (snprintf_s(tmpCfgValue, sizeof(tmpCfgValue), sizeof(tmpCfgValue) - 1, "\"%s\"", conf.cfgValue) < 0) {
208 LOGE("SetNetwork: snprintf_s failed!");
209 return WIFI_HAL_OPT_FAILED;
210 }
211 if (snprintf_s(conf.cfgValue, sizeof(conf.cfgValue), sizeof(conf.cfgValue) - 1, "%s", tmpCfgValue) < 0) {
212 LOGE("SetNetwork: snprintf_s failed!");
213 return WIFI_HAL_OPT_FAILED;
214 }
215 }
216 pthread_mutex_lock(GetWpaObjMutex());
217 struct IWpaInterface *wpaObj = GetWpaInterface();
218 if (wpaObj == NULL) {
219 LOGE("SetNetwork: wpaObj is NULL");
220 pthread_mutex_unlock(GetWpaObjMutex());
221 return WIFI_HAL_OPT_FAILED;
222 }
223
224 int32_t result = wpaObj->SetNetwork(wpaObj, ifaceName, networkId, g_wpaSsidFields[pos].fieldName, conf.cfgValue);
225 if (result != HDF_SUCCESS) {
226 LOGE("SetNetwork: SetNetwork failed result:%{public}d", result);
227 pthread_mutex_unlock(GetWpaObjMutex());
228 return WIFI_HAL_OPT_FAILED;
229 }
230 pthread_mutex_unlock(GetWpaObjMutex());
231 LOGI("SetNetwork success. ifaceName = %{public}s", ifaceName);
232 return WIFI_HAL_OPT_OK;
233 }
234
HdiWpaStaStart(const char * ifaceName,int instId)235 WifiErrorNo HdiWpaStaStart(const char *ifaceName, int instId)
236 {
237 if (ifaceName == NULL) {
238 LOGE("HdiWpaStaStart ifaceName is null");
239 return WIFI_HAL_OPT_FAILED;
240 }
241 LOGI("HdiWpaStaStart enter! ifaceName = %{public}s, instId = %{public}d", ifaceName, instId);
242 if (SetHdiStaIfaceName(ifaceName, instId) != WIFI_HAL_OPT_OK) {
243 LOGE("HdiWpaStaStart: set sta iface name failed!");
244 return WIFI_HAL_OPT_FAILED;
245 }
246
247 if (CopyConfigFile("wpa_supplicant.conf") != WIFI_HAL_OPT_OK) {
248 LOGE("HdiWpaStaStart: CopyConfigFile failed!");
249 return WIFI_HAL_OPT_FAILED;
250 }
251
252 if (HdiWpaStart() != WIFI_HAL_OPT_OK) {
253 LOGE("HdiWpaStaStart: HdiWpaStart failed!");
254 return WIFI_HAL_OPT_FAILED;
255 }
256
257 if (RegisterEventCallback(ifaceName) != WIFI_HAL_OPT_OK) {
258 LOGE("HdiWpaStaStart: RegisterEventCallback failed!");
259 return WIFI_HAL_OPT_FAILED;
260 }
261
262 if (HdiAddWpaIface(ifaceName, CONFIG_ROOR_DIR "/wpa_supplicant/wpa_supplicant.conf") != WIFI_HAL_OPT_OK) {
263 LOGE("HdiWpaStaStart: HdiAddWpaIface failed!");
264 return WIFI_HAL_OPT_FAILED;
265 }
266
267 LOGI("HdiWpaStaStart success");
268 return WIFI_HAL_OPT_OK;
269 }
270
HdiWpaStaStopWifi(int instId)271 static WifiErrorNo HdiWpaStaStopWifi(int instId)
272 {
273 for (int inst = instId; inst < STA_INSTANCE_MAX_NUM; inst++) {
274 const char *ifaceName = GetHdiStaIfaceName(instId);
275 if (ifaceName == NULL) {
276 LOGE("HdiWpaStopWifi ifaceName is null");
277 return WIFI_HAL_OPT_FAILED;
278 }
279 if (HdiRemoveWpaIface(ifaceName) != WIFI_HAL_OPT_OK) {
280 LOGE("HdiWpaStop: HdiRemoveWpaIface failed");
281 return WIFI_HAL_OPT_FAILED;
282 }
283 if (UnRegisterEventCallback(ifaceName) != WIFI_HAL_OPT_OK) {
284 LOGE("HdiWpaStop: UnRegisterEventCallback failed");
285 return WIFI_HAL_OPT_FAILED;
286 }
287 ClearHdiStaIfaceName(instId);
288 LOGI("HdiWpaStaStopWifi success, instId = %{public}d, ifaceName = %{public}s", instId, ifaceName);
289 }
290 return WIFI_HAL_OPT_OK;
291 }
292
HdiWpaStaStop(int instId)293 WifiErrorNo HdiWpaStaStop(int instId)
294 {
295 LOGI("HdiWpaStaStop enter, instId = %{public}d", instId);
296 if (IsHdiWpaStopped() == WIFI_HAL_OPT_OK) {
297 LOGI("HdiWpa already stopped, HdiWpaStaStop success!");
298 return WIFI_HAL_OPT_OK;
299 }
300
301 if (instId == INSTID_WLAN1) {
302 const char *ifaceName = GetHdiStaIfaceName(instId);
303 if (ifaceName == NULL) {
304 LOGE("HdiWpaStaStopWifi ifaceName is null");
305 return WIFI_HAL_OPT_FAILED;
306 }
307 if (HdiRemoveWpaIface(ifaceName) != WIFI_HAL_OPT_OK) {
308 LOGE("HdiWpaStaStop: HdiRemoveWpaStaIface failed!");
309 return WIFI_HAL_OPT_FAILED;
310 }
311 if (UnRegisterEventCallback(ifaceName) != WIFI_HAL_OPT_OK) {
312 LOGE("HdiWpaStaStop: UnRegisterEventCallback failed!");
313 return WIFI_HAL_OPT_FAILED;
314 }
315 ClearHdiStaIfaceName(instId);
316 LOGI("HdiWpaStaStopWifi success, instId = %{public}d, ifaceName = %{public}s", instId, ifaceName);
317 return WIFI_HAL_OPT_OK;
318 }
319
320 if (HdiRemoveWpaIface(GetHdiP2pIfaceName()) != WIFI_HAL_OPT_OK) {
321 LOGE("HdiWpaStaStop: HdiRemoveWpaP2pIface failed!");
322 }
323
324 HdiWpaStaStopWifi(INSTID_WLAN0);
325
326 if (HdiWpaStop() != WIFI_HAL_OPT_OK) {
327 LOGE("HdiWpaStaStop: HdiWpaStaStop failed!");
328 return WIFI_HAL_OPT_FAILED;
329 }
330
331 LOGI("HdiWpaStaStop success");
332 return WIFI_HAL_OPT_OK;
333 }
334
HdiWpaStaConnect(int networkId,const char * ifaceName)335 WifiErrorNo HdiWpaStaConnect(int networkId, const char *ifaceName)
336 {
337 if (ifaceName == NULL) {
338 LOGE("HdiWpaStaConnect ifaceName is null");
339 return WIFI_HAL_OPT_FAILED;
340 }
341 LOGI("HdiWpaStaConnect enter, networkId:%{public}d, ifaceName = %{public}s", networkId, ifaceName);
342 pthread_mutex_lock(GetWpaObjMutex());
343 struct IWpaInterface *wpaObj = GetWpaInterface();
344 if (wpaObj == NULL) {
345 LOGE("HdiWpaStaConnect: wpaObj is NULL");
346 pthread_mutex_unlock(GetWpaObjMutex());
347 return WIFI_HAL_OPT_FAILED;
348 }
349
350 int32_t result = wpaObj->SelectNetwork(wpaObj, ifaceName, networkId);
351 if (result != HDF_SUCCESS) {
352 LOGE("HdiWpaStaConnect: SelectNetwork failed result:%{public}d", result);
353 pthread_mutex_unlock(GetWpaObjMutex());
354 return WIFI_HAL_OPT_FAILED;
355 }
356 pthread_mutex_unlock(GetWpaObjMutex());
357 LOGI("HdiWpaStaConnect success.");
358 return WIFI_HAL_OPT_OK;
359 }
360
HdiWpaStaReconnect(const char * ifaceName)361 WifiErrorNo HdiWpaStaReconnect(const char *ifaceName)
362 {
363 if (ifaceName == NULL) {
364 LOGE("HdiWpaStaReconnect ifaceName is null");
365 return WIFI_HAL_OPT_FAILED;
366 }
367 LOGI("HdiWpaStaReconnect enter! ifaceName = %{public}s", ifaceName);
368 pthread_mutex_lock(GetWpaObjMutex());
369 struct IWpaInterface *wpaObj = GetWpaInterface();
370 if (wpaObj == NULL) {
371 LOGE("HdiWpaStaReconnect: wpaObj is NULL");
372 pthread_mutex_unlock(GetWpaObjMutex());
373 return WIFI_HAL_OPT_FAILED;
374 }
375
376 int32_t result = wpaObj->Reconnect(wpaObj, ifaceName);
377 if (result != HDF_SUCCESS) {
378 LOGE("HdiWpaStaReconnect: Reconnect failed result:%{public}d", result);
379 pthread_mutex_unlock(GetWpaObjMutex());
380 return WIFI_HAL_OPT_FAILED;
381 }
382 pthread_mutex_unlock(GetWpaObjMutex());
383 LOGI("HdiWpaStaReconnect success.");
384 return WIFI_HAL_OPT_OK;
385 }
386
HdiWpaStaReassociate(const char * ifaceName)387 WifiErrorNo HdiWpaStaReassociate(const char *ifaceName)
388 {
389 if (ifaceName == NULL) {
390 LOGE("HdiWpaStaReassociate ifaceName is null");
391 return WIFI_HAL_OPT_FAILED;
392 }
393 pthread_mutex_lock(GetWpaObjMutex());
394 struct IWpaInterface *wpaObj = GetWpaInterface();
395 if (wpaObj == NULL) {
396 LOGE("HdiWpaStaReassociate: wpaObj is NULL");
397 pthread_mutex_unlock(GetWpaObjMutex());
398 return WIFI_HAL_OPT_FAILED;
399 }
400
401 int32_t result = wpaObj->Reassociate(wpaObj, ifaceName);
402 if (result != HDF_SUCCESS) {
403 LOGE("HdiWpaStaReassociate: Reassociate failed result:%{public}d", result);
404 pthread_mutex_unlock(GetWpaObjMutex());
405 return WIFI_HAL_OPT_FAILED;
406 }
407 pthread_mutex_unlock(GetWpaObjMutex());
408 return WIFI_HAL_OPT_OK;
409 }
410
HdiWpaStaDisconnect(const char * ifaceName)411 WifiErrorNo HdiWpaStaDisconnect(const char *ifaceName)
412 {
413 if (ifaceName == NULL) {
414 LOGE("HdiWpaStaDisconnect ifaceName is null");
415 return WIFI_HAL_OPT_FAILED;
416 }
417 LOGI("HdiWpaStaDisconnect enter! ifaceName = %{public}s", ifaceName);
418 pthread_mutex_lock(GetWpaObjMutex());
419 struct IWpaInterface *wpaObj = GetWpaInterface();
420 if (wpaObj == NULL) {
421 LOGE("HdiWpaStaDisconnect: wpaObj is NULL");
422 pthread_mutex_unlock(GetWpaObjMutex());
423 return WIFI_HAL_OPT_FAILED;
424 }
425
426 int32_t result = wpaObj->Disconnect(wpaObj, ifaceName);
427 if (result != HDF_SUCCESS) {
428 LOGE("HdiWpaStaDisconnect: Disconnect failed result:%{public}d", result);
429 pthread_mutex_unlock(GetWpaObjMutex());
430 return WIFI_HAL_OPT_FAILED;
431 }
432 pthread_mutex_unlock(GetWpaObjMutex());
433 LOGI("HdiWpaStaDisconnect success.");
434 return WIFI_HAL_OPT_OK;
435 }
436
ConvertMacToStr(char * mac,int macSize,char * macStr,int strLen)437 int ConvertMacToStr(char *mac, int macSize, char *macStr, int strLen)
438 {
439 if (mac == NULL || macStr == NULL || macSize < ETH_ADDR_LEN || strLen <= HAL_BSSID_LENGTH) {
440 return -1;
441 }
442 const int posZero = 0;
443 const int posOne = 1;
444 const int posTwo = 2;
445 const int posThree = 3;
446 const int posFour = 4;
447 const int posFive = 5;
448 if (snprintf_s(macStr, strLen, strLen - 1, "%02x:%02x:%02x:%02x:%02x:%02x", mac[posZero], mac[posOne], mac[posTwo],
449 mac[posThree], mac[posFour], mac[posFive]) < 0) {
450 return -1;
451 }
452 return 0;
453 }
454
HdiWpaStaGetDeviceMacAddress(char * macAddr,int macAddrLen,const char * ifaceName)455 WifiErrorNo HdiWpaStaGetDeviceMacAddress(char *macAddr, int macAddrLen, const char *ifaceName)
456 {
457 LOGI("HdiWpaStaGetDeviceMacAddress enter! ifaceName = %{public}s", ifaceName);
458 if (macAddr == NULL) {
459 LOGE("HdiWpaStaGetDeviceMacAddress: invalid parameter!");
460 return WIFI_HAL_OPT_INVALID_PARAM;
461 }
462
463 struct HdiWpaCmdStatus status;
464 if (memset_s(&status, sizeof(status), 0, sizeof(status)) != EOK) {
465 LOGE("HdiWpaStaGetDeviceMacAddress: memset_s failed!");
466 return WIFI_HAL_OPT_FAILED;
467 }
468 pthread_mutex_lock(GetWpaObjMutex());
469 struct IWpaInterface *wpaObj = GetWpaInterface();
470 if (wpaObj == NULL) {
471 LOGE("HdiWpaStaGetDeviceMacAddress: wpaObj is NULL");
472 pthread_mutex_unlock(GetWpaObjMutex());
473 return WIFI_HAL_OPT_FAILED;
474 }
475
476 int32_t result = wpaObj->WifiStatus(wpaObj, ifaceName, &status);
477 if (result != HDF_SUCCESS) {
478 LOGE("HdiWpaStaGetDeviceMacAddress: WifiStatus failed result:%{public}d", result);
479 pthread_mutex_unlock(GetWpaObjMutex());
480 return WIFI_HAL_OPT_FAILED;
481 }
482
483 if ((uint32_t)macAddrLen < status.addressLen) {
484 LOGE("Input mac length %{public}d is little than mac address length %{public}d", macAddrLen, status.addressLen);
485 pthread_mutex_unlock(GetWpaObjMutex());
486 return WIFI_HAL_OPT_BUFFER_TOO_LITTLE;
487 }
488
489 if (ConvertMacToStr((char *)status.address, status.addressLen, macAddr, macAddrLen) != EOK) {
490 LOGE("HdiWpaStaGetDeviceMacAddress: convertMacToStr failed!");
491 pthread_mutex_unlock(GetWpaObjMutex());
492 return WIFI_HAL_OPT_FAILED;
493 }
494 pthread_mutex_unlock(GetWpaObjMutex());
495 LOGI("HdiWpaStaGetDeviceMacAddress success.");
496 return WIFI_HAL_OPT_OK;
497 }
498
HdiWpaStaScan()499 WifiErrorNo HdiWpaStaScan()
500 {
501 LOGI("HdiWpaStaScan enter");
502 pthread_mutex_lock(GetWpaObjMutex());
503 struct IWpaInterface *wpaObj = GetWpaInterface();
504 if (wpaObj == NULL) {
505 LOGE("HdiWpaStaScan: wpaObj is NULL");
506 pthread_mutex_unlock(GetWpaObjMutex());
507 return WIFI_HAL_OPT_FAILED;
508 }
509
510 int32_t result = wpaObj->Scan(wpaObj, GetHdiStaIfaceName(INSTID_WLAN0));
511 if (result != HDF_SUCCESS) {
512 LOGE("HdiWpaStaScan: Scan failed result:%{public}d", result);
513 pthread_mutex_unlock(GetWpaObjMutex());
514 return WIFI_HAL_OPT_FAILED;
515 }
516 pthread_mutex_unlock(GetWpaObjMutex());
517 LOGI("HdiWpaStaScan success.");
518 return WIFI_HAL_OPT_OK;
519 }
520
GetScanData(unsigned char * resultBuff,ScanInfo * results,int * size)521 static bool GetScanData(unsigned char *resultBuff, ScanInfo *results, int *size)
522 {
523 char *savedPtr = NULL;
524 strtok_r((char *)resultBuff, "\n", &savedPtr);
525 char *token = strtok_r(NULL, "\n", &savedPtr);
526 int j = 0;
527 while (token != NULL) {
528 if (j >= *size) {
529 *size = j;
530 LOGE("GetScanData: get scan info full!");
531 return false;
532 }
533 int length = strlen(token);
534 if (length <= 0 || DelScanInfoLine(&results[j], token, length)) {
535 LOGE("GetScanData: parse scan results line failed!");
536 break;
537 }
538 LOGI("-->>%{public}2d %{private}s %{private}s %{public}d %{public}d %{public}d %{public}d \
539 %{public}d %{public}d %{public}d %{public}d %{public}d %{public}d %{public}d",
540 j, results[j].ssid, results[j].bssid, results[j].freq, results[j].siglv,
541 results[j].centerFrequency0, results[j].centerFrequency1, results[j].channelWidth,
542 results[j].isVhtInfoExist, results[j].isHtInfoExist, results[j].isHeInfoExist, results[j].isErpExist,
543 results[j].maxRates, results[j].extMaxRates);
544 token = strtok_r(NULL, "\n", &savedPtr);
545 j++;
546 }
547 *size = j;
548 return true;
549 }
550
HdiWpaStaGetScanInfos(int * size,const char * ifaceName)551 ScanInfo *HdiWpaStaGetScanInfos(int *size, const char *ifaceName)
552 {
553 LOGI("HdiWpaStaGetScanInfos enter");
554 if (ifaceName == NULL || size == NULL || *size <= 0) {
555 LOGE("HdiWpaStaGetScanInfos: invalid parameter!");
556 return NULL;
557 }
558
559 ScanInfo *results = (ScanInfo *)calloc(*size, sizeof(ScanInfo));
560 if (results == NULL) {
561 LOGE("HdiWpaStaGetScanInfos: calloc scanInfo failed!");
562 return NULL;
563 }
564
565 unsigned int resultBuffLen = REPLY_BUF_LENGTH;
566 unsigned char *resultBuff = (unsigned char *)calloc(resultBuffLen, sizeof(unsigned char));
567 if (resultBuff == NULL) {
568 free(results);
569 results = NULL;
570 LOGE("HdiWpaStaGetScanInfos: calloc failed!");
571 return NULL;
572 }
573 pthread_mutex_lock(GetWpaObjMutex());
574 struct IWpaInterface *wpaObj = GetWpaInterface();
575 if (wpaObj == NULL) {
576 LOGE("HdiWpaStaGetScanInfos: wpaObj is NULL");
577 goto EXIT;
578 }
579
580 if (wpaObj->ScanResult(wpaObj, ifaceName, resultBuff, &resultBuffLen) != HDF_SUCCESS) {
581 LOGE("HdiWpaStaGetScanInfos: ScanResult failed");
582 goto EXIT;
583 }
584
585 if (GetScanData(resultBuff, results, size) == false) {
586 goto EXIT;
587 }
588
589 free(resultBuff);
590 resultBuff = NULL;
591 pthread_mutex_unlock(GetWpaObjMutex());
592 LOGI("HdiWpaStaGetScanInfos success.");
593 return results;
594 EXIT:
595 free(results);
596 results = NULL;
597 free(resultBuff);
598 resultBuff = NULL;
599 pthread_mutex_unlock(GetWpaObjMutex());
600 return NULL;
601 }
602
HdiWpaStaRemoveNetwork(int networkId,const char * ifaceName)603 WifiErrorNo HdiWpaStaRemoveNetwork(int networkId, const char *ifaceName)
604 {
605 if (ifaceName == NULL) {
606 LOGE("HdiWpaStaRemoveNetwork ifaceName is null");
607 return WIFI_HAL_OPT_FAILED;
608 }
609 LOGI("HdiWpaStaRemoveNetwork enter, networkId:%{public}d, ifaceName = %{public}s", networkId, ifaceName);
610 pthread_mutex_lock(GetWpaObjMutex());
611 struct IWpaInterface *wpaObj = GetWpaInterface();
612 if (wpaObj == NULL) {
613 LOGE("HdiWpaStaRemoveNetwork: wpaObj is NULL");
614 pthread_mutex_unlock(GetWpaObjMutex());
615 return WIFI_HAL_OPT_FAILED;
616 }
617
618 int32_t result = wpaObj->RemoveNetwork(wpaObj, ifaceName, networkId);
619 if (result != HDF_SUCCESS) {
620 LOGE("HdiWpaStaRemoveNetwork: RemoveNetwork failed result:%{public}d", result);
621 pthread_mutex_unlock(GetWpaObjMutex());
622 return WIFI_HAL_OPT_FAILED;
623 }
624 pthread_mutex_unlock(GetWpaObjMutex());
625 LOGI("HdiWpaStaRemoveNetwork success.");
626 return WIFI_HAL_OPT_OK;
627 }
628
HdiWpaStaAddNetwork(int * networkId,const char * ifaceName)629 WifiErrorNo HdiWpaStaAddNetwork(int *networkId, const char *ifaceName)
630 {
631 if (ifaceName == NULL) {
632 LOGE("HdiWpaStaAddNetwork ifaceName is null");
633 return WIFI_HAL_OPT_FAILED;
634 }
635 LOGI("HdiWpaStaAddNetwork enter! ifaceName = %{public}s", ifaceName);
636 if (networkId == NULL) {
637 LOGE("HdiWpaStaAddNetwork: invalid parameter!");
638 return WIFI_HAL_OPT_INVALID_PARAM;
639 }
640 pthread_mutex_lock(GetWpaObjMutex());
641 struct IWpaInterface *wpaObj = GetWpaInterface();
642 if (wpaObj == NULL) {
643 LOGE("HdiWpaStaAddNetwork: wpaObj is NULL");
644 pthread_mutex_unlock(GetWpaObjMutex());
645 return WIFI_HAL_OPT_FAILED;
646 }
647
648 int32_t result = wpaObj->AddNetwork(wpaObj, ifaceName, networkId);
649 if (result != HDF_SUCCESS) {
650 LOGE("HdiWpaStaAddNetwork: AddNetwork failed result:%{public}d", result);
651 pthread_mutex_unlock(GetWpaObjMutex());
652 return WIFI_HAL_OPT_FAILED;
653 }
654 pthread_mutex_unlock(GetWpaObjMutex());
655 LOGI("HdiWpaStaAddNetwork success, networkId:%{public}d", *networkId);
656 return WIFI_HAL_OPT_OK;
657 }
658
HdiWpaStaEnableNetwork(int networkId,const char * ifaceName)659 WifiErrorNo HdiWpaStaEnableNetwork(int networkId, const char *ifaceName)
660 {
661 if (ifaceName == NULL) {
662 LOGE("HdiWpaStaEnableNetwork ifaceName is null");
663 return WIFI_HAL_OPT_FAILED;
664 }
665 LOGI("HdiWpaStaEnableNetwork enter, networkId:%{public}d, ifaceName = %{public}s", networkId, ifaceName);
666 pthread_mutex_lock(GetWpaObjMutex());
667 struct IWpaInterface *wpaObj = GetWpaInterface();
668 if (wpaObj == NULL) {
669 LOGE("HdiWpaStaEnableNetwork: wpaObj is NULL");
670 pthread_mutex_unlock(GetWpaObjMutex());
671 return WIFI_HAL_OPT_FAILED;
672 }
673
674 int32_t result = wpaObj->EnableNetwork(wpaObj, ifaceName, networkId);
675 if (result != HDF_SUCCESS) {
676 LOGE("HdiWpaStaEnableNetwork: EnableNetwork failed result:%{public}d", result);
677 pthread_mutex_unlock(GetWpaObjMutex());
678 return WIFI_HAL_OPT_FAILED;
679 }
680 pthread_mutex_unlock(GetWpaObjMutex());
681 LOGI("HdiWpaStaEnableNetwork success.");
682 return WIFI_HAL_OPT_OK;
683 }
684
HdiWpaStaDisableNetwork(int networkId,const char * ifaceName)685 WifiErrorNo HdiWpaStaDisableNetwork(int networkId, const char *ifaceName)
686 {
687 if (ifaceName == NULL) {
688 LOGE("HdiWpaStaDisableNetwork ifaceName is null");
689 return WIFI_HAL_OPT_FAILED;
690 }
691 LOGI("HdiWpaStaDisableNetwork enter, networkId:%{public}d, ifaceName = %{public}s", networkId, ifaceName);
692 pthread_mutex_lock(GetWpaObjMutex());
693 struct IWpaInterface *wpaObj = GetWpaInterface();
694 if (wpaObj == NULL) {
695 LOGE("HdiWpaStaDisableNetwork: wpaObj is NULL");
696 pthread_mutex_unlock(GetWpaObjMutex());
697 return WIFI_HAL_OPT_FAILED;
698 }
699
700 int32_t result = wpaObj->DisableNetwork(wpaObj, ifaceName, networkId);
701 if (result != HDF_SUCCESS) {
702 LOGE("HdiWpaStaDisableNetwork: DisableNetwork failed result:%{public}d", result);
703 pthread_mutex_unlock(GetWpaObjMutex());
704 return WIFI_HAL_OPT_FAILED;
705 }
706 pthread_mutex_unlock(GetWpaObjMutex());
707 LOGI("HdiWpaStaDisableNetwork success.");
708 return WIFI_HAL_OPT_OK;
709 }
710
HdiWpaStaSetNetwork(int networkId,SetNetworkConfig * confs,int size,const char * ifaceName)711 WifiErrorNo HdiWpaStaSetNetwork(int networkId, SetNetworkConfig *confs, int size, const char *ifaceName)
712 {
713 if (ifaceName == NULL) {
714 LOGE("HdiWpaStaSetNetwork ifaceName is null");
715 return WIFI_HAL_OPT_FAILED;
716 }
717 LOGI("HdiWpaStaSetNetwork enter! ifaceName = %{public}s", ifaceName);
718 if (confs == NULL) {
719 LOGE("HdiWpaStaSetNetwork: invalid parameter!");
720 return WIFI_HAL_OPT_INVALID_PARAM;
721 }
722
723 for (int i = 0; i < size; ++i) {
724 SetNetwork(networkId, confs[i], ifaceName);
725 }
726
727 return WIFI_HAL_OPT_OK;
728 }
729
HdiWpaStaSaveConfig(const char * ifaceName)730 WifiErrorNo HdiWpaStaSaveConfig(const char *ifaceName)
731 {
732 if (ifaceName == NULL) {
733 LOGE("HdiWpaStaSaveConfig ifaceName is null");
734 return WIFI_HAL_OPT_FAILED;
735 }
736 LOGI("HdiWpaStaSaveConfig enter! ifaceName = %{public}s", ifaceName);
737 pthread_mutex_lock(GetWpaObjMutex());
738 struct IWpaInterface *wpaObj = GetWpaInterface();
739 if (wpaObj == NULL) {
740 LOGE("HdiWpaStaSaveConfig: wpaObj is NULL");
741 pthread_mutex_unlock(GetWpaObjMutex());
742 return WIFI_HAL_OPT_FAILED;
743 }
744
745 int32_t result = wpaObj->SaveConfig(wpaObj, ifaceName);
746 if (result != HDF_SUCCESS) {
747 LOGE("HdiWpaStaSaveConfig: SaveConfig failed result:%{public}d", result);
748 pthread_mutex_unlock(GetWpaObjMutex());
749 return WIFI_HAL_OPT_FAILED;
750 }
751 pthread_mutex_unlock(GetWpaObjMutex());
752 LOGI("HdiWpaStaSaveConfig success.");
753 return WIFI_HAL_OPT_OK;
754 }
755
RegisterHdiWpaStaEventCallback(struct IWpaCallback * callback,const char * ifaceName,int instId)756 WifiErrorNo RegisterHdiWpaStaEventCallback(struct IWpaCallback *callback, const char *ifaceName, int instId)
757 {
758 if (ifaceName == NULL) {
759 LOGE("RegisterHdiWpaStaEventCallback ifaceName is null");
760 return WIFI_HAL_OPT_FAILED;
761 }
762 LOGI("RegisterHdiWpaStaEventCallback enter, ifaceName = %{public}s, instId = %{public}d", ifaceName, instId);
763 pthread_mutex_lock(GetWpaObjMutex());
764 if (callback == NULL || callback->OnEventConnected == NULL) {
765 pthread_mutex_unlock(GetWpaObjMutex());
766 LOGE("RegisterHdiWpaStaEventCallback: invalid parameter!");
767 return WIFI_HAL_OPT_INVALID_PARAM;
768 }
769
770 if (g_hdiWpaStaCallbackObj[instId] != NULL) {
771 pthread_mutex_unlock(GetWpaObjMutex());
772 LOGI("RegisterHdiWpaStaEventCallback: already register!");
773 return WIFI_HAL_OPT_OK;
774 }
775
776 g_hdiWpaStaCallbackObj[instId] = (struct IWpaCallback *)malloc(sizeof(struct IWpaCallback));
777 if (g_hdiWpaStaCallbackObj[instId] == NULL) {
778 pthread_mutex_unlock(GetWpaObjMutex());
779 LOGE("RegisterHdiWpaStaEventCallback: IWpaCallback malloc failed!");
780 return WIFI_HAL_OPT_FAILED;
781 }
782 if (memset_s(g_hdiWpaStaCallbackObj[instId], sizeof(struct IWpaCallback), 0, sizeof(struct IWpaCallback)) != EOK) {
783 pthread_mutex_unlock(GetWpaObjMutex());
784 return WIFI_HAL_OPT_FAILED;
785 }
786 g_hdiWpaStaCallbackObj[instId]->OnEventDisconnected = callback->OnEventDisconnected;
787 g_hdiWpaStaCallbackObj[instId]->OnEventConnected = callback->OnEventConnected;
788 g_hdiWpaStaCallbackObj[instId]->OnEventBssidChanged = callback->OnEventBssidChanged;
789 g_hdiWpaStaCallbackObj[instId]->OnEventStateChanged = callback->OnEventStateChanged;
790 g_hdiWpaStaCallbackObj[instId]->OnEventTempDisabled = callback->OnEventTempDisabled;
791 g_hdiWpaStaCallbackObj[instId]->OnEventAssociateReject = callback->OnEventAssociateReject;
792 g_hdiWpaStaCallbackObj[instId]->OnEventWpsOverlap = callback->OnEventWpsOverlap;
793 g_hdiWpaStaCallbackObj[instId]->OnEventWpsTimeout = callback->OnEventWpsTimeout;
794 g_hdiWpaStaCallbackObj[instId]->OnEventAuthTimeout = callback->OnEventAuthTimeout;
795 #ifndef HDI_CHIP_INTERFACE_SUPPORT
796 g_hdiWpaStaCallbackObj[instId]->OnEventScanResult = callback->OnEventScanResult;
797 #endif
798 g_hdiWpaStaCallbackObj[instId]->OnEventStaNotify = callback->OnEventStaNotify;
799 pthread_mutex_unlock(GetWpaObjMutex());
800 LOGI("RegisterHdiWpaStaEventCallback3 success.");
801 return WIFI_HAL_OPT_OK;
802 }
803
HdiWpaStaStartWpsPbcMode(WifiWpsParam * config,const char * ifaceName)804 WifiErrorNo HdiWpaStaStartWpsPbcMode(WifiWpsParam *config, const char *ifaceName)
805 {
806 if (ifaceName == NULL) {
807 LOGE("HdiWpaStaStartWpsPbcMode ifaceName is null");
808 return WIFI_HAL_OPT_FAILED;
809 }
810 LOGI("HdiWpaStaStartWpsPbcMode enter! ifaceName = %{public}s", ifaceName);
811 if (config == NULL) {
812 LOGE("HdiWpaStaStartWpsPbcMode: invalid parameter!");
813 return WIFI_HAL_OPT_INVALID_PARAM;
814 }
815
816 struct HdiWifiWpsParam wpsParam = {0};
817 wpsParam.anyFlag = config->anyFlag;
818 wpsParam.multiAp = config->multiAp;
819 wpsParam.bssid = (uint8_t *)config->bssid;
820 wpsParam.bssidLen = strlen(config->bssid);
821 pthread_mutex_lock(GetWpaObjMutex());
822 struct IWpaInterface *wpaObj = GetWpaInterface();
823 if (wpaObj == NULL) {
824 LOGE("HdiWpaStaStartWpsPbcMode: wpaObj is NULL");
825 pthread_mutex_unlock(GetWpaObjMutex());
826 return WIFI_HAL_OPT_FAILED;
827 }
828
829 int32_t result = wpaObj->WpsPbcMode(wpaObj, ifaceName, &wpsParam);
830 if (result != HDF_SUCCESS) {
831 LOGE("HdiWpaStaStartWpsPbcMode: WpsPbcMode failed result:%{public}d", result);
832 pthread_mutex_unlock(GetWpaObjMutex());
833 return WIFI_HAL_OPT_FAILED;
834 }
835 pthread_mutex_unlock(GetWpaObjMutex());
836 LOGI("HdiWpaStaStartWpsPbcMode success.");
837 return WIFI_HAL_OPT_OK;
838 }
839
HdiWpaStaStartWpsPinMode(WifiWpsParam * config,int * pinCode,const char * ifaceName)840 WifiErrorNo HdiWpaStaStartWpsPinMode(WifiWpsParam *config, int *pinCode, const char *ifaceName)
841 {
842 if (ifaceName == NULL) {
843 LOGE("HdiWpaStaStartWpsPinMode ifaceName is null");
844 return WIFI_HAL_OPT_FAILED;
845 }
846 LOGI("HdiWpaStaStartWpsPinMode enter! ifaceName = %{public}s", ifaceName);
847 if (config == NULL || pinCode == NULL) {
848 LOGE("HdiWpaStaStartWpsPinMode: invalid parameter!");
849 return WIFI_HAL_OPT_INVALID_PARAM;
850 }
851
852 struct HdiWifiWpsParam wpsParam = {0};
853 wpsParam.anyFlag = config->anyFlag;
854 wpsParam.multiAp = config->multiAp;
855 wpsParam.bssid = (uint8_t *)config->bssid;
856 wpsParam.bssidLen = strlen(config->bssid);
857 wpsParam.pinCode = (uint8_t *)config->pinCode;
858 wpsParam.pinCodeLen = strlen(config->pinCode);
859 pthread_mutex_lock(GetWpaObjMutex());
860 struct IWpaInterface *wpaObj = GetWpaInterface();
861 if (wpaObj == NULL) {
862 LOGE("HdiWpaStaStartWpsPinMode: wpaObj is NULL");
863 pthread_mutex_unlock(GetWpaObjMutex());
864 return WIFI_HAL_OPT_FAILED;
865 }
866
867 int32_t result = wpaObj->WpsPinMode(wpaObj, ifaceName, &wpsParam, pinCode);
868 if (result != HDF_SUCCESS) {
869 LOGE("HdiWpaStaStartWpsPinMode: WpsPbcMode failed result:%{public}d", result);
870 pthread_mutex_unlock(GetWpaObjMutex());
871 return WIFI_HAL_OPT_FAILED;
872 }
873 pthread_mutex_unlock(GetWpaObjMutex());
874 LOGI("HdiWpaStaStartWpsPinMode success.");
875 return WIFI_HAL_OPT_OK;
876 }
877
HdiStopWpsSta(const char * ifaceName)878 WifiErrorNo HdiStopWpsSta(const char *ifaceName)
879 {
880 if (ifaceName == NULL) {
881 LOGE("HdiStopWpsSta ifaceName is null");
882 return WIFI_HAL_OPT_FAILED;
883 }
884 LOGI("HdiStopWpsSta enter! ifaceName = %{public}s", ifaceName);
885 pthread_mutex_lock(GetWpaObjMutex());
886 struct IWpaInterface *wpaObj = GetWpaInterface();
887 if (wpaObj == NULL) {
888 LOGE("HdiStopWpsSta: wpaObj is NULL");
889 pthread_mutex_unlock(GetWpaObjMutex());
890 return WIFI_HAL_OPT_FAILED;
891 }
892
893 int32_t result = wpaObj->WpsCancel(wpaObj, ifaceName);
894 if (result != HDF_SUCCESS) {
895 LOGE("HdiStopWpsSta: WpsCancel failed result:%{public}d", result);
896 pthread_mutex_unlock(GetWpaObjMutex());
897 return WIFI_HAL_OPT_FAILED;
898 }
899 pthread_mutex_unlock(GetWpaObjMutex());
900 LOGI("HdiStopWpsSta success.");
901 return WIFI_HAL_OPT_OK;
902 }
903
HdiWpaStaAutoConnect(int enable,const char * ifaceName)904 WifiErrorNo HdiWpaStaAutoConnect(int enable, const char *ifaceName)
905 {
906 if (ifaceName == NULL) {
907 LOGE("HdiWpaStaAutoConnect ifaceName is null");
908 return WIFI_HAL_OPT_FAILED;
909 }
910 LOGI("HdiWpaStaAutoConnect enter, enable:%{public}d, ifaceName = %{public}s", enable, ifaceName);
911 pthread_mutex_lock(GetWpaObjMutex());
912 struct IWpaInterface *wpaObj = GetWpaInterface();
913 if (wpaObj == NULL) {
914 LOGE("HdiWpaStaAutoConnect: wpaObj is NULL");
915 pthread_mutex_unlock(GetWpaObjMutex());
916 return WIFI_HAL_OPT_FAILED;
917 }
918
919 int32_t result = wpaObj->AutoConnect(wpaObj, ifaceName, enable);
920 if (result != HDF_SUCCESS) {
921 LOGE("HdiWpaStaAutoConnect: AutoConnect failed result:%{public}d", result);
922 pthread_mutex_unlock(GetWpaObjMutex());
923 return WIFI_HAL_OPT_FAILED;
924 }
925 pthread_mutex_unlock(GetWpaObjMutex());
926 LOGI("HdiWpaStaAutoConnect success.");
927 return WIFI_HAL_OPT_OK;
928 }
929
HdiWpaStaBlocklistClear(const char * ifaceName)930 WifiErrorNo HdiWpaStaBlocklistClear(const char *ifaceName)
931 {
932 if (ifaceName == NULL) {
933 LOGE("HdiWpaStaBlocklistClear ifaceName is null");
934 return WIFI_HAL_OPT_FAILED;
935 }
936 LOGI("HdiWpaStaBlocklistClear enter! ifaceName = %{public}s", ifaceName);
937 pthread_mutex_lock(GetWpaObjMutex());
938 struct IWpaInterface *wpaObj = GetWpaInterface();
939 if (wpaObj == NULL) {
940 LOGE("HdiWpaStaBlocklistClear: wpaObj is NULL");
941 pthread_mutex_unlock(GetWpaObjMutex());
942 return WIFI_HAL_OPT_FAILED;
943 }
944
945 int32_t result = wpaObj->BlocklistClear(wpaObj, ifaceName);
946 if (result != HDF_SUCCESS) {
947 LOGE("HdiWpaStaBlocklistClear: BlocklistClear failed result:%{public}d", result);
948 pthread_mutex_unlock(GetWpaObjMutex());
949 return WIFI_HAL_OPT_FAILED;
950 }
951 pthread_mutex_unlock(GetWpaObjMutex());
952 LOGI("HdiWpaStaBlocklistClear success.");
953 return WIFI_HAL_OPT_OK;
954 }
955
HdiWpaStaSetPowerSave(int enable,const char * ifaceName)956 WifiErrorNo HdiWpaStaSetPowerSave(int enable, const char *ifaceName)
957 {
958 if (ifaceName == NULL) {
959 LOGE("HdiWpaStaSetPowerSave ifaceName is null");
960 return WIFI_HAL_OPT_FAILED;
961 }
962 LOGI("HdiWpaStaSetPowerSave enter, enable:%{public}d, ifaceName = %{public}s", enable, ifaceName);
963 pthread_mutex_lock(GetWpaObjMutex());
964 struct IWpaInterface *wpaObj = GetWpaInterface();
965 if (wpaObj == NULL) {
966 LOGE("HdiWpaStaSetPowerSave: wpaObj is NULL");
967 pthread_mutex_unlock(GetWpaObjMutex());
968 return WIFI_HAL_OPT_FAILED;
969 }
970
971 int32_t result = wpaObj->SetPowerSave(wpaObj, ifaceName, enable);
972 if (result != HDF_SUCCESS) {
973 LOGE("HdiWpaStaSetPowerSave: SetPowerSave failed result:%{public}d", result);
974 pthread_mutex_unlock(GetWpaObjMutex());
975 return WIFI_HAL_OPT_FAILED;
976 }
977 pthread_mutex_unlock(GetWpaObjMutex());
978 LOGI("HdiWpaStaSetPowerSave success.");
979 return WIFI_HAL_OPT_OK;
980 }
981
HdiWpaStaSetCountryCode(const char * countryCode,const char * ifaceName)982 WifiErrorNo HdiWpaStaSetCountryCode(const char *countryCode, const char *ifaceName)
983 {
984 if (ifaceName == NULL) {
985 LOGE("HdiWpaStaSetCountryCode ifaceName is null");
986 return WIFI_HAL_OPT_FAILED;
987 }
988 LOGI("HdiWpaStaSetCountryCode enter, enable:%{public}s, ifaceName = %{public}s", countryCode, ifaceName);
989 pthread_mutex_lock(GetWpaObjMutex());
990 struct IWpaInterface *wpaObj = GetWpaInterface();
991 if (wpaObj == NULL) {
992 LOGE("HdiWpaStaSetCountryCode: wpaObj is NULL");
993 pthread_mutex_unlock(GetWpaObjMutex());
994 return WIFI_HAL_OPT_FAILED;
995 }
996
997 int32_t result = wpaObj->SetCountryCode(wpaObj, ifaceName, countryCode);
998 if (result != HDF_SUCCESS) {
999 LOGE("HdiWpaStaSetCountryCode: SetCountryCode failed result:%{public}d", result);
1000 pthread_mutex_unlock(GetWpaObjMutex());
1001 return WIFI_HAL_OPT_FAILED;
1002 }
1003 pthread_mutex_unlock(GetWpaObjMutex());
1004 LOGI("HdiWpaStaSetCountryCode success.");
1005 return WIFI_HAL_OPT_OK;
1006 }
1007
HdiWpaStaGetCountryCode(char * countryCode,uint32_t size,const char * ifaceName)1008 WifiErrorNo HdiWpaStaGetCountryCode(char *countryCode, uint32_t size, const char *ifaceName)
1009 {
1010 if (ifaceName == NULL) {
1011 LOGE("HdiWpaStaGetCountryCode ifaceName is null");
1012 return WIFI_HAL_OPT_FAILED;
1013 }
1014 LOGI("HdiWpaStaGetCountryCode enter, enable:%{public}s, ifaceName = %{public}s", countryCode, ifaceName);
1015 pthread_mutex_lock(GetWpaObjMutex());
1016 struct IWpaInterface *wpaObj = GetWpaInterface();
1017 if (wpaObj == NULL) {
1018 LOGE("HdiWpaStaGetCountryCode: wpaObj is NULL");
1019 pthread_mutex_unlock(GetWpaObjMutex());
1020 return WIFI_HAL_OPT_FAILED;
1021 }
1022
1023 int32_t result = wpaObj->GetCountryCode(wpaObj, ifaceName, countryCode, size);
1024 if (result != HDF_SUCCESS) {
1025 LOGE("HdiWpaStaGetCountryCode: SetCountryCode failed result:%{public}d", result);
1026 pthread_mutex_unlock(GetWpaObjMutex());
1027 return WIFI_HAL_OPT_FAILED;
1028 }
1029 pthread_mutex_unlock(GetWpaObjMutex());
1030 LOGI("HdiWpaStaGetCountryCode success.");
1031 return WIFI_HAL_OPT_OK;
1032 }
1033
HdiWpaStaSetSuspendMode(int mode,const char * ifaceName)1034 WifiErrorNo HdiWpaStaSetSuspendMode(int mode, const char *ifaceName)
1035 {
1036 if (ifaceName == NULL) {
1037 LOGE("HdiWpaStaSetSuspendMode ifaceName is null");
1038 return WIFI_HAL_OPT_FAILED;
1039 }
1040 LOGI("HdiWpaStaSetSuspendMode enter, mode:%{public}d, ifaceName = %{public}s", mode, ifaceName);
1041 pthread_mutex_lock(GetWpaObjMutex());
1042 struct IWpaInterface *wpaObj = GetWpaInterface();
1043 if (wpaObj == NULL) {
1044 LOGE("HdiWpaStaSetSuspendMode: wpaObj is NULL");
1045 pthread_mutex_unlock(GetWpaObjMutex());
1046 return WIFI_HAL_OPT_FAILED;
1047 }
1048
1049 int32_t result = wpaObj->SetSuspendMode(wpaObj, ifaceName, mode);
1050 if (result != HDF_SUCCESS) {
1051 LOGE("HdiWpaStaSetSuspendMode: SetSuspendMode failed result:%{public}d", result);
1052 pthread_mutex_unlock(GetWpaObjMutex());
1053 return WIFI_HAL_OPT_FAILED;
1054 }
1055 pthread_mutex_unlock(GetWpaObjMutex());
1056 LOGI("HdiWpaStaSetSuspendMode success.");
1057 return WIFI_HAL_OPT_OK;
1058 }
1059
HdiWpaListNetworks(struct HdiWifiWpaNetworkInfo * networkList,uint32_t * size,const char * ifaceName)1060 WifiErrorNo HdiWpaListNetworks(struct HdiWifiWpaNetworkInfo *networkList, uint32_t *size, const char *ifaceName)
1061 {
1062 if (ifaceName == NULL) {
1063 LOGE("HdiWpaListNetworks ifaceName is null");
1064 return WIFI_HAL_OPT_FAILED;
1065 }
1066 LOGI("HdiWpaListNetworks enter! ifaceName = %{public}s", ifaceName);
1067 pthread_mutex_lock(GetWpaObjMutex());
1068 struct IWpaInterface *wpaObj = GetWpaInterface();
1069 if (wpaObj == NULL) {
1070 LOGE("HdiWpaListNetworks: wpaObj is NULL");
1071 pthread_mutex_unlock(GetWpaObjMutex());
1072 return WIFI_HAL_OPT_FAILED;
1073 }
1074
1075 int32_t result = wpaObj->ListNetworks(wpaObj, ifaceName, networkList, size);
1076 if (result != HDF_SUCCESS) {
1077 LOGE("HdiWpaListNetworks: ListNetworks failed result:%{public}d", result);
1078 pthread_mutex_unlock(GetWpaObjMutex());
1079 return WIFI_HAL_OPT_FAILED;
1080 }
1081 pthread_mutex_unlock(GetWpaObjMutex());
1082 LOGI("HdiWpaListNetworks success.");
1083 return WIFI_HAL_OPT_OK;
1084 }
1085
HdiWpaGetNetwork(int32_t networkId,const char * param,char * value,uint32_t valueLen,const char * ifaceName)1086 WifiErrorNo HdiWpaGetNetwork(
1087 int32_t networkId, const char* param, char* value, uint32_t valueLen, const char *ifaceName)
1088 {
1089 if (ifaceName == NULL) {
1090 LOGE("HdiWpaGetNetwork ifaceName is null");
1091 return WIFI_HAL_OPT_FAILED;
1092 }
1093 LOGI("HdiWpaGetNetwork enter,networkId:%{public}d, ifaceName = %{public}s", networkId, ifaceName);
1094 pthread_mutex_lock(GetWpaObjMutex());
1095 struct IWpaInterface *wpaObj = GetWpaInterface();
1096 if (wpaObj == NULL) {
1097 LOGE("HdiWpaGetNetwork: wpaObj is NULL");
1098 pthread_mutex_unlock(GetWpaObjMutex());
1099 return WIFI_HAL_OPT_FAILED;
1100 }
1101
1102 int32_t result = wpaObj->GetNetwork(wpaObj, ifaceName, networkId, param, value, valueLen);
1103 if (result != HDF_SUCCESS) {
1104 LOGE("HdiWpaGetNetwork: GetNetwork failed result:%{public}d", result);
1105 pthread_mutex_unlock(GetWpaObjMutex());
1106 return WIFI_HAL_OPT_FAILED;
1107 }
1108 pthread_mutex_unlock(GetWpaObjMutex());
1109 LOGI("HdiWpaGetNetwork success.");
1110 return WIFI_HAL_OPT_OK;
1111 }
1112
HdiWpaStaSetShellCmd(const char * ifName,const char * cmd)1113 WifiErrorNo HdiWpaStaSetShellCmd(const char *ifName, const char *cmd)
1114 {
1115 pthread_mutex_lock(GetWpaObjMutex());
1116 struct IWpaInterface *wpaObj = GetWpaInterface();
1117 if (wpaObj == NULL) {
1118 LOGE("HdiWpaStaSetShellCmd: wpaObj is NULL");
1119 pthread_mutex_unlock(GetWpaObjMutex());
1120 return WIFI_HAL_OPT_FAILED;
1121 }
1122
1123 int32_t result = wpaObj->StaShellCmd(wpaObj, ifName, cmd);
1124 if (result != HDF_SUCCESS) {
1125 LOGE("HdiWpaStaSetShellCmd: failed to StaShellCmd, result:%{public}d", result);
1126 pthread_mutex_unlock(GetWpaObjMutex());
1127 return WIFI_HAL_OPT_FAILED;
1128 }
1129 pthread_mutex_unlock(GetWpaObjMutex());
1130 LOGI("HdiWpaStaSetShellCmd success.");
1131 return WIFI_HAL_OPT_OK;
1132 }
1133
HdiWpaStaGetPskPassphrase(const char * ifName,char * psk,uint32_t pskLen)1134 WifiErrorNo HdiWpaStaGetPskPassphrase(const char *ifName, char *psk, uint32_t pskLen)
1135 {
1136 pthread_mutex_lock(GetWpaObjMutex());
1137 struct IWpaInterface *wpaObj = GetWpaInterface();
1138 if (wpaObj == NULL) {
1139 LOGE("GetPskPassphrase: wpaObj is NULL");
1140 pthread_mutex_unlock(GetWpaObjMutex());
1141 return WIFI_HAL_OPT_FAILED;
1142 }
1143
1144 int32_t result = wpaObj->GetPskPassphrase(wpaObj, ifName, psk, pskLen);
1145 if (result != HDF_SUCCESS) {
1146 LOGE("GetPskPassphrase: failed to StaShellCmd, result:%{public}d", result);
1147 pthread_mutex_unlock(GetWpaObjMutex());
1148 return WIFI_HAL_OPT_FAILED;
1149 }
1150 pthread_mutex_unlock(GetWpaObjMutex());
1151 LOGI("GetPskPassphrase success.");
1152 return WIFI_HAL_OPT_OK;
1153 }
1154
HdiSetNativeProcessCallback(void (* callback)(int))1155 WifiErrorNo HdiSetNativeProcessCallback(void (*callback)(int))
1156 {
1157 LOGI("%{public}s enter", __func__);
1158 return SetNativeProcessCallback(callback);
1159 }
1160
1161 #endif