WPS: Set Probe Request config methods based on configuration
Instead of hardcoding the Config Methods attribute value in Probe Request frames, set this based on the configured parameter config_methods to allow correct set of methods to be advertised.
This commit is contained in:
parent
6fb6d842bb
commit
a9355fac5f
3 changed files with 3 additions and 28 deletions
|
@ -456,7 +456,6 @@ struct wpabuf * wps_build_probe_req_ie(int pbc, struct wps_device_data *dev,
|
||||||
const u8 *req_dev_types)
|
const u8 *req_dev_types)
|
||||||
{
|
{
|
||||||
struct wpabuf *ie;
|
struct wpabuf *ie;
|
||||||
u16 methods = 0;
|
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "WPS: Building WPS IE for Probe Request");
|
wpa_printf(MSG_DEBUG, "WPS: Building WPS IE for Probe Request");
|
||||||
|
|
||||||
|
@ -464,35 +463,9 @@ struct wpabuf * wps_build_probe_req_ie(int pbc, struct wps_device_data *dev,
|
||||||
if (ie == NULL)
|
if (ie == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
methods |= WPS_CONFIG_PUSHBUTTON;
|
|
||||||
#ifdef CONFIG_WPS2
|
|
||||||
/*
|
|
||||||
* TODO: Should figure out whether this device has a physical or
|
|
||||||
* virtual pushbutton.
|
|
||||||
*/
|
|
||||||
methods |= WPS_CONFIG_VIRT_PUSHBUTTON;
|
|
||||||
#endif /* CONFIG_WPS2 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO: Should figure out whether this Probe Request was triggered
|
|
||||||
* using physical or virtual display. Also, if the device has a PIN on
|
|
||||||
* a label, that should be indicated here.
|
|
||||||
*/
|
|
||||||
methods |= WPS_CONFIG_DISPLAY |
|
|
||||||
#ifdef CONFIG_WPS2
|
|
||||||
WPS_CONFIG_VIRT_DISPLAY |
|
|
||||||
#endif /* CONFIG_WPS2 */
|
|
||||||
WPS_CONFIG_KEYPAD;
|
|
||||||
#ifdef CONFIG_WPS_UFD
|
|
||||||
methods |= WPS_CONFIG_USBA;
|
|
||||||
#endif /* CONFIG_WPS_UFD */
|
|
||||||
#ifdef CONFIG_WPS_NFC
|
|
||||||
methods |= WPS_CONFIG_NFC_INTERFACE;
|
|
||||||
#endif /* CONFIG_WPS_NFC */
|
|
||||||
|
|
||||||
if (wps_build_version(ie) ||
|
if (wps_build_version(ie) ||
|
||||||
wps_build_req_type(ie, req_type) ||
|
wps_build_req_type(ie, req_type) ||
|
||||||
wps_build_config_methods(ie, methods) ||
|
wps_build_config_methods(ie, dev->config_methods) ||
|
||||||
wps_build_uuid_e(ie, uuid) ||
|
wps_build_uuid_e(ie, uuid) ||
|
||||||
wps_build_primary_dev_type(dev, ie) ||
|
wps_build_primary_dev_type(dev, ie) ||
|
||||||
wps_build_rf_bands(dev, ie) ||
|
wps_build_rf_bands(dev, ie) ||
|
||||||
|
|
|
@ -99,6 +99,7 @@ struct wps_device_data {
|
||||||
u8 num_sec_dev_types;
|
u8 num_sec_dev_types;
|
||||||
u32 os_version;
|
u32 os_version;
|
||||||
u8 rf_bands;
|
u8 rf_bands;
|
||||||
|
u16 config_methods;
|
||||||
struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];
|
struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];
|
||||||
|
|
||||||
int p2p;
|
int p2p;
|
||||||
|
|
|
@ -1142,6 +1142,7 @@ int wpas_wps_init(struct wpa_supplicant *wpa_s)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
wps->config_methods = wps_fix_config_methods(wps->config_methods);
|
wps->config_methods = wps_fix_config_methods(wps->config_methods);
|
||||||
|
wps->dev.config_methods = wps->config_methods;
|
||||||
os_memcpy(wps->dev.pri_dev_type, wpa_s->conf->device_type,
|
os_memcpy(wps->dev.pri_dev_type, wpa_s->conf->device_type,
|
||||||
WPS_DEV_TYPE_LEN);
|
WPS_DEV_TYPE_LEN);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue