aboutsummaryrefslogtreecommitdiffstats
path: root/src/p2p
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2014-06-30 09:54:22 -0700
committerDmitry Shmidt <dimitrysh@google.com>2014-06-30 14:18:42 -0700
commitd30ac604c9f6da71a0dd7f46d25be05a2a62cfbb (patch)
tree9e867bd7056f99f73c39b556a1393b9614e622b0 /src/p2p
parent2271d3fdd5982d0e5e81cf9999a861bba933eacb (diff)
downloadandroid_external_wpa_supplicant_8-d30ac604c9f6da71a0dd7f46d25be05a2a62cfbb.tar.gz
android_external_wpa_supplicant_8-d30ac604c9f6da71a0dd7f46d25be05a2a62cfbb.tar.bz2
android_external_wpa_supplicant_8-d30ac604c9f6da71a0dd7f46d25be05a2a62cfbb.zip
Cumulative patch from commit ea18024d78bde140fb8f74d216d757816bfd6e9b
ea18024 dbus: Add PropertiesChanged signal to Peer object 36716ee P2P: Add a utility function to run a method on every known peer bf03566 dbus: Remove GroupMember object type and use Peer instead 17a37d7 dbus: Add a Groups property to a Peer object on which it belongs 6f04642 P2P: Add utility functions to get GO/client interface c6386e5 P2P Add a utility to run a callback on all available groups 8e76f48 P2P: Add a utility function to get the group configuration 37d8a27 TDLS: Clean up add/set peer operations bcd2baa TDLS: Tear down connection on malformed Setup Confirm 8190540 TDLS: Abort local setup when failing to add STA 1dce7a2 TDLS: Update peer STA as soon as full peer info is available 819c943 TDLS: Remove peer from global peer-list on free 5841958 hostapd: Use channel switch fallback on error 8974620 hostapd: Perform multi-BSS CSA for DFS properly ccac7c6 hostapd: Make chan_switch command per-interface not per-BSS 6782b68 hostapd: Move CSA parameters to hostapd_data 1de809e eapol_test: Fix -R option to not replace -s option value 3c5d34e Change channel before IBSS associations ebffdbc nl80211: Refactor mode switch logic Change-Id: I1cbdc4dce586ec69f693b3b04eb340a5332f6b40 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/p2p')
-rw-r--r--src/p2p/p2p.c13
-rw-r--r--src/p2p/p2p.h27
-rw-r--r--src/p2p/p2p_group.c22
3 files changed, 60 insertions, 2 deletions
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index d0191e74..48f3aa65 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -4494,6 +4494,19 @@ void p2p_err(struct p2p_data *p2p, const char *fmt, ...)
}
+void p2p_loop_on_known_peers(struct p2p_data *p2p,
+ void (*peer_callback)(struct p2p_peer_info *peer,
+ void *user_data),
+ void *user_data)
+{
+ struct p2p_device *dev, *n;
+
+ dl_list_for_each_safe(dev, n, &p2p->devices, struct p2p_device, list) {
+ peer_callback(&dev->info, user_data);
+ }
+}
+
+
#ifdef CONFIG_WPS_NFC
static struct wpabuf * p2p_build_nfc_handover(struct p2p_data *p2p,
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index 5938aa71..16500a80 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -1788,7 +1788,7 @@ unsigned int p2p_get_group_num_members(struct p2p_group *group);
* @group: P2P group context from p2p_group_init()
* @next: iteration pointer, must be a pointer to a void * that is set to %NULL
* on the first call and not modified later
- * Returns: A P2P Interface Address for each call and %NULL for no more members
+ * Returns: A P2P Device Address for each call and %NULL for no more members
*/
const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next);
@@ -1810,6 +1810,26 @@ const u8 * p2p_group_get_dev_addr(struct p2p_group *group, const u8 *addr);
int p2p_group_is_client_connected(struct p2p_group *group, const u8 *dev_addr);
/**
+ * p2p_group_get_config - Get the group configuration
+ * @group: P2P group context from p2p_group_init()
+ * Returns: The group configuration pointer
+ */
+const struct p2p_group_config * p2p_group_get_config(struct p2p_group *group);
+
+/**
+ * p2p_loop_on_all_groups - Run the given callback on all groups
+ * @p2p: P2P module context from p2p_init()
+ * @group_callback: The callback function pointer
+ * @user_data: Some user data pointer which can be %NULL
+ *
+ * The group_callback function can stop the iteration by returning 0.
+ */
+void p2p_loop_on_all_groups(struct p2p_data *p2p,
+ int (*group_callback)(struct p2p_group *group,
+ void *user_data),
+ void *user_data);
+
+/**
* 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
@@ -1970,4 +1990,9 @@ void p2p_set_authorized_oob_dev_pw_id(struct p2p_data *p2p, u16 dev_pw_id,
int p2p_set_passphrase_len(struct p2p_data *p2p, unsigned int len);
+void p2p_loop_on_known_peers(struct p2p_data *p2p,
+ void (*peer_callback)(struct p2p_peer_info *peer,
+ void *user_data),
+ void *user_data);
+
#endif /* P2P_H */
diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c
index 395ca089..aa075bdb 100644
--- a/src/p2p/p2p_group.c
+++ b/src/p2p/p2p_group.c
@@ -973,7 +973,7 @@ const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next)
if (!iter)
return NULL;
- return iter->addr;
+ return iter->dev_addr;
}
@@ -1013,3 +1013,23 @@ int p2p_group_get_freq(struct p2p_group *group)
{
return group->cfg->freq;
}
+
+
+const struct p2p_group_config * p2p_group_get_config(struct p2p_group *group)
+{
+ return group->cfg;
+}
+
+
+void p2p_loop_on_all_groups(struct p2p_data *p2p,
+ int (*group_callback)(struct p2p_group *group,
+ void *user_data),
+ void *user_data)
+{
+ unsigned int i;
+
+ for (i = 0; i < p2p->num_groups; i++) {
+ if (!group_callback(p2p->groups[i], user_data))
+ break;
+ }
+}