Lines Matching full:gas
2 * Generic advertisement service (GAS) server
17 #include "gas.h"
33 struct gas_server *gas; member
64 wpa_printf(MSG_DEBUG, "GAS: Response @%p timeout for " MACSTR in gas_server_response_timeout()
83 wpa_printf(MSG_DEBUG, "DPP: Free GAS response @%p", response); in gas_server_free_response()
91 gas_server_send_resp(struct gas_server *gas, in gas_server_send_resp() argument
146 wpa_printf(MSG_DEBUG, "GAS: No response available yet"); in gas_server_send_resp()
149 "GAS: Need to fragment query response"); in gas_server_send_resp()
152 "GAS: Full query response fits in the GAS Initial Response frame"); in gas_server_send_resp()
157 gas->tx(gas->ctx, response->freq, response->dst, resp, in gas_server_send_resp()
166 gas_server_rx_initial_req(struct gas_server *gas, const u8 *da, const u8 *sa, in gas_server_rx_initial_req() argument
177 wpa_hexdump(MSG_MSGDUMP, "GAS: Received GAS Initial Request frame", in gas_server_rx_initial_req()
184 "GAS: No Advertisement Protocol element found"); in gas_server_rx_initial_req()
191 "GAS: Truncated Advertisement Protocol element"); in gas_server_rx_initial_req()
197 wpa_hexdump(MSG_MSGDUMP, "GAS: Advertisement Protocol element", in gas_server_rx_initial_req()
201 wpa_printf(MSG_DEBUG, "GAS: No Query Request Length field"); in gas_server_rx_initial_req()
207 wpa_printf(MSG_DEBUG, "GAS: Truncated Query Request field"); in gas_server_rx_initial_req()
212 wpa_hexdump(MSG_MSGDUMP, "GAS: Query Request", in gas_server_rx_initial_req()
217 "GAS: Ignored extra data after Query Request field", in gas_server_rx_initial_req()
225 wpa_printf(MSG_DEBUG, "DPP: Allocated GAS response @%p", response); in gas_server_rx_initial_req()
226 dl_list_for_each(handler, &gas->handlers, struct gas_server_handler, in gas_server_rx_initial_req()
239 dl_list_add(&gas->responses, &response->list); in gas_server_rx_initial_req()
242 "GAS: Calling handler for the requested Advertisement Protocol ID"); in gas_server_rx_initial_req()
245 wpa_hexdump_buf(MSG_MSGDUMP, "GAS: Response from the handler", in gas_server_rx_initial_req()
249 "GAS: Handler requested short delay before sending out the initial response"); in gas_server_rx_initial_req()
254 "GAS: Handler requested comeback delay: %u TU", in gas_server_rx_initial_req()
256 gas_server_send_resp(gas, response, resp, comeback_delay); in gas_server_rx_initial_req()
261 "GAS: No registered handler for the requested Advertisement Protocol ID"); in gas_server_rx_initial_req()
271 struct gas_server *gas = handler->gas; in gas_server_handle_rx_comeback_req() local
308 "GAS: Sending out %u/%u remaining Query Response octets", in gas_server_handle_rx_comeback_req()
341 gas->tx(gas->ctx, response->freq, response->dst, resp, wait_time); in gas_server_handle_rx_comeback_req()
347 gas_server_rx_comeback_req(struct gas_server *gas, const u8 *da, const u8 *sa, in gas_server_rx_comeback_req() argument
352 dl_list_for_each(response, &gas->responses, struct gas_server_response, in gas_server_rx_comeback_req()
361 wpa_printf(MSG_DEBUG, "GAS: No pending GAS response for " MACSTR in gas_server_rx_comeback_req()
369 * @gas: GAS query data from gas_server_init()
377 * Returns: 0 if the Public Action frame was a GAS request frame or -1 if not
379 int gas_server_rx(struct gas_server *gas, const u8 *da, const u8 *sa, in gas_server_rx() argument
386 if (!gas || len < 2) in gas_server_rx()
399 return -1; /* Not a GAS request */ in gas_server_rx()
401 wpa_printf(MSG_DEBUG, "GAS: Received GAS %s Request frame DA=" MACSTR in gas_server_rx()
409 return gas_server_rx_initial_req(gas, da, sa, bssid, in gas_server_rx()
412 return gas_server_rx_comeback_req(gas, da, sa, bssid, in gas_server_rx()
423 "GAS: More fragments remaining - keep pending entry"); in gas_server_handle_tx_status()
429 "GAS: Waiting for response - keep pending entry"); in gas_server_handle_tx_status()
435 "GAS: No ACK received - drop pending entry"); in gas_server_handle_tx_status()
438 "GAS: Last fragment of the response sent out - drop pending entry"); in gas_server_handle_tx_status()
448 void gas_server_tx_status(struct gas_server *gas, const u8 *dst, const u8 *data, in gas_server_tx_status() argument
465 wpa_printf(MSG_DEBUG, "GAS: TX status dst=" MACSTR in gas_server_tx_status()
470 dl_list_for_each(response, &gas->responses, struct gas_server_response, in gas_server_tx_status()
479 wpa_printf(MSG_DEBUG, "GAS: No pending response matches TX status"); in gas_server_tx_status()
483 int gas_server_set_resp(struct gas_server *gas, void *resp_ctx, in gas_server_set_resp() argument
488 dl_list_for_each(tmp, &gas->responses, struct gas_server_response, in gas_server_set_resp()
500 wpa_printf(MSG_DEBUG, "GAS: Send the delayed initial response"); in gas_server_set_resp()
501 gas_server_send_resp(gas, response, resp, 0); in gas_server_set_resp()
510 int gas_server_set_comeback_delay(struct gas_server *gas, void *resp_ctx, in gas_server_set_comeback_delay() argument
515 dl_list_for_each(tmp, &gas->responses, struct gas_server_response, in gas_server_set_comeback_delay()
527 "GAS: Send the delayed initial response with comeback delay %u", in gas_server_set_comeback_delay()
529 gas_server_send_resp(gas, response, NULL, comeback_delay); in gas_server_set_comeback_delay()
535 bool gas_server_response_sent(struct gas_server *gas, void *resp_ctx) in gas_server_response_sent() argument
539 dl_list_for_each(tmp, &gas->responses, struct gas_server_response, in gas_server_response_sent()
556 struct gas_server *gas; in gas_server_init() local
558 gas = os_zalloc(sizeof(*gas)); in gas_server_init()
559 if (!gas) in gas_server_init()
561 gas->ctx = ctx; in gas_server_init()
562 gas->tx = tx; in gas_server_init()
563 dl_list_init(&gas->handlers); in gas_server_init()
564 dl_list_init(&gas->responses); in gas_server_init()
565 return gas; in gas_server_init()
569 void gas_server_deinit(struct gas_server *gas) in gas_server_deinit() argument
574 if (!gas) in gas_server_deinit()
577 dl_list_for_each_safe(handler, tmp, &gas->handlers, in gas_server_deinit()
583 dl_list_for_each_safe(response, tmp_r, &gas->responses, in gas_server_deinit()
589 os_free(gas); in gas_server_deinit()
593 int gas_server_register(struct gas_server *gas, in gas_server_register() argument
605 if (!gas || adv_proto_id_len > MAX_ADV_PROTO_ID_LEN) in gas_server_register()
616 handler->gas = gas; in gas_server_register()
617 dl_list_add(&gas->handlers, &handler->list); in gas_server_register()