Lines Matching refs:query

75 				     struct gas_query_pending *query);
132 static void gas_query_free(struct gas_query_pending *query, int del_list) in gas_query_free() argument
135 dl_list_del(&query->list); in gas_query_free()
137 wpabuf_free(query->req); in gas_query_free()
138 wpabuf_free(query->adv_proto); in gas_query_free()
139 wpabuf_free(query->resp); in gas_query_free()
140 os_free(query); in gas_query_free()
145 struct gas_query_pending *query, in gas_query_done() argument
150 MAC2STR(query->addr), query->dialog_token, query->freq, in gas_query_done()
151 query->status_code, gas_result_txt(result)); in gas_query_done()
152 if (gas->current == query) in gas_query_done()
154 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query); in gas_query_done()
155 eloop_cancel_timeout(gas_query_timeout, gas, query); in gas_query_done()
156 eloop_cancel_timeout(gas_query_rx_comeback_timeout, gas, query); in gas_query_done()
157 dl_list_del(&query->list); in gas_query_done()
158 query->cb(query->ctx, query->addr, query->dialog_token, result, in gas_query_done()
159 query->adv_proto, query->resp, query->status_code); in gas_query_done()
160 gas_query_free(query, 0); in gas_query_done()
170 struct gas_query_pending *query, *next; in gas_query_ap_deinit() local
175 dl_list_for_each_safe(query, next, &gas->pending, in gas_query_ap_deinit()
177 gas_query_done(gas, query, GAS_QUERY_AP_DELETED_AT_DEINIT); in gas_query_ap_deinit()
196 static int gas_query_append(struct gas_query_pending *query, const u8 *data, in gas_query_append() argument
199 if (wpabuf_resize(&query->resp, len) < 0) { in gas_query_append()
203 wpabuf_put_data(query->resp, data, len); in gas_query_append()
211 struct gas_query_pending *query; in gas_query_ap_tx_status() local
220 query = gas->current; in gas_query_ap_tx_status()
222 dur = ms_from_time(&query->last_oper); in gas_query_ap_tx_status()
225 MAC2STR(dst), ok, query, query->dialog_token, dur); in gas_query_ap_tx_status()
226 if (!ether_addr_equal(dst, query->addr)) { in gas_query_ap_tx_status()
230 os_get_reltime(&query->last_oper); in gas_query_ap_tx_status()
232 eloop_cancel_timeout(gas_query_timeout, gas, query); in gas_query_ap_tx_status()
236 gas, query); in gas_query_ap_tx_status()
239 gas_query_timeout, gas, query); in gas_query_ap_tx_status()
241 if (query->wait_comeback && !query->retry) { in gas_query_ap_tx_status()
243 gas, query); in gas_query_ap_tx_status()
246 gas_query_rx_comeback_timeout, gas, query); in gas_query_ap_tx_status()
261 struct gas_query_pending *query, in gas_query_tx() argument
264 int res, prot = pmf_in_use(gas->hapd, query->addr); in gas_query_tx()
268 MAC2STR(query->addr), (unsigned int) wpabuf_len(req), in gas_query_tx()
269 query->freq, prot, MAC2STR(query->sa)); in gas_query_tx()
274 os_get_reltime(&query->last_oper); in gas_query_tx()
275 res = hostapd_drv_send_action(gas->hapd, query->freq, wait_time, in gas_query_tx()
276 query->addr, wpabuf_head(req), in gas_query_tx()
283 struct gas_query_pending *query) in gas_query_tx_comeback_req() argument
288 req = gas_build_comeback_req(query->dialog_token); in gas_query_tx_comeback_req()
290 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_tx_comeback_req()
294 wait_time = (query->retry || !query->offchannel_tx_started) ? in gas_query_tx_comeback_req()
297 if (gas_query_tx(gas, query, req, wait_time) < 0) { in gas_query_tx_comeback_req()
299 MACSTR, MAC2STR(query->addr)); in gas_query_tx_comeback_req()
300 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_tx_comeback_req()
310 struct gas_query_pending *query = user_ctx; in gas_query_rx_comeback_timeout() local
315 query->retry); in gas_query_rx_comeback_timeout()
316 if (gas->current != query || query->retry) in gas_query_rx_comeback_timeout()
318 dialog_token = gas_query_new_dialog_token(gas, query->addr); in gas_query_rx_comeback_timeout()
323 query->retry = 1; in gas_query_rx_comeback_timeout()
324 query->dialog_token = dialog_token; in gas_query_rx_comeback_timeout()
325 *(wpabuf_mhead_u8(query->req) + 2) = dialog_token; in gas_query_rx_comeback_timeout()
326 query->wait_comeback = 0; in gas_query_rx_comeback_timeout()
327 query->next_frag_id = 0; in gas_query_rx_comeback_timeout()
328 wpabuf_free(query->adv_proto); in gas_query_rx_comeback_timeout()
329 query->adv_proto = NULL; in gas_query_rx_comeback_timeout()
330 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query); in gas_query_rx_comeback_timeout()
331 eloop_cancel_timeout(gas_query_timeout, gas, query); in gas_query_rx_comeback_timeout()
332 gas_query_tx_initial_req(gas, query); in gas_query_rx_comeback_timeout()
339 struct gas_query_pending *query = user_ctx; in gas_query_tx_comeback_timeout() local
342 MAC2STR(query->addr)); in gas_query_tx_comeback_timeout()
343 gas_query_tx_comeback_req(gas, query); in gas_query_tx_comeback_timeout()
348 struct gas_query_pending *query, in gas_query_tx_comeback_req_delay() argument
356 " in %u secs %u usecs", MAC2STR(query->addr), secs, usecs); in gas_query_tx_comeback_req_delay()
357 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query); in gas_query_tx_comeback_req_delay()
359 gas, query); in gas_query_tx_comeback_req_delay()
364 struct gas_query_pending *query, in gas_query_rx_initial() argument
370 MAC2STR(query->addr), query->dialog_token, comeback_delay); in gas_query_rx_initial()
372 query->adv_proto = wpabuf_alloc_copy(adv_proto, 2 + adv_proto[1]); in gas_query_rx_initial()
373 if (query->adv_proto == NULL) { in gas_query_rx_initial()
374 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_rx_initial()
379 eloop_cancel_timeout(gas_query_timeout, gas, query); in gas_query_rx_initial()
380 query->wait_comeback = 1; in gas_query_rx_initial()
381 gas_query_tx_comeback_req_delay(gas, query, comeback_delay); in gas_query_rx_initial()
386 if (gas_query_append(query, resp, len) < 0) { in gas_query_rx_initial()
387 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_rx_initial()
391 gas_query_done(gas, query, GAS_QUERY_AP_SUCCESS); in gas_query_rx_initial()
396 struct gas_query_pending *query, in gas_query_rx_comeback() argument
404 MAC2STR(query->addr), query->dialog_token, frag_id, in gas_query_rx_comeback()
406 eloop_cancel_timeout(gas_query_rx_comeback_timeout, gas, query); in gas_query_rx_comeback()
408 if ((size_t) 2 + adv_proto[1] != wpabuf_len(query->adv_proto) || in gas_query_rx_comeback()
409 os_memcmp(adv_proto, wpabuf_head(query->adv_proto), in gas_query_rx_comeback()
410 wpabuf_len(query->adv_proto)) != 0) { in gas_query_rx_comeback()
413 MACSTR, MAC2STR(query->addr)); in gas_query_rx_comeback()
414 gas_query_done(gas, query, GAS_QUERY_AP_PEER_ERROR); in gas_query_rx_comeback()
422 "from " MACSTR, MAC2STR(query->addr)); in gas_query_rx_comeback()
423 gas_query_done(gas, query, GAS_QUERY_AP_PEER_ERROR); in gas_query_rx_comeback()
426 gas_query_tx_comeback_req_delay(gas, query, comeback_delay); in gas_query_rx_comeback()
430 if (frag_id != query->next_frag_id) { in gas_query_rx_comeback()
432 "from " MACSTR, MAC2STR(query->addr)); in gas_query_rx_comeback()
433 if (frag_id + 1 == query->next_frag_id) { in gas_query_rx_comeback()
438 gas_query_done(gas, query, GAS_QUERY_AP_PEER_ERROR); in gas_query_rx_comeback()
441 query->next_frag_id++; in gas_query_rx_comeback()
443 if (gas_query_append(query, resp, len) < 0) { in gas_query_rx_comeback()
444 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_rx_comeback()
449 gas_query_tx_comeback_req(gas, query); in gas_query_rx_comeback()
453 gas_query_done(gas, query, GAS_QUERY_AP_SUCCESS); in gas_query_rx_comeback()
471 struct gas_query_pending *query; in gas_query_ap_rx() local
500 query = gas_query_get_pending(gas, sa, dialog_token); in gas_query_ap_rx()
501 if (query == NULL) { in gas_query_ap_rx()
508 ms_from_time(&query->last_oper), MAC2STR(sa)); in gas_query_ap_rx()
510 if (query->wait_comeback && action == WLAN_PA_GAS_INITIAL_RESP) { in gas_query_ap_rx()
517 if (!query->wait_comeback && action == WLAN_PA_GAS_COMEBACK_RESP) { in gas_query_ap_rx()
524 query->status_code = WPA_GET_LE16(pos); in gas_query_ap_rx()
527 if (query->status_code == WLAN_STATUS_QUERY_RESP_OUTSTANDING && in gas_query_ap_rx()
530 } else if (query->status_code != WLAN_STATUS_SUCCESS) { in gas_query_ap_rx()
533 MAC2STR(sa), dialog_token, query->status_code); in gas_query_ap_rx()
534 gas_query_done(gas, query, GAS_QUERY_AP_FAILURE); in gas_query_ap_rx()
594 gas_query_rx_comeback(gas, query, adv_proto, pos, resp_len, in gas_query_ap_rx()
597 gas_query_rx_initial(gas, query, adv_proto, pos, resp_len, in gas_query_ap_rx()
607 struct gas_query_pending *query = user_ctx; in gas_query_timeout() local
611 MAC2STR(query->addr), query->dialog_token); in gas_query_timeout()
612 gas_query_done(gas, query, GAS_QUERY_AP_TIMEOUT); in gas_query_timeout()
631 struct gas_query_pending *query) in gas_query_tx_initial_req() argument
633 if (gas_query_tx(gas, query, query->req, in gas_query_tx_initial_req()
636 MACSTR, MAC2STR(query->addr)); in gas_query_tx_initial_req()
637 gas_query_done(gas, query, GAS_QUERY_AP_INTERNAL_ERROR); in gas_query_tx_initial_req()
640 gas->current = query; in gas_query_tx_initial_req()
643 query->dialog_token); in gas_query_tx_initial_req()
645 gas_query_timeout, gas, query); in gas_query_tx_initial_req()
686 struct gas_query_pending *query; in gas_query_ap_req() local
696 query = os_zalloc(sizeof(*query)); in gas_query_ap_req()
697 if (query == NULL) in gas_query_ap_req()
700 query->gas = gas; in gas_query_ap_req()
701 os_memcpy(query->addr, dst, ETH_ALEN); in gas_query_ap_req()
702 query->dialog_token = dialog_token; in gas_query_ap_req()
703 query->freq = freq; in gas_query_ap_req()
704 query->cb = cb; in gas_query_ap_req()
705 query->ctx = ctx; in gas_query_ap_req()
706 query->req = req; in gas_query_ap_req()
707 dl_list_add(&gas->pending, &query->list); in gas_query_ap_req()
713 MAC2STR(query->addr), query->dialog_token, query->freq); in gas_query_ap_req()
715 gas_query_tx_initial_req(gas, query); in gas_query_ap_req()