static struct wpabuf * p2p_build_sd_response(u8 dialog_token, u16 status_code, u16 comeback_delay, u16 update_indic, const struct wpabuf *tlvs) { struct wpabuf *buf; u8 *len_pos; buf = gas_anqp_build_initial_resp(dialog_token, status_code, comeback_delay, 100 + (tlvs ? wpabuf_len(tlvs) : 0)); if (buf == NULL) return NULL; if (tlvs) { /* ANQP Query Response Frame */ len_pos = gas_anqp_add_element(buf, ANQP_VENDOR_SPECIFIC); wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE); /* Service Update Indicator */ wpabuf_put_le16(buf, update_indic); wpabuf_put_buf(buf, tlvs); gas_anqp_set_element_len(buf, len_pos); } gas_anqp_set_len(buf); return buf; }
struct wpabuf * gas_anqp_build_initial_resp_buf(u8 dialog_token, u16 status_code, u16 comeback_delay, struct wpabuf *payload) { struct wpabuf *buf; buf = gas_anqp_build_initial_resp(dialog_token, status_code, comeback_delay, payload ? wpabuf_len(payload) : 0); if (buf == NULL) return NULL; if (payload) wpabuf_put_buf(buf, payload); gas_anqp_set_len(buf); return buf; }