P2P: Cancel group formation timeout on client connection
authorJouni Malinen <jouni@qca.qualcomm.com>
Sat, 14 Sep 2013 17:39:50 +0000 (10:39 -0700)
committerJouni Malinen <j@w1.fi>
Sat, 14 Sep 2013 18:25:10 +0000 (11:25 -0700)
It was possiblle for the group formation timeout to be left running even
after the P2P Client connected to the group if the WPS provisioning step
was not completed cleanly (e.g., due to WSC_Done not getting received
from the client). There is no need to remove the group in such case due
to the initial group formation timeout, so work around this by removing
that timeout on data connection.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/p2p_supplicant.c

index 9338ad5..882c1d5 100644 (file)
@@ -5945,6 +5945,16 @@ struct wpa_ssid * wpas_p2p_get_persistent(struct wpa_supplicant *wpa_s,
 void wpas_p2p_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
                                       const u8 *addr)
 {
+       if (eloop_cancel_timeout(wpas_p2p_group_formation_timeout,
+                                wpa_s->parent, NULL) > 0) {
+               /*
+                * This can happen if WPS provisioning step is not terminated
+                * cleanly (e.g., P2P Client does not send WSC_Done). Since the
+                * peer was able to connect, there is no need to time out group
+                * formation after this, though.
+                */
+               wpa_printf(MSG_DEBUG, "P2P: Workaround - cancelled P2P group formation timeout on data connection");
+       }
        wpa_s->global->p2p_go_wait_client.sec = 0;
        if (addr == NULL)
                return;