aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-02-24 20:05:22 (GMT)
committerJouni Malinen <j@w1.fi>2011-02-24 20:05:22 (GMT)
commitc165d81eea6f794deddf77915f2d2cb8b1ac8dc5 (patch)
tree4701fe3ba91ce942dea59b61eb0c7294ebc35417 /src
parent8fd7dc1b1cb8bceae0b493fa724b5e076d45a42d (diff)
downloadhostap-c165d81eea6f794deddf77915f2d2cb8b1ac8dc5.zip
hostap-c165d81eea6f794deddf77915f2d2cb8b1ac8dc5.tar.gz
hostap-c165d81eea6f794deddf77915f2d2cb8b1ac8dc5.tar.bz2
P2P: Add p2p_get_peer_found to get peer info
This will only retrieve information about peers that have been fully discovered, not peers that are only half-discovered based on their Probe Request frames. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/p2p/p2p.c41
-rw-r--r--src/p2p/p2p.h10
2 files changed, 51 insertions, 0 deletions
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index d422499..76cdf27 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -3239,3 +3239,44 @@ const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p)
return NULL;
return p2p->go_neg_peer->info.p2p_device_addr;
}
+
+
+const struct p2p_peer_info *
+p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next)
+{
+ struct p2p_device *dev;
+
+ if (addr) {
+ dev = p2p_get_device(p2p, addr);
+ if (!dev)
+ return NULL;
+
+ if (!next) {
+ if (dev->flags & P2P_DEV_PROBE_REQ_ONLY)
+ return NULL;
+
+ return &dev->info;
+ } else {
+ do {
+ dev = dl_list_first(&dev->list,
+ struct p2p_device,
+ list);
+ if (&dev->list == &p2p->devices)
+ return NULL;
+ } while (dev->flags & P2P_DEV_PROBE_REQ_ONLY);
+ }
+ } else {
+ dev = dl_list_first(&p2p->devices, struct p2p_device, list);
+ if (!dev)
+ return NULL;
+ while (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
+ dev = dl_list_first(&dev->list,
+ struct p2p_device,
+ list);
+ if (&dev->list == &p2p->devices)
+ return NULL;
+ }
+ }
+
+ return &dev->info;
+}
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index baf51d8..0d09d1e 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -1372,4 +1372,14 @@ unsigned int p2p_get_group_num_members(struct p2p_group *group);
*/
const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next);
+/**
+ * p2p_get_peer_found - Get P2P peer info structure of a found peer
+ * @p2p: P2P module context from p2p_init()
+ * @addr: P2P Device Address of the peer or %NULL to indicate the first peer
+ * @next: Whether to select the peer entry following the one indicated by addr
+ * Returns: The first P2P peer info available or %NULL if no such peer exists
+ */
+const struct p2p_peer_info *
+p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next);
+
#endif /* P2P_H */