1214501Srpaulo/* 2214501Srpaulo * wpa_supplicant - Event notifications 3214501Srpaulo * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#include "utils/includes.h" 10214501Srpaulo 11214501Srpaulo#include "utils/common.h" 12214501Srpaulo#include "common/wpa_ctrl.h" 13214501Srpaulo#include "config.h" 14214501Srpaulo#include "wpa_supplicant_i.h" 15214501Srpaulo#include "wps_supplicant.h" 16214501Srpaulo#include "dbus/dbus_common.h" 17214501Srpaulo#include "dbus/dbus_old.h" 18214501Srpaulo#include "dbus/dbus_new.h" 19252726Srpaulo#include "rsn_supp/wpa.h" 20214501Srpaulo#include "driver_i.h" 21214501Srpaulo#include "scan.h" 22252726Srpaulo#include "p2p_supplicant.h" 23252726Srpaulo#include "sme.h" 24214501Srpaulo#include "notify.h" 25214501Srpaulo 26214501Srpauloint wpas_notify_supplicant_initialized(struct wpa_global *global) 27214501Srpaulo{ 28214501Srpaulo#ifdef CONFIG_DBUS 29214501Srpaulo if (global->params.dbus_ctrl_interface) { 30214501Srpaulo global->dbus = wpas_dbus_init(global); 31214501Srpaulo if (global->dbus == NULL) 32214501Srpaulo return -1; 33214501Srpaulo } 34214501Srpaulo#endif /* CONFIG_DBUS */ 35214501Srpaulo 36214501Srpaulo return 0; 37214501Srpaulo} 38214501Srpaulo 39214501Srpaulo 40214501Srpaulovoid wpas_notify_supplicant_deinitialized(struct wpa_global *global) 41214501Srpaulo{ 42214501Srpaulo#ifdef CONFIG_DBUS 43214501Srpaulo if (global->dbus) 44214501Srpaulo wpas_dbus_deinit(global->dbus); 45214501Srpaulo#endif /* CONFIG_DBUS */ 46214501Srpaulo} 47214501Srpaulo 48214501Srpaulo 49214501Srpauloint wpas_notify_iface_added(struct wpa_supplicant *wpa_s) 50214501Srpaulo{ 51214501Srpaulo if (wpas_dbus_register_iface(wpa_s)) 52214501Srpaulo return -1; 53214501Srpaulo 54214501Srpaulo if (wpas_dbus_register_interface(wpa_s)) 55214501Srpaulo return -1; 56214501Srpaulo 57214501Srpaulo return 0; 58214501Srpaulo} 59214501Srpaulo 60214501Srpaulo 61214501Srpaulovoid wpas_notify_iface_removed(struct wpa_supplicant *wpa_s) 62214501Srpaulo{ 63214501Srpaulo /* unregister interface in old DBus ctrl iface */ 64214501Srpaulo wpas_dbus_unregister_iface(wpa_s); 65214501Srpaulo 66214501Srpaulo /* unregister interface in new DBus ctrl iface */ 67214501Srpaulo wpas_dbus_unregister_interface(wpa_s); 68214501Srpaulo} 69214501Srpaulo 70214501Srpaulo 71214501Srpaulovoid wpas_notify_state_changed(struct wpa_supplicant *wpa_s, 72214501Srpaulo enum wpa_states new_state, 73214501Srpaulo enum wpa_states old_state) 74214501Srpaulo{ 75214501Srpaulo /* notify the old DBus API */ 76214501Srpaulo wpa_supplicant_dbus_notify_state_change(wpa_s, new_state, 77214501Srpaulo old_state); 78214501Srpaulo 79214501Srpaulo /* notify the new DBus API */ 80214501Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATE); 81252726Srpaulo 82252726Srpaulo#ifdef CONFIG_P2P 83252726Srpaulo if (new_state == WPA_COMPLETED) 84252726Srpaulo wpas_p2p_notif_connected(wpa_s); 85252726Srpaulo else if (old_state >= WPA_ASSOCIATED && new_state < WPA_ASSOCIATED) 86252726Srpaulo wpas_p2p_notif_disconnected(wpa_s); 87252726Srpaulo#endif /* CONFIG_P2P */ 88252726Srpaulo 89252726Srpaulo sme_state_changed(wpa_s); 90252726Srpaulo 91252726Srpaulo#ifdef ANDROID 92252726Srpaulo wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_STATE_CHANGE 93252726Srpaulo "id=%d state=%d BSSID=" MACSTR, 94252726Srpaulo wpa_s->current_ssid ? wpa_s->current_ssid->id : -1, 95252726Srpaulo new_state, MAC2STR(wpa_s->pending_bssid)); 96252726Srpaulo#endif /* ANDROID */ 97214501Srpaulo} 98214501Srpaulo 99214501Srpaulo 100252726Srpaulovoid wpas_notify_disconnect_reason(struct wpa_supplicant *wpa_s) 101252726Srpaulo{ 102252726Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_DISCONNECT_REASON); 103252726Srpaulo} 104252726Srpaulo 105252726Srpaulo 106214501Srpaulovoid wpas_notify_network_changed(struct wpa_supplicant *wpa_s) 107214501Srpaulo{ 108214501Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_NETWORK); 109214501Srpaulo} 110214501Srpaulo 111214501Srpaulo 112214501Srpaulovoid wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s) 113214501Srpaulo{ 114214501Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN); 115214501Srpaulo} 116214501Srpaulo 117214501Srpaulo 118214501Srpaulovoid wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s) 119214501Srpaulo{ 120214501Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS); 121214501Srpaulo} 122214501Srpaulo 123214501Srpaulo 124252726Srpaulovoid wpas_notify_auth_changed(struct wpa_supplicant *wpa_s) 125252726Srpaulo{ 126252726Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_AUTH_MODE); 127252726Srpaulo} 128252726Srpaulo 129252726Srpaulo 130214501Srpaulovoid wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s, 131214501Srpaulo struct wpa_ssid *ssid) 132214501Srpaulo{ 133214501Srpaulo wpas_dbus_signal_network_enabled_changed(wpa_s, ssid); 134214501Srpaulo} 135214501Srpaulo 136214501Srpaulo 137214501Srpaulovoid wpas_notify_network_selected(struct wpa_supplicant *wpa_s, 138214501Srpaulo struct wpa_ssid *ssid) 139214501Srpaulo{ 140214501Srpaulo wpas_dbus_signal_network_selected(wpa_s, ssid->id); 141214501Srpaulo} 142214501Srpaulo 143214501Srpaulo 144252726Srpaulovoid wpas_notify_network_request(struct wpa_supplicant *wpa_s, 145252726Srpaulo struct wpa_ssid *ssid, 146252726Srpaulo enum wpa_ctrl_req_type rtype, 147252726Srpaulo const char *default_txt) 148252726Srpaulo{ 149252726Srpaulo wpas_dbus_signal_network_request(wpa_s, ssid, rtype, default_txt); 150252726Srpaulo} 151252726Srpaulo 152252726Srpaulo 153214501Srpaulovoid wpas_notify_scanning(struct wpa_supplicant *wpa_s) 154214501Srpaulo{ 155214501Srpaulo /* notify the old DBus API */ 156214501Srpaulo wpa_supplicant_dbus_notify_scanning(wpa_s); 157214501Srpaulo 158214501Srpaulo /* notify the new DBus API */ 159214501Srpaulo wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING); 160214501Srpaulo} 161214501Srpaulo 162214501Srpaulo 163214501Srpaulovoid wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success) 164214501Srpaulo{ 165214501Srpaulo wpas_dbus_signal_scan_done(wpa_s, success); 166214501Srpaulo} 167214501Srpaulo 168214501Srpaulo 169214501Srpaulovoid wpas_notify_scan_results(struct wpa_supplicant *wpa_s) 170214501Srpaulo{ 171214501Srpaulo /* notify the old DBus API */ 172214501Srpaulo wpa_supplicant_dbus_notify_scan_results(wpa_s); 173214501Srpaulo 174214501Srpaulo wpas_wps_notify_scan_results(wpa_s); 175214501Srpaulo} 176214501Srpaulo 177214501Srpaulo 178214501Srpaulovoid wpas_notify_wps_credential(struct wpa_supplicant *wpa_s, 179214501Srpaulo const struct wps_credential *cred) 180214501Srpaulo{ 181214501Srpaulo#ifdef CONFIG_WPS 182214501Srpaulo /* notify the old DBus API */ 183214501Srpaulo wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred); 184214501Srpaulo /* notify the new DBus API */ 185214501Srpaulo wpas_dbus_signal_wps_cred(wpa_s, cred); 186214501Srpaulo#endif /* CONFIG_WPS */ 187214501Srpaulo} 188214501Srpaulo 189214501Srpaulo 190214501Srpaulovoid wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s, 191214501Srpaulo struct wps_event_m2d *m2d) 192214501Srpaulo{ 193214501Srpaulo#ifdef CONFIG_WPS 194214501Srpaulo wpas_dbus_signal_wps_event_m2d(wpa_s, m2d); 195214501Srpaulo#endif /* CONFIG_WPS */ 196214501Srpaulo} 197214501Srpaulo 198214501Srpaulo 199214501Srpaulovoid wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s, 200214501Srpaulo struct wps_event_fail *fail) 201214501Srpaulo{ 202214501Srpaulo#ifdef CONFIG_WPS 203214501Srpaulo wpas_dbus_signal_wps_event_fail(wpa_s, fail); 204214501Srpaulo#endif /* CONFIG_WPS */ 205214501Srpaulo} 206214501Srpaulo 207214501Srpaulo 208214501Srpaulovoid wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s) 209214501Srpaulo{ 210214501Srpaulo#ifdef CONFIG_WPS 211214501Srpaulo wpas_dbus_signal_wps_event_success(wpa_s); 212214501Srpaulo#endif /* CONFIG_WPS */ 213214501Srpaulo} 214214501Srpaulo 215214501Srpaulo 216214501Srpaulovoid wpas_notify_network_added(struct wpa_supplicant *wpa_s, 217214501Srpaulo struct wpa_ssid *ssid) 218214501Srpaulo{ 219252726Srpaulo /* 220252726Srpaulo * Networks objects created during any P2P activities should not be 221252726Srpaulo * exposed out. They might/will confuse certain non-P2P aware 222252726Srpaulo * applications since these network objects won't behave like 223252726Srpaulo * regular ones. 224252726Srpaulo */ 225252726Srpaulo if (wpa_s->global->p2p_group_formation != wpa_s) 226252726Srpaulo wpas_dbus_register_network(wpa_s, ssid); 227214501Srpaulo} 228214501Srpaulo 229214501Srpaulo 230252726Srpaulovoid wpas_notify_persistent_group_added(struct wpa_supplicant *wpa_s, 231252726Srpaulo struct wpa_ssid *ssid) 232252726Srpaulo{ 233252726Srpaulo#ifdef CONFIG_P2P 234252726Srpaulo wpas_dbus_register_persistent_group(wpa_s, ssid); 235252726Srpaulo#endif /* CONFIG_P2P */ 236252726Srpaulo} 237252726Srpaulo 238252726Srpaulo 239252726Srpaulovoid wpas_notify_persistent_group_removed(struct wpa_supplicant *wpa_s, 240252726Srpaulo struct wpa_ssid *ssid) 241252726Srpaulo{ 242252726Srpaulo#ifdef CONFIG_P2P 243252726Srpaulo wpas_dbus_unregister_persistent_group(wpa_s, ssid->id); 244252726Srpaulo#endif /* CONFIG_P2P */ 245252726Srpaulo} 246252726Srpaulo 247252726Srpaulo 248214501Srpaulovoid wpas_notify_network_removed(struct wpa_supplicant *wpa_s, 249214501Srpaulo struct wpa_ssid *ssid) 250214501Srpaulo{ 251252726Srpaulo if (wpa_s->wpa) 252252726Srpaulo wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid); 253252726Srpaulo if (wpa_s->global->p2p_group_formation != wpa_s) 254252726Srpaulo wpas_dbus_unregister_network(wpa_s, ssid->id); 255252726Srpaulo#ifdef CONFIG_P2P 256252726Srpaulo wpas_p2p_network_removed(wpa_s, ssid); 257252726Srpaulo#endif /* CONFIG_P2P */ 258214501Srpaulo} 259214501Srpaulo 260214501Srpaulo 261214501Srpaulovoid wpas_notify_bss_added(struct wpa_supplicant *wpa_s, 262214501Srpaulo u8 bssid[], unsigned int id) 263214501Srpaulo{ 264214501Srpaulo wpas_dbus_register_bss(wpa_s, bssid, id); 265214501Srpaulo wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR, 266214501Srpaulo id, MAC2STR(bssid)); 267214501Srpaulo} 268214501Srpaulo 269214501Srpaulo 270214501Srpaulovoid wpas_notify_bss_removed(struct wpa_supplicant *wpa_s, 271214501Srpaulo u8 bssid[], unsigned int id) 272214501Srpaulo{ 273214501Srpaulo wpas_dbus_unregister_bss(wpa_s, bssid, id); 274214501Srpaulo wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR, 275214501Srpaulo id, MAC2STR(bssid)); 276214501Srpaulo} 277214501Srpaulo 278214501Srpaulo 279214501Srpaulovoid wpas_notify_bss_freq_changed(struct wpa_supplicant *wpa_s, 280214501Srpaulo unsigned int id) 281214501Srpaulo{ 282214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_FREQ, id); 283214501Srpaulo} 284214501Srpaulo 285214501Srpaulo 286214501Srpaulovoid wpas_notify_bss_signal_changed(struct wpa_supplicant *wpa_s, 287214501Srpaulo unsigned int id) 288214501Srpaulo{ 289214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_SIGNAL, 290214501Srpaulo id); 291214501Srpaulo} 292214501Srpaulo 293214501Srpaulo 294214501Srpaulovoid wpas_notify_bss_privacy_changed(struct wpa_supplicant *wpa_s, 295214501Srpaulo unsigned int id) 296214501Srpaulo{ 297214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_PRIVACY, 298214501Srpaulo id); 299214501Srpaulo} 300214501Srpaulo 301214501Srpaulo 302214501Srpaulovoid wpas_notify_bss_mode_changed(struct wpa_supplicant *wpa_s, 303214501Srpaulo unsigned int id) 304214501Srpaulo{ 305214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_MODE, id); 306214501Srpaulo} 307214501Srpaulo 308214501Srpaulo 309214501Srpaulovoid wpas_notify_bss_wpaie_changed(struct wpa_supplicant *wpa_s, 310214501Srpaulo unsigned int id) 311214501Srpaulo{ 312214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPA, id); 313214501Srpaulo} 314214501Srpaulo 315214501Srpaulo 316214501Srpaulovoid wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s, 317214501Srpaulo unsigned int id) 318214501Srpaulo{ 319214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RSN, id); 320214501Srpaulo} 321214501Srpaulo 322214501Srpaulo 323214501Srpaulovoid wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s, 324214501Srpaulo unsigned int id) 325214501Srpaulo{ 326252726Srpaulo#ifdef CONFIG_WPS 327252726Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id); 328252726Srpaulo#endif /* CONFIG_WPS */ 329214501Srpaulo} 330214501Srpaulo 331214501Srpaulo 332214501Srpaulovoid wpas_notify_bss_ies_changed(struct wpa_supplicant *wpa_s, 333214501Srpaulo unsigned int id) 334214501Srpaulo{ 335214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_IES, id); 336214501Srpaulo} 337214501Srpaulo 338214501Srpaulo 339214501Srpaulovoid wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s, 340214501Srpaulo unsigned int id) 341214501Srpaulo{ 342214501Srpaulo wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RATES, id); 343214501Srpaulo} 344214501Srpaulo 345214501Srpaulo 346214501Srpaulovoid wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name) 347214501Srpaulo{ 348214501Srpaulo wpas_dbus_signal_blob_added(wpa_s, name); 349214501Srpaulo} 350214501Srpaulo 351214501Srpaulo 352214501Srpaulovoid wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name) 353214501Srpaulo{ 354214501Srpaulo wpas_dbus_signal_blob_removed(wpa_s, name); 355214501Srpaulo} 356214501Srpaulo 357214501Srpaulo 358214501Srpaulovoid wpas_notify_debug_level_changed(struct wpa_global *global) 359214501Srpaulo{ 360214501Srpaulo wpas_dbus_signal_debug_level_changed(global); 361214501Srpaulo} 362214501Srpaulo 363214501Srpaulo 364214501Srpaulovoid wpas_notify_debug_timestamp_changed(struct wpa_global *global) 365214501Srpaulo{ 366214501Srpaulo wpas_dbus_signal_debug_timestamp_changed(global); 367214501Srpaulo} 368214501Srpaulo 369214501Srpaulo 370214501Srpaulovoid wpas_notify_debug_show_keys_changed(struct wpa_global *global) 371214501Srpaulo{ 372214501Srpaulo wpas_dbus_signal_debug_show_keys_changed(global); 373214501Srpaulo} 374214501Srpaulo 375214501Srpaulo 376214501Srpaulovoid wpas_notify_suspend(struct wpa_global *global) 377214501Srpaulo{ 378214501Srpaulo struct wpa_supplicant *wpa_s; 379214501Srpaulo 380214501Srpaulo os_get_time(&global->suspend_time); 381214501Srpaulo wpa_printf(MSG_DEBUG, "System suspend notification"); 382214501Srpaulo for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) 383214501Srpaulo wpa_drv_suspend(wpa_s); 384214501Srpaulo} 385214501Srpaulo 386214501Srpaulo 387214501Srpaulovoid wpas_notify_resume(struct wpa_global *global) 388214501Srpaulo{ 389214501Srpaulo struct os_time now; 390214501Srpaulo int slept; 391214501Srpaulo struct wpa_supplicant *wpa_s; 392214501Srpaulo 393214501Srpaulo if (global->suspend_time.sec == 0) 394214501Srpaulo slept = -1; 395214501Srpaulo else { 396214501Srpaulo os_get_time(&now); 397214501Srpaulo slept = now.sec - global->suspend_time.sec; 398214501Srpaulo } 399214501Srpaulo wpa_printf(MSG_DEBUG, "System resume notification (slept %d seconds)", 400214501Srpaulo slept); 401214501Srpaulo 402214501Srpaulo for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) { 403214501Srpaulo wpa_drv_resume(wpa_s); 404214501Srpaulo if (wpa_s->wpa_state == WPA_DISCONNECTED) 405214501Srpaulo wpa_supplicant_req_scan(wpa_s, 0, 100000); 406214501Srpaulo } 407214501Srpaulo} 408252726Srpaulo 409252726Srpaulo 410252726Srpaulo#ifdef CONFIG_P2P 411252726Srpaulo 412252726Srpaulovoid wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s, 413252726Srpaulo const u8 *dev_addr, int new_device) 414252726Srpaulo{ 415252726Srpaulo if (new_device) { 416252726Srpaulo /* Create the new peer object */ 417252726Srpaulo wpas_dbus_register_peer(wpa_s, dev_addr); 418252726Srpaulo } 419252726Srpaulo 420252726Srpaulo /* Notify a new peer has been detected*/ 421252726Srpaulo wpas_dbus_signal_peer_device_found(wpa_s, dev_addr); 422252726Srpaulo} 423252726Srpaulo 424252726Srpaulo 425252726Srpaulovoid wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s, 426252726Srpaulo const u8 *dev_addr) 427252726Srpaulo{ 428252726Srpaulo wpas_dbus_unregister_peer(wpa_s, dev_addr); 429252726Srpaulo 430252726Srpaulo /* Create signal on interface object*/ 431252726Srpaulo wpas_dbus_signal_peer_device_lost(wpa_s, dev_addr); 432252726Srpaulo} 433252726Srpaulo 434252726Srpaulo 435252726Srpaulovoid wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s, 436252726Srpaulo const struct wpa_ssid *ssid, 437252726Srpaulo const char *role) 438252726Srpaulo{ 439252726Srpaulo wpas_dbus_unregister_p2p_group(wpa_s, ssid); 440252726Srpaulo 441252726Srpaulo wpas_dbus_signal_p2p_group_removed(wpa_s, role); 442252726Srpaulo} 443252726Srpaulo 444252726Srpaulo 445252726Srpaulovoid wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s, 446252726Srpaulo const u8 *src, u16 dev_passwd_id) 447252726Srpaulo{ 448252726Srpaulo wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id); 449252726Srpaulo} 450252726Srpaulo 451252726Srpaulo 452252726Srpaulovoid wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s, 453252726Srpaulo struct p2p_go_neg_results *res) 454252726Srpaulo{ 455252726Srpaulo wpas_dbus_signal_p2p_go_neg_resp(wpa_s, res); 456252726Srpaulo} 457252726Srpaulo 458252726Srpaulo 459252726Srpaulovoid wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s, 460252726Srpaulo int status, const u8 *bssid) 461252726Srpaulo{ 462252726Srpaulo wpas_dbus_signal_p2p_invitation_result(wpa_s, status, bssid); 463252726Srpaulo} 464252726Srpaulo 465252726Srpaulo 466252726Srpaulovoid wpas_notify_p2p_sd_request(struct wpa_supplicant *wpa_s, 467252726Srpaulo int freq, const u8 *sa, u8 dialog_token, 468252726Srpaulo u16 update_indic, const u8 *tlvs, 469252726Srpaulo size_t tlvs_len) 470252726Srpaulo{ 471252726Srpaulo wpas_dbus_signal_p2p_sd_request(wpa_s, freq, sa, dialog_token, 472252726Srpaulo update_indic, tlvs, tlvs_len); 473252726Srpaulo} 474252726Srpaulo 475252726Srpaulo 476252726Srpaulovoid wpas_notify_p2p_sd_response(struct wpa_supplicant *wpa_s, 477252726Srpaulo const u8 *sa, u16 update_indic, 478252726Srpaulo const u8 *tlvs, size_t tlvs_len) 479252726Srpaulo{ 480252726Srpaulo wpas_dbus_signal_p2p_sd_response(wpa_s, sa, update_indic, 481252726Srpaulo tlvs, tlvs_len); 482252726Srpaulo} 483252726Srpaulo 484252726Srpaulo 485252726Srpaulo/** 486252726Srpaulo * wpas_notify_p2p_provision_discovery - Notification of provision discovery 487252726Srpaulo * @dev_addr: Who sent the request or responded to our request. 488252726Srpaulo * @request: Will be 1 if request, 0 for response. 489252726Srpaulo * @status: Valid only in case of response (0 in case of success) 490252726Srpaulo * @config_methods: WPS config methods 491252726Srpaulo * @generated_pin: PIN to be displayed in case of WPS_CONFIG_DISPLAY method 492252726Srpaulo * 493252726Srpaulo * This can be used to notify: 494252726Srpaulo * - Requests or responses 495252726Srpaulo * - Various config methods 496252726Srpaulo * - Failure condition in case of response 497252726Srpaulo */ 498252726Srpaulovoid wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s, 499252726Srpaulo const u8 *dev_addr, int request, 500252726Srpaulo enum p2p_prov_disc_status status, 501252726Srpaulo u16 config_methods, 502252726Srpaulo unsigned int generated_pin) 503252726Srpaulo{ 504252726Srpaulo wpas_dbus_signal_p2p_provision_discovery(wpa_s, dev_addr, request, 505252726Srpaulo status, config_methods, 506252726Srpaulo generated_pin); 507252726Srpaulo} 508252726Srpaulo 509252726Srpaulo 510252726Srpaulovoid wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s, 511252726Srpaulo struct wpa_ssid *ssid, int network_id, 512252726Srpaulo int client) 513252726Srpaulo{ 514252726Srpaulo /* Notify a group has been started */ 515252726Srpaulo wpas_dbus_register_p2p_group(wpa_s, ssid); 516252726Srpaulo 517252726Srpaulo wpas_dbus_signal_p2p_group_started(wpa_s, ssid, client, network_id); 518252726Srpaulo} 519252726Srpaulo 520252726Srpaulo 521252726Srpaulovoid wpas_notify_p2p_wps_failed(struct wpa_supplicant *wpa_s, 522252726Srpaulo struct wps_event_fail *fail) 523252726Srpaulo{ 524252726Srpaulo wpas_dbus_signal_p2p_wps_failed(wpa_s, fail); 525252726Srpaulo} 526252726Srpaulo 527252726Srpaulo#endif /* CONFIG_P2P */ 528252726Srpaulo 529252726Srpaulo 530252726Srpaulostatic void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s, 531252726Srpaulo const u8 *sta, 532252726Srpaulo const u8 *p2p_dev_addr) 533252726Srpaulo{ 534252726Srpaulo#ifdef CONFIG_P2P 535252726Srpaulo wpas_p2p_notify_ap_sta_authorized(wpa_s, p2p_dev_addr); 536252726Srpaulo 537252726Srpaulo /* 538252726Srpaulo * Register a group member object corresponding to this peer and 539252726Srpaulo * emit a PeerJoined signal. This will check if it really is a 540252726Srpaulo * P2P group. 541252726Srpaulo */ 542252726Srpaulo wpas_dbus_register_p2p_groupmember(wpa_s, sta); 543252726Srpaulo 544252726Srpaulo /* 545252726Srpaulo * Create 'peer-joined' signal on group object -- will also 546252726Srpaulo * check P2P itself. 547252726Srpaulo */ 548252726Srpaulo wpas_dbus_signal_p2p_peer_joined(wpa_s, sta); 549252726Srpaulo#endif /* CONFIG_P2P */ 550252726Srpaulo} 551252726Srpaulo 552252726Srpaulo 553252726Srpaulostatic void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s, 554252726Srpaulo const u8 *sta) 555252726Srpaulo{ 556252726Srpaulo#ifdef CONFIG_P2P 557252726Srpaulo /* 558252726Srpaulo * Unregister a group member object corresponding to this peer 559252726Srpaulo * if this is a P2P group. 560252726Srpaulo */ 561252726Srpaulo wpas_dbus_unregister_p2p_groupmember(wpa_s, sta); 562252726Srpaulo 563252726Srpaulo /* 564252726Srpaulo * Create 'peer-disconnected' signal on group object if this 565252726Srpaulo * is a P2P group. 566252726Srpaulo */ 567252726Srpaulo wpas_dbus_signal_p2p_peer_disconnected(wpa_s, sta); 568252726Srpaulo#endif /* CONFIG_P2P */ 569252726Srpaulo} 570252726Srpaulo 571252726Srpaulo 572252726Srpaulovoid wpas_notify_sta_authorized(struct wpa_supplicant *wpa_s, 573252726Srpaulo const u8 *mac_addr, int authorized, 574252726Srpaulo const u8 *p2p_dev_addr) 575252726Srpaulo{ 576252726Srpaulo if (authorized) 577252726Srpaulo wpas_notify_ap_sta_authorized(wpa_s, mac_addr, p2p_dev_addr); 578252726Srpaulo else 579252726Srpaulo wpas_notify_ap_sta_deauthorized(wpa_s, mac_addr); 580252726Srpaulo} 581252726Srpaulo 582252726Srpaulo 583252726Srpaulovoid wpas_notify_certification(struct wpa_supplicant *wpa_s, int depth, 584252726Srpaulo const char *subject, const char *cert_hash, 585252726Srpaulo const struct wpabuf *cert) 586252726Srpaulo{ 587252726Srpaulo wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_CERT 588252726Srpaulo "depth=%d subject='%s'%s%s", 589252726Srpaulo depth, subject, 590252726Srpaulo cert_hash ? " hash=" : "", 591252726Srpaulo cert_hash ? cert_hash : ""); 592252726Srpaulo 593252726Srpaulo if (cert) { 594252726Srpaulo char *cert_hex; 595252726Srpaulo size_t len = wpabuf_len(cert) * 2 + 1; 596252726Srpaulo cert_hex = os_malloc(len); 597252726Srpaulo if (cert_hex) { 598252726Srpaulo wpa_snprintf_hex(cert_hex, len, wpabuf_head(cert), 599252726Srpaulo wpabuf_len(cert)); 600252726Srpaulo wpa_msg_ctrl(wpa_s, MSG_INFO, 601252726Srpaulo WPA_EVENT_EAP_PEER_CERT 602252726Srpaulo "depth=%d subject='%s' cert=%s", 603252726Srpaulo depth, subject, cert_hex); 604252726Srpaulo os_free(cert_hex); 605252726Srpaulo } 606252726Srpaulo } 607252726Srpaulo 608252726Srpaulo /* notify the old DBus API */ 609252726Srpaulo wpa_supplicant_dbus_notify_certification(wpa_s, depth, subject, 610252726Srpaulo cert_hash, cert); 611252726Srpaulo /* notify the new DBus API */ 612252726Srpaulo wpas_dbus_signal_certification(wpa_s, depth, subject, cert_hash, cert); 613252726Srpaulo} 614252726Srpaulo 615252726Srpaulo 616252726Srpaulovoid wpas_notify_preq(struct wpa_supplicant *wpa_s, 617252726Srpaulo const u8 *addr, const u8 *dst, const u8 *bssid, 618252726Srpaulo const u8 *ie, size_t ie_len, u32 ssi_signal) 619252726Srpaulo{ 620252726Srpaulo#ifdef CONFIG_AP 621252726Srpaulo wpas_dbus_signal_preq(wpa_s, addr, dst, bssid, ie, ie_len, ssi_signal); 622252726Srpaulo#endif /* CONFIG_AP */ 623252726Srpaulo} 624252726Srpaulo 625252726Srpaulo 626252726Srpaulovoid wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status, 627252726Srpaulo const char *parameter) 628252726Srpaulo{ 629252726Srpaulo wpas_dbus_signal_eap_status(wpa_s, status, parameter); 630252726Srpaulo} 631