int hs20_anqp_send_req(struct wpa_supplicant *wpa_s, const u8 *dst, u32 stypes, const u8 *payload, size_t payload_len, int inmem) { struct wpabuf *buf; int ret = 0; int freq; struct wpa_bss *bss; int res; struct icon_entry *icon_entry; bss = wpa_bss_get_bssid(wpa_s, dst); if (!bss) { wpa_printf(MSG_WARNING, "ANQP: Cannot send query to unknown BSS " MACSTR, MAC2STR(dst)); return -1; } wpa_bss_anqp_unshare_alloc(bss); freq = bss->freq; wpa_printf(MSG_DEBUG, "HS20: ANQP Query Request to " MACSTR " for " "subtypes 0x%x", MAC2STR(dst), stypes); buf = hs20_build_anqp_req(stypes, payload, payload_len); if (buf == NULL) return -1; res = gas_query_req(wpa_s->gas, dst, freq, buf, anqp_resp_cb, wpa_s); if (res < 0) { wpa_printf(MSG_DEBUG, "ANQP: Failed to send Query Request"); wpabuf_free(buf); return -1; } else wpa_printf(MSG_DEBUG, "ANQP: Query started with dialog token " "%u", res); if (inmem) { icon_entry = os_zalloc(sizeof(struct icon_entry)); if (!icon_entry) return -1; os_memcpy(icon_entry->bssid, dst, ETH_ALEN); icon_entry->file_name = os_malloc(payload_len + 1); if (!icon_entry->file_name) { os_free(icon_entry); return -1; } os_memcpy(icon_entry->file_name, payload, payload_len); icon_entry->file_name[payload_len] = '\0'; icon_entry->dialog_token = res; dl_list_add(&wpa_s->icon_head, &icon_entry->list); } return ret; }
int hs20_anqp_send_req(struct wpa_supplicant *wpa_s, const u8 *dst, u32 stypes, const u8 *payload, size_t payload_len) { struct wpabuf *buf; int ret = 0; int freq; struct wpa_bss *bss; int res; freq = wpa_s->assoc_freq; bss = wpa_bss_get_bssid(wpa_s, dst); if (bss) { wpa_bss_anqp_unshare_alloc(bss); freq = bss->freq; } if (freq <= 0) return -1; wpa_printf(MSG_DEBUG, "HS20: ANQP Query Request to " MACSTR " for " "subtypes 0x%x", MAC2STR(dst), stypes); buf = hs20_build_anqp_req(stypes, payload, payload_len); if (buf == NULL) return -1; res = gas_query_req(wpa_s->gas, dst, freq, buf, anqp_resp_cb, wpa_s); if (res < 0) { wpa_printf(MSG_DEBUG, "ANQP: Failed to send Query Request"); wpabuf_free(buf); ret = -1; } else wpa_printf(MSG_DEBUG, "ANQP: Query started with dialog token " "%u", res); return ret; }