Fix AP mode in wpa_supplicant with interface events
[libeap.git] / wpa_supplicant / events.c
index 0b26a9b..e16b45f 100644 (file)
@@ -463,6 +463,11 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
                }
 
 #ifdef CONFIG_WPS
+               if ((ssid->key_mgmt & WPA_KEY_MGMT_WPS) && e && e->count > 0) {
+                       wpa_printf(MSG_DEBUG, "   skip - blacklisted (WPS)");
+                       continue;
+               }
+
                if (wpa && ssid->ssid_len == 0 &&
                    wpas_wps_ssid_wildcard_ok(wpa_s, ssid, bss))
                        check_ssid = 0;
@@ -627,7 +632,7 @@ void wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
                if (wpas_p2p_notif_pbc_overlap(wpa_s) == 1)
                        return;
 #endif /* CONFIG_P2P */
-               wpa_supplicant_req_new_scan(wpa_s, 10, 0);
+               wpas_wps_cancel(wpa_s);
                return;
        }
 
@@ -1230,7 +1235,7 @@ static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
                wpa_printf(MSG_DEBUG, "WPA: Auto connect enabled: try to "
                           "reconnect (wps=%d)",
                           wpa_s->key_mgmt == WPA_KEY_MGMT_WPS);
-               if (wpa_s->wpa_state >= WPA_ASSOCIATED)
+               if (wpa_s->wpa_state >= WPA_ASSOCIATING)
                        wpa_supplicant_req_scan(wpa_s, 0, 100000);
        } else {
                wpa_printf(MSG_DEBUG, "WPA: Auto connect disabled: do not try "
@@ -1800,9 +1805,13 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
        case EVENT_INTERFACE_ENABLED:
                wpa_printf(MSG_DEBUG, "Interface was enabled");
                if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED) {
-                       wpa_supplicant_set_state(wpa_s,
-                                                WPA_DISCONNECTED);
-                       wpa_supplicant_req_scan(wpa_s, 0, 0);
+                       if (!wpa_s->ap_iface) {
+                               wpa_supplicant_set_state(wpa_s,
+                                                        WPA_DISCONNECTED);
+                               wpa_supplicant_req_scan(wpa_s, 0, 0);
+                       } else
+                               wpa_supplicant_set_state(wpa_s,
+                                                        WPA_COMPLETED);
                }
                break;
        case EVENT_INTERFACE_DISABLED: