mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
HS 2.0R2: Try to scan multiple times for OSU providers
Scan operation is not that reliable, so try couple of times if no OSU provider matches are found during fetch_osu command. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
cf6d08a63f
commit
a6739e191e
@ -385,6 +385,7 @@ void hs20_parse_rx_hs20_anqp_resp(struct wpa_supplicant *wpa_s,
|
|||||||
case HS20_STYPE_OSU_PROVIDERS_LIST:
|
case HS20_STYPE_OSU_PROVIDERS_LIST:
|
||||||
wpa_msg(wpa_s, MSG_INFO, "RX-HS20-ANQP " MACSTR
|
wpa_msg(wpa_s, MSG_INFO, "RX-HS20-ANQP " MACSTR
|
||||||
" OSU Providers list", MAC2STR(sa));
|
" OSU Providers list", MAC2STR(sa));
|
||||||
|
wpa_s->num_prov_found++;
|
||||||
if (anqp) {
|
if (anqp) {
|
||||||
wpabuf_free(anqp->hs20_osu_providers_list);
|
wpabuf_free(anqp->hs20_osu_providers_list);
|
||||||
anqp->hs20_osu_providers_list =
|
anqp->hs20_osu_providers_list =
|
||||||
@ -821,11 +822,20 @@ int hs20_fetch_osu(struct wpa_supplicant *wpa_s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
wpa_msg(wpa_s, MSG_INFO, "Starting OSU provisioning information fetch");
|
wpa_msg(wpa_s, MSG_INFO, "Starting OSU provisioning information fetch");
|
||||||
|
wpa_s->num_osu_scans = 0;
|
||||||
|
wpa_s->num_prov_found = 0;
|
||||||
|
hs20_start_osu_scan(wpa_s);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hs20_start_osu_scan(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
wpa_s->num_osu_scans++;
|
||||||
wpa_s->scan_req = MANUAL_SCAN_REQ;
|
wpa_s->scan_req = MANUAL_SCAN_REQ;
|
||||||
wpa_s->scan_res_handler = hs20_osu_scan_res_handler;
|
wpa_s->scan_res_handler = hs20_osu_scan_res_handler;
|
||||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,5 +32,6 @@ void hs20_osu_icon_fetch(struct wpa_supplicant *wpa_s);
|
|||||||
int hs20_fetch_osu(struct wpa_supplicant *wpa_s);
|
int hs20_fetch_osu(struct wpa_supplicant *wpa_s);
|
||||||
void hs20_cancel_fetch_osu(struct wpa_supplicant *wpa_s);
|
void hs20_cancel_fetch_osu(struct wpa_supplicant *wpa_s);
|
||||||
void hs20_icon_fetch_failed(struct wpa_supplicant *wpa_s);
|
void hs20_icon_fetch_failed(struct wpa_supplicant *wpa_s);
|
||||||
|
void hs20_start_osu_scan(struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
#endif /* HS20_SUPPLICANT_H */
|
#endif /* HS20_SUPPLICANT_H */
|
||||||
|
@ -2474,6 +2474,12 @@ static void interworking_next_anqp_fetch(struct wpa_supplicant *wpa_s)
|
|||||||
|
|
||||||
if (found == 0) {
|
if (found == 0) {
|
||||||
if (wpa_s->fetch_osu_info) {
|
if (wpa_s->fetch_osu_info) {
|
||||||
|
if (wpa_s->num_prov_found == 0 &&
|
||||||
|
wpa_s->num_osu_scans < 3) {
|
||||||
|
wpa_printf(MSG_DEBUG, "HS 2.0: No OSU providers seen - try to scan again");
|
||||||
|
hs20_start_osu_scan(wpa_s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
wpa_printf(MSG_DEBUG, "Interworking: Next icon");
|
wpa_printf(MSG_DEBUG, "Interworking: Next icon");
|
||||||
hs20_osu_icon_fetch(wpa_s);
|
hs20_osu_icon_fetch(wpa_s);
|
||||||
return;
|
return;
|
||||||
|
@ -778,6 +778,8 @@ struct wpa_supplicant {
|
|||||||
struct osu_provider *osu_prov;
|
struct osu_provider *osu_prov;
|
||||||
size_t osu_prov_count;
|
size_t osu_prov_count;
|
||||||
struct os_reltime osu_icon_fetch_start;
|
struct os_reltime osu_icon_fetch_start;
|
||||||
|
unsigned int num_osu_scans;
|
||||||
|
unsigned int num_prov_found;
|
||||||
#endif /* CONFIG_INTERWORKING */
|
#endif /* CONFIG_INTERWORKING */
|
||||||
unsigned int drv_capa_known;
|
unsigned int drv_capa_known;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user