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