aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant/gas_query.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2017-03-26 09:34:06 (GMT)
committerJouni Malinen <j@w1.fi>2017-03-26 18:13:21 (GMT)
commita34317b52671b37cc5e04a37d14e0e812a7caf6b (patch)
treeee79c3343f9a9a46f1c634d335981d96395766bf /wpa_supplicant/gas_query.c
parente4612f8443b9cbe21fc098e5d898257c57cd74b6 (diff)
downloadhostap-a34317b52671b37cc5e04a37d14e0e812a7caf6b.zip
hostap-a34317b52671b37cc5e04a37d14e0e812a7caf6b.tar.gz
hostap-a34317b52671b37cc5e04a37d14e0e812a7caf6b.tar.bz2
GAS: Handle no-ACK TX status for GAS request frames
Previously, only the success and failure (to TX) cases were handled. It is also possible for the driver to transmit the frame, but not receive an ACK from the recipient. Address that by waiting for a short period of time for a response. This fixes cases where OSU provider icon fetching could get stuck if no ACK frame is received. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
Diffstat (limited to 'wpa_supplicant/gas_query.c')
-rw-r--r--wpa_supplicant/gas_query.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/wpa_supplicant/gas_query.c b/wpa_supplicant/gas_query.c
index db481a5..91cf19a 100644
--- a/wpa_supplicant/gas_query.c
+++ b/wpa_supplicant/gas_query.c
@@ -243,10 +243,17 @@ static void gas_query_tx_status(struct wpa_supplicant *wpa_s,
}
os_get_reltime(&query->last_oper);
- if (result == OFFCHANNEL_SEND_ACTION_SUCCESS) {
+ if (result == OFFCHANNEL_SEND_ACTION_SUCCESS ||
+ result == OFFCHANNEL_SEND_ACTION_NO_ACK) {
eloop_cancel_timeout(gas_query_timeout, gas, query);
- eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
- gas_query_timeout, gas, query);
+ if (result == OFFCHANNEL_SEND_ACTION_NO_ACK) {
+ wpa_printf(MSG_DEBUG, "GAS: No ACK to GAS request");
+ eloop_register_timeout(0, 250000,
+ gas_query_timeout, gas, query);
+ } else {
+ eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
+ gas_query_timeout, gas, query);
+ }
if (query->wait_comeback && !query->retry) {
eloop_cancel_timeout(gas_query_rx_comeback_timeout,
gas, query);