Lines Matching refs:query

2  * Generic advertisement service (GAS) query
69 struct gas_query_pending *query,
72 if (query->offchannel_tx_started)
74 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
75 eloop_cancel_timeout(gas_query_timeout, gas, query);
76 dl_list_del(&query->list);
77 query->cb(query->ctx, query->addr, query->dialog_token, result,
78 query->adv_proto, query->resp, query->status_code);
79 wpabuf_free(query->adv_proto);
80 wpabuf_free(query->resp);
81 os_free(query);
87 struct gas_query_pending *query, *next;
92 dl_list_for_each_safe(query, next, &gas->pending,
94 gas_query_done(gas, query, GAS_QUERY_DELETED_AT_DEINIT);
113 static int gas_query_append(struct gas_query_pending *query, const u8 *data,
116 if (wpabuf_resize(&query->resp, len) < 0) {
120 wpabuf_put_data(query->resp, data, len);
125 static int gas_query_tx(struct gas_query *gas, struct gas_query_pending *query,
130 "freq=%d", MAC2STR(query->addr),
131 (unsigned int) wpabuf_len(req), query->freq);
132 res = offchannel_send_action(gas->wpa_s, query->freq, query->addr,
133 gas->wpa_s->own_addr, query->addr,
137 query->offchannel_tx_started = 1;
143 struct gas_query_pending *query)
147 req = gas_build_comeback_req(query->dialog_token);
149 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
153 if (gas_query_tx(gas, query, req) < 0) {
155 MACSTR, MAC2STR(query->addr));
156 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
166 struct gas_query_pending *query = user_ctx;
169 MAC2STR(query->addr));
170 gas_query_tx_comeback_req(gas, query);
175 struct gas_query_pending *query,
183 " in %u secs %u usecs", MAC2STR(query->addr), secs, usecs);
184 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
186 gas, query);
191 struct gas_query_pending *query,
197 MAC2STR(query->addr), query->dialog_token, comeback_delay);
199 query->adv_proto = wpabuf_alloc_copy(adv_proto, 2 + adv_proto[1]);
200 if (query->adv_proto == NULL) {
201 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
206 query->wait_comeback = 1;
207 gas_query_tx_comeback_req_delay(gas, query, comeback_delay);
212 if (gas_query_append(query, resp, len) < 0) {
213 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
217 gas_query_done(gas, query, GAS_QUERY_SUCCESS);
222 struct gas_query_pending *query,
230 MAC2STR(query->addr), query->dialog_token, frag_id,
233 if ((size_t) 2 + adv_proto[1] != wpabuf_len(query->adv_proto) ||
234 os_memcmp(adv_proto, wpabuf_head(query->adv_proto),
235 wpabuf_len(query->adv_proto)) != 0) {
238 MACSTR, MAC2STR(query->addr));
239 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
247 "from " MACSTR, MAC2STR(query->addr));
248 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
251 gas_query_tx_comeback_req_delay(gas, query, comeback_delay);
255 if (frag_id != query->next_frag_id) {
257 "from " MACSTR, MAC2STR(query->addr));
258 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
261 query->next_frag_id++;
263 if (gas_query_append(query, resp, len) < 0) {
264 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
269 gas_query_tx_comeback_req(gas, query);
273 gas_query_done(gas, query, GAS_QUERY_SUCCESS);
280 struct gas_query_pending *query;
296 query = gas_query_get_pending(gas, sa, dialog_token);
297 if (query == NULL) {
298 wpa_printf(MSG_DEBUG, "GAS: No pending query found for " MACSTR
303 if (query->wait_comeback && action == WLAN_PA_GAS_INITIAL_RESP) {
310 if (!query->wait_comeback && action == WLAN_PA_GAS_COMEBACK_RESP) {
317 query->status_code = WPA_GET_LE16(pos);
320 if (query->status_code != WLAN_STATUS_SUCCESS) {
323 MAC2STR(sa), dialog_token, query->status_code);
324 gas_query_done(gas, query, GAS_QUERY_FAILURE);
382 gas_query_rx_comeback(gas, query, adv_proto, pos, resp_len,
385 gas_query_rx_initial(gas, query, adv_proto, pos, resp_len,
395 struct gas_query_pending *query = user_ctx;
397 wpa_printf(MSG_DEBUG, "GAS: No response received for query to " MACSTR,
398 MAC2STR(query->addr));
399 gas_query_done(gas, query, GAS_QUERY_TIMEOUT);
425 struct gas_query_pending *query;
438 query = os_zalloc(sizeof(*query));
439 if (query == NULL)
442 os_memcpy(query->addr, dst, ETH_ALEN);
443 query->dialog_token = dialog_token;
444 query->freq = freq;
445 query->cb = cb;
446 query->ctx = ctx;
447 dl_list_add(&gas->pending, &query->list);
453 if (gas_query_tx(gas, query, req) < 0) {
455 MACSTR, MAC2STR(query->addr));
456 os_free(query);
461 gas, query);
469 struct gas_query_pending *query;
471 query = gas_query_get_pending(gas, dst, dialog_token);
472 if (query)
473 gas_query_done(gas, query, GAS_QUERY_CANCELLED);