Merge driver ops set_wps_beacon_ie and set_wps_probe_resp_ie
[libeap.git] / hostapd / wps_hostapd.c
index 28a1843..3004ba1 100644 (file)
@@ -27,7 +27,7 @@
 #include "wps/wps_defs.h"
 #include "wps/wps_dev_attr.h"
 #include "hostapd.h"
-#include "driver_i.h"
+#include "config.h"
 #include "sta_info.h"
 #include "wps_hostapd.h"
 
@@ -90,46 +90,16 @@ static int hostapd_wps_new_psk_cb(void *ctx, const u8 *mac_addr, const u8 *psk,
 }
 
 
-static int hostapd_wps_set_ie_cb(void *ctx, const u8 *beacon_ie,
-                                size_t beacon_ie_len, const u8 *probe_resp_ie,
-                                size_t probe_resp_ie_len)
+static int hostapd_wps_set_ie_cb(void *ctx, struct wpabuf *beacon_ie,
+                                struct wpabuf *probe_resp_ie)
 {
        struct hostapd_data *hapd = ctx;
-
-       os_free(hapd->wps_beacon_ie);
-       if (beacon_ie_len == 0) {
-               hapd->wps_beacon_ie = NULL;
-               hapd->wps_beacon_ie_len = 0;
-       } else {
-               hapd->wps_beacon_ie = os_malloc(beacon_ie_len);
-               if (hapd->wps_beacon_ie == NULL) {
-                       hapd->wps_beacon_ie_len = 0;
-                       return -1;
-               }
-               os_memcpy(hapd->wps_beacon_ie, beacon_ie, beacon_ie_len);
-               hapd->wps_beacon_ie_len = beacon_ie_len;
-       }
-       hostapd_set_wps_beacon_ie(hapd, hapd->wps_beacon_ie,
-                                 hapd->wps_beacon_ie_len);
-
-       os_free(hapd->wps_probe_resp_ie);
-       if (probe_resp_ie_len == 0) {
-               hapd->wps_probe_resp_ie = NULL;
-               hapd->wps_probe_resp_ie_len = 0;
-       } else {
-               hapd->wps_probe_resp_ie = os_malloc(probe_resp_ie_len);
-               if (hapd->wps_probe_resp_ie == NULL) {
-                       hapd->wps_probe_resp_ie_len = 0;
-                       return -1;
-               }
-               os_memcpy(hapd->wps_probe_resp_ie, probe_resp_ie,
-                         probe_resp_ie_len);
-               hapd->wps_probe_resp_ie_len = probe_resp_ie_len;
-       }
-       hostapd_set_wps_probe_resp_ie(hapd, hapd->wps_probe_resp_ie,
-                                     hapd->wps_probe_resp_ie_len);
-
-       return 0;
+       wpabuf_free(hapd->wps_beacon_ie);
+       hapd->wps_beacon_ie = beacon_ie;
+       wpabuf_free(hapd->wps_probe_resp_ie);
+       hapd->wps_probe_resp_ie = probe_resp_ie;
+       return hapd->drv.set_ap_wps_ie(hapd, hapd->wps_beacon_ie,
+                                      hapd->wps_probe_resp_ie);
 }
 
 
@@ -477,15 +447,13 @@ static void hostapd_wps_event_cb(void *ctx, enum wps_event event,
 
 static void hostapd_wps_clear_ies(struct hostapd_data *hapd)
 {
-       os_free(hapd->wps_beacon_ie);
+       wpabuf_free(hapd->wps_beacon_ie);
        hapd->wps_beacon_ie = NULL;
-       hapd->wps_beacon_ie_len = 0;
-       hostapd_set_wps_beacon_ie(hapd, NULL, 0);
 
-       os_free(hapd->wps_probe_resp_ie);
+       wpabuf_free(hapd->wps_probe_resp_ie);
        hapd->wps_probe_resp_ie = NULL;
-       hapd->wps_probe_resp_ie_len = 0;
-       hostapd_set_wps_probe_resp_ie(hapd, NULL, 0);
+
+       hapd->drv.set_ap_wps_ie(hapd, NULL, NULL);
 }
 
 
@@ -531,17 +499,8 @@ int hostapd_init_wps(struct hostapd_data *hapd,
                os_strdup(hapd->conf->model_number) : NULL;
        wps->dev.serial_number = hapd->conf->serial_number ?
                os_strdup(hapd->conf->serial_number) : NULL;
-       if (hapd->conf->config_methods) {
-               char *m = hapd->conf->config_methods;
-               if (os_strstr(m, "label"))
-                       wps->config_methods |= WPS_CONFIG_LABEL;
-               if (os_strstr(m, "display"))
-                       wps->config_methods |= WPS_CONFIG_DISPLAY;
-               if (os_strstr(m, "push_button"))
-                       wps->config_methods |= WPS_CONFIG_PUSHBUTTON;
-               if (os_strstr(m, "keypad"))
-                       wps->config_methods |= WPS_CONFIG_KEYPAD;
-       }
+       wps->config_methods =
+               wps_config_methods_str2bin(hapd->conf->config_methods);
        if (hapd->conf->device_type &&
            wps_dev_type_str2bin(hapd->conf->device_type,
                                 wps->dev.pri_dev_type) < 0) {