Skip to content

Commit 5d79291

Browse files
committed
Merge branch 'bugfix/wps_timer_causing_disconnect' into 'master'
fix(esp_wifi): Disable WPS timers once WPS succeed Closes WIFIBUG-393 See merge request espressif/esp-idf!33240
2 parents 82a29b7 + 3629909 commit 5d79291

File tree

1 file changed

+10
-3
lines changed
  • components/wpa_supplicant/esp_supplicant/src

1 file changed

+10
-3
lines changed

components/wpa_supplicant/esp_supplicant/src/esp_wps.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ void wifi_station_wps_msg_timeout(void *data, void *user_ctx);
7272
void wifi_station_wps_eapol_start_handle(void *data, void *user_ctx);
7373
void wifi_station_wps_success(void *data, void *user_ctx);
7474
void wifi_station_wps_timeout(void *data, void *user_ctx);
75+
int wps_delete_timer(void);
7576

7677
struct wps_sm *gWpsSm = NULL;
7778
static wps_factory_information_t *s_factory_info = NULL;
@@ -623,14 +624,14 @@ int wps_process_wps_mX_req(u8 *ubuf, int len, enum wps_process_res *res)
623624
if (expd->opcode != WSC_Start) {
624625
wpa_printf(MSG_DEBUG, "EAP-WSC: Unexpected Op-Code %d "
625626
"in WAIT_START state", expd->opcode);
626-
return ESP_FAIL;
627+
return ESP_ERR_INVALID_STATE;
627628
}
628629
wpa_printf(MSG_DEBUG, "EAP-WSC: Received start");
629630
sm->state = WPA_MESG;
630631
} else if (expd->opcode == WSC_Start) {
631632
wpa_printf(MSG_DEBUG, "EAP-WSC: Unexpected Op-Code %d",
632633
expd->opcode);
633-
return ESP_FAIL;
634+
return ESP_ERR_INVALID_STATE;
634635
}
635636

636637
flag = *(u8 *)(ubuf + sizeof(struct eap_expand));
@@ -834,7 +835,8 @@ int wps_finish(void)
834835
if (sm->wps->state == WPS_FINISHED) {
835836
wpa_printf(MSG_DEBUG, "wps finished------>");
836837
wps_set_status(WPS_STATUS_SUCCESS);
837-
wps_stop_connection_timers(sm);
838+
/* WPS finished, dequeue all timers */
839+
wps_delete_timer();
838840

839841
if (sm->ap_cred_cnt == 1) {
840842
wifi_config_t *config = os_zalloc(sizeof(wifi_config_t));
@@ -844,6 +846,7 @@ int wps_finish(void)
844846
}
845847

846848
esp_wifi_get_config(WIFI_IF_STA, config);
849+
esp_wifi_disconnect();
847850
os_memcpy(config->sta.ssid, sm->creds[0].ssid, sm->creds[0].ssid_len);
848851
os_memcpy(config->sta.password, sm->creds[0].key, sm->creds[0].key_len);
849852
os_memcpy(config->sta.bssid, sm->bssid, ETH_ALEN);
@@ -857,6 +860,7 @@ int wps_finish(void)
857860
config->sta.bssid_set = 0;
858861
config->sta.sae_pwe_h2e = 0;
859862
esp_wifi_set_config(WIFI_IF_STA, config);
863+
esp_wifi_connect();
860864

861865
os_free(config);
862866
}
@@ -1092,6 +1096,8 @@ int wps_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len)
10921096
wpa_printf(MSG_DEBUG, "sm->wps->state = %d", sm->wps->state);
10931097
wps_start_msg_timer();
10941098
}
1099+
} else if (ret == ESP_ERR_INVALID_STATE) {
1100+
ret = ESP_OK;
10951101
} else {
10961102
ret = ESP_FAIL;
10971103
}
@@ -1654,6 +1660,7 @@ wifi_wps_scan_done(void *arg, ETS_STATUS status)
16541660
esp_wifi_set_config(0, &wifi_config);
16551661

16561662
wpa_printf(MSG_DEBUG, "WPS: neg start");
1663+
wifi_config.sta.failure_retry_cnt = 2;
16571664
esp_wifi_connect();
16581665
sm->state = WAIT_START;
16591666
eloop_cancel_timeout(wifi_station_wps_msg_timeout, NULL, NULL);

0 commit comments

Comments
 (0)