int wpa_supplicant_ap_wps_cancel(struct wpa_supplicant *wpa_s) { struct wps_registrar *reg; int reg_sel = 0, wps_sta = 0; if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]->wps) return -1; reg = wpa_s->ap_iface->bss[0]->wps->registrar; reg_sel = wps_registrar_wps_cancel(reg); wps_sta = ap_for_each_sta(wpa_s->ap_iface->bss[0], wpa_supplicant_ap_wps_sta_cancel, NULL); if (!reg_sel && !wps_sta) { wpa_printf(MSG_DEBUG, "No WPS operation in progress at this " "time"); return -1; } /* * There are 2 cases to return wps cancel as success: * 1. When wps cancel was initiated but no connection has been * established with client yet. * 2. Client is in the middle of exchanging WPS messages. */ return 0; }
static int wps_cancel(struct hostapd_data *hapd, void *ctx) { if (hapd->wps == NULL) return 0; wps_registrar_wps_cancel(hapd->wps->registrar); ap_for_each_sta(hapd, ap_sta_wps_cancel, NULL); return 0; }