• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_hal_callback.h"
17 #include "wifi_log.h"
18 #include "wifi_hal_crpc_server.h"
19 #include "wifi_hal_define.h"
20 #include "wifi_hal_common_func.h"
21 
22 #undef LOG_TAG
23 #define LOG_TAG "WifiHalCallback"
24 
EmitEventCallbackMsg(WifiHalEventCallbackMsg * pCbkMsg,WifiHalEvent event)25 static void EmitEventCallbackMsg(WifiHalEventCallbackMsg *pCbkMsg, WifiHalEvent event)
26 {
27     if (pCbkMsg == NULL) {
28         return;
29     }
30     RpcServer *server = GetRpcServer();
31     if (server == NULL) {
32         LOGE("Rpc server not exists!");
33         free(pCbkMsg);
34         return;
35     }
36     if (PushBackCallbackMsg(event, pCbkMsg) != 0) {
37         free(pCbkMsg);
38         return;
39     }
40     if (EmitEvent(server, event) < 0) {
41         PopBackCallbackMsg(event);
42         free(pCbkMsg);
43     }
44     return;
45 }
46 
WifiHalCbNotifyScanEnd(int status)47 void WifiHalCbNotifyScanEnd(int status)
48 {
49     LOGD("Get Scan status: %{public}d, and begin push notify message", status);
50     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
51     if (pCbkMsg == NULL) {
52         LOGE("create callback message failed!");
53         return;
54     }
55     pCbkMsg->msg.scanStatus = status;
56     EmitEventCallbackMsg(pCbkMsg, WIFI_SCAN_INFO_NOTIFY_EVENT);
57     return;
58 }
59 
WifiHalCbNotifyConnectChanged(int status,int networkId,const char * pos)60 void WifiHalCbNotifyConnectChanged(int status, int networkId, const char *pos)
61 {
62     if (pos == NULL) {
63         LOGI("Get connect state changed, pos is NULL");
64         return;
65     }
66     LOGD("Get connect state changed, state: %{public}d, networkid = %{public}d", status, networkId);
67     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
68     if (pCbkMsg == NULL) {
69         LOGE("create callback message failed!");
70         return;
71     }
72     pCbkMsg->msg.connMsg.status = status;
73     pCbkMsg->msg.connMsg.networkId = networkId;
74     StrSafeCopy(pCbkMsg->msg.connMsg.bssid, WIFI_MAC_LENGTH + 1, pos);
75     EmitEventCallbackMsg(pCbkMsg, WIFI_CONNECT_CHANGED_NOTIFY_EVENT);
76     return;
77 }
78 
WifiHalCbNotifyWpaStateChange(int status)79 void WifiHalCbNotifyWpaStateChange(int status)
80 {
81     LOGD("wpa state changed, state: %{public}d, and begin push notify message", status);
82     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
83     if (pCbkMsg == NULL) {
84         LOGE("create callback message failed!");
85         return;
86     }
87     pCbkMsg->msg.connMsg.status = status;
88     EmitEventCallbackMsg(pCbkMsg, WIFI_WPA_STATE_EVENT);
89     return;
90 }
91 
WifiHalCbNotifyWrongKey(int status)92 void WifiHalCbNotifyWrongKey(int status)
93 {
94     LOGD("wrong key, state: %{public}d, and begin push notify message", status);
95     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
96     if (pCbkMsg == NULL) {
97         LOGE("create callback message failed!");
98         return;
99     }
100     pCbkMsg->msg.connMsg.status = status;
101     EmitEventCallbackMsg(pCbkMsg, WIFI_SSID_WRONG_KEY);
102     return;
103 }
104 
WifiHalCbNotifyConnectionFull(int status)105 void WifiHalCbNotifyConnectionFull(int status)
106 {
107     LOGD("connection is full, state: %d, and begin push notify message", status);
108     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
109     if (pCbkMsg == NULL) {
110         LOGE("create callback message failed!");
111         return;
112     }
113 
114     pCbkMsg->msg.connMsg.status = status;
115     EmitEventCallbackMsg(pCbkMsg, WIFI_CONNECTION_FULL_EVENT);
116     return;
117 }
118 
WifiHalCbNotifyConnectionReject(int status)119 void WifiHalCbNotifyConnectionReject(int status)
120 {
121     LOGD("connection is eeject, state: %d, and begin push notify message", status);
122     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
123     if (pCbkMsg == NULL) {
124         LOGE("create callback message failed!");
125         return;
126     }
127 
128     pCbkMsg->msg.connMsg.status = status;
129     EmitEventCallbackMsg(pCbkMsg, WIFI_CONNECTION_REJECT_EVENT);
130     return;
131 }
132 
WifiHalCbNotifyWpsOverlap(int event)133 void WifiHalCbNotifyWpsOverlap(int event)
134 {
135     LOGD("wps overlap, state: %{public}d, and begin push notify message", event);
136     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
137     if (pCbkMsg == NULL) {
138         LOGE("create callback message failed!");
139         return;
140     }
141     pCbkMsg->msg.connMsg.status = event;
142     EmitEventCallbackMsg(pCbkMsg, WIFI_WPS_OVERLAP);
143     return;
144 }
145 
WifiHalCbNotifyWpsTimeOut(int event)146 void WifiHalCbNotifyWpsTimeOut(int event)
147 {
148     LOGD("wps time out, state: %{public}d, and begin push notify message", event);
149     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
150     if (pCbkMsg == NULL) {
151         LOGE("create callback message failed!");
152         return;
153     }
154     pCbkMsg->msg.connMsg.status = event;
155     EmitEventCallbackMsg(pCbkMsg, WIFI_WPS_TIME_OUT);
156     return;
157 }
158 
WifiHalCbStaJoin(const char * content)159 void WifiHalCbStaJoin(const char *content)
160 {
161     if (content == NULL) {
162         LOGD("Get hostapd Sta join content is NULL");
163         return;
164     }
165     LOGD("Get hostapd Sta join");
166     WifiHalEvent event;
167     char tmpBuf[WIFI_BSSID_LENGTH] = {0};
168     if (strncmp("AP-STA-CONNECTED", content, strlen("AP-STA-CONNECTED")) == 0) {
169         event = WIFI_STA_JOIN_EVENT;
170         StrSafeCopy(tmpBuf, sizeof(tmpBuf), content + strlen("AP-STA-CONNECTED") + 1);
171     } else if (strncmp("AP-STA-DISCONNECTED", content, strlen("AP-STA-DISCONNECTED")) == 0) {
172         event = WIFI_STA_LEAVE_EVENT;
173         StrSafeCopy(tmpBuf, sizeof(tmpBuf), content + strlen("AP-STA-DISCONNECTED") + 1);
174     } else {
175         return;
176     }
177     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
178     if (pCbkMsg == NULL) {
179         LOGE("hostapd create callback message failed!");
180         return;
181     }
182     pCbkMsg->msg.ifMsg.type = event;
183     StrSafeCopy(pCbkMsg->msg.ifMsg.ifname, sizeof(pCbkMsg->msg.ifMsg.ifname), tmpBuf);
184     EmitEventCallbackMsg(pCbkMsg, event);
185     return;
186 }
187 
WifiHalCbApState(const char * content)188 void WifiHalCbApState(const char *content)
189 {
190     if (content == NULL) {
191         LOGD("Get hostapd status changed content is NULL");
192         return;
193     }
194     LOGD("Get hostapd status changed");
195     WifiHalEvent event;
196     if (strncmp(content, "AP-ENABLED", strlen("AP-ENABLED")) == 0) {
197         event = WIFI_AP_ENABLE_EVENT;
198     } else if (strncmp(content, "AP-DISABLED", strlen("AP-DISABLED")) == 0 ||
199                strncmp(content, "CTRL-EVENT-TERMINATING", strlen("CTRL-EVENT-TERMINATING")) == 0) {
200         event = WIFI_AP_DISABLE_EVENT;
201     } else {
202         return;
203     }
204     RpcServer *server = GetRpcServer();
205     if (server == NULL) {
206         LOGE("Rpc server not exists!");
207         return;
208     }
209     EmitEvent(server, event);
210     return;
211 }
212 
WifiP2pHalCbNotifyConnectSupplicant(int state)213 void WifiP2pHalCbNotifyConnectSupplicant(int state)
214 {
215     LOGD("P2p supplicant connect even : %{public}d", state);
216     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
217     if (pCbkMsg == NULL) {
218         LOGE("create callback message failed!");
219         return;
220     }
221     pCbkMsg->msg.scanStatus = state;
222     EmitEventCallbackMsg(pCbkMsg, WIFI_P2P_SUP_CONNECTION_EVENT);
223     return;
224 }
225 
P2pHalCbDeviceFound(const HidlP2pDeviceInfo * device)226 void P2pHalCbDeviceFound(const HidlP2pDeviceInfo *device)
227 {
228     if (device == NULL) {
229         return;
230     }
231     LOGD("P2p device found event deviceName: %{public}s", device->deviceName);
232     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
233     if (pCbkMsg == NULL) {
234         LOGE("create callback message failed!");
235         return;
236     }
237     pCbkMsg->msg.deviceInfo = *device;
238     EmitEventCallbackMsg(pCbkMsg, P2P_DEVICE_FOUND_EVENT);
239     return;
240 }
241 
P2pHalCbDeviceLost(const char * p2pDeviceAddress)242 void P2pHalCbDeviceLost(const char *p2pDeviceAddress)
243 {
244     if (p2pDeviceAddress == NULL) {
245         LOGI("P2p device lost event p2pDeviceAddress is NULL");
246         return;
247     }
248     LOGD("P2p device lost event p2pDeviceAddress: %{private}s", p2pDeviceAddress);
249     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
250     if (pCbkMsg == NULL) {
251         LOGE("create callback message failed!");
252         return;
253     }
254     if (strncpy_s(pCbkMsg->msg.connMsg.bssid, sizeof(pCbkMsg->msg.connMsg.bssid), p2pDeviceAddress,
255         sizeof(pCbkMsg->msg.connMsg.bssid) - 1) != EOK) {
256         free(pCbkMsg);
257         return;
258     }
259     EmitEventCallbackMsg(pCbkMsg, P2P_DEVICE_LOST_EVENT);
260     return;
261 }
262 
P2pHalCbGoNegotiationRequest(const char * srcAddress,short passwordId)263 void P2pHalCbGoNegotiationRequest(const char *srcAddress, short passwordId)
264 {
265     if (srcAddress == NULL) {
266         LOGI("P2p go negotiation request event srcAddress is NULL");
267         return;
268     }
269     LOGD("P2p go negotiation request event srcAddress: %{private}s, passwordId: %{private}d", srcAddress, passwordId);
270     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
271     if (pCbkMsg == NULL) {
272         LOGE("create callback message failed!");
273         return;
274     }
275     pCbkMsg->msg.connMsg.status = passwordId;
276     if (strncpy_s(pCbkMsg->msg.connMsg.bssid, sizeof(pCbkMsg->msg.connMsg.bssid), srcAddress,
277         sizeof(pCbkMsg->msg.connMsg.bssid) - 1) != EOK) {
278         free(pCbkMsg);
279         return;
280     }
281     EmitEventCallbackMsg(pCbkMsg, P2P_GO_NEGOTIATION_REQUEST_EVENT);
282     return;
283 }
284 
P2pHalCbGoNegotiationSuccess()285 void P2pHalCbGoNegotiationSuccess()
286 {
287     LOGD("P2p go negotiation success event");
288     RpcServer *server = GetRpcServer();
289     if (server == NULL) {
290         LOGE("Rpc server not exists!");
291         return;
292     }
293     EmitEvent(server, P2P_GO_NEGOTIATION_SUCCESS_EVENT);
294     return;
295 }
296 
P2pHalCbGoNegotiationFailure(int status)297 void P2pHalCbGoNegotiationFailure(int status)
298 {
299     LOGD("P2p go negotiation failure event status: %{public}d", status);
300     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
301     if (pCbkMsg == NULL) {
302         LOGE("create callback message failed!");
303         return;
304     }
305     pCbkMsg->msg.scanStatus = status;
306     EmitEventCallbackMsg(pCbkMsg, P2P_GO_NEGOTIATION_FAILURE_EVENT);
307     return;
308 }
309 
P2pHalCbInvitationReceived(const HidlP2pInvitationInfo * info)310 void P2pHalCbInvitationReceived(const HidlP2pInvitationInfo *info)
311 {
312     if (info == NULL) {
313         return;
314     }
315     LOGD("P2p invitation received event srcAddress: %{private}s", info->srcAddress);
316     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
317     if (pCbkMsg == NULL) {
318         LOGE("create callback message failed!");
319         return;
320     }
321     pCbkMsg->msg.invitaInfo = *info;
322     EmitEventCallbackMsg(pCbkMsg, P2P_INVITATION_RECEIVED_EVENT);
323     return;
324 }
325 
P2pHalCbInvitationResult(const char * bssid,int status)326 void P2pHalCbInvitationResult(const char *bssid, int status)
327 {
328     if (bssid == NULL) {
329         LOGI("P2p invitation result event bssid is NULL");
330         return;
331     }
332     LOGD("P2p invitation result event bssid: %{private}s, status: %{public}d", bssid, status);
333     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
334     if (pCbkMsg == NULL) {
335         LOGE("create callback message failed!");
336         return;
337     }
338     pCbkMsg->msg.invitaInfo.persistentNetworkId = status;
339     if (strncpy_s(pCbkMsg->msg.invitaInfo.bssid, sizeof(pCbkMsg->msg.invitaInfo.bssid), bssid,
340         sizeof(pCbkMsg->msg.invitaInfo.bssid) - 1) != EOK) {
341         free(pCbkMsg);
342         return;
343     }
344     EmitEventCallbackMsg(pCbkMsg, P2P_INVITATION_RESULT_EVENT);
345     return;
346 }
347 
P2pHalCbGroupFormationSuccess()348 void P2pHalCbGroupFormationSuccess()
349 {
350     LOGD("P2p group formation success event");
351     RpcServer *server = GetRpcServer();
352     if (server == NULL) {
353         LOGE("Rpc server not exists!");
354         return;
355     }
356     EmitEvent(server, P2P_GROUP_FORMATION_SUCCESS_EVENT);
357     return;
358 }
359 
P2pHalCbGroupFormationFailure(const char * reason)360 void P2pHalCbGroupFormationFailure(const char *reason)
361 {
362     if (reason == NULL) {
363         LOGI("P2p group formation failure event reason is NULL");
364         return;
365     }
366     LOGD("P2p group formation failure event reason: %{public}s", reason);
367     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
368     if (pCbkMsg == NULL) {
369         LOGE("create callback message failed!");
370         return;
371     }
372     if (strncpy_s(pCbkMsg->msg.invitaInfo.bssid, sizeof(pCbkMsg->msg.invitaInfo.bssid), reason,
373         sizeof(pCbkMsg->msg.invitaInfo.bssid) - 1) != EOK) {
374         free(pCbkMsg);
375         return;
376     }
377     EmitEventCallbackMsg(pCbkMsg, P2P_GROUP_FORMATION_FAILURE_EVENT);
378     return;
379 }
380 
P2pHalCbGroupStarted(const HidlP2pGroupInfo * info)381 void P2pHalCbGroupStarted(const HidlP2pGroupInfo *info)
382 {
383     if (info == NULL) {
384         return;
385     }
386     LOGD("P2p group started event groupIfName: %{public}s", info->groupIfName);
387     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
388     if (pCbkMsg == NULL) {
389         LOGE("create callback message failed!");
390         return;
391     }
392     pCbkMsg->msg.groupInfo = *info;
393     EmitEventCallbackMsg(pCbkMsg, P2P_GROUP_STARTED_EVENT);
394     return;
395 }
396 
P2pHalCbGroupRemoved(const char * groupIfName,int isGo)397 void P2pHalCbGroupRemoved(const char *groupIfName, int isGo)
398 {
399     if (groupIfName == NULL) {
400         LOGI("P2p group removed event groupIfName is NULL");
401         return;
402     }
403     LOGD("P2p group removed event groupIfName: %{public}s, isGo: %{public}d", groupIfName, isGo);
404     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
405     if (pCbkMsg == NULL) {
406         LOGE("create callback message failed!");
407         return;
408     }
409     pCbkMsg->msg.groupInfo.isGo = isGo;
410     if (strncpy_s(pCbkMsg->msg.groupInfo.groupIfName, sizeof(pCbkMsg->msg.groupInfo.groupIfName), groupIfName,
411         sizeof(pCbkMsg->msg.groupInfo.groupIfName) - 1) != EOK) {
412         free(pCbkMsg);
413         return;
414     }
415     EmitEventCallbackMsg(pCbkMsg, P2P_GROUP_REMOVED_EVENT);
416     return;
417 }
418 
P2pHalCbProvisionDiscoveryPbcRequest(const char * address)419 void P2pHalCbProvisionDiscoveryPbcRequest(const char *address)
420 {
421     if (address == NULL) {
422         LOGI("P2p provision discovery pbc request event address is NULL");
423         return;
424     }
425     LOGD("P2p provision discovery pbc request event address: %{private}s", address);
426     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
427     if (pCbkMsg == NULL) {
428         LOGE("create callback message failed!");
429         return;
430     }
431     if (strncpy_s(pCbkMsg->msg.deviceInfo.srcAddress, sizeof(pCbkMsg->msg.deviceInfo.srcAddress), address,
432         sizeof(pCbkMsg->msg.deviceInfo.srcAddress) - 1) != EOK) {
433         free(pCbkMsg);
434         return;
435     }
436     EmitEventCallbackMsg(pCbkMsg, P2P_PROV_DISC_PBC_REQ_EVENT);
437     return;
438 }
439 
P2pHalCbProvisionDiscoveryPbcResponse(const char * address)440 void P2pHalCbProvisionDiscoveryPbcResponse(const char *address)
441 {
442     if (address == NULL) {
443         LOGI("P2p provision discovery pbc response event address is NULL");
444         return;
445     }
446     LOGD("P2p provision discovery pbc response event address: %{private}s", address);
447     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
448     if (pCbkMsg == NULL) {
449         LOGE("create callback message failed!");
450         return;
451     }
452     if (strncpy_s(pCbkMsg->msg.deviceInfo.srcAddress, sizeof(pCbkMsg->msg.deviceInfo.srcAddress), address,
453         sizeof(pCbkMsg->msg.deviceInfo.srcAddress) - 1) != EOK) {
454         free(pCbkMsg);
455         return;
456     }
457     EmitEventCallbackMsg(pCbkMsg, P2P_PROV_DISC_PBC_RSP_EVENT);
458     return;
459 }
460 
P2pHalCbProvisionDiscoveryEnterPin(const char * address)461 void P2pHalCbProvisionDiscoveryEnterPin(const char *address)
462 {
463     if (address == NULL) {
464         LOGI("P2p provision discovery enter pin event address is NULL");
465         return;
466     }
467     LOGD("P2p provision discovery enter pin event address: %{private}s", address);
468     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
469     if (pCbkMsg == NULL) {
470         LOGE("create callback message failed!");
471         return;
472     }
473     if (strncpy_s(pCbkMsg->msg.deviceInfo.srcAddress, sizeof(pCbkMsg->msg.deviceInfo.srcAddress), address,
474         sizeof(pCbkMsg->msg.deviceInfo.srcAddress) - 1) != EOK) {
475         free(pCbkMsg);
476         return;
477     }
478     EmitEventCallbackMsg(pCbkMsg, P2P_PROV_DISC_ENTER_PIN_EVENT);
479     return;
480 }
481 
P2pHalCbProvisionDiscoveryShowPin(const char * address,const char * pin)482 void P2pHalCbProvisionDiscoveryShowPin(const char *address, const char *pin)
483 {
484     if (address == NULL || pin == NULL) {
485         LOGI("P2p provision discovery show pin event address or pin is NULL");
486         return;
487     }
488     LOGD("P2p provision discovery show pin event address: %{private}s, pin: %{private}s", address, pin);
489     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
490     if (pCbkMsg == NULL) {
491         LOGE("create callback message failed!");
492         return;
493     }
494     if (strncpy_s(pCbkMsg->msg.deviceInfo.srcAddress, sizeof(pCbkMsg->msg.deviceInfo.srcAddress), address,
495         sizeof(pCbkMsg->msg.deviceInfo.srcAddress) - 1) != EOK ||
496         strncpy_s(pCbkMsg->msg.deviceInfo.deviceName, sizeof(pCbkMsg->msg.deviceInfo.deviceName), pin,
497         sizeof(pCbkMsg->msg.deviceInfo.deviceName) - 1) != EOK) {
498         free(pCbkMsg);
499         return;
500     }
501     EmitEventCallbackMsg(pCbkMsg, P2P_PROV_DISC_SHOW_PIN_EVENT);
502     return;
503 }
504 
P2pHalCbProvisionDiscoveryFailure()505 void P2pHalCbProvisionDiscoveryFailure()
506 {
507     LOGD("P2p provision discovery failure event");
508     RpcServer *server = GetRpcServer();
509     if (server == NULL) {
510         LOGE("Rpc server not exists!");
511         return;
512     }
513     EmitEvent(server, P2P_PROV_DISC_FAILURE_EVENT);
514     return;
515 }
516 
P2pHalCbFindStopped()517 void P2pHalCbFindStopped()
518 {
519     LOGD("P2p find stoped event");
520     RpcServer *server = GetRpcServer();
521     if (server == NULL) {
522         LOGE("Rpc server not exists!");
523         return;
524     }
525     EmitEvent(server, P2P_FIND_STOPPED_EVENT);
526     return;
527 }
528 
P2pHalCbServiceDiscoveryResponse(const HidlP2pServDiscRespInfo * info)529 void P2pHalCbServiceDiscoveryResponse(const HidlP2pServDiscRespInfo *info)
530 {
531     if (info == NULL) {
532         return;
533     }
534     LOGD("P2p service discovery response event srcAddress: %{private}s", info->srcAddress);
535     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
536     if (pCbkMsg == NULL) {
537         LOGE("create callback message failed!");
538         return;
539     }
540     pCbkMsg->msg.serverInfo = *info;
541     if (info->tlvs != NULL) { // deep copy
542         unsigned len = strlen(info->tlvs) + 1;
543         if (len == 0) {
544             free(pCbkMsg);
545             return;
546         }
547         pCbkMsg->msg.serverInfo.tlvs = (char *)calloc(len, sizeof(char));
548         if (pCbkMsg->msg.serverInfo.tlvs == NULL ||
549             strncpy_s(pCbkMsg->msg.serverInfo.tlvs, len, info->tlvs, len - 1) != EOK) {
550             free(pCbkMsg->msg.serverInfo.tlvs);
551             free(pCbkMsg);
552             return;
553         }
554     }
555     EmitEventCallbackMsg(pCbkMsg, P2P_SERV_DISC_RESP_EVENT);
556     return;
557 }
558 
P2pHalCbStaConnectState(const char * p2pDeviceAddress,int state)559 void P2pHalCbStaConnectState(const char *p2pDeviceAddress, int state)
560 {
561     if (p2pDeviceAddress == NULL) {
562         LOGI("P2p sta authorized/deauthorized event devAddress is NULL");
563         return;
564     }
565     LOGD("P2p sta authorized/deauthorized event devAddress: %{private}s", p2pDeviceAddress);
566     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
567     if (pCbkMsg == NULL) {
568         LOGE("create callback message failed!");
569         return;
570     }
571     if (strncpy_s(pCbkMsg->msg.deviceInfo.p2pDeviceAddress, sizeof(pCbkMsg->msg.deviceInfo.p2pDeviceAddress),
572         p2pDeviceAddress, sizeof(pCbkMsg->msg.deviceInfo.p2pDeviceAddress) - 1) != EOK) {
573         free(pCbkMsg);
574         return;
575     }
576     EmitEventCallbackMsg(pCbkMsg, ((state == 0) ? AP_STA_DISCONNECTED_EVENT : AP_STA_CONNECTED_EVENT));
577     return;
578 }
579 
P2pHalCbConnectSupplicantFailed()580 void P2pHalCbConnectSupplicantFailed()
581 {
582     LOGD("P2p supplicant connect Failed event");
583     RpcServer *server = GetRpcServer();
584     if (server == NULL) {
585         LOGE("Rpc server not exists!");
586         return;
587     }
588     EmitEvent(server, SUP_CONN_FAILED_EVENT);
589     return;
590 }
591 
P2pHalCbServDiscReq(const HidlP2pServDiscReqInfo * info)592 void P2pHalCbServDiscReq(const HidlP2pServDiscReqInfo *info)
593 {
594     LOGD("P2p service discovery request event");
595     if (info == NULL) {
596         return;
597     }
598     WifiHalEventCallbackMsg *pCbkMsg = (WifiHalEventCallbackMsg *)calloc(1, sizeof(WifiHalEventCallbackMsg));
599     if (pCbkMsg == NULL) {
600         LOGE("create callback message failed!");
601         return;
602     }
603     pCbkMsg->msg.serDiscReqInfo = *info;
604     if (info->tlvs != NULL) { // deep copy
605         unsigned len = strlen(info->tlvs) + 1;
606         if (len == 0) {
607             free(pCbkMsg);
608             return;
609         }
610         pCbkMsg->msg.serDiscReqInfo.tlvs = (char *)calloc(len, sizeof(char));
611         if (pCbkMsg->msg.serDiscReqInfo.tlvs == NULL ||
612             strncpy_s(pCbkMsg->msg.serDiscReqInfo.tlvs, len, info->tlvs, len - 1) != EOK) {
613             free(pCbkMsg->msg.serDiscReqInfo.tlvs);
614             free(pCbkMsg);
615             return;
616         }
617     }
618     EmitEventCallbackMsg(pCbkMsg, P2P_SERV_DISC_REQ_EVENT);
619     return;
620 }
621