Copy WPS strings into AP configuration when using wpa_supplicant AP
[libeap.git] / wpa_supplicant / ap.c
index 8d173ff..b77bea4 100644 (file)
@@ -160,14 +160,21 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
                bss->config_methods = os_strdup(wpa_s->conf->config_methods);
        if (wpa_s->conf->device_type)
                bss->device_type = os_strdup(wpa_s->conf->device_type);
-#endif /* CONFIG_WPS */
-
-#ifdef CONFIG_P2P
        if (wpa_s->conf->device_name) {
                bss->device_name = os_strdup(wpa_s->conf->device_name);
                bss->friendly_name = os_strdup(wpa_s->conf->device_name);
        }
-#endif /* CONFIG_P2P */
+       if (wpa_s->conf->manufacturer)
+               bss->manufacturer = os_strdup(wpa_s->conf->manufacturer);
+       if (wpa_s->conf->model_name)
+               bss->model_name = os_strdup(wpa_s->conf->model_name);
+       if (wpa_s->conf->model_number)
+               bss->model_number = os_strdup(wpa_s->conf->model_number);
+       if (wpa_s->conf->serial_number)
+               bss->serial_number = os_strdup(wpa_s->conf->serial_number);
+       os_memcpy(bss->uuid, wpa_s->conf->uuid, WPS_UUID_LEN);
+       os_memcpy(bss->os_version, wpa_s->conf->os_version, 4);
+#endif /* CONFIG_WPS */
 
        return 0;
 }
@@ -296,6 +303,11 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
                params.p2p = 1;
 #endif /* CONFIG_P2P */
 
+       if (wpa_s->parent->set_ap_uapsd)
+               params.uapsd = wpa_s->parent->ap_uapsd;
+       else
+               params.uapsd = -1;
+
        if (wpa_drv_associate(wpa_s, &params) < 0) {
                wpa_msg(wpa_s, MSG_INFO, "Failed to start AP functionality");
                return -1;
@@ -390,7 +402,8 @@ void wpa_supplicant_ap_deinit(struct wpa_supplicant *wpa_s)
 
        wpa_s->current_ssid = NULL;
 #ifdef CONFIG_P2P
-       wpa_s->ap_iface->bss[0]->p2p_group = NULL;
+       if (wpa_s->ap_iface->bss)
+               wpa_s->ap_iface->bss[0]->p2p_group = NULL;
        wpas_p2p_group_deinit(wpa_s);
 #endif /* CONFIG_P2P */
        hostapd_interface_deinit(wpa_s->ap_iface);
@@ -476,7 +489,8 @@ int wpa_supplicant_ap_wps_pin(struct wpa_supplicant *wpa_s, const u8 *bssid,
                unsigned int rpin = wps_generate_pin();
                ret_len = os_snprintf(buf, buflen, "%d", rpin);
                pin = buf;
-       }
+       } else
+               ret_len = os_snprintf(buf, buflen, "%s", pin);
 
        ret = hostapd_wps_add_pin(wpa_s->ap_iface->bss[0], bssid, "any", pin,
                                  0);