[RFC 3/4] P2P: add new_device flag to dev_found callback
Johannes Berg
johannes
Thu Dec 2 13:04:48 PST 2010
From: Jean Trivelly <jeanx.trivelly at linux.intel.com>
The DBus code will want to have perfect matching
of dev_found and the dev_lost it adds so it doesn't
need to keep track internally. Enable that with a
new flag in the core that tracks whether we have
already notified about this -- the existing users
can ignore it.
Signed-off-by: Johannes Berg <johannes.berg at intel.com>
---
src/p2p/p2p.c | 13 +++++++++----
src/p2p/p2p.h | 4 +++-
src/p2p/p2p_i.h | 1 +
wpa_supplicant/p2p_supplicant.c | 3 ++-
4 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 7c56a0c..88b151e 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -390,7 +390,8 @@ static int p2p_add_group_clients(struct p2p_data *p2p, const u8 *go_dev_addr,
dev->oper_freq = freq;
p2p->cfg->dev_found(p2p->cfg->cb_ctx,
dev->info.p2p_device_addr,
- &dev->info);
+ &dev->info, 1);
+ dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
}
os_memcpy(dev->interface_addr, cli->p2p_interface_addr,
@@ -539,8 +540,10 @@ int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq, int level,
"P2P: Do not report rejected device");
return 0;
}
- p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info);
- dev->flags |= P2P_DEV_REPORTED;
+
+ p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info,
+ !(dev->flags & P2P_DEV_REPORTED_ONCE));
+ dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
return 0;
}
@@ -1117,7 +1120,9 @@ void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr,
return;
}
- p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info);
+ p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info,
+ !(dev->flags & P2P_DEV_REPORTED_ONCE));
+ dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
}
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index fbc0dc7..417b310 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -403,6 +403,7 @@ struct p2p_config {
* @ctx: Callback context from cb_ctx
* @addr: Source address of the message triggering this notification
* @info: P2P Peer information
+ * @new_device: inform if the peer is newly found.
*
* This callback is used to notify that a new P2P Device has been
* found. This may happen, e.g., during Search state based on scan
@@ -410,7 +411,8 @@ struct p2p_config {
* Group Owner Negotiation Request.
*/
void (*dev_found)(void *ctx, const u8 *addr,
- const struct p2p_peer_info *info);
+ const struct p2p_peer_info *info,
+ int new_device);
/**
* go_neg_req_rx - Notification of a receive GO Negotiation Request
diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h
index 35944a5..e460cc2 100644
--- a/src/p2p/p2p_i.h
+++ b/src/p2p/p2p_i.h
@@ -89,6 +89,7 @@ struct p2p_device {
#define P2P_DEV_GROUP_CLIENT_ONLY BIT(12)
#define P2P_DEV_FORCE_FREQ BIT(13)
#define P2P_DEV_PD_FOR_JOIN BIT(14)
+#define P2P_DEV_REPORTED_ONCE BIT(15)
unsigned int flags;
int status; /* enum p2p_status_code */
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 53c3fb7..4e17768 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -1104,7 +1104,8 @@ void wpas_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id)
static void wpas_dev_found(void *ctx, const u8 *addr,
- const struct p2p_peer_info *info)
+ const struct p2p_peer_info *info,
+ int new_device)
{
struct wpa_supplicant *wpa_s = ctx;
char devtype[WPS_DEV_TYPE_BUFSIZE];
--
1.7.2.3
More information about the Hostap
mailing list