static int wpas_wps_start_dev_pw(struct wpa_supplicant *wpa_s, const u8 *bssid,
const char *pin, int p2p_group, u16 dev_pw_id,
- const u8 *peer_pubkey_hash)
+ const u8 *peer_pubkey_hash,
+ const u8 *ssid_val, size_t ssid_len)
{
struct wpa_ssid *ssid;
char val[128 + 2 * WPS_OOB_PUBKEY_HASH_LEN];
wpas_clear_wps(wpa_s);
ssid = wpas_wps_add_network(wpa_s, 0, bssid);
- if (ssid == NULL)
+ if (ssid == NULL) {
+ wpa_printf(MSG_DEBUG, "WPS: Could not add network");
return -1;
+ }
ssid->temporary = 1;
ssid->p2p_group = p2p_group;
+ if (ssid_val) {
+ ssid->ssid = os_malloc(ssid_len);
+ if (ssid->ssid) {
+ os_memcpy(ssid->ssid, ssid_val, ssid_len);
+ ssid->ssid_len = ssid_len;
+ }
+ }
if (peer_pubkey_hash) {
os_memcpy(hash, " pkhash=", 8);
wpa_snprintf_hex_uppercase(hash + 8, sizeof(hash) - 8,
const char *pin, int p2p_group, u16 dev_pw_id)
{
return wpas_wps_start_dev_pw(wpa_s, bssid, pin, p2p_group, dev_pw_id,
- NULL);
+ NULL, NULL, 0);
}
int wpas_wps_start_nfc(struct wpa_supplicant *wpa_s, const u8 *bssid,
const struct wpabuf *dev_pw, u16 dev_pw_id,
- int p2p_group, const u8 *peer_pubkey_hash)
+ int p2p_group, const u8 *peer_pubkey_hash,
+ const u8 *ssid, size_t ssid_len)
{
struct wps_context *wps = wpa_s->wps;
char pw[32 * 2 + 1];
wpa_snprintf_hex_uppercase(pw, sizeof(pw),
wpabuf_head(dev_pw), wpabuf_len(dev_pw));
return wpas_wps_start_dev_pw(wpa_s, bssid, pw, p2p_group, dev_pw_id,
- peer_pubkey_hash);
+ peer_pubkey_hash, ssid, ssid_len);
}
struct wpabuf * wpas_wps_nfc_token(struct wpa_supplicant *wpa_s, int ndef);
int wpas_wps_start_nfc(struct wpa_supplicant *wpa_s, const u8 *bssid,
const struct wpabuf *dev_pw, u16 dev_pw_id,
- int p2p_group, const u8 *peer_pubkey_hash);
+ int p2p_group, const u8 *peer_pubkey_hash,
+ const u8 *ssid, size_t ssid_len);
int wpas_wps_nfc_tag_read(struct wpa_supplicant *wpa_s,
const struct wpabuf *data);
struct wpabuf * wpas_wps_nfc_handover_req(struct wpa_supplicant *wpa_s, int cr);