blob: 78e3ea347101196bd4c124c06336109e56c1cd4c [file] [log] [blame]
Gabriel Biren57ededa2021-09-03 16:08:50 +00001/*
2 * WPA Supplicant - Aidl entry point to wpa_supplicant core
3 * Copyright (c) 2021, Google Inc. All rights reserved.
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#include <android/binder_process.h>
10#include <android/binder_manager.h>
11
12#include "aidl_manager.h"
13
14extern "C"
15{
16#include "aidl.h"
17#include "aidl_i.h"
18#include "utils/common.h"
19#include "utils/eloop.h"
20#include "utils/includes.h"
21#include "dpp.h"
22}
23
24using aidl::android::hardware::wifi::supplicant::AidlManager;
Gabriel Biren3a2ec2c2022-03-07 17:59:41 +000025using aidl::android::hardware::wifi::supplicant::AuxiliarySupplicantEventCode;
Gabriel Biren57ededa2021-09-03 16:08:50 +000026using aidl::android::hardware::wifi::supplicant::DppEventType;
27using aidl::android::hardware::wifi::supplicant::DppFailureCode;
28using aidl::android::hardware::wifi::supplicant::DppProgressCode;
29
30static void wpas_aidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code);
31static void wpas_aidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code);
32static void wpas_aidl_notify_dpp_success(struct wpa_supplicant *wpa_s, DppEventType code);
33
34void wpas_aidl_sock_handler(
35 int /* sock */, void * /* eloop_ctx */, void * /* sock_ctx */)
36{
37 ABinderProcess_handlePolledCommands();
38}
39
40struct wpas_aidl_priv *wpas_aidl_init(struct wpa_global *global)
41{
42 struct wpas_aidl_priv *priv;
43 AidlManager *aidl_manager;
44
45 priv = (wpas_aidl_priv *)os_zalloc(sizeof(*priv));
46 if (!priv)
47 return NULL;
48 priv->global = global;
49
50 wpa_printf(MSG_DEBUG, "Initing aidl control");
51
52 ABinderProcess_setupPolling(&priv->aidl_fd);
53 if (priv->aidl_fd < 0)
54 goto err;
55
56 wpa_printf(MSG_INFO, "Processing aidl events on FD %d", priv->aidl_fd);
57 // Look for read events from the aidl socket in the eloop.
58 if (eloop_register_read_sock(
59 priv->aidl_fd, wpas_aidl_sock_handler, global, priv) < 0)
60 goto err;
61
62 aidl_manager = AidlManager::getInstance();
63 if (!aidl_manager)
64 goto err;
65 if (aidl_manager->registerAidlService(global)) {
66 goto err;
67 }
68 // We may not need to store this aidl manager reference in the
69 // global data strucure because we've made it a singleton class.
70 priv->aidl_manager = (void *)aidl_manager;
71
72 return priv;
73err:
74 wpas_aidl_deinit(priv);
75 return NULL;
76}
77
78void wpas_aidl_deinit(struct wpas_aidl_priv *priv)
79{
80 if (!priv)
81 return;
82
83 wpa_printf(MSG_DEBUG, "Deiniting aidl control");
84
85 AidlManager::destroyInstance();
86 eloop_unregister_read_sock(priv->aidl_fd);
87 os_free(priv);
88}
89
90int wpas_aidl_register_interface(struct wpa_supplicant *wpa_s)
91{
92 if (!wpa_s || !wpa_s->global->aidl)
93 return 1;
94
95 wpa_printf(
96 MSG_DEBUG, "Registering interface to aidl control: %s",
97 wpa_s->ifname);
98
99 AidlManager *aidl_manager = AidlManager::getInstance();
100 if (!aidl_manager)
101 return 1;
102
103 return aidl_manager->registerInterface(wpa_s);
104}
105
106int wpas_aidl_unregister_interface(struct wpa_supplicant *wpa_s)
107{
108 if (!wpa_s || !wpa_s->global->aidl)
109 return 1;
110
111 wpa_printf(
112 MSG_DEBUG, "Deregistering interface from aidl control: %s",
113 wpa_s->ifname);
114
115 AidlManager *aidl_manager = AidlManager::getInstance();
116 if (!aidl_manager)
117 return 1;
118
119 return aidl_manager->unregisterInterface(wpa_s);
120}
121
122int wpas_aidl_register_network(
123 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
124{
125 if (!wpa_s || !wpa_s->global->aidl || !ssid)
126 return 1;
127
128 wpa_printf(
129 MSG_DEBUG, "Registering network to aidl control: %d", ssid->id);
130
131 AidlManager *aidl_manager = AidlManager::getInstance();
132 if (!aidl_manager)
133 return 1;
134
135 return aidl_manager->registerNetwork(wpa_s, ssid);
136}
137
138int wpas_aidl_unregister_network(
139 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
140{
141 if (!wpa_s || !wpa_s->global->aidl || !ssid)
142 return 1;
143
144 wpa_printf(
145 MSG_DEBUG, "Deregistering network from aidl control: %d", ssid->id);
146
147 AidlManager *aidl_manager = AidlManager::getInstance();
148 if (!aidl_manager)
149 return 1;
150
151 return aidl_manager->unregisterNetwork(wpa_s, ssid);
152}
153
154int wpas_aidl_notify_state_changed(struct wpa_supplicant *wpa_s)
155{
156 if (!wpa_s || !wpa_s->global->aidl)
157 return 1;
158
159 wpa_printf(
160 MSG_DEBUG, "Notifying state change event to aidl control: %d",
161 wpa_s->wpa_state);
162
163 AidlManager *aidl_manager = AidlManager::getInstance();
164 if (!aidl_manager)
165 return 1;
166
167 return aidl_manager->notifyStateChange(wpa_s);
168}
169
170int wpas_aidl_notify_network_request(
171 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
172 enum wpa_ctrl_req_type rtype, const char *default_txt)
173{
174 if (!wpa_s || !wpa_s->global->aidl || !ssid)
175 return 1;
176
177 wpa_printf(
178 MSG_DEBUG, "Notifying network request to aidl control: %d",
179 ssid->id);
180
181 AidlManager *aidl_manager = AidlManager::getInstance();
182 if (!aidl_manager)
183 return 1;
184
185 return aidl_manager->notifyNetworkRequest(
186 wpa_s, ssid, rtype, default_txt);
187}
188
Steven Liu850c2e02022-11-28 17:26:39 +0000189void wpas_aidl_notify_permanent_id_req_denied(
190 struct wpa_supplicant *wpa_s)
191{
192 if (!wpa_s || !wpa_s->global->aidl)
193 return;
194
195 wpa_printf(MSG_DEBUG, "Notifying permanent_id_req denied to aidl control.");
196
197 AidlManager *aidl_manager = AidlManager::getInstance();
198 if (!aidl_manager)
199 return;
200
201 return aidl_manager->notifyPermanentIdReqDenied(wpa_s);
202}
203
Gabriel Biren57ededa2021-09-03 16:08:50 +0000204void wpas_aidl_notify_anqp_query_done(
205 struct wpa_supplicant *wpa_s, const u8 *bssid, const char *result,
206 const struct wpa_bss_anqp *anqp)
207{
208 if (!wpa_s || !wpa_s->global->aidl || !bssid || !result || !anqp)
209 return;
210
211 wpa_printf(
212 MSG_DEBUG,
213 "Notifying ANQP query done to aidl control: " MACSTR "result: %s",
214 MAC2STR(bssid), result);
215
216 AidlManager *aidl_manager = AidlManager::getInstance();
217 if (!aidl_manager)
218 return;
219
220 aidl_manager->notifyAnqpQueryDone(wpa_s, bssid, result, anqp);
221}
222
223void wpas_aidl_notify_hs20_icon_query_done(
224 struct wpa_supplicant *wpa_s, const u8 *bssid, const char *file_name,
225 const u8 *image, u32 image_length)
226{
227 if (!wpa_s || !wpa_s->global->aidl || !bssid || !file_name || !image)
228 return;
229
230 wpa_printf(
231 MSG_DEBUG,
232 "Notifying HS20 icon query done to aidl control: " MACSTR
233 "file_name: %s",
234 MAC2STR(bssid), file_name);
235
236 AidlManager *aidl_manager = AidlManager::getInstance();
237 if (!aidl_manager)
238 return;
239
240 aidl_manager->notifyHs20IconQueryDone(
241 wpa_s, bssid, file_name, image, image_length);
242}
243
244void wpas_aidl_notify_hs20_rx_subscription_remediation(
245 struct wpa_supplicant *wpa_s, const char *url, u8 osu_method)
246{
247 if (!wpa_s || !wpa_s->global->aidl || !url)
248 return;
249
250 wpa_printf(
251 MSG_DEBUG,
252 "Notifying HS20 subscription remediation rx to aidl control: %s",
253 url);
254
255 AidlManager *aidl_manager = AidlManager::getInstance();
256 if (!aidl_manager)
257 return;
258
259 aidl_manager->notifyHs20RxSubscriptionRemediation(
260 wpa_s, url, osu_method);
261}
262
263void wpas_aidl_notify_hs20_rx_deauth_imminent_notice(
264 struct wpa_supplicant *wpa_s, u8 code, u16 reauth_delay, const char *url)
265{
266 if (!wpa_s || !wpa_s->global->aidl)
267 return;
268
269 wpa_printf(
270 MSG_DEBUG,
271 "Notifying HS20 deauth imminent notice rx to aidl control: %s",
272 url ? url : "<no URL>");
273
274 AidlManager *aidl_manager = AidlManager::getInstance();
275 if (!aidl_manager)
276 return;
277
278 aidl_manager->notifyHs20RxDeauthImminentNotice(
279 wpa_s, code, reauth_delay, url);
280}
281
282void wpas_aidl_notify_hs20_rx_terms_and_conditions_acceptance(
283 struct wpa_supplicant *wpa_s, const char *url)
284{
285 if (!wpa_s || !wpa_s->global->aidl || !url)
286 return;
287
288 wpa_printf(MSG_DEBUG,
289 "Notifying HS20 terms and conditions acceptance rx to aidl control: %s",
290 url);
291
292 AidlManager *aidl_manager = AidlManager::getInstance();
293 if (!aidl_manager)
294 return;
295
296 aidl_manager->notifyHs20RxTermsAndConditionsAcceptance(wpa_s, url);
297}
298
299void wpas_aidl_notify_disconnect_reason(struct wpa_supplicant *wpa_s)
300{
301 if (!wpa_s)
302 return;
303
304 wpa_printf(
305 MSG_DEBUG, "Notifying disconnect reason to aidl control: %d",
306 wpa_s->disconnect_reason);
307
308 AidlManager *aidl_manager = AidlManager::getInstance();
309 if (!aidl_manager)
310 return;
311
312 aidl_manager->notifyDisconnectReason(wpa_s);
313}
314
315void wpas_aidl_notify_assoc_reject(struct wpa_supplicant *wpa_s,
316 const u8 *bssid, u8 timed_out, const u8 *assoc_resp_ie, size_t assoc_resp_ie_len)
317{
318 if (!wpa_s)
319 return;
320
321 wpa_printf(
322 MSG_DEBUG, "Notifying assoc reject to aidl control: %d",
323 wpa_s->assoc_status_code);
324
325 AidlManager *aidl_manager = AidlManager::getInstance();
326 if (!aidl_manager)
327 return;
328
329 aidl_manager->notifyAssocReject(wpa_s, bssid, timed_out, assoc_resp_ie, assoc_resp_ie_len);
330}
331
332void wpas_aidl_notify_auth_timeout(struct wpa_supplicant *wpa_s)
333{
334 if (!wpa_s)
335 return;
336
337 wpa_printf(MSG_DEBUG, "Notifying auth timeout to aidl control");
338
339 AidlManager *aidl_manager = AidlManager::getInstance();
340 if (!aidl_manager)
341 return;
342
343 aidl_manager->notifyAuthTimeout(wpa_s);
344}
345
346void wpas_aidl_notify_bssid_changed(struct wpa_supplicant *wpa_s)
347{
348 if (!wpa_s)
349 return;
350
351 wpa_printf(MSG_DEBUG, "Notifying bssid changed to aidl control");
352
353 AidlManager *aidl_manager = AidlManager::getInstance();
354 if (!aidl_manager)
355 return;
356
357 aidl_manager->notifyBssidChanged(wpa_s);
358}
359
360void wpas_aidl_notify_wps_event_fail(
361 struct wpa_supplicant *wpa_s, uint8_t *peer_macaddr, uint16_t config_error,
362 uint16_t error_indication)
363{
364 if (!wpa_s || !peer_macaddr)
365 return;
366
367 wpa_printf(
368 MSG_DEBUG, "Notifying Wps event fail to aidl control: %d, %d",
369 config_error, error_indication);
370
371 AidlManager *aidl_manager = AidlManager::getInstance();
372 if (!aidl_manager)
373 return;
374
375 aidl_manager->notifyWpsEventFail(
376 wpa_s, peer_macaddr, config_error, error_indication);
377}
378
379void wpas_aidl_notify_wps_event_success(struct wpa_supplicant *wpa_s)
380{
381 if (!wpa_s)
382 return;
383
384 wpa_printf(MSG_DEBUG, "Notifying Wps event success to aidl control");
385
386 AidlManager *aidl_manager = AidlManager::getInstance();
387 if (!aidl_manager)
388 return;
389
390 aidl_manager->notifyWpsEventSuccess(wpa_s);
391}
392
393void wpas_aidl_notify_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s)
394{
395 if (!wpa_s)
396 return;
397
398 wpa_printf(
399 MSG_DEBUG, "Notifying Wps event PBC overlap to aidl control");
400
401 AidlManager *aidl_manager = AidlManager::getInstance();
402 if (!aidl_manager)
403 return;
404
405 aidl_manager->notifyWpsEventPbcOverlap(wpa_s);
406}
407
408void wpas_aidl_notify_p2p_device_found(
409 struct wpa_supplicant *wpa_s, const u8 *addr,
410 const struct p2p_peer_info *info, const u8 *peer_wfd_device_info,
411 u8 peer_wfd_device_info_len, const u8 *peer_wfd_r2_device_info,
412 u8 peer_wfd_r2_device_info_len)
413{
414 if (!wpa_s || !addr || !info)
415 return;
416
417 wpa_printf(
418 MSG_DEBUG, "Notifying P2P device found to aidl control " MACSTR,
419 MAC2STR(info->p2p_device_addr));
420
421 AidlManager *aidl_manager = AidlManager::getInstance();
422 if (!aidl_manager)
423 return;
424
425 aidl_manager->notifyP2pDeviceFound(
426 wpa_s, addr, info, peer_wfd_device_info,
427 peer_wfd_device_info_len, peer_wfd_r2_device_info,
428 peer_wfd_r2_device_info_len);
429}
430
431void wpas_aidl_notify_p2p_device_lost(
432 struct wpa_supplicant *wpa_s, const u8 *p2p_device_addr)
433{
434 if (!wpa_s || !p2p_device_addr)
435 return;
436
437 wpa_printf(
438 MSG_DEBUG, "Notifying P2P device lost to aidl control " MACSTR,
439 MAC2STR(p2p_device_addr));
440
441 AidlManager *aidl_manager = AidlManager::getInstance();
442 if (!aidl_manager)
443 return;
444
445 aidl_manager->notifyP2pDeviceLost(wpa_s, p2p_device_addr);
446}
447
448void wpas_aidl_notify_p2p_find_stopped(struct wpa_supplicant *wpa_s)
449{
450 if (!wpa_s)
451 return;
452
453 wpa_printf(MSG_DEBUG, "Notifying P2P find stop to aidl control");
454
455 AidlManager *aidl_manager = AidlManager::getInstance();
456 if (!aidl_manager)
457 return;
458
459 aidl_manager->notifyP2pFindStopped(wpa_s);
460}
461
462void wpas_aidl_notify_p2p_go_neg_req(
463 struct wpa_supplicant *wpa_s, const u8 *src_addr, u16 dev_passwd_id,
464 u8 go_intent)
465{
466 if (!wpa_s || !src_addr)
467 return;
468
469 wpa_printf(
470 MSG_DEBUG,
471 "Notifying P2P GO negotiation request to aidl control " MACSTR,
472 MAC2STR(src_addr));
473
474 AidlManager *aidl_manager = AidlManager::getInstance();
475 if (!aidl_manager)
476 return;
477
478 aidl_manager->notifyP2pGoNegReq(
479 wpa_s, src_addr, dev_passwd_id, go_intent);
480}
481
482void wpas_aidl_notify_p2p_go_neg_completed(
483 struct wpa_supplicant *wpa_s, const struct p2p_go_neg_results *res)
484{
485 if (!wpa_s || !res)
486 return;
487
488 wpa_printf(
489 MSG_DEBUG,
490 "Notifying P2P GO negotiation completed to aidl control: %d",
491 res->status);
492
493 AidlManager *aidl_manager = AidlManager::getInstance();
494 if (!aidl_manager)
495 return;
496
497 aidl_manager->notifyP2pGoNegCompleted(wpa_s, res);
498}
499
500void wpas_aidl_notify_p2p_group_formation_failure(
501 struct wpa_supplicant *wpa_s, const char *reason)
502{
503 if (!wpa_s || !reason)
504 return;
505
506 wpa_printf(
507 MSG_DEBUG,
508 "Notifying P2P Group formation failure to aidl control: %s",
509 reason);
510
511 AidlManager *aidl_manager = AidlManager::getInstance();
512 if (!aidl_manager)
513 return;
514
515 aidl_manager->notifyP2pGroupFormationFailure(wpa_s, reason);
516}
517
518void wpas_aidl_notify_p2p_group_started(
519 struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, int persistent,
520 int client)
521{
522 if (!wpa_s || !ssid)
523 return;
524
525 wpa_printf(
526 MSG_DEBUG, "Notifying P2P Group start to aidl control: %d",
527 ssid->id);
528
529 AidlManager *aidl_manager = AidlManager::getInstance();
530 if (!aidl_manager)
531 return;
532
533 aidl_manager->notifyP2pGroupStarted(wpa_s, ssid, persistent, client);
534}
535
536void wpas_aidl_notify_p2p_group_removed(
537 struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, const char *role)
538{
539 if (!wpa_s || !ssid || !role)
540 return;
541
542 wpa_printf(
543 MSG_DEBUG, "Notifying P2P Group removed to aidl control: %d",
544 ssid->id);
545
546 AidlManager *aidl_manager = AidlManager::getInstance();
547 if (!aidl_manager)
548 return;
549
550 aidl_manager->notifyP2pGroupRemoved(wpa_s, ssid, role);
551}
552
553void wpas_aidl_notify_p2p_invitation_received(
554 struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *go_dev_addr,
555 const u8 *bssid, int id, int op_freq)
556{
557 if (!wpa_s || !sa || !go_dev_addr || !bssid)
558 return;
559
560 wpa_printf(
561 MSG_DEBUG,
562 "Notifying P2P invitation received to aidl control: %d " MACSTR, id,
563 MAC2STR(bssid));
564
565 AidlManager *aidl_manager = AidlManager::getInstance();
566 if (!aidl_manager)
567 return;
568
569 aidl_manager->notifyP2pInvitationReceived(
570 wpa_s, sa, go_dev_addr, bssid, id, op_freq);
571}
572
573void wpas_aidl_notify_p2p_invitation_result(
574 struct wpa_supplicant *wpa_s, int status, const u8 *bssid)
575{
576 if (!wpa_s)
577 return;
578 if (bssid) {
579 wpa_printf(
580 MSG_DEBUG,
581 "Notifying P2P invitation result to aidl control: " MACSTR,
582 MAC2STR(bssid));
583 } else {
584 wpa_printf(
585 MSG_DEBUG,
586 "Notifying P2P invitation result to aidl control: NULL "
587 "bssid");
588 }
589
590 AidlManager *aidl_manager = AidlManager::getInstance();
591 if (!aidl_manager)
592 return;
593
594 aidl_manager->notifyP2pInvitationResult(wpa_s, status, bssid);
595}
596
597void wpas_aidl_notify_p2p_provision_discovery(
598 struct wpa_supplicant *wpa_s, const u8 *dev_addr, int request,
599 enum p2p_prov_disc_status status, u16 config_methods,
600 unsigned int generated_pin)
601{
602 if (!wpa_s || !dev_addr)
603 return;
604
605 wpa_printf(
606 MSG_DEBUG,
607 "Notifying P2P provision discovery to aidl control " MACSTR,
608 MAC2STR(dev_addr));
609
610 AidlManager *aidl_manager = AidlManager::getInstance();
611 if (!aidl_manager)
612 return;
613
614 aidl_manager->notifyP2pProvisionDiscovery(
615 wpa_s, dev_addr, request, status, config_methods, generated_pin);
616}
617
618void wpas_aidl_notify_p2p_sd_response(
619 struct wpa_supplicant *wpa_s, const u8 *sa, u16 update_indic,
620 const u8 *tlvs, size_t tlvs_len)
621{
622 if (!wpa_s || !sa || !tlvs)
623 return;
624
625 wpa_printf(
626 MSG_DEBUG,
627 "Notifying P2P service discovery response to aidl control " MACSTR,
628 MAC2STR(sa));
629
630 AidlManager *aidl_manager = AidlManager::getInstance();
631 if (!aidl_manager)
632 return;
633
634 aidl_manager->notifyP2pSdResponse(
635 wpa_s, sa, update_indic, tlvs, tlvs_len);
636}
637
638void wpas_aidl_notify_ap_sta_authorized(
639 struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr)
640{
641 if (!wpa_s || !sta)
642 return;
643
644 wpa_printf(
645 MSG_DEBUG,
646 "Notifying P2P AP STA authorized to aidl control " MACSTR,
647 MAC2STR(sta));
648
649 AidlManager *aidl_manager = AidlManager::getInstance();
650 if (!aidl_manager)
651 return;
652
653 aidl_manager->notifyApStaAuthorized(wpa_s, sta, p2p_dev_addr);
654}
655
656void wpas_aidl_notify_ap_sta_deauthorized(
657 struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr)
658{
659 if (!wpa_s || !sta)
660 return;
661
662 wpa_printf(
663 MSG_DEBUG,
664 "Notifying P2P AP STA deauthorized to aidl control " MACSTR,
665 MAC2STR(sta));
666
667 AidlManager *aidl_manager = AidlManager::getInstance();
668 if (!aidl_manager)
669 return;
670
671 aidl_manager->notifyApStaDeauthorized(wpa_s, sta, p2p_dev_addr);
672}
673
674void wpas_aidl_notify_eap_error(struct wpa_supplicant *wpa_s, int error_code)
675{
676 if (!wpa_s)
677 return;
678
679 wpa_printf(MSG_DEBUG, "Notifying EAP Error: %d ", error_code);
680
681 AidlManager *aidl_manager = AidlManager::getInstance();
682 if (!aidl_manager)
683 return;
684
685 aidl_manager->notifyEapError(wpa_s, error_code);
686}
687
688void wpas_aidl_notify_dpp_config_received(struct wpa_supplicant *wpa_s,
689 struct wpa_ssid *ssid)
690{
691 if (!wpa_s || !ssid)
692 return;
693
694 wpa_printf(
695 MSG_DEBUG,
696 "Notifying DPP configuration received for SSID %d", ssid->id);
697
698 AidlManager *aidl_manager = AidlManager::getInstance();
699 if (!aidl_manager)
700 return;
701
702 aidl_manager->notifyDppConfigReceived(wpa_s, ssid);
703}
704
705void wpas_aidl_notify_dpp_config_sent(struct wpa_supplicant *wpa_s)
706{
707 wpas_aidl_notify_dpp_success(wpa_s, DppEventType::CONFIGURATION_SENT);
708}
709
710/* DPP Progress notifications */
711void wpas_aidl_notify_dpp_auth_success(struct wpa_supplicant *wpa_s)
712{
713 wpas_aidl_notify_dpp_progress(wpa_s, DppProgressCode::AUTHENTICATION_SUCCESS);
714}
715
716void wpas_aidl_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s)
717{
718 wpas_aidl_notify_dpp_progress(wpa_s, DppProgressCode::RESPONSE_PENDING);
719}
720
721/* DPP Failure notifications */
722void wpas_aidl_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s)
723{
724 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::NOT_COMPATIBLE);
725}
726
727void wpas_aidl_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s)
728{
729 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::AUTHENTICATION);
730}
731
732void wpas_aidl_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s)
733{
734 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::CONFIGURATION);
735}
736
737void wpas_aidl_notify_dpp_timeout(struct wpa_supplicant *wpa_s)
738{
739 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::TIMEOUT);
740}
741
742void wpas_aidl_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s)
743{
744 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::AUTHENTICATION);
745}
746
747void wpas_aidl_notify_dpp_fail(struct wpa_supplicant *wpa_s)
748{
749 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::FAILURE);
750}
751
752void wpas_aidl_notify_dpp_config_sent_wait_response(struct wpa_supplicant *wpa_s)
753{
754 wpas_aidl_notify_dpp_progress(wpa_s, DppProgressCode::CONFIGURATION_SENT_WAITING_RESPONSE);
755}
756
757/* DPP notification helper functions */
758static void wpas_aidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code)
759{
760 if (!wpa_s)
761 return;
762
763 wpa_printf(
764 MSG_DEBUG,
765 "Notifying DPP failure event %d", code);
766
767 AidlManager *aidl_manager = AidlManager::getInstance();
768 if (!aidl_manager)
769 return;
770
771 aidl_manager->notifyDppFailure(wpa_s, code);
772}
773
774static void wpas_aidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code)
775{
776 if (!wpa_s)
777 return;
778
779 wpa_printf(
780 MSG_DEBUG,
781 "Notifying DPP progress event %d", code);
782
783 AidlManager *aidl_manager = AidlManager::getInstance();
784 if (!aidl_manager)
785 return;
786
787 aidl_manager->notifyDppProgress(wpa_s, code);
788}
789
790void wpas_aidl_notify_dpp_config_accepted(struct wpa_supplicant *wpa_s)
791{
792 wpas_aidl_notify_dpp_progress(wpa_s, DppProgressCode::CONFIGURATION_ACCEPTED);
793}
794
795static void wpas_aidl_notify_dpp_config_applied(struct wpa_supplicant *wpa_s)
796{
797 wpas_aidl_notify_dpp_success(wpa_s, DppEventType::CONFIGURATION_APPLIED);
798}
799
800static void wpas_aidl_notify_dpp_success(struct wpa_supplicant *wpa_s, DppEventType code)
801{
802 if (!wpa_s)
803 return;
804
805 wpa_printf(
806 MSG_DEBUG,
807 "Notifying DPP progress event %d", code);
808
809 AidlManager *aidl_manager = AidlManager::getInstance();
810 if (!aidl_manager)
811 return;
812
813 aidl_manager->notifyDppSuccess(wpa_s, code);
814}
815
816void wpas_aidl_notify_dpp_config_rejected(struct wpa_supplicant *wpa_s)
817{
818 wpas_aidl_notify_dpp_failure(wpa_s, DppFailureCode::CONFIGURATION_REJECTED);
819}
820
821static void wpas_aidl_notify_dpp_no_ap_failure(struct wpa_supplicant *wpa_s,
822 const char *ssid, const char *channel_list, unsigned short band_list[],
823 int size)
824{
825 if (!wpa_s)
826 return;
827
828 wpa_printf(MSG_DEBUG,
829 "Notifying DPP NO AP event for SSID %s\nTried channels: %s",
830 ssid ? ssid : "N/A", channel_list ? channel_list : "N/A");
831
832 AidlManager *aidl_manager = AidlManager::getInstance();
833 if (!aidl_manager)
834 return;
835
836 aidl_manager->notifyDppFailure(wpa_s, DppFailureCode::CANNOT_FIND_NETWORK,
837 ssid, channel_list, band_list, size);
838}
839
840void wpas_aidl_notify_dpp_enrollee_auth_failure(struct wpa_supplicant *wpa_s,
841 const char *ssid, unsigned short band_list[], int size)
842{
843 if (!wpa_s)
844 return;
845
846 wpa_printf(MSG_DEBUG,
847 "Notifying DPP Enrollee authentication failure, SSID %s",
848 ssid ? ssid : "N/A");
849
850 AidlManager *aidl_manager = AidlManager::getInstance();
851 if (!aidl_manager)
852 return;
853
854 aidl_manager->notifyDppFailure(wpa_s, DppFailureCode::ENROLLEE_AUTHENTICATION,
855 ssid, NULL, band_list, size);
856}
857
858
859void wpas_aidl_notify_dpp_conn_status(struct wpa_supplicant *wpa_s, enum dpp_status_error status,
860 const char *ssid, const char *channel_list, unsigned short band_list[], int size)
861{
862 switch (status)
863 {
864 case DPP_STATUS_OK:
865 wpas_aidl_notify_dpp_config_applied(wpa_s);
866 break;
867
868 case DPP_STATUS_NO_AP:
869 wpas_aidl_notify_dpp_no_ap_failure(wpa_s, ssid, channel_list, band_list, size);
870 break;
871
872 case DPP_STATUS_AUTH_FAILURE:
873 wpas_aidl_notify_dpp_enrollee_auth_failure(wpa_s, ssid, band_list, size);
874 break;
875
876 default:
877 break;
878 }
879}
880
881void wpas_aidl_notify_pmk_cache_added(
882 struct wpa_supplicant *wpa_s,
883 struct rsn_pmksa_cache_entry *pmksa_entry)
884{
885 if (!wpa_s || !pmksa_entry)
886 return;
887
888 AidlManager *aidl_manager = AidlManager::getInstance();
889 if (!aidl_manager)
890 return;
891
892 wpa_printf(
893 MSG_DEBUG,
894 "Notifying PMK cache added event");
895
896 aidl_manager->notifyPmkCacheAdded(wpa_s, pmksa_entry);
897}
898
899void wpas_aidl_notify_bss_tm_status(struct wpa_supplicant *wpa_s)
900{
901 if (!wpa_s)
902 return;
903
904 AidlManager *aidl_manager = AidlManager::getInstance();
905 if (!aidl_manager)
906 return;
907
908 wpa_printf(MSG_DEBUG, "Notifying BSS transition status");
909
910 aidl_manager->notifyBssTmStatus(wpa_s);
911}
912
913void wpas_aidl_notify_transition_disable(struct wpa_supplicant *wpa_s,
914 struct wpa_ssid *ssid,
915 u8 bitmap)
916{
917 if (!wpa_s || !ssid)
918 return;
919
920 AidlManager *aidl_manager = AidlManager::getInstance();
921 if (!aidl_manager)
922 return;
923
924 aidl_manager->notifyTransitionDisable(wpa_s, ssid, bitmap);
925}
926
927void wpas_aidl_notify_network_not_found(struct wpa_supplicant *wpa_s)
928{
929 if (!wpa_s)
930 return;
931
932 AidlManager *aidl_manager = AidlManager::getInstance();
933 if (!aidl_manager)
934 return;
935
936 wpa_printf(MSG_DEBUG, "Notify network not found");
937
938 aidl_manager->notifyNetworkNotFound(wpa_s);
939}
Sunil Ravi23087aa2021-12-08 19:01:44 -0800940
Sunil Ravi65a724b2022-05-24 11:06:09 -0700941void wpas_aidl_notify_frequency_changed(struct wpa_supplicant *wpa_s, int frequency)
Sunil Ravi23087aa2021-12-08 19:01:44 -0800942{
943 if (!wpa_s)
944 return;
945
946 AidlManager *aidl_manager = AidlManager::getInstance();
947 if (!aidl_manager)
948 return;
949
Sunil Ravi65a724b2022-05-24 11:06:09 -0700950 wpa_printf(MSG_INFO, "Notify %s frequency changed to %d",
951 wpa_s->ifname, frequency);
Sunil Ravi23087aa2021-12-08 19:01:44 -0800952
Sunil Ravi65a724b2022-05-24 11:06:09 -0700953 aidl_manager->notifyFrequencyChanged(wpa_s, frequency);
Sunil Ravi23087aa2021-12-08 19:01:44 -0800954}
Jimmy Chen429daf92021-10-20 13:27:23 +0800955
956void wpas_aidl_notify_ceritification(struct wpa_supplicant *wpa_s,
957 int depth, const char *subject,
958 const char *altsubject[],
959 int num_altsubject,
960 const char *cert_hash,
961 const struct wpabuf *cert)
962{
963 if (!wpa_s)
964 return;
965
966 AidlManager *aidl_manager = AidlManager::getInstance();
967 if (!aidl_manager)
968 return;
969
970 wpa_printf(MSG_DEBUG, "Notify certification");
971
972 aidl_manager->notifyCertification(wpa_s,
973 depth,
974 subject,
975 altsubject,
976 num_altsubject,
977 cert_hash,
978 cert);
979}
Gabriel Biren3a2ec2c2022-03-07 17:59:41 +0000980
981void wpas_aidl_notify_auxiliary_event(struct wpa_supplicant *wpa_s,
982 AuxiliarySupplicantEventCode event_code, const char *reason_string)
983{
984 if (!wpa_s)
985 return;
986
987 AidlManager *aidl_manager = AidlManager::getInstance();
988 if (!aidl_manager)
989 return;
990
991 wpa_printf(MSG_DEBUG, "Notify auxiliary event, code=%d",
992 static_cast<int>(event_code));
993 aidl_manager->notifyAuxiliaryEvent(wpa_s, event_code, reason_string);
994}
995
996void wpas_aidl_notify_eap_method_selected(struct wpa_supplicant *wpa_s,
997 const char *reason_string)
998{
999 wpas_aidl_notify_auxiliary_event(wpa_s,
1000 AuxiliarySupplicantEventCode::EAP_METHOD_SELECTED,
1001 reason_string);
1002}
1003
1004void wpas_aidl_notify_ssid_temp_disabled(struct wpa_supplicant *wpa_s,
1005 const char *reason_string)
1006{
1007 wpas_aidl_notify_auxiliary_event(wpa_s,
1008 AuxiliarySupplicantEventCode::SSID_TEMP_DISABLED,
1009 reason_string);
1010}
1011
1012void wpas_aidl_notify_open_ssl_failure(struct wpa_supplicant *wpa_s,
1013 const char *reason_string)
1014{
1015 wpas_aidl_notify_auxiliary_event(wpa_s,
1016 AuxiliarySupplicantEventCode::OPEN_SSL_FAILURE,
1017 reason_string);
1018}
Shivani Baranwal84940f82022-02-02 10:21:47 +05301019
1020void wpas_aidl_notify_qos_policy_reset(
1021 struct wpa_supplicant *wpa_s)
1022{
1023 if (!wpa_s)
1024 return;
1025 wpa_printf(
1026 MSG_DEBUG, "Notifying Qos Policy Reset");
1027
1028 AidlManager *aidl_manager = AidlManager::getInstance();
1029 if (!aidl_manager)
1030 return;
1031
1032 aidl_manager->notifyQosPolicyReset(wpa_s);
1033}
1034
1035void wpas_aidl_notify_qos_policy_request(struct wpa_supplicant *wpa_s,
1036 struct dscp_policy_data *policies, int num_policies)
1037{
1038 if (!wpa_s || !policies)
1039 return;
1040
1041 wpa_printf(
1042 MSG_DEBUG, "Notifying Qos Policy Request");
1043
1044 AidlManager *aidl_manager = AidlManager::getInstance();
1045 if (!aidl_manager)
1046 return;
1047
1048 aidl_manager->notifyQosPolicyRequest(wpa_s, policies, num_policies);
1049}
1050