struct ieee802_11_elems elems;
struct wpabuf *buf;
struct ieee80211_mgmt *resp;
- struct wpabuf *wps;
+ struct p2p_message msg;
struct wpabuf *ies;
if (!p2p->in_listen || !p2p->drv_in_listen) {
return;
}
+ os_memset(&msg, 0, sizeof(msg));
+ if (p2p_parse_ies(ie, ie_len, &msg) < 0) {
+ /* Could not parse P2P attributes */
+ return;
+ }
+
+ if (msg.device_id &&
+ os_memcmp(msg.device_id, p2p->cfg->dev_addr, ETH_ALEN != 0)) {
+ /* Device ID did not match */
+ p2p_parse_free(&msg);
+ return;
+ }
+
/* Check Requested Device Type match */
- wps = ieee802_11_vendor_ie_concat(ie, ie_len, WPS_DEV_OUI_WFA);
- if (wps && !p2p_match_dev_type(p2p, wps)) {
- wpabuf_free(wps);
+ if (msg.wps_attributes &&
+ !p2p_match_dev_type(p2p, msg.wps_attributes)) {
/* No match with Requested Device Type */
+ p2p_parse_free(&msg);
return;
}
- wpabuf_free(wps);
+ p2p_parse_free(&msg);
if (!p2p->cfg->send_probe_resp)
return; /* Response generated elsewhere */