P2PS: Change connection capability handling
authorIlan Peer <ilan.peer@intel.com>
Thu, 24 Sep 2015 17:37:58 +0000 (20:37 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 7 Oct 2015 14:07:21 +0000 (17:07 +0300)
Change the connection capability handling so that in case there are no
active roles, the peer has an active GO, and the advertisement supports
operation as a client, the returned connection capability is set to
client.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
wpa_supplicant/p2p_supplicant.c

index 832a379..809c455 100644 (file)
@@ -699,10 +699,20 @@ static u8 p2ps_group_capability(void *ctx, u8 incoming, u8 role)
        /* If a required role has been specified, handle it here */
        if (role && role != P2PS_SETUP_NEW) {
                switch (incoming) {
+               case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_NEW:
+               case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_CLIENT:
+                       /*
+                        * Peer has an active GO, so if the role allows it and
+                        * we do not have any active roles, become client.
+                        */
+                       if ((role & P2PS_SETUP_CLIENT) && !go_wpa_s &&
+                           !cli_wpa_s)
+                               return P2PS_SETUP_CLIENT;
+
+                       /* fall through */
+
                case P2PS_SETUP_NONE:
                case P2PS_SETUP_NEW:
-               case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_CLIENT:
-               case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_NEW:
                        conncap = role;
                        goto grp_owner;
 
@@ -758,6 +768,13 @@ static u8 p2ps_group_capability(void *ctx, u8 incoming, u8 role)
 
        case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_NEW:
        case P2PS_SETUP_GROUP_OWNER | P2PS_SETUP_CLIENT:
+               /*
+                * Peer has an active GO, so if the role allows it and
+                * we do not have any active roles, become client.
+                */
+               if ((role & P2PS_SETUP_CLIENT) && !go_wpa_s && !cli_wpa_s)
+                       return P2PS_SETUP_CLIENT;
+
                if (cli_wpa_s)
                        conncap = P2PS_SETUP_GROUP_OWNER;
                else {