]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - wpa_supplicant/wpa_supplicant.c
dbus: Export roam time, roam complete, and session length
[thirdparty/hostap.git] / wpa_supplicant / wpa_supplicant.c
index 88d4a0487d651c8fa4abada0d484093e1f953574..b990e94adeddb9b3ecb52a8310a9245d917d9467 100644 (file)
@@ -846,6 +846,23 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
                wpa_supplicant_state_txt(wpa_s->wpa_state),
                wpa_supplicant_state_txt(state));
 
+       if (state == WPA_COMPLETED &&
+           os_reltime_initialized(&wpa_s->roam_start)) {
+               os_reltime_age(&wpa_s->roam_start, &wpa_s->roam_time);
+               wpa_s->roam_start.sec = 0;
+               wpa_s->roam_start.usec = 0;
+               wpas_notify_auth_changed(wpa_s);
+               wpas_notify_roam_time(wpa_s);
+               wpas_notify_roam_complete(wpa_s);
+       } else if (state == WPA_DISCONNECTED &&
+                  os_reltime_initialized(&wpa_s->roam_start)) {
+               wpa_s->roam_start.sec = 0;
+               wpa_s->roam_start.usec = 0;
+               wpa_s->roam_time.sec = 0;
+               wpa_s->roam_time.usec = 0;
+               wpas_notify_roam_complete(wpa_s);
+       }
+
        if (state == WPA_INTERFACE_DISABLED) {
                /* Assure normal scan when interface is restored */
                wpa_s->normal_scans = 0;
@@ -1904,6 +1921,8 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
                if (wpa_s->current_bss && wpa_s->current_bss == bss) {
                        wmm_ac_save_tspecs(wpa_s);
                        wpa_s->reassoc_same_bss = 1;
+               } else if (wpa_s->current_bss && wpa_s->current_bss != bss) {
+                       os_get_reltime(&wpa_s->roam_start);
                }
        }