Remove unneeded GAS query delay on connection-in-progress
This type of protection against concurrent connection and offchannel GAS operations is now enforced through the wpa_radio work mechanism, so this separate protection mechanism is not needed anymore. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
6ac4b15ef8
commit
4bb232153f
1 changed files with 16 additions and 38 deletions
|
@ -23,8 +23,6 @@
|
||||||
|
|
||||||
/** GAS query timeout in seconds */
|
/** GAS query timeout in seconds */
|
||||||
#define GAS_QUERY_TIMEOUT_PERIOD 2
|
#define GAS_QUERY_TIMEOUT_PERIOD 2
|
||||||
/** Retry period for GAS query requests in milliseconds */
|
|
||||||
#define GAS_SERVICE_RETRY_PERIOD_MS 500
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -63,7 +61,6 @@ struct gas_query {
|
||||||
|
|
||||||
static void gas_query_tx_comeback_timeout(void *eloop_data, void *user_ctx);
|
static void gas_query_tx_comeback_timeout(void *eloop_data, void *user_ctx);
|
||||||
static void gas_query_timeout(void *eloop_data, void *user_ctx);
|
static void gas_query_timeout(void *eloop_data, void *user_ctx);
|
||||||
static void gas_service_timeout(void *eloop_data, void *user_ctx);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -142,7 +139,6 @@ static void gas_query_done(struct gas_query *gas,
|
||||||
offchannel_send_action_done(gas->wpa_s);
|
offchannel_send_action_done(gas->wpa_s);
|
||||||
eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
|
eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
|
||||||
eloop_cancel_timeout(gas_query_timeout, gas, query);
|
eloop_cancel_timeout(gas_query_timeout, gas, query);
|
||||||
eloop_cancel_timeout(gas_service_timeout, gas, query);
|
|
||||||
dl_list_del(&query->list);
|
dl_list_del(&query->list);
|
||||||
query->cb(query->ctx, query->addr, query->dialog_token, result,
|
query->cb(query->ctx, query->addr, query->dialog_token, result,
|
||||||
query->adv_proto, query->resp, query->status_code);
|
query->adv_proto, query->resp, query->status_code);
|
||||||
|
@ -527,38 +523,6 @@ static void gas_query_timeout(void *eloop_data, void *user_ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void gas_service_timeout(void *eloop_data, void *user_ctx)
|
|
||||||
{
|
|
||||||
struct gas_query *gas = eloop_data;
|
|
||||||
struct wpa_supplicant *wpa_s = gas->wpa_s;
|
|
||||||
struct gas_query_pending *query = user_ctx;
|
|
||||||
int conn;
|
|
||||||
|
|
||||||
conn = wpas_wpa_is_in_progress(wpa_s, 1);
|
|
||||||
if (conn) {
|
|
||||||
wpa_printf(MSG_DEBUG, "GAS: Delaying GAS query Tx while connection operation is in progress");
|
|
||||||
eloop_register_timeout(
|
|
||||||
GAS_SERVICE_RETRY_PERIOD_MS / 1000,
|
|
||||||
(GAS_SERVICE_RETRY_PERIOD_MS % 1000) * 1000,
|
|
||||||
gas_service_timeout, gas, query);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gas_query_tx(gas, query, query->req) < 0) {
|
|
||||||
wpa_printf(MSG_DEBUG, "GAS: Failed to send Action frame to "
|
|
||||||
MACSTR, MAC2STR(query->addr));
|
|
||||||
gas_query_free(query, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
gas->current = query;
|
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "GAS: Starting query timeout for dialog token %u",
|
|
||||||
query->dialog_token);
|
|
||||||
eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
|
|
||||||
gas_query_timeout, gas, query);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int gas_query_dialog_token_available(struct gas_query *gas,
|
static int gas_query_dialog_token_available(struct gas_query *gas,
|
||||||
const u8 *dst, u8 dialog_token)
|
const u8 *dst, u8 dialog_token)
|
||||||
{
|
{
|
||||||
|
@ -576,14 +540,28 @@ static int gas_query_dialog_token_available(struct gas_query *gas,
|
||||||
static void gas_query_start_cb(struct wpa_radio_work *work, int deinit)
|
static void gas_query_start_cb(struct wpa_radio_work *work, int deinit)
|
||||||
{
|
{
|
||||||
struct gas_query_pending *query = work->ctx;
|
struct gas_query_pending *query = work->ctx;
|
||||||
|
struct gas_query *gas = query->gas;
|
||||||
|
|
||||||
if (deinit) {
|
if (deinit) {
|
||||||
gas_query_free(query, 1);
|
gas_query_free(query, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
query->gas->work = work;
|
gas->work = work;
|
||||||
gas_service_timeout(query->gas, query);
|
|
||||||
|
if (gas_query_tx(gas, query, query->req) < 0) {
|
||||||
|
wpa_printf(MSG_DEBUG, "GAS: Failed to send Action frame to "
|
||||||
|
MACSTR, MAC2STR(query->addr));
|
||||||
|
gas_query_free(query, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gas->current = query;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG, "GAS: Starting query timeout for dialog token %u",
|
||||||
|
query->dialog_token);
|
||||||
|
eloop_register_timeout(GAS_QUERY_TIMEOUT_PERIOD, 0,
|
||||||
|
gas_query_timeout, gas, query);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue