int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr, const u8 *ie, size_t len) { struct p2p_group_member *m; if (group == NULL) return -1; m = os_zalloc(sizeof(*m)); if (m == NULL) return -1; os_memcpy(m->addr, addr, ETH_ALEN); m->p2p_ie = ieee802_11_vendor_ie_concat(ie, len, P2P_IE_VENDOR_TYPE); if (m->p2p_ie) { m->client_info = p2p_build_client_info(addr, m->p2p_ie, &m->dev_capab, m->dev_addr); } m->next = group->members; group->members = m; group->num_members++; wpa_msg(group->p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Add client " MACSTR " to group (p2p=%d client_info=%d); num_members=%u/%u", MAC2STR(addr), m->p2p_ie ? 1 : 0, m->client_info ? 1 : 0, group->num_members, group->cfg->max_clients); if (group->num_members == group->cfg->max_clients) group->beacon_update = 1; p2p_group_update_ies(group); if (group->num_members == 1) group->cfg->idle_update(group->cfg->cb_ctx, 0); return 0; }
int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr, const u8 *ie, size_t len) { struct p2p_group_member *m; if (group == NULL) return -1; p2p_add_device(group->p2p, addr, 0, NULL, 0, ie, len, 0); m = os_zalloc(sizeof(*m)); if (m == NULL) return -1; os_memcpy(m->addr, addr, ETH_ALEN); m->p2p_ie = ieee802_11_vendor_ie_concat(ie, len, P2P_IE_VENDOR_TYPE); if (m->p2p_ie) { m->client_info = p2p_build_client_info(addr, m->p2p_ie, &m->dev_capab, m->dev_addr); } #ifdef CONFIG_WIFI_DISPLAY m->wfd_ie = ieee802_11_vendor_ie_concat(ie, len, WFD_IE_VENDOR_TYPE); #endif /* CONFIG_WIFI_DISPLAY */ p2p_group_remove_member(group, addr); m->next = group->members; group->members = m; group->num_members++; p2p_dbg(group->p2p, "Add client " MACSTR " to group (p2p=%d wfd=%d client_info=%d); num_members=%u/%u", MAC2STR(addr), m->p2p_ie ? 1 : 0, m->wfd_ie ? 1 : 0, m->client_info ? 1 : 0, group->num_members, group->cfg->max_clients); if (group->num_members == group->cfg->max_clients) group->beacon_update = 1; p2p_group_update_ies(group); if (group->num_members == 1) group->cfg->idle_update(group->cfg->cb_ctx, 0); return 0; }
int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr, const u8 *ie, size_t len) { struct p2p_group_member *m; struct p2p_device *dev = NULL; if (group == NULL) return -1; m = os_zalloc(sizeof(*m)); if (m == NULL) return -1; os_memcpy(m->addr, addr, ETH_ALEN); m->p2p_ie = ieee802_11_vendor_ie_concat(ie, len, P2P_IE_VENDOR_TYPE); if (m->p2p_ie) { m->client_info = p2p_build_client_info(addr, m->p2p_ie, &m->dev_capab, m->dev_addr); } //patched by george@20120305 if(m->dev_addr) { printf("%s-1\n", __func__); dev = p2p_get_device(group->p2p, m->dev_addr); } else if(m->addr) { printf("%s-2\n", __func__); dev = p2p_get_device(group->p2p, m->addr); } else { printf("addr==NULL\n"); } if(dev) { u8 *paddr = NULL; printf("got dev, got interface_addr=" MACSTR", intended_addr=" MACSTR "\n", MAC2STR(dev->interface_addr), MAC2STR(dev->intended_addr)); if(m->addr) paddr = m->addr; else paddr = m->dev_addr; if(paddr) { if(os_memcmp(paddr, dev->intended_addr, ETH_ALEN)) { os_memcpy(dev->intended_addr, paddr, ETH_ALEN); printf("got dev, set intended_addr=" MACSTR "\n", MAC2STR(dev->intended_addr)); } if(os_memcmp(paddr, dev->interface_addr, ETH_ALEN)) { os_memcpy(dev->interface_addr, paddr, ETH_ALEN); printf("got dev, set interface_addr=" MACSTR "\n", MAC2STR(dev->interface_addr)); } } } else { printf("dev==NULL\n"); } m->next = group->members; group->members = m; group->num_members++; wpa_msg(group->p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Add client " MACSTR " to group (p2p=%d client_info=%d); num_members=%u/%u", MAC2STR(addr), m->p2p_ie ? 1 : 0, m->client_info ? 1 : 0, group->num_members, group->cfg->max_clients); if (group->num_members == group->cfg->max_clients) group->beacon_update = 1; p2p_group_update_ies(group); if (group->num_members == 1) group->cfg->idle_update(group->cfg->cb_ctx, 0); return 0; }