diff --git a/src/wscutil.c b/src/wscutil.c index 0d0894a5..2806b249 100644 --- a/src/wscutil.c +++ b/src/wscutil.c @@ -2457,6 +2457,32 @@ done: return ret; } +uint8_t *wsc_build_p2p_attrs(const struct wsc_p2p_attrs *attrs, size_t *out_len) +{ + struct wsc_attr_builder *builder; + uint8_t *ret; + + builder = wsc_attr_builder_new(512); + + if (attrs->version) + build_version(builder, 0x10); + + if (attrs->device_password_id) + build_device_password_id(builder, attrs->device_password_id); + + if (attrs->config_methods) + build_configuration_methods(builder, attrs->config_methods); + + if (!attrs->version2) + goto done; + + START_WFA_VENDOR_EXTENSION(); + +done: + ret = wsc_attr_builder_free(builder, false, out_len); + return ret; +} + bool wsc_uuid_from_addr(const uint8_t addr[], uint8_t *out_uuid) { /* Reuse the NSID from WPA Supplicant for compatibility */ diff --git a/src/wscutil.h b/src/wscutil.h index 99786c76..515344b7 100644 --- a/src/wscutil.h +++ b/src/wscutil.h @@ -642,6 +642,16 @@ uint8_t *wsc_build_wsc_nack(const struct wsc_nack *nack, size_t *out_len); uint8_t *wsc_build_wsc_done(const struct wsc_done *done, size_t *out_len); +struct wsc_p2p_attrs { + bool version; + bool version2; + enum wsc_device_password_id device_password_id; + uint16_t config_methods; +}; + +uint8_t *wsc_build_p2p_attrs(const struct wsc_p2p_attrs *attrs, + size_t *out_len); + bool wsc_uuid_from_addr(const uint8_t addr[], uint8_t *out_uuid); struct wsc_session_key {