1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "wifi_idl_inner_interface.h"
16 #include "wifi_chip_hal_interface.h"
17 #include "wifi_ap_hal_interface.h"
18 #include "wifi_sta_hal_interface.h"
19 #include "wifi_supplicant_hal_interface.h"
20 #include "wifi_p2p_hal_interface.h"
21 #include "wifi_global_func.h"
22 #include "wifi_config_center.h"
23 
GetChipRpcClient(void)24 RpcClient *GetChipRpcClient(void)
25 {
26     return OHOS::Wifi::WifiChipHalInterface::GetInstance().mIdlClient->pRpcClient;
27 }
28 
GetApRpcClient(void)29 RpcClient *GetApRpcClient(void)
30 {
31     return OHOS::Wifi::WifiApHalInterface::GetInstance().mIdlClient->pRpcClient;
32 }
33 
OnApStaJoinOrLeave(const CStationInfo * info,int id)34 void OnApStaJoinOrLeave(const CStationInfo *info, int id)
35 {
36     if (info == nullptr) {
37         return;
38     }
39     const OHOS::Wifi::IWifiApMonitorEventCallback &cbk =
40         OHOS::Wifi::WifiApHalInterface::GetInstance().GetApCallbackInst(id);
41     if (cbk.onStaJoinOrLeave) {
42         OHOS::Wifi::WifiHalApConnectionNofify cbInfo;
43         cbInfo.type = info->type;
44         cbInfo.mac = info->mac;
45         cbk.onStaJoinOrLeave(cbInfo);
46     }
47 }
48 
OnApEnableOrDisable(int status,int id)49 void OnApEnableOrDisable(int status, int id)
50 {
51     const OHOS::Wifi::IWifiApMonitorEventCallback &cbk =
52         OHOS::Wifi::WifiApHalInterface::GetInstance().GetApCallbackInst(id);
53     if (cbk.onApEnableOrDisable) {
54         cbk.onApEnableOrDisable(status);
55     }
56 }
57 
GetStaRpcClient(void)58 RpcClient *GetStaRpcClient(void)
59 {
60     return OHOS::Wifi::WifiStaHalInterface::GetInstance().mIdlClient->pRpcClient;
61 }
62 
OnConnectChanged(int status,int networkId,const char * mac)63 void OnConnectChanged(int status, int networkId, const char *mac)
64 {
65     if (mac == nullptr) {
66         return;
67     }
68     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
69         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
70     if (cbk.onConnectChanged) {
71         cbk.onConnectChanged(status, networkId, mac);
72     }
73 }
74 
OnDisConnectReasonCallback(int reason,const char * bssid)75 void OnDisConnectReasonCallback(int reason, const char *bssid)
76 {
77     if (bssid == nullptr) {
78         return;
79     }
80     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
81         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
82     if (cbk.onReportDisConnectReason) {
83         cbk.onReportDisConnectReason(reason, bssid);
84     }
85 }
86 
OnBssidChanged(const char * reason,const char * bssid)87 void OnBssidChanged(const char *reason, const char *bssid)
88 {
89     if (reason == nullptr || bssid == nullptr) {
90         return;
91     }
92     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
93         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
94     if (cbk.onBssidChanged) {
95         cbk.onBssidChanged(reason, bssid);
96     }
97 }
98 
OnWpaStateChanged(int status)99 void OnWpaStateChanged(int status)
100 {
101     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
102         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
103     if (cbk.onWpaStateChanged) {
104         cbk.onWpaStateChanged(status);
105     }
106 }
107 
OnWpaSsidWrongKey()108 void OnWpaSsidWrongKey()
109 {
110     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
111         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
112     if (cbk.onWpaSsidWrongKey) {
113         cbk.onWpaSsidWrongKey();
114     }
115 }
116 
OnWpaConnectionFull(int status)117 void OnWpaConnectionFull(int status)
118 {
119     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
120         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
121     if (cbk.onWpaConnectionFull) {
122         cbk.onWpaConnectionFull(status);
123     }
124 }
125 
OnWpaConnectionReject(int status)126 void OnWpaConnectionReject(int status)
127 {
128     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
129         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
130     if (cbk.onWpaConnectionReject) {
131         cbk.onWpaConnectionReject(status);
132     }
133 }
134 
OnWpaStaNotifyCallBack(const char * notifyParam)135 void OnWpaStaNotifyCallBack(const char *notifyParam)
136 {
137     if (notifyParam == nullptr) {
138         return;
139     }
140     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
141         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
142     if (cbk.onEventStaNotify) {
143         cbk.onEventStaNotify(notifyParam);
144     }
145 }
146 
OnWpsOverlap(int status)147 void OnWpsOverlap(int status)
148 {
149     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
150         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
151     if (cbk.onWpsOverlap) {
152         cbk.onWpsOverlap(status);
153     }
154 }
155 
OnWpsTimeOut(int status)156 void OnWpsTimeOut(int status)
157 {
158     const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst(
159         OHOS::Wifi::WifiConfigCenter::GetInstance().GetStaIfaceName(INSTID_WLAN0));
160     if (cbk.onWpsTimeOut) {
161         cbk.onWpsTimeOut(status);
162     }
163 }
164 
GetSupplicantRpcClient(void)165 RpcClient *GetSupplicantRpcClient(void)
166 {
167     return OHOS::Wifi::WifiSupplicantHalInterface::GetInstance().mIdlClient->pRpcClient;
168 }
169 
OnScanNotify(int status)170 void OnScanNotify(int status)
171 {
172     const OHOS::Wifi::SupplicantEventCallback &cbk =
173         OHOS::Wifi::WifiSupplicantHalInterface::GetInstance().GetCallbackInst();
174     if (cbk.onScanNotify) {
175         cbk.onScanNotify(status);
176     }
177 }
178 
GetP2pRpcClient(void)179 RpcClient *GetP2pRpcClient(void)
180 {
181     return OHOS::Wifi::WifiP2PHalInterface::GetInstance().mIdlClient->pRpcClient;
182 }
183 
OnP2pConnectSupplicant(int state)184 void OnP2pConnectSupplicant(int state)
185 {
186     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
187     if (cbk.onConnectSupplicant) {
188         cbk.onConnectSupplicant(state);
189     }
190 }
191 
OnP2pDeviceFound(const P2pDeviceInfo * info)192 void OnP2pDeviceFound(const P2pDeviceInfo *info)
193 {
194     if (info == nullptr) {
195         return;
196     }
197     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
198     if (cbk.onDeviceFound) {
199         OHOS::Wifi::HalP2pDeviceFound cbInfo;
200         cbInfo.srcAddress = info->srcAddress;
201         cbInfo.p2pDeviceAddress = info->p2pDeviceAddress;
202         cbInfo.primaryDeviceType = info->primaryDeviceType;
203         cbInfo.deviceName = info->deviceName;
204         cbInfo.configMethods = info->configMethods;
205         cbInfo.deviceCapabilities = info->deviceCapabilities;
206         cbInfo.groupCapabilities = info->groupCapabilities;
207         const int wfdLength = 14; /* wfd info type: 0x000000000000 */
208         const int wfdStartPos = 2; /* skip 0x */
209         if (info->wfdLength >= wfdLength && strlen(info->wfdDeviceInfo) >= wfdLength) {
210             OHOS::Wifi::HexStringToVec(info->wfdDeviceInfo + wfdStartPos, cbInfo.wfdDeviceInfo);
211         }
212         cbk.onDeviceFound(cbInfo);
213     }
214 }
215 
OnP2pDeviceLost(const char * p2pDeviceAddress)216 void OnP2pDeviceLost(const char *p2pDeviceAddress)
217 {
218     if (p2pDeviceAddress == nullptr) {
219         return;
220     }
221     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
222     if (cbk.onDeviceLost) {
223         cbk.onDeviceLost(p2pDeviceAddress);
224     }
225 }
226 
OnP2pGoNegotiationRequest(const char * srcAddress,short passwordId)227 void OnP2pGoNegotiationRequest(const char *srcAddress, short passwordId)
228 {
229     if (srcAddress == nullptr) {
230         return;
231     }
232     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
233     if (cbk.onGoNegotiationRequest) {
234         cbk.onGoNegotiationRequest(srcAddress, passwordId);
235     }
236 }
237 
OnP2pGoNegotiationSuccess(void)238 void OnP2pGoNegotiationSuccess(void)
239 {
240     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
241     if (cbk.onGoNegotiationSuccess) {
242         cbk.onGoNegotiationSuccess();
243     }
244 }
245 
OnP2pGoNegotiationFailure(int status)246 void OnP2pGoNegotiationFailure(int status)
247 {
248     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
249     if (cbk.onGoNegotiationFailure) {
250         cbk.onGoNegotiationFailure(status);
251     }
252 }
253 
OnP2pInvitationResult(const char * bssid,int status)254 void OnP2pInvitationResult(const char *bssid, int status)
255 {
256     if (bssid == nullptr) {
257         return;
258     }
259     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
260     if (cbk.onInvitationResult) {
261         cbk.onInvitationResult(bssid, status);
262     }
263 }
264 
OnP2pInvitationReceived(const P2pInvitationInfo * info)265 void OnP2pInvitationReceived(const P2pInvitationInfo *info)
266 {
267     if (info == nullptr) {
268         return;
269     }
270     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
271     if (cbk.onInvitationReceived) {
272         OHOS::Wifi::HalP2pInvitationInfo cbInfo;
273         cbInfo.type = info->type;
274         cbInfo.persistentNetworkId = info->persistentNetworkId;
275         cbInfo.operatingFrequency = info->operatingFrequency;
276         cbInfo.srcAddress = info->srcAddress;
277         cbInfo.goDeviceAddress = info->goDeviceAddress;
278         cbInfo.bssid = info->bssid;
279         cbk.onInvitationReceived(cbInfo);
280     }
281 }
282 
OnP2pGroupFormationSuccess(void)283 void OnP2pGroupFormationSuccess(void)
284 {
285     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
286     if (cbk.onGroupFormationSuccess) {
287         cbk.onGroupFormationSuccess();
288     }
289 }
290 
OnP2pGroupFormationFailure(const char * failureReason)291 void OnP2pGroupFormationFailure(const char *failureReason)
292 {
293     if (failureReason == nullptr) {
294         return;
295     }
296     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
297     if (cbk.onGroupFormationFailure) {
298         cbk.onGroupFormationFailure(failureReason);
299     }
300 }
301 
OnP2pGroupStarted(const P2pGroupInfo * group)302 void OnP2pGroupStarted(const P2pGroupInfo *group)
303 {
304     if (group == nullptr) {
305         return;
306     }
307     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
308     if (cbk.onGroupStarted) {
309         OHOS::Wifi::HalP2pGroupInfo cbInfo;
310         cbInfo.isGo = group->isGo;
311         cbInfo.isPersistent = group->isPersistent;
312         cbInfo.frequency = group->frequency;
313         cbInfo.groupName = group->groupName;
314         cbInfo.ssid = group->ssid;
315         cbInfo.psk = group->psk;
316         cbInfo.passphrase = group->passphrase;
317         cbInfo.goDeviceAddress = group->goDeviceAddress;
318         cbk.onGroupStarted(cbInfo);
319     }
320 }
321 
OnP2pGroupRemoved(const char * groupIfName,int isGo)322 void OnP2pGroupRemoved(const char *groupIfName, int isGo)
323 {
324     if (groupIfName == nullptr) {
325         return;
326     }
327     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
328     if (cbk.onGroupRemoved) {
329         cbk.onGroupRemoved(groupIfName, (isGo == 1));
330     }
331 }
332 
OnP2pProvisionDiscoveryPbcRequest(const char * p2pDeviceAddress)333 void OnP2pProvisionDiscoveryPbcRequest(const char *p2pDeviceAddress)
334 {
335     if (p2pDeviceAddress == nullptr) {
336         return;
337     }
338     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
339     if (cbk.onProvisionDiscoveryPbcRequest) {
340         cbk.onProvisionDiscoveryPbcRequest(p2pDeviceAddress);
341     }
342 }
343 
OnP2pProvisionDiscoveryPbcResponse(const char * p2pDeviceAddress)344 void OnP2pProvisionDiscoveryPbcResponse(const char *p2pDeviceAddress)
345 {
346     if (p2pDeviceAddress == nullptr) {
347         return;
348     }
349     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
350     if (cbk.onProvisionDiscoveryPbcResponse) {
351         cbk.onProvisionDiscoveryPbcResponse(p2pDeviceAddress);
352     }
353 }
354 
OnP2pProvisionDiscoveryEnterPin(const char * p2pDeviceAddress)355 void OnP2pProvisionDiscoveryEnterPin(const char *p2pDeviceAddress)
356 {
357     if (p2pDeviceAddress == nullptr) {
358         return;
359     }
360     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
361     if (cbk.onProvisionDiscoveryEnterPin) {
362         cbk.onProvisionDiscoveryEnterPin(p2pDeviceAddress);
363     }
364 }
365 
OnP2pProvisionDiscoveryShowPin(const char * p2pDeviceAddress,const char * generatedPin)366 void OnP2pProvisionDiscoveryShowPin(const char *p2pDeviceAddress, const char *generatedPin)
367 {
368     if (p2pDeviceAddress == nullptr || generatedPin == nullptr) {
369         return;
370     }
371     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
372     if (cbk.onProvisionDiscoveryShowPin) {
373         cbk.onProvisionDiscoveryShowPin(p2pDeviceAddress, generatedPin);
374     }
375 }
376 
OnP2pProvisionDiscoveryFailure(void)377 void OnP2pProvisionDiscoveryFailure(void)
378 {
379     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
380     if (cbk.onProvisionDiscoveryFailure) {
381         cbk.onProvisionDiscoveryFailure();
382     }
383 }
384 
OnP2pFindStopped(void)385 void OnP2pFindStopped(void)
386 {
387     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
388     if (cbk.onFindStopped) {
389         cbk.onFindStopped();
390     }
391 }
392 
OnP2pServiceDiscoveryResponse(const char * srcAddress,short updateIndicator,const unsigned char * tlvs,size_t tlvsLength)393 void OnP2pServiceDiscoveryResponse(
394     const char *srcAddress, short updateIndicator, const unsigned char *tlvs, size_t tlvsLength)
395 {
396     if (srcAddress == nullptr) {
397         return;
398     }
399     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
400     if (cbk.onServiceDiscoveryResponse) {
401         std::vector<unsigned char> tlvList;
402         if (tlvs != nullptr) {
403             OHOS::Wifi::Char2Vec(tlvs, tlvsLength, tlvList);
404         }
405         cbk.onServiceDiscoveryResponse(srcAddress, updateIndicator, tlvList);
406     }
407 }
408 
OnP2pStaDeauthorized(const char * p2pDeviceAddress)409 void OnP2pStaDeauthorized(const char *p2pDeviceAddress)
410 {
411     if (p2pDeviceAddress == nullptr) {
412         return;
413     }
414     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
415     if (cbk.onStaDeauthorized) {
416         cbk.onStaDeauthorized(p2pDeviceAddress);
417     }
418 }
419 
OnP2pStaAuthorized(const char * p2pDeviceAddress,const char * p2pGroupAddress)420 void OnP2pStaAuthorized(const char *p2pDeviceAddress, const char *p2pGroupAddress)
421 {
422     if (p2pDeviceAddress == nullptr) {
423         return;
424     }
425     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
426     if (cbk.onStaAuthorized) {
427         cbk.onStaAuthorized(p2pDeviceAddress, p2pGroupAddress);
428     }
429 }
430 
OnP2pConnectSupplicantFailed(void)431 void OnP2pConnectSupplicantFailed(void)
432 {
433     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
434     if (cbk.connectSupplicantFailed) {
435         cbk.connectSupplicantFailed();
436     }
437 }
438 
OnP2pServDiscReq(const P2pServDiscReqInfo * info)439 void OnP2pServDiscReq(const P2pServDiscReqInfo *info)
440 {
441     if (info == nullptr) {
442         return;
443     }
444     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
445     if (cbk.onP2pServDiscReq) {
446         OHOS::Wifi::HalP2pServDiscReqInfo cbInfo;
447         cbInfo.freq = info->freq;
448         cbInfo.dialogToken = info->dialogToken;
449         cbInfo.updateIndic = info->updateIndic;
450         cbInfo.mac = info->mac;
451         if (info->tlvsLength > 0 && info->tlvs != nullptr) {
452             OHOS::Wifi::Char2Vec(info->tlvs, info->tlvsLength, cbInfo.tlvList);
453         }
454         cbk.onP2pServDiscReq(cbInfo);
455     }
456 }
457 
OnP2pIfaceCreated(const char * ifName,int isGo)458 void OnP2pIfaceCreated(const char *ifName, int isGo)
459 {
460     if (ifName == nullptr) {
461         return;
462     }
463     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
464     if (cbk.onP2pIfaceCreated) {
465         cbk.onP2pIfaceCreated(ifName, isGo);
466     }
467 }
468 
OnP2pConnectFailed(const char * bssid,int reason)469 void OnP2pConnectFailed(const char *bssid, int reason)
470 {
471     if (bssid == nullptr) {
472         return;
473     }
474     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
475     if (cbk.onP2pConnectFailed) {
476         cbk.onP2pConnectFailed(bssid, reason);
477     }
478 }
479 
OnP2pChannelSwitch(int freq)480 void OnP2pChannelSwitch(int freq)
481 {
482     const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
483     if (cbk.onP2pChannelSwitch) {
484         cbk.onP2pChannelSwitch(freq);
485     }
486 }