P2P: Omit P2P Group Info in case of no connected peers
authorChaitanya TK <chaitanya.mgit@gmail.com>
Sat, 30 Mar 2013 18:08:42 +0000 (20:08 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 30 Mar 2013 18:08:42 +0000 (20:08 +0200)
As per P2P specification v1.2: "The P2P Group Info attribute shall be
omitted if there are zero connected P2P Clients."

Do not add the attribute if there are not connected peers.

Signed-hostap: Chaitanya T K <chaitanya.mgit@gmail.com>

src/p2p/p2p_group.c

index edb8d72..852ddf5 100644 (file)
@@ -399,7 +399,6 @@ static void wifi_display_group_update(struct p2p_group *group)
 
 static struct wpabuf * p2p_group_build_probe_resp_ie(struct p2p_group *group)
 {
-       u8 *group_info;
        struct wpabuf *p2p_subelems, *ie;
        struct p2p_group_member *m;
 
@@ -413,14 +412,18 @@ static struct wpabuf * p2p_group_build_probe_resp_ie(struct p2p_group *group)
        /* P2P Device Info */
        p2p_buf_add_device_info(p2p_subelems, group->p2p, NULL);
 
-       /* P2P Group Info */
-       group_info = wpabuf_put(p2p_subelems, 0);
-       wpabuf_put_u8(p2p_subelems, P2P_ATTR_GROUP_INFO);
-       wpabuf_put_le16(p2p_subelems, 0); /* Length to be filled */
-       for (m = group->members; m; m = m->next)
-               p2p_client_info(p2p_subelems, m);
-       WPA_PUT_LE16(group_info + 1,
-                    (u8 *) wpabuf_put(p2p_subelems, 0) - group_info - 3);
+       /* P2P Group Info: Only when at least one P2P Client is connected */
+       if (group->members) {
+               u8 *group_info;
+               group_info = wpabuf_put(p2p_subelems, 0);
+               wpabuf_put_u8(p2p_subelems, P2P_ATTR_GROUP_INFO);
+               wpabuf_put_le16(p2p_subelems, 0); /* Length to be filled */
+               for (m = group->members; m; m = m->next)
+                       p2p_client_info(p2p_subelems, m);
+               WPA_PUT_LE16(group_info + 1,
+                            (u8 *) wpabuf_put(p2p_subelems, 0) - group_info -
+                            3);
+       }
 
        ie = p2p_group_encaps_probe_resp(p2p_subelems);
        wpabuf_free(p2p_subelems);