@@ -440,9 +440,9 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
440440 return false;
441441 }
442442 esp_wifi_enable_sta_privacy_internal ();
443- os_memset (sm -> ssid [0 ], 0 , SSID_MAX_LEN );
444- os_memcpy (sm -> ssid [0 ], (char * )& scan -> ssid [2 ], (int )scan -> ssid [1 ]);
445- sm -> ssid_len [0 ] = scan -> ssid [1 ];
443+ os_memset (sm -> creds [0 ]. ssid , 0 , SSID_MAX_LEN );
444+ os_memcpy (sm -> creds [0 ]. ssid , (char * )& scan -> ssid [2 ], (int )scan -> ssid [1 ]);
445+ sm -> creds [0 ]. ssid_len = scan -> ssid [1 ];
446446 if (scan -> bssid && memcmp (sm -> bssid , scan -> bssid , ETH_ALEN ) != 0 ) {
447447 wpa_printf (MSG_INFO , "sm BSSid: " MACSTR " scan BSSID " MACSTR ,
448448 MAC2STR (sm -> bssid ), MAC2STR (scan -> bssid ));
@@ -468,7 +468,7 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
468468 }
469469 }
470470 wpabuf_free (buf );
471- wpa_printf (MSG_DEBUG , "wps discover [%s] " , (char * )sm -> ssid );
471+ wpa_printf (MSG_DEBUG , "wps discover [%s] " , (char * )sm -> creds [ 0 ]. ssid );
472472 sm -> channel = scan -> chan ;
473473
474474 return true;
@@ -793,8 +793,7 @@ static int wps_sm_init(struct wps_sm *sm)
793793 sm -> scan_cnt = 0 ;
794794 sm -> discover_ssid_cnt = 0 ;
795795 os_bzero (sm -> bssid , ETH_ALEN );
796- os_bzero (sm -> ssid , sizeof (sm -> ssid ));
797- os_bzero (sm -> ssid_len , sizeof (sm -> ssid_len ));
796+ os_bzero (sm -> creds , sizeof (sm -> creds ));
798797 sm -> ap_cred_cnt = 0 ;
799798
800799 return 0 ;
@@ -845,9 +844,16 @@ int wps_finish(void)
845844 }
846845
847846 esp_wifi_get_config (WIFI_IF_STA , config );
848- os_memcpy (config -> sta .ssid , sm -> ssid [0 ], sm -> ssid_len [0 ]);
849- os_memcpy (config -> sta .password , sm -> key [0 ], sm -> key_len [0 ]);
847+ os_memcpy (config -> sta .ssid , sm -> creds [0 ]. ssid , sm -> creds [0 ]. ssid_len );
848+ os_memcpy (config -> sta .password , sm -> creds [0 ]. key , sm -> creds [0 ]. key_len );
850849 os_memcpy (config -> sta .bssid , sm -> bssid , ETH_ALEN );
850+ #ifndef CONFIG_WPS_STRICT
851+ /* Some APs support AES in WPA IE, enable connection with them */
852+ if (sm -> creds [0 ].auth_type == WPS_AUTH_WPAPSK &&
853+ (sm -> creds [0 ].encr_type & WPS_ENCR_AES )) {
854+ config -> sta .threshold .authmode = WIFI_AUTH_WPA_PSK ;
855+ }
856+ #endif
851857 config -> sta .bssid_set = 0 ;
852858 config -> sta .sae_pwe_h2e = 0 ;
853859 esp_wifi_set_config (WIFI_IF_STA , config );
@@ -863,8 +869,7 @@ int wps_finish(void)
863869 if (sm -> ignore_sel_reg ) {
864870 sm -> discover_ssid_cnt = 0 ;
865871 esp_wifi_disconnect ();
866- os_bzero (sm -> ssid , sizeof (sm -> ssid ));
867- os_bzero (sm -> ssid_len , sizeof (sm -> ssid_len ));
872+ os_bzero (sm -> creds , sizeof (sm -> creds ));
868873 wps_add_discard_ap (sm -> bssid );
869874 } else {
870875 ret = wps_stop_process (WPS_FAIL_REASON_NORMAL );
@@ -1313,8 +1318,7 @@ wifi_station_wps_msg_timeout_internal(void)
13131318 if (sm -> ignore_sel_reg ) {
13141319 esp_wifi_disconnect ();
13151320 wps_add_discard_ap (sm -> bssid );
1316- os_bzero (sm -> ssid , sizeof (sm -> ssid ));
1317- os_bzero (sm -> ssid_len , sizeof (sm -> ssid_len ));
1321+ os_bzero (sm -> creds , sizeof (sm -> creds ));
13181322 os_bzero (sm -> bssid , ETH_ALEN );
13191323 sm -> discover_ssid_cnt = 0 ;
13201324 wifi_wps_scan (NULL , NULL );
@@ -1344,8 +1348,8 @@ void wifi_station_wps_success_internal(void)
13441348 if (sm -> ap_cred_cnt > 1 ) {
13451349 evt .ap_cred_cnt = sm -> ap_cred_cnt ;
13461350 for (i = 0 ; i < MAX_WPS_AP_CRED ; i ++ ) {
1347- os_memcpy (evt .ap_cred [i ].ssid , sm -> ssid [i ], sm -> ssid_len [i ]);
1348- os_memcpy (evt .ap_cred [i ].passphrase , sm -> key [i ], sm -> key_len [i ]);
1351+ os_memcpy (evt .ap_cred [i ].ssid , sm -> creds [i ]. ssid , sm -> creds [i ]. ssid_len );
1352+ os_memcpy (evt .ap_cred [i ].passphrase , sm -> creds [i ]. key , sm -> creds [i ]. key_len );
13491353 }
13501354 esp_event_post (WIFI_EVENT , WIFI_EVENT_STA_WPS_ER_SUCCESS , & evt ,
13511355 sizeof (evt ), OS_BLOCK );
@@ -1383,17 +1387,13 @@ void wifi_station_wps_eapol_start_handle(void *data, void *user_ctx)
13831387
13841388static int save_credentials_cb (void * ctx , const struct wps_credential * cred )
13851389{
1386- if (!gWpsSm || !cred || gWpsSm -> ap_cred_cnt > 2 ) {
1390+ struct wps_credential * creds ;
1391+ if (!gWpsSm || !cred || gWpsSm -> ap_cred_cnt > MAX_CRED_COUNT ) {
13871392 return ESP_FAIL ;
13881393 }
13891394
1390- os_memset (gWpsSm -> ssid [gWpsSm -> ap_cred_cnt ], 0x00 , sizeof (gWpsSm -> ssid [gWpsSm -> ap_cred_cnt ]));
1391- os_memset (gWpsSm -> key [gWpsSm -> ap_cred_cnt ], 0x00 , sizeof (gWpsSm -> key [gWpsSm -> ap_cred_cnt ]));
1392-
1393- os_memcpy (gWpsSm -> ssid [gWpsSm -> ap_cred_cnt ], cred -> ssid , cred -> ssid_len );
1394- gWpsSm -> ssid_len [gWpsSm -> ap_cred_cnt ] = cred -> ssid_len ;
1395- os_memcpy (gWpsSm -> key [gWpsSm -> ap_cred_cnt ], cred -> key , cred -> key_len );
1396- gWpsSm -> key_len [gWpsSm -> ap_cred_cnt ] = cred -> key_len ;
1395+ creds = & gWpsSm -> creds [gWpsSm -> ap_cred_cnt ];
1396+ memcpy (creds , cred , sizeof (* creds ));
13971397
13981398 gWpsSm -> ap_cred_cnt ++ ;
13991399
@@ -1646,11 +1646,11 @@ wifi_wps_scan_done(void *arg, ETS_STATUS status)
16461646 esp_wifi_disconnect ();
16471647
16481648 os_memcpy (wifi_config .sta .bssid , sm -> bssid , ETH_ALEN );
1649- os_memcpy (wifi_config .sta .ssid , (char * )sm -> ssid [0 ], sm -> ssid_len [0 ]);
1649+ os_memcpy (wifi_config .sta .ssid , (char * )sm -> creds [0 ]. ssid , sm -> creds [0 ]. ssid_len );
16501650 wifi_config .sta .bssid_set = 1 ;
16511651 wifi_config .sta .channel = sm -> channel ;
16521652 wpa_printf (MSG_INFO , "WPS: connecting to %s, bssid=" MACSTR ,
1653- (char * )sm -> ssid [0 ], MAC2STR (wifi_config .sta .bssid ));
1653+ (char * )sm -> creds [0 ]. ssid , MAC2STR (wifi_config .sta .bssid ));
16541654 esp_wifi_set_config (0 , & wifi_config );
16551655
16561656 wpa_printf (MSG_DEBUG , "WPS: neg start" );
0 commit comments