From: Jouni Malinen Date: Fri, 5 Dec 2014 13:22:33 +0000 (+0200) Subject: WFD: Allow WFD_SUBELEM_SET/GET all to be used with full IE buffer X-Git-Tag: hostap_2_4~930 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc0ba01d7025962372389e9576ecd878c30c9f20;p=thirdparty%2Fhostap.git WFD: Allow WFD_SUBELEM_SET/GET all to be used with full IE buffer This extends the previously used WFD_SUBELEM_SET/GET design to allow special "all" value to be used as an id to indicate that all WFD subelements are to be set/get. This uses similar interface as was previously added over D-Bus. Signed-off-by: Jouni Malinen --- diff --git a/wpa_supplicant/wifi_display.c b/wpa_supplicant/wifi_display.c index 5c06e42ab..c363b21b9 100644 --- a/wpa_supplicant/wifi_display.c +++ b/wpa_supplicant/wifi_display.c @@ -233,15 +233,31 @@ int wifi_display_subelem_set(struct wpa_global *global, char *cmd) if (pos == NULL) return -1; *pos++ = '\0'; - subelem = atoi(cmd); - if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS) - return -1; len = os_strlen(pos); if (len & 1) return -1; len /= 2; + if (os_strcmp(cmd, "all") == 0) { + int res; + + e = wpabuf_alloc(len); + if (e == NULL) + return -1; + if (hexstr2bin(pos, wpabuf_put(e, len), len) < 0) { + wpabuf_free(e); + return -1; + } + res = wifi_display_subelem_set_from_ies(global, e); + wpabuf_free(e); + return res; + } + + subelem = atoi(cmd); + if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS) + return -1; + if (len == 0) { /* Clear subelement */ e = NULL; @@ -325,6 +341,19 @@ int wifi_display_subelem_get(struct wpa_global *global, char *cmd, { int subelem; + if (os_strcmp(cmd, "all") == 0) { + struct wpabuf *ie; + int res; + + ie = wifi_display_get_wfd_ie(global); + if (ie == NULL) + return 0; + res = wpa_snprintf_hex(buf, buflen, wpabuf_head(ie), + wpabuf_len(ie)); + wpabuf_free(ie); + return res; + } + subelem = atoi(cmd); if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS) return -1;