diff --git a/src/wps/wps.c b/src/wps/wps.c index 6d4b1cbc6..e86021da3 100644 --- a/src/wps/wps.c +++ b/src/wps/wps.c @@ -449,7 +449,9 @@ struct wpabuf * wps_build_probe_req_ie(int pbc, struct wps_device_data *dev, wps_build_config_error(ie, WPS_CFG_NO_ERROR) || wps_build_dev_password_id(ie, pbc ? DEV_PW_PUSHBUTTON : DEV_PW_DEFAULT) || - wps_build_version2(ie)) { + wps_build_version2(ie) || + (req_type == WPS_REQ_ENROLLEE && + wps_build_req_to_enroll(ie))) { wpabuf_free(ie); return NULL; } diff --git a/src/wps/wps_attr_build.c b/src/wps/wps_attr_build.c index 4de75df2a..8068654fd 100644 --- a/src/wps/wps_attr_build.c +++ b/src/wps/wps_attr_build.c @@ -337,3 +337,13 @@ int wps_build_oob_dev_password(struct wpabuf *msg, struct wps_context *wps) return 0; } #endif /* CONFIG_WPS_OOB */ + + +int wps_build_req_to_enroll(struct wpabuf *msg) +{ + wpa_printf(MSG_DEBUG, "WPS: * Request to Enroll (1)"); + wpabuf_put_be16(msg, ATTR_REQUEST_TO_ENROLL); + wpabuf_put_be16(msg, 1); + wpabuf_put_u8(msg, 1); + return 0; +} diff --git a/src/wps/wps_i.h b/src/wps/wps_i.h index d4378c3d6..2110a5432 100644 --- a/src/wps/wps_i.h +++ b/src/wps/wps_i.h @@ -247,6 +247,7 @@ int wps_build_encr_type_flags(struct wps_data *wps, struct wpabuf *msg); int wps_build_conn_type_flags(struct wps_data *wps, struct wpabuf *msg); int wps_build_assoc_state(struct wps_data *wps, struct wpabuf *msg); int wps_build_oob_dev_password(struct wpabuf *msg, struct wps_context *wps); +int wps_build_req_to_enroll(struct wpabuf *msg); /* wps_attr_process.c */ int wps_process_authenticator(struct wps_data *wps, const u8 *authenticator,