1 /* 2 * hidl interface for wpa_supplicant daemon 3 * Copyright (c) 2004-2016, Jouni Malinen <j (at) w1.fi> 4 * Copyright (c) 2004-2016, Roshan Pius <rpius (at) google.com> 5 * 6 * This software may be distributed under the terms of the BSD license. 7 * See README for more details. 8 */ 9 10 #include <hwbinder/IPCThreadState.h> 11 12 #include <hidl/HidlTransportSupport.h> 13 #include "hidl_manager.h" 14 15 extern "C" 16 { 17 #include "hidl.h" 18 #include "hidl_i.h" 19 #include "utils/common.h" 20 #include "utils/eloop.h" 21 #include "utils/includes.h" 22 } 23 24 using android::hardware::configureRpcThreadpool; 25 using android::hardware::handleTransportPoll; 26 using android::hardware::setupTransportPolling; 27 using android::hardware::wifi::supplicant::V1_2::implementation::HidlManager; 28 using namespace android::hardware::wifi::supplicant::V1_2; 29 30 static void wpas_hidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code); 31 static void wpas_hidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code); 32 33 void wpas_hidl_sock_handler( 34 int sock, void * /* eloop_ctx */, void * /* sock_ctx */) 35 { 36 handleTransportPoll(sock); 37 } 38 39 struct wpas_hidl_priv *wpas_hidl_init(struct wpa_global *global) 40 { 41 struct wpas_hidl_priv *priv; 42 HidlManager *hidl_manager; 43 44 priv = (wpas_hidl_priv *)os_zalloc(sizeof(*priv)); 45 if (!priv) 46 return NULL; 47 priv->global = global; 48 49 wpa_printf(MSG_DEBUG, "Initing hidl control"); 50 51 configureRpcThreadpool(1, true /* callerWillJoin */); 52 priv->hidl_fd = setupTransportPolling(); 53 if (priv->hidl_fd < 0) 54 goto err; 55 56 wpa_printf(MSG_INFO, "Processing hidl events on FD %d", priv->hidl_fd); 57 // Look for read events from the hidl socket in the eloop. 58 if (eloop_register_read_sock( 59 priv->hidl_fd, wpas_hidl_sock_handler, global, priv) < 0) 60 goto err; 61 62 hidl_manager = HidlManager::getInstance(); 63 if (!hidl_manager) 64 goto err; 65 hidl_manager->registerHidlService(global); 66 // We may not need to store this hidl manager reference in the 67 // global data strucure because we've made it a singleton class. 68 priv->hidl_manager = (void *)hidl_manager; 69 70 return priv; 71 err: 72 wpas_hidl_deinit(priv); 73 return NULL; 74 } 75 76 void wpas_hidl_deinit(struct wpas_hidl_priv *priv) 77 { 78 if (!priv) 79 return; 80 81 wpa_printf(MSG_DEBUG, "Deiniting hidl control"); 82 83 HidlManager::destroyInstance(); 84 eloop_unregister_read_sock(priv->hidl_fd); 85 os_free(priv); 86 } 87 88 int wpas_hidl_register_interface(struct wpa_supplicant *wpa_s) 89 { 90 if (!wpa_s || !wpa_s->global->hidl) 91 return 1; 92 93 wpa_printf( 94 MSG_DEBUG, "Registering interface to hidl control: %s", 95 wpa_s->ifname); 96 97 HidlManager *hidl_manager = HidlManager::getInstance(); 98 if (!hidl_manager) 99 return 1; 100 101 return hidl_manager->registerInterface(wpa_s); 102 } 103 104 int wpas_hidl_unregister_interface(struct wpa_supplicant *wpa_s) 105 { 106 if (!wpa_s || !wpa_s->global->hidl) 107 return 1; 108 109 wpa_printf( 110 MSG_DEBUG, "Deregistering interface from hidl control: %s", 111 wpa_s->ifname); 112 113 HidlManager *hidl_manager = HidlManager::getInstance(); 114 if (!hidl_manager) 115 return 1; 116 117 return hidl_manager->unregisterInterface(wpa_s); 118 } 119 120 int wpas_hidl_register_network( 121 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 122 { 123 if (!wpa_s || !wpa_s->global->hidl || !ssid) 124 return 1; 125 126 wpa_printf( 127 MSG_DEBUG, "Registering network to hidl control: %d", ssid->id); 128 129 HidlManager *hidl_manager = HidlManager::getInstance(); 130 if (!hidl_manager) 131 return 1; 132 133 return hidl_manager->registerNetwork(wpa_s, ssid); 134 } 135 136 int wpas_hidl_unregister_network( 137 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 138 { 139 if (!wpa_s || !wpa_s->global->hidl || !ssid) 140 return 1; 141 142 wpa_printf( 143 MSG_DEBUG, "Deregistering network from hidl control: %d", ssid->id); 144 145 HidlManager *hidl_manager = HidlManager::getInstance(); 146 if (!hidl_manager) 147 return 1; 148 149 return hidl_manager->unregisterNetwork(wpa_s, ssid); 150 } 151 152 int wpas_hidl_notify_state_changed(struct wpa_supplicant *wpa_s) 153 { 154 if (!wpa_s || !wpa_s->global->hidl) 155 return 1; 156 157 wpa_printf( 158 MSG_DEBUG, "Notifying state change event to hidl control: %d", 159 wpa_s->wpa_state); 160 161 HidlManager *hidl_manager = HidlManager::getInstance(); 162 if (!hidl_manager) 163 return 1; 164 165 return hidl_manager->notifyStateChange(wpa_s); 166 } 167 168 int wpas_hidl_notify_network_request( 169 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, 170 enum wpa_ctrl_req_type rtype, const char *default_txt) 171 { 172 if (!wpa_s || !wpa_s->global->hidl || !ssid) 173 return 1; 174 175 wpa_printf( 176 MSG_DEBUG, "Notifying network request to hidl control: %d", 177 ssid->id); 178 179 HidlManager *hidl_manager = HidlManager::getInstance(); 180 if (!hidl_manager) 181 return 1; 182 183 return hidl_manager->notifyNetworkRequest( 184 wpa_s, ssid, rtype, default_txt); 185 } 186 187 void wpas_hidl_notify_anqp_query_done( 188 struct wpa_supplicant *wpa_s, const u8 *bssid, const char *result, 189 const struct wpa_bss_anqp *anqp) 190 { 191 if (!wpa_s || !wpa_s->global->hidl || !bssid || !result || !anqp) 192 return; 193 194 wpa_printf( 195 MSG_DEBUG, 196 "Notifying ANQP query done to hidl control: " MACSTR "result: %s", 197 MAC2STR(bssid), result); 198 199 HidlManager *hidl_manager = HidlManager::getInstance(); 200 if (!hidl_manager) 201 return; 202 203 hidl_manager->notifyAnqpQueryDone(wpa_s, bssid, result, anqp); 204 } 205 206 void wpas_hidl_notify_hs20_icon_query_done( 207 struct wpa_supplicant *wpa_s, const u8 *bssid, const char *file_name, 208 const u8 *image, u32 image_length) 209 { 210 if (!wpa_s || !wpa_s->global->hidl || !bssid || !file_name || !image) 211 return; 212 213 wpa_printf( 214 MSG_DEBUG, 215 "Notifying HS20 icon query done to hidl control: " MACSTR 216 "file_name: %s", 217 MAC2STR(bssid), file_name); 218 219 HidlManager *hidl_manager = HidlManager::getInstance(); 220 if (!hidl_manager) 221 return; 222 223 hidl_manager->notifyHs20IconQueryDone( 224 wpa_s, bssid, file_name, image, image_length); 225 } 226 227 void wpas_hidl_notify_hs20_rx_subscription_remediation( 228 struct wpa_supplicant *wpa_s, const char *url, u8 osu_method) 229 { 230 if (!wpa_s || !wpa_s->global->hidl || !url) 231 return; 232 233 wpa_printf( 234 MSG_DEBUG, 235 "Notifying HS20 subscription remediation rx to hidl control: %s", 236 url); 237 238 HidlManager *hidl_manager = HidlManager::getInstance(); 239 if (!hidl_manager) 240 return; 241 242 hidl_manager->notifyHs20RxSubscriptionRemediation( 243 wpa_s, url, osu_method); 244 } 245 246 void wpas_hidl_notify_hs20_rx_deauth_imminent_notice( 247 struct wpa_supplicant *wpa_s, u8 code, u16 reauth_delay, const char *url) 248 { 249 if (!wpa_s || !wpa_s->global->hidl || !url) 250 return; 251 252 wpa_printf( 253 MSG_DEBUG, 254 "Notifying HS20 deauth imminent notice rx to hidl control: %s", 255 url); 256 257 HidlManager *hidl_manager = HidlManager::getInstance(); 258 if (!hidl_manager) 259 return; 260 261 hidl_manager->notifyHs20RxDeauthImminentNotice( 262 wpa_s, code, reauth_delay, url); 263 } 264 265 void wpas_hidl_notify_disconnect_reason(struct wpa_supplicant *wpa_s) 266 { 267 if (!wpa_s) 268 return; 269 270 wpa_printf( 271 MSG_DEBUG, "Notifying disconnect reason to hidl control: %d", 272 wpa_s->disconnect_reason); 273 274 HidlManager *hidl_manager = HidlManager::getInstance(); 275 if (!hidl_manager) 276 return; 277 278 hidl_manager->notifyDisconnectReason(wpa_s); 279 } 280 281 void wpas_hidl_notify_assoc_reject(struct wpa_supplicant *wpa_s) 282 { 283 if (!wpa_s) 284 return; 285 286 wpa_printf( 287 MSG_DEBUG, "Notifying assoc reject to hidl control: %d", 288 wpa_s->assoc_status_code); 289 290 HidlManager *hidl_manager = HidlManager::getInstance(); 291 if (!hidl_manager) 292 return; 293 294 hidl_manager->notifyAssocReject(wpa_s); 295 } 296 297 void wpas_hidl_notify_auth_timeout(struct wpa_supplicant *wpa_s) 298 { 299 if (!wpa_s) 300 return; 301 302 wpa_printf(MSG_DEBUG, "Notifying auth timeout to hidl control"); 303 304 HidlManager *hidl_manager = HidlManager::getInstance(); 305 if (!hidl_manager) 306 return; 307 308 hidl_manager->notifyAuthTimeout(wpa_s); 309 } 310 311 void wpas_hidl_notify_bssid_changed(struct wpa_supplicant *wpa_s) 312 { 313 if (!wpa_s) 314 return; 315 316 wpa_printf(MSG_DEBUG, "Notifying bssid changed to hidl control"); 317 318 HidlManager *hidl_manager = HidlManager::getInstance(); 319 if (!hidl_manager) 320 return; 321 322 hidl_manager->notifyBssidChanged(wpa_s); 323 } 324 325 void wpas_hidl_notify_wps_event_fail( 326 struct wpa_supplicant *wpa_s, uint8_t *peer_macaddr, uint16_t config_error, 327 uint16_t error_indication) 328 { 329 if (!wpa_s || !peer_macaddr) 330 return; 331 332 wpa_printf( 333 MSG_DEBUG, "Notifying Wps event fail to hidl control: %d, %d", 334 config_error, error_indication); 335 336 HidlManager *hidl_manager = HidlManager::getInstance(); 337 if (!hidl_manager) 338 return; 339 340 hidl_manager->notifyWpsEventFail( 341 wpa_s, peer_macaddr, config_error, error_indication); 342 } 343 344 void wpas_hidl_notify_wps_event_success(struct wpa_supplicant *wpa_s) 345 { 346 if (!wpa_s) 347 return; 348 349 wpa_printf(MSG_DEBUG, "Notifying Wps event success to hidl control"); 350 351 HidlManager *hidl_manager = HidlManager::getInstance(); 352 if (!hidl_manager) 353 return; 354 355 hidl_manager->notifyWpsEventSuccess(wpa_s); 356 } 357 358 void wpas_hidl_notify_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s) 359 { 360 if (!wpa_s) 361 return; 362 363 wpa_printf( 364 MSG_DEBUG, "Notifying Wps event PBC overlap to hidl control"); 365 366 HidlManager *hidl_manager = HidlManager::getInstance(); 367 if (!hidl_manager) 368 return; 369 370 hidl_manager->notifyWpsEventPbcOverlap(wpa_s); 371 } 372 373 void wpas_hidl_notify_p2p_device_found( 374 struct wpa_supplicant *wpa_s, const u8 *addr, 375 const struct p2p_peer_info *info, const u8 *peer_wfd_device_info, 376 u8 peer_wfd_device_info_len) 377 { 378 if (!wpa_s || !addr || !info) 379 return; 380 381 wpa_printf( 382 MSG_DEBUG, "Notifying P2P device found to hidl control " MACSTR, 383 MAC2STR(info->p2p_device_addr)); 384 385 HidlManager *hidl_manager = HidlManager::getInstance(); 386 if (!hidl_manager) 387 return; 388 389 hidl_manager->notifyP2pDeviceFound( 390 wpa_s, addr, info, peer_wfd_device_info, peer_wfd_device_info_len); 391 } 392 393 void wpas_hidl_notify_p2p_device_lost( 394 struct wpa_supplicant *wpa_s, const u8 *p2p_device_addr) 395 { 396 if (!wpa_s || !p2p_device_addr) 397 return; 398 399 wpa_printf( 400 MSG_DEBUG, "Notifying P2P device lost to hidl control " MACSTR, 401 MAC2STR(p2p_device_addr)); 402 403 HidlManager *hidl_manager = HidlManager::getInstance(); 404 if (!hidl_manager) 405 return; 406 407 hidl_manager->notifyP2pDeviceLost(wpa_s, p2p_device_addr); 408 } 409 410 void wpas_hidl_notify_p2p_find_stopped(struct wpa_supplicant *wpa_s) 411 { 412 if (!wpa_s) 413 return; 414 415 wpa_printf(MSG_DEBUG, "Notifying P2P find stop to hidl control"); 416 417 HidlManager *hidl_manager = HidlManager::getInstance(); 418 if (!hidl_manager) 419 return; 420 421 hidl_manager->notifyP2pFindStopped(wpa_s); 422 } 423 424 void wpas_hidl_notify_p2p_go_neg_req( 425 struct wpa_supplicant *wpa_s, const u8 *src_addr, u16 dev_passwd_id, 426 u8 go_intent) 427 { 428 if (!wpa_s || !src_addr) 429 return; 430 431 wpa_printf( 432 MSG_DEBUG, 433 "Notifying P2P GO negotiation request to hidl control " MACSTR, 434 MAC2STR(src_addr)); 435 436 HidlManager *hidl_manager = HidlManager::getInstance(); 437 if (!hidl_manager) 438 return; 439 440 hidl_manager->notifyP2pGoNegReq( 441 wpa_s, src_addr, dev_passwd_id, go_intent); 442 } 443 444 void wpas_hidl_notify_p2p_go_neg_completed( 445 struct wpa_supplicant *wpa_s, const struct p2p_go_neg_results *res) 446 { 447 if (!wpa_s || !res) 448 return; 449 450 wpa_printf( 451 MSG_DEBUG, 452 "Notifying P2P GO negotiation completed to hidl control: %d", 453 res->status); 454 455 HidlManager *hidl_manager = HidlManager::getInstance(); 456 if (!hidl_manager) 457 return; 458 459 hidl_manager->notifyP2pGoNegCompleted(wpa_s, res); 460 } 461 462 void wpas_hidl_notify_p2p_group_formation_failure( 463 struct wpa_supplicant *wpa_s, const char *reason) 464 { 465 if (!wpa_s || !reason) 466 return; 467 468 wpa_printf( 469 MSG_DEBUG, 470 "Notifying P2P Group formation failure to hidl control: %s", 471 reason); 472 473 HidlManager *hidl_manager = HidlManager::getInstance(); 474 if (!hidl_manager) 475 return; 476 477 hidl_manager->notifyP2pGroupFormationFailure(wpa_s, reason); 478 } 479 480 void wpas_hidl_notify_p2p_group_started( 481 struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, int persistent, 482 int client) 483 { 484 if (!wpa_s || !ssid) 485 return; 486 487 wpa_printf( 488 MSG_DEBUG, "Notifying P2P Group start to hidl control: %d", 489 ssid->id); 490 491 HidlManager *hidl_manager = HidlManager::getInstance(); 492 if (!hidl_manager) 493 return; 494 495 hidl_manager->notifyP2pGroupStarted(wpa_s, ssid, persistent, client); 496 } 497 498 void wpas_hidl_notify_p2p_group_removed( 499 struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, const char *role) 500 { 501 if (!wpa_s || !ssid || !role) 502 return; 503 504 wpa_printf( 505 MSG_DEBUG, "Notifying P2P Group removed to hidl control: %d", 506 ssid->id); 507 508 HidlManager *hidl_manager = HidlManager::getInstance(); 509 if (!hidl_manager) 510 return; 511 512 hidl_manager->notifyP2pGroupRemoved(wpa_s, ssid, role); 513 } 514 515 void wpas_hidl_notify_p2p_invitation_received( 516 struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *go_dev_addr, 517 const u8 *bssid, int id, int op_freq) 518 { 519 if (!wpa_s || !sa || !go_dev_addr || !bssid) 520 return; 521 522 wpa_printf( 523 MSG_DEBUG, 524 "Notifying P2P invitation received to hidl control: %d " MACSTR, id, 525 MAC2STR(bssid)); 526 527 HidlManager *hidl_manager = HidlManager::getInstance(); 528 if (!hidl_manager) 529 return; 530 531 hidl_manager->notifyP2pInvitationReceived( 532 wpa_s, sa, go_dev_addr, bssid, id, op_freq); 533 } 534 535 void wpas_hidl_notify_p2p_invitation_result( 536 struct wpa_supplicant *wpa_s, int status, const u8 *bssid) 537 { 538 if (!wpa_s) 539 return; 540 if (bssid) { 541 wpa_printf( 542 MSG_DEBUG, 543 "Notifying P2P invitation result to hidl control: " MACSTR, 544 MAC2STR(bssid)); 545 } else { 546 wpa_printf( 547 MSG_DEBUG, 548 "Notifying P2P invitation result to hidl control: NULL " 549 "bssid"); 550 } 551 552 HidlManager *hidl_manager = HidlManager::getInstance(); 553 if (!hidl_manager) 554 return; 555 556 hidl_manager->notifyP2pInvitationResult(wpa_s, status, bssid); 557 } 558 559 void wpas_hidl_notify_p2p_provision_discovery( 560 struct wpa_supplicant *wpa_s, const u8 *dev_addr, int request, 561 enum p2p_prov_disc_status status, u16 config_methods, 562 unsigned int generated_pin) 563 { 564 if (!wpa_s || !dev_addr) 565 return; 566 567 wpa_printf( 568 MSG_DEBUG, 569 "Notifying P2P provision discovery to hidl control " MACSTR, 570 MAC2STR(dev_addr)); 571 572 HidlManager *hidl_manager = HidlManager::getInstance(); 573 if (!hidl_manager) 574 return; 575 576 hidl_manager->notifyP2pProvisionDiscovery( 577 wpa_s, dev_addr, request, status, config_methods, generated_pin); 578 } 579 580 void wpas_hidl_notify_p2p_sd_response( 581 struct wpa_supplicant *wpa_s, const u8 *sa, u16 update_indic, 582 const u8 *tlvs, size_t tlvs_len) 583 { 584 if (!wpa_s || !sa || !tlvs) 585 return; 586 587 wpa_printf( 588 MSG_DEBUG, 589 "Notifying P2P service discovery response to hidl control " MACSTR, 590 MAC2STR(sa)); 591 592 HidlManager *hidl_manager = HidlManager::getInstance(); 593 if (!hidl_manager) 594 return; 595 596 hidl_manager->notifyP2pSdResponse( 597 wpa_s, sa, update_indic, tlvs, tlvs_len); 598 } 599 600 void wpas_hidl_notify_ap_sta_authorized( 601 struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr) 602 { 603 if (!wpa_s || !sta) 604 return; 605 606 wpa_printf( 607 MSG_DEBUG, 608 "Notifying P2P AP STA authorized to hidl control " MACSTR, 609 MAC2STR(sta)); 610 611 HidlManager *hidl_manager = HidlManager::getInstance(); 612 if (!hidl_manager) 613 return; 614 615 hidl_manager->notifyApStaAuthorized(wpa_s, sta, p2p_dev_addr); 616 } 617 618 void wpas_hidl_notify_ap_sta_deauthorized( 619 struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr) 620 { 621 if (!wpa_s || !sta) 622 return; 623 624 wpa_printf( 625 MSG_DEBUG, 626 "Notifying P2P AP STA deauthorized to hidl control " MACSTR, 627 MAC2STR(sta)); 628 629 HidlManager *hidl_manager = HidlManager::getInstance(); 630 if (!hidl_manager) 631 return; 632 633 hidl_manager->notifyApStaDeauthorized(wpa_s, sta, p2p_dev_addr); 634 } 635 636 void wpas_hidl_notify_eap_error(struct wpa_supplicant *wpa_s, int error_code) 637 { 638 if (!wpa_s) 639 return; 640 641 wpa_printf(MSG_DEBUG, "Notifying EAP Error: %d ", error_code); 642 643 HidlManager *hidl_manager = HidlManager::getInstance(); 644 if (!hidl_manager) 645 return; 646 647 hidl_manager->notifyEapError(wpa_s, error_code); 648 } 649 650 void wpas_hidl_notify_dpp_config_received(struct wpa_supplicant *wpa_s, 651 struct wpa_ssid *ssid) 652 { 653 if (!wpa_s || !ssid) 654 return; 655 656 wpa_printf( 657 MSG_DEBUG, 658 "Notifying DPP configuration received for SSID %d", ssid->id); 659 660 HidlManager *hidl_manager = HidlManager::getInstance(); 661 if (!hidl_manager) 662 return; 663 664 hidl_manager->notifyDppConfigReceived(wpa_s, ssid); 665 } 666 667 void wpas_hidl_notify_dpp_config_sent(struct wpa_supplicant *wpa_s) 668 { 669 if (!wpa_s) 670 return; 671 672 wpa_printf( 673 MSG_DEBUG, 674 "Notifying DPP configuration sent"); 675 676 HidlManager *hidl_manager = HidlManager::getInstance(); 677 if (!hidl_manager) 678 return; 679 680 hidl_manager->notifyDppConfigSent(wpa_s); 681 } 682 683 /* DPP Progress notifications */ 684 void wpas_hidl_notify_dpp_auth_success(struct wpa_supplicant *wpa_s) 685 { 686 if (!wpa_s) 687 return; 688 689 wpas_hidl_notify_dpp_progress(wpa_s, DppProgressCode::AUTHENTICATION_SUCCESS); 690 } 691 692 void wpas_hidl_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s) 693 { 694 if (!wpa_s) 695 return; 696 697 wpas_hidl_notify_dpp_progress(wpa_s, DppProgressCode::RESPONSE_PENDING); 698 } 699 700 /* DPP Failure notifications */ 701 void wpas_hidl_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s) 702 { 703 if (!wpa_s) 704 return; 705 706 wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::NOT_COMPATIBLE); 707 } 708 709 void wpas_hidl_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s) 710 { 711 if (!wpa_s) 712 return; 713 } 714 715 void wpas_hidl_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s) 716 { 717 if (!wpa_s) 718 return; 719 720 wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::CONFIGURATION); 721 } 722 723 void wpas_hidl_notify_dpp_timeout(struct wpa_supplicant *wpa_s) 724 { 725 if (!wpa_s) 726 return; 727 728 wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::TIMEOUT); 729 } 730 731 void wpas_hidl_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s) 732 { 733 if (!wpa_s) 734 return; 735 736 wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::AUTHENTICATION); 737 } 738 739 void wpas_hidl_notify_dpp_fail(struct wpa_supplicant *wpa_s) 740 { 741 if (!wpa_s) 742 return; 743 744 wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::FAILURE); 745 } 746 747 /* DPP notification helper functions */ 748 static void wpas_hidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code) 749 { 750 if (!wpa_s) 751 return; 752 753 wpa_printf( 754 MSG_DEBUG, 755 "Notifying DPP failure event %d", code); 756 757 HidlManager *hidl_manager = HidlManager::getInstance(); 758 if (!hidl_manager) 759 return; 760 761 hidl_manager->notifyDppFailure(wpa_s, code); 762 } 763 764 static void wpas_hidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code) 765 { 766 if (!wpa_s) 767 return; 768 769 wpa_printf( 770 MSG_DEBUG, 771 "Notifying DPP progress event %d", code); 772 773 HidlManager *hidl_manager = HidlManager::getInstance(); 774 if (!hidl_manager) 775 return; 776 777 hidl_manager->notifyDppProgress(wpa_s, code); 778 } 779