Add P2P Interface Address into ctrl_iface status output
[libeap.git] / wpa_supplicant / wps_supplicant.c
index 8cb9df2..8f5329a 100644 (file)
@@ -32,6 +32,7 @@
 #include "blacklist.h"
 #include "bss.h"
 #include "scan.h"
+#include "p2p_supplicant.h"
 #include "wps_supplicant.h"
 
 
@@ -240,6 +241,8 @@ static int wpa_supplicant_wps_cred(void *ctx,
                ssid->eap.phase1 = NULL;
                os_free(ssid->eap.eap_methods);
                ssid->eap.eap_methods = NULL;
+               if (!ssid->p2p_group)
+                       ssid->temporary = 0;
        } else {
                wpa_printf(MSG_DEBUG, "WPS: Create a new network based on the "
                           "received credential");
@@ -397,6 +400,9 @@ static void wpa_supplicant_wps_event_success(struct wpa_supplicant *wpa_s)
        wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_SUCCESS);
        wpa_s->wps_success = 1;
        wpas_notify_wps_event_success(wpa_s);
+#ifdef CONFIG_P2P
+       wpas_p2p_wps_success(wpa_s, wpa_s->bssid, 0);
+#endif /* CONFIG_P2P */
 }
 
 
@@ -596,6 +602,7 @@ static struct wpa_ssid * wpas_wps_add_network(struct wpa_supplicant *wpa_s,
                return NULL;
        wpas_notify_network_added(wpa_s, ssid);
        wpa_config_set_network_defaults(ssid);
+       ssid->temporary = 1;
        if (wpa_config_set(ssid, "key_mgmt", "WPS", 0) < 0 ||
            wpa_config_set(ssid, "eap", "WSC", 0) < 0 ||
            wpa_config_set(ssid, "identity", registrar ?
@@ -695,7 +702,7 @@ int wpas_wps_start_pbc(struct wpa_supplicant *wpa_s, const u8 *bssid,
 
 
 int wpas_wps_start_pin(struct wpa_supplicant *wpa_s, const u8 *bssid,
-                      const char *pin, int p2p_group)
+                      const char *pin, int p2p_group, u16 dev_pw_id)
 {
        struct wpa_ssid *ssid;
        char val[128];
@@ -708,10 +715,12 @@ int wpas_wps_start_pin(struct wpa_supplicant *wpa_s, const u8 *bssid,
        ssid->temporary = 1;
        ssid->p2p_group = p2p_group;
        if (pin)
-               os_snprintf(val, sizeof(val), "\"pin=%s\"", pin);
+               os_snprintf(val, sizeof(val), "\"pin=%s dev_pw_id=%u\"",
+                           pin, dev_pw_id);
        else {
                rpin = wps_generate_pin();
-               os_snprintf(val, sizeof(val), "\"pin=%08d\"", rpin);
+               os_snprintf(val, sizeof(val), "\"pin=%08d dev_pw_id=%u\"",
+                           rpin, dev_pw_id);
        }
        wpa_config_set(ssid, "phase1", val, 0);
        if (wpa_s->wps_fragment_size)
@@ -787,6 +796,7 @@ int wpas_wps_start_reg(struct wpa_supplicant *wpa_s, const u8 *bssid,
        ssid = wpas_wps_add_network(wpa_s, 1, bssid);
        if (ssid == NULL)
                return -1;
+       ssid->temporary = 1;
        pos = val;
        end = pos + sizeof(val);
        res = os_snprintf(pos, end - pos, "\"pin=%s", pin);