Updated to hostap_2_6
[mech_eap.git] / libeap / src / p2p / p2p_group.c
index 0d66993..051b4e3 100644 (file)
@@ -155,7 +155,8 @@ static void p2p_group_add_common_ies(struct p2p_group *group,
                group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
        if (group->num_members >= group->cfg->max_clients)
                group_capab |= P2P_GROUP_CAPAB_GROUP_LIMIT;
-       group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION;
+       if (group->cfg->ip_addr_alloc)
+               group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION;
        p2p_buf_add_capability(ie, dev_capab, group_capab);
 }
 
@@ -296,14 +297,14 @@ static int wifi_display_add_dev_info_descr(struct wpabuf *buf,
        os_memset(zero_addr, 0, ETH_ALEN);
        pos = wpabuf_head_u8(m->wfd_ie);
        end = pos + wpabuf_len(m->wfd_ie);
-       while (pos + 1 < end) {
+       while (end - pos >= 3) {
                u8 id;
                u16 len;
 
                id = *pos++;
                len = WPA_GET_BE16(pos);
                pos += 2;
-               if (pos + len > end)
+               if (len > end - pos)
                        break;
 
                switch (id) {
@@ -849,6 +850,20 @@ static struct p2p_group_member * p2p_group_get_client(struct p2p_group *group,
 }
 
 
+const u8 * p2p_group_get_client_interface_addr(struct p2p_group *group,
+                                              const u8 *dev_addr)
+{
+       struct p2p_group_member *m;
+
+       if (!group)
+               return NULL;
+       m = p2p_group_get_client(group, dev_addr);
+       if (m)
+               return m->addr;
+       return NULL;
+}
+
+
 static struct p2p_group_member * p2p_group_get_client_iface(
        struct p2p_group *group, const u8 *interface_addr)
 {
@@ -1097,7 +1112,7 @@ int p2p_group_get_common_freqs(struct p2p_group *group, int *common_freqs,
                struct p2p_device *dev;
 
                dev = p2p_get_device(group->p2p, m->dev_addr);
-               if (!dev)
+               if (!dev || dev->channels.reg_classes == 0)
                        continue;
 
                p2p_channels_intersect(&intersect, &dev->channels, &res);