Branch data Line data Source code
1 : : /*
2 : : * wpa_supplicant - Event notifications
3 : : * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi>
4 : : *
5 : : * This software may be distributed under the terms of the BSD license.
6 : : * See README for more details.
7 : : */
8 : :
9 : : #include "utils/includes.h"
10 : :
11 : : #include "utils/common.h"
12 : : #include "common/wpa_ctrl.h"
13 : : #include "config.h"
14 : : #include "wpa_supplicant_i.h"
15 : : #include "wps_supplicant.h"
16 : : #include "dbus/dbus_common.h"
17 : : #include "dbus/dbus_old.h"
18 : : #include "dbus/dbus_new.h"
19 : : #include "rsn_supp/wpa.h"
20 : : #include "driver_i.h"
21 : : #include "scan.h"
22 : : #include "p2p_supplicant.h"
23 : : #include "sme.h"
24 : : #include "notify.h"
25 : :
26 : 4 : int wpas_notify_supplicant_initialized(struct wpa_global *global)
27 : : {
28 : : #ifdef CONFIG_DBUS
29 : : if (global->params.dbus_ctrl_interface) {
30 : : global->dbus = wpas_dbus_init(global);
31 : : if (global->dbus == NULL)
32 : : return -1;
33 : : }
34 : : #endif /* CONFIG_DBUS */
35 : :
36 : 4 : return 0;
37 : : }
38 : :
39 : :
40 : 4 : void wpas_notify_supplicant_deinitialized(struct wpa_global *global)
41 : : {
42 : : #ifdef CONFIG_DBUS
43 : : if (global->dbus)
44 : : wpas_dbus_deinit(global->dbus);
45 : : #endif /* CONFIG_DBUS */
46 : 4 : }
47 : :
48 : :
49 : 39 : int wpas_notify_iface_added(struct wpa_supplicant *wpa_s)
50 : : {
51 [ - + ]: 39 : if (wpas_dbus_register_iface(wpa_s))
52 : 0 : return -1;
53 : :
54 [ - + ]: 39 : if (wpas_dbus_register_interface(wpa_s))
55 : 0 : return -1;
56 : :
57 : 39 : return 0;
58 : : }
59 : :
60 : :
61 : 39 : void wpas_notify_iface_removed(struct wpa_supplicant *wpa_s)
62 : : {
63 : : /* unregister interface in old DBus ctrl iface */
64 : 39 : wpas_dbus_unregister_iface(wpa_s);
65 : :
66 : : /* unregister interface in new DBus ctrl iface */
67 : 39 : wpas_dbus_unregister_interface(wpa_s);
68 : 39 : }
69 : :
70 : :
71 : 5633 : void wpas_notify_state_changed(struct wpa_supplicant *wpa_s,
72 : : enum wpa_states new_state,
73 : : enum wpa_states old_state)
74 : : {
75 : : /* notify the old DBus API */
76 : : wpa_supplicant_dbus_notify_state_change(wpa_s, new_state,
77 : : old_state);
78 : :
79 : : /* notify the new DBus API */
80 : 5633 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATE);
81 : :
82 : : #ifdef CONFIG_P2P
83 [ + + ]: 5633 : if (new_state == WPA_COMPLETED)
84 : 619 : wpas_p2p_notif_connected(wpa_s);
85 [ + + ][ + + ]: 5014 : else if (old_state >= WPA_ASSOCIATED && new_state < WPA_ASSOCIATED)
86 : 832 : wpas_p2p_notif_disconnected(wpa_s);
87 : : #endif /* CONFIG_P2P */
88 : :
89 : 5633 : sme_state_changed(wpa_s);
90 : :
91 : : #ifdef ANDROID
92 : : wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_STATE_CHANGE
93 : : "id=%d state=%d BSSID=" MACSTR " SSID=%s",
94 : : wpa_s->current_ssid ? wpa_s->current_ssid->id : -1,
95 : : new_state,
96 : : MAC2STR(wpa_s->bssid),
97 : : wpa_s->current_ssid && wpa_s->current_ssid->ssid ?
98 : : wpa_ssid_txt(wpa_s->current_ssid->ssid,
99 : : wpa_s->current_ssid->ssid_len) : "");
100 : : #endif /* ANDROID */
101 : 5633 : }
102 : :
103 : :
104 : 1238 : void wpas_notify_disconnect_reason(struct wpa_supplicant *wpa_s)
105 : : {
106 : 1238 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_DISCONNECT_REASON);
107 : 1238 : }
108 : :
109 : :
110 : 427 : void wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
111 : : {
112 : 427 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_NETWORK);
113 : 427 : }
114 : :
115 : :
116 : 0 : void wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s)
117 : : {
118 : 0 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN);
119 : 0 : }
120 : :
121 : :
122 : 1401 : void wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s)
123 : : {
124 : 1401 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS);
125 : 1401 : }
126 : :
127 : :
128 : 1238 : void wpas_notify_auth_changed(struct wpa_supplicant *wpa_s)
129 : : {
130 : 1238 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_AUTH_MODE);
131 : 1238 : }
132 : :
133 : :
134 : 325 : void wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s,
135 : : struct wpa_ssid *ssid)
136 : : {
137 : 325 : wpas_dbus_signal_network_enabled_changed(wpa_s, ssid);
138 : 325 : }
139 : :
140 : :
141 : 336 : void wpas_notify_network_selected(struct wpa_supplicant *wpa_s,
142 : : struct wpa_ssid *ssid)
143 : : {
144 : 336 : wpas_dbus_signal_network_selected(wpa_s, ssid->id);
145 : 336 : }
146 : :
147 : :
148 : 13 : void wpas_notify_network_request(struct wpa_supplicant *wpa_s,
149 : : struct wpa_ssid *ssid,
150 : : enum wpa_ctrl_req_type rtype,
151 : : const char *default_txt)
152 : : {
153 : 13 : wpas_dbus_signal_network_request(wpa_s, ssid, rtype, default_txt);
154 : 13 : }
155 : :
156 : :
157 : 1394 : void wpas_notify_scanning(struct wpa_supplicant *wpa_s)
158 : : {
159 : : /* notify the old DBus API */
160 : 1394 : wpa_supplicant_dbus_notify_scanning(wpa_s);
161 : :
162 : : /* notify the new DBus API */
163 : 1394 : wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING);
164 : 1394 : }
165 : :
166 : :
167 : 592 : void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
168 : : {
169 : 592 : wpas_dbus_signal_scan_done(wpa_s, success);
170 : 592 : }
171 : :
172 : :
173 : 589 : void wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
174 : : {
175 : : /* notify the old DBus API */
176 : 589 : wpa_supplicant_dbus_notify_scan_results(wpa_s);
177 : :
178 : 589 : wpas_wps_notify_scan_results(wpa_s);
179 : 589 : }
180 : :
181 : :
182 : 0 : void wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
183 : : const struct wps_credential *cred)
184 : : {
185 : : #ifdef CONFIG_WPS
186 : : /* notify the old DBus API */
187 : 0 : wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred);
188 : : /* notify the new DBus API */
189 : 0 : wpas_dbus_signal_wps_cred(wpa_s, cred);
190 : : #endif /* CONFIG_WPS */
191 : 0 : }
192 : :
193 : :
194 : 13 : void wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s,
195 : : struct wps_event_m2d *m2d)
196 : : {
197 : : #ifdef CONFIG_WPS
198 : 13 : wpas_dbus_signal_wps_event_m2d(wpa_s, m2d);
199 : : #endif /* CONFIG_WPS */
200 : 13 : }
201 : :
202 : :
203 : 29 : void wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s,
204 : : struct wps_event_fail *fail)
205 : : {
206 : : #ifdef CONFIG_WPS
207 : 29 : wpas_dbus_signal_wps_event_fail(wpa_s, fail);
208 : : #endif /* CONFIG_WPS */
209 : 29 : }
210 : :
211 : :
212 : 117 : void wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s)
213 : : {
214 : : #ifdef CONFIG_WPS
215 : 117 : wpas_dbus_signal_wps_event_success(wpa_s);
216 : : #endif /* CONFIG_WPS */
217 : 117 : }
218 : :
219 : :
220 : 549 : void wpas_notify_network_added(struct wpa_supplicant *wpa_s,
221 : : struct wpa_ssid *ssid)
222 : : {
223 : : /*
224 : : * Networks objects created during any P2P activities should not be
225 : : * exposed out. They might/will confuse certain non-P2P aware
226 : : * applications since these network objects won't behave like
227 : : * regular ones.
228 : : */
229 [ + - ][ + + ]: 549 : if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s)
230 : 472 : wpas_dbus_register_network(wpa_s, ssid);
231 : 549 : }
232 : :
233 : :
234 : 18 : void wpas_notify_persistent_group_added(struct wpa_supplicant *wpa_s,
235 : : struct wpa_ssid *ssid)
236 : : {
237 : : #ifdef CONFIG_P2P
238 : 18 : wpas_dbus_register_persistent_group(wpa_s, ssid);
239 : : #endif /* CONFIG_P2P */
240 : 18 : }
241 : :
242 : :
243 : 0 : void wpas_notify_persistent_group_removed(struct wpa_supplicant *wpa_s,
244 : : struct wpa_ssid *ssid)
245 : : {
246 : : #ifdef CONFIG_P2P
247 : 0 : wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
248 : : #endif /* CONFIG_P2P */
249 : 0 : }
250 : :
251 : :
252 : 515 : void wpas_notify_network_removed(struct wpa_supplicant *wpa_s,
253 : : struct wpa_ssid *ssid)
254 : : {
255 [ - + ]: 515 : if (wpa_s->next_ssid == ssid)
256 : 0 : wpa_s->next_ssid = NULL;
257 [ + - ]: 515 : if (wpa_s->wpa)
258 : 515 : wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid);
259 [ + + ][ + - ]: 515 : if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s)
260 : 472 : wpas_dbus_unregister_network(wpa_s, ssid->id);
261 : : #ifdef CONFIG_P2P
262 : 515 : wpas_p2p_network_removed(wpa_s, ssid);
263 : : #endif /* CONFIG_P2P */
264 : 515 : }
265 : :
266 : :
267 : 734 : void wpas_notify_bss_added(struct wpa_supplicant *wpa_s,
268 : : u8 bssid[], unsigned int id)
269 : : {
270 : 734 : wpas_dbus_register_bss(wpa_s, bssid, id);
271 : 734 : wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR,
272 : 4404 : id, MAC2STR(bssid));
273 : 734 : }
274 : :
275 : :
276 : 734 : void wpas_notify_bss_removed(struct wpa_supplicant *wpa_s,
277 : : u8 bssid[], unsigned int id)
278 : : {
279 : 734 : wpas_dbus_unregister_bss(wpa_s, bssid, id);
280 : 734 : wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR,
281 : 4404 : id, MAC2STR(bssid));
282 : 734 : }
283 : :
284 : :
285 : 3 : void wpas_notify_bss_freq_changed(struct wpa_supplicant *wpa_s,
286 : : unsigned int id)
287 : : {
288 : 3 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_FREQ, id);
289 : 3 : }
290 : :
291 : :
292 : 0 : void wpas_notify_bss_signal_changed(struct wpa_supplicant *wpa_s,
293 : : unsigned int id)
294 : : {
295 : 0 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_SIGNAL,
296 : : id);
297 : 0 : }
298 : :
299 : :
300 : 8 : void wpas_notify_bss_privacy_changed(struct wpa_supplicant *wpa_s,
301 : : unsigned int id)
302 : : {
303 : 8 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_PRIVACY,
304 : : id);
305 : 8 : }
306 : :
307 : :
308 : 0 : void wpas_notify_bss_mode_changed(struct wpa_supplicant *wpa_s,
309 : : unsigned int id)
310 : : {
311 : 0 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_MODE, id);
312 : 0 : }
313 : :
314 : :
315 : 8 : void wpas_notify_bss_wpaie_changed(struct wpa_supplicant *wpa_s,
316 : : unsigned int id)
317 : : {
318 : 8 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPA, id);
319 : 8 : }
320 : :
321 : :
322 : 9 : void wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s,
323 : : unsigned int id)
324 : : {
325 : 9 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RSN, id);
326 : 9 : }
327 : :
328 : :
329 : 28 : void wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s,
330 : : unsigned int id)
331 : : {
332 : : #ifdef CONFIG_WPS
333 : 28 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id);
334 : : #endif /* CONFIG_WPS */
335 : 28 : }
336 : :
337 : :
338 : 46 : void wpas_notify_bss_ies_changed(struct wpa_supplicant *wpa_s,
339 : : unsigned int id)
340 : : {
341 : 46 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_IES, id);
342 : 46 : }
343 : :
344 : :
345 : 0 : void wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s,
346 : : unsigned int id)
347 : : {
348 : 0 : wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RATES, id);
349 : 0 : }
350 : :
351 : :
352 : 0 : void wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
353 : : {
354 : 0 : wpas_dbus_signal_blob_added(wpa_s, name);
355 : 0 : }
356 : :
357 : :
358 : 0 : void wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name)
359 : : {
360 : 0 : wpas_dbus_signal_blob_removed(wpa_s, name);
361 : 0 : }
362 : :
363 : :
364 : 0 : void wpas_notify_debug_level_changed(struct wpa_global *global)
365 : : {
366 : 0 : wpas_dbus_signal_debug_level_changed(global);
367 : 0 : }
368 : :
369 : :
370 : 0 : void wpas_notify_debug_timestamp_changed(struct wpa_global *global)
371 : : {
372 : 0 : wpas_dbus_signal_debug_timestamp_changed(global);
373 : 0 : }
374 : :
375 : :
376 : 0 : void wpas_notify_debug_show_keys_changed(struct wpa_global *global)
377 : : {
378 : 0 : wpas_dbus_signal_debug_show_keys_changed(global);
379 : 0 : }
380 : :
381 : :
382 : 0 : void wpas_notify_suspend(struct wpa_global *global)
383 : : {
384 : : struct wpa_supplicant *wpa_s;
385 : :
386 : 0 : os_get_time(&global->suspend_time);
387 : 0 : wpa_printf(MSG_DEBUG, "System suspend notification");
388 [ # # ]: 0 : for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next)
389 : 0 : wpa_drv_suspend(wpa_s);
390 : 0 : }
391 : :
392 : :
393 : 0 : void wpas_notify_resume(struct wpa_global *global)
394 : : {
395 : : struct os_time now;
396 : : int slept;
397 : : struct wpa_supplicant *wpa_s;
398 : :
399 [ # # ]: 0 : if (global->suspend_time.sec == 0)
400 : 0 : slept = -1;
401 : : else {
402 : 0 : os_get_time(&now);
403 : 0 : slept = now.sec - global->suspend_time.sec;
404 : : }
405 : 0 : wpa_printf(MSG_DEBUG, "System resume notification (slept %d seconds)",
406 : : slept);
407 : :
408 [ # # ]: 0 : for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
409 : 0 : wpa_drv_resume(wpa_s);
410 [ # # ]: 0 : if (wpa_s->wpa_state == WPA_DISCONNECTED)
411 : 0 : wpa_supplicant_req_scan(wpa_s, 0, 100000);
412 : : }
413 : 0 : }
414 : :
415 : :
416 : : #ifdef CONFIG_P2P
417 : :
418 : 241 : void wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s,
419 : : const u8 *dev_addr, int new_device)
420 : : {
421 [ + + ]: 241 : if (new_device) {
422 : : /* Create the new peer object */
423 : 236 : wpas_dbus_register_peer(wpa_s, dev_addr);
424 : : }
425 : :
426 : : /* Notify a new peer has been detected*/
427 : 241 : wpas_dbus_signal_peer_device_found(wpa_s, dev_addr);
428 : 241 : }
429 : :
430 : :
431 : 236 : void wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s,
432 : : const u8 *dev_addr)
433 : : {
434 : 236 : wpas_dbus_unregister_peer(wpa_s, dev_addr);
435 : :
436 : : /* Create signal on interface object*/
437 : 236 : wpas_dbus_signal_peer_device_lost(wpa_s, dev_addr);
438 : 236 : }
439 : :
440 : :
441 : 167 : void wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
442 : : const struct wpa_ssid *ssid,
443 : : const char *role)
444 : : {
445 : 167 : wpas_dbus_unregister_p2p_group(wpa_s, ssid);
446 : :
447 : 167 : wpas_dbus_signal_p2p_group_removed(wpa_s, role);
448 : 167 : }
449 : :
450 : :
451 : 9 : void wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
452 : : const u8 *src, u16 dev_passwd_id)
453 : : {
454 : 9 : wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id);
455 : 9 : }
456 : :
457 : :
458 : 96 : void wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s,
459 : : struct p2p_go_neg_results *res)
460 : : {
461 : 96 : wpas_dbus_signal_p2p_go_neg_resp(wpa_s, res);
462 : 96 : }
463 : :
464 : :
465 : 13 : void wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s,
466 : : int status, const u8 *bssid)
467 : : {
468 : 13 : wpas_dbus_signal_p2p_invitation_result(wpa_s, status, bssid);
469 : 13 : }
470 : :
471 : :
472 : 22 : void wpas_notify_p2p_sd_request(struct wpa_supplicant *wpa_s,
473 : : int freq, const u8 *sa, u8 dialog_token,
474 : : u16 update_indic, const u8 *tlvs,
475 : : size_t tlvs_len)
476 : : {
477 : 22 : wpas_dbus_signal_p2p_sd_request(wpa_s, freq, sa, dialog_token,
478 : : update_indic, tlvs, tlvs_len);
479 : 22 : }
480 : :
481 : :
482 : 22 : void wpas_notify_p2p_sd_response(struct wpa_supplicant *wpa_s,
483 : : const u8 *sa, u16 update_indic,
484 : : const u8 *tlvs, size_t tlvs_len)
485 : : {
486 : 22 : wpas_dbus_signal_p2p_sd_response(wpa_s, sa, update_indic,
487 : : tlvs, tlvs_len);
488 : 22 : }
489 : :
490 : :
491 : : /**
492 : : * wpas_notify_p2p_provision_discovery - Notification of provision discovery
493 : : * @dev_addr: Who sent the request or responded to our request.
494 : : * @request: Will be 1 if request, 0 for response.
495 : : * @status: Valid only in case of response (0 in case of success)
496 : : * @config_methods: WPS config methods
497 : : * @generated_pin: PIN to be displayed in case of WPS_CONFIG_DISPLAY method
498 : : *
499 : : * This can be used to notify:
500 : : * - Requests or responses
501 : : * - Various config methods
502 : : * - Failure condition in case of response
503 : : */
504 : 38 : void wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
505 : : const u8 *dev_addr, int request,
506 : : enum p2p_prov_disc_status status,
507 : : u16 config_methods,
508 : : unsigned int generated_pin)
509 : : {
510 : 38 : wpas_dbus_signal_p2p_provision_discovery(wpa_s, dev_addr, request,
511 : : status, config_methods,
512 : : generated_pin);
513 : 38 : }
514 : :
515 : :
516 : 164 : void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
517 : : struct wpa_ssid *ssid, int network_id,
518 : : int client)
519 : : {
520 : : /* Notify a group has been started */
521 : 164 : wpas_dbus_register_p2p_group(wpa_s, ssid);
522 : :
523 : 164 : wpas_dbus_signal_p2p_group_started(wpa_s, ssid, client, network_id);
524 : 164 : }
525 : :
526 : :
527 : 2 : void wpas_notify_p2p_wps_failed(struct wpa_supplicant *wpa_s,
528 : : struct wps_event_fail *fail)
529 : : {
530 : 2 : wpas_dbus_signal_p2p_wps_failed(wpa_s, fail);
531 : 2 : }
532 : :
533 : : #endif /* CONFIG_P2P */
534 : :
535 : :
536 : 101 : static void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
537 : : const u8 *sta,
538 : : const u8 *p2p_dev_addr)
539 : : {
540 : : #ifdef CONFIG_P2P
541 : 101 : wpas_p2p_notify_ap_sta_authorized(wpa_s, p2p_dev_addr);
542 : :
543 : : /*
544 : : * Register a group member object corresponding to this peer and
545 : : * emit a PeerJoined signal. This will check if it really is a
546 : : * P2P group.
547 : : */
548 : 101 : wpas_dbus_register_p2p_groupmember(wpa_s, sta);
549 : :
550 : : /*
551 : : * Create 'peer-joined' signal on group object -- will also
552 : : * check P2P itself.
553 : : */
554 : 101 : wpas_dbus_signal_p2p_peer_joined(wpa_s, sta);
555 : : #endif /* CONFIG_P2P */
556 : :
557 : : /* Notify listeners a new station has been authorized */
558 : 101 : wpas_dbus_signal_sta_authorized(wpa_s, sta);
559 : 101 : }
560 : :
561 : :
562 : 101 : static void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s,
563 : : const u8 *sta)
564 : : {
565 : : #ifdef CONFIG_P2P
566 : : /*
567 : : * Unregister a group member object corresponding to this peer
568 : : * if this is a P2P group.
569 : : */
570 : 101 : wpas_dbus_unregister_p2p_groupmember(wpa_s, sta);
571 : :
572 : : /*
573 : : * Create 'peer-disconnected' signal on group object if this
574 : : * is a P2P group.
575 : : */
576 : 101 : wpas_dbus_signal_p2p_peer_disconnected(wpa_s, sta);
577 : : #endif /* CONFIG_P2P */
578 : :
579 : : /* Notify listeners a station has been deauthorized */
580 : 101 : wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
581 : 101 : }
582 : :
583 : :
584 : 202 : void wpas_notify_sta_authorized(struct wpa_supplicant *wpa_s,
585 : : const u8 *mac_addr, int authorized,
586 : : const u8 *p2p_dev_addr)
587 : : {
588 [ + + ]: 202 : if (authorized)
589 : 101 : wpas_notify_ap_sta_authorized(wpa_s, mac_addr, p2p_dev_addr);
590 : : else
591 : 101 : wpas_notify_ap_sta_deauthorized(wpa_s, mac_addr);
592 : 202 : }
593 : :
594 : :
595 : 307 : void wpas_notify_certification(struct wpa_supplicant *wpa_s, int depth,
596 : : const char *subject, const char *cert_hash,
597 : : const struct wpabuf *cert)
598 : : {
599 [ + + ][ + + ]: 307 : wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_CERT
600 : : "depth=%d subject='%s'%s%s",
601 : : depth, subject,
602 : : cert_hash ? " hash=" : "",
603 : : cert_hash ? cert_hash : "");
604 : :
605 [ + + ]: 307 : if (cert) {
606 : : char *cert_hex;
607 : 3 : size_t len = wpabuf_len(cert) * 2 + 1;
608 : 3 : cert_hex = os_malloc(len);
609 [ + - ]: 3 : if (cert_hex) {
610 : 3 : wpa_snprintf_hex(cert_hex, len, wpabuf_head(cert),
611 : : wpabuf_len(cert));
612 : 3 : wpa_msg_ctrl(wpa_s, MSG_INFO,
613 : : WPA_EVENT_EAP_PEER_CERT
614 : : "depth=%d subject='%s' cert=%s",
615 : : depth, subject, cert_hex);
616 : 3 : os_free(cert_hex);
617 : : }
618 : : }
619 : :
620 : : /* notify the old DBus API */
621 : 307 : wpa_supplicant_dbus_notify_certification(wpa_s, depth, subject,
622 : : cert_hash, cert);
623 : : /* notify the new DBus API */
624 : 307 : wpas_dbus_signal_certification(wpa_s, depth, subject, cert_hash, cert);
625 : 307 : }
626 : :
627 : :
628 : 176 : void wpas_notify_preq(struct wpa_supplicant *wpa_s,
629 : : const u8 *addr, const u8 *dst, const u8 *bssid,
630 : : const u8 *ie, size_t ie_len, u32 ssi_signal)
631 : : {
632 : : #ifdef CONFIG_AP
633 : 176 : wpas_dbus_signal_preq(wpa_s, addr, dst, bssid, ie, ie_len, ssi_signal);
634 : : #endif /* CONFIG_AP */
635 : 176 : }
636 : :
637 : :
638 : 1425 : void wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
639 : : const char *parameter)
640 : : {
641 : 1425 : wpas_dbus_signal_eap_status(wpa_s, status, parameter);
642 : 1425 : wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_EAP_STATUS
643 : : "status='%s' parameter='%s'",
644 : : status, parameter);
645 : 1425 : }
|