aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-02-24 19:59:58 (GMT)
committerJouni Malinen <j@w1.fi>2011-02-24 19:59:58 (GMT)
commit8fd7dc1b1cb8bceae0b493fa724b5e076d45a42d (patch)
tree73e9f5056b2f7f6cfcc2d5ea0528e6072f417c95 /src
parentc5db8e517040f096d6c180150219c8ff88791efa (diff)
downloadhostap-8fd7dc1b1cb8bceae0b493fa724b5e076d45a42d.zip
hostap-8fd7dc1b1cb8bceae0b493fa724b5e076d45a42d.tar.gz
hostap-8fd7dc1b1cb8bceae0b493fa724b5e076d45a42d.tar.bz2
P2P: Add new_device flag to dev_found callback
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. The part where this is always set to 1 if the new device is discovered by a driver that has P2P in the driver is buggy -- the driver should feed the P2P peer database and then that should feed the notification here instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/driver_test.c2
-rw-r--r--src/p2p/p2p.c13
-rw-r--r--src/p2p/p2p.h4
-rw-r--r--src/p2p/p2p_i.h1
4 files changed, 14 insertions, 6 deletions
diff --git a/src/drivers/driver_test.c b/src/drivers/driver_test.c
index 43b7c60..babf79a 100644
--- a/src/drivers/driver_test.c
+++ b/src/drivers/driver_test.c
@@ -3118,7 +3118,7 @@ static void test_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id)
static void test_dev_found(void *ctx, const u8 *addr,
- const struct p2p_peer_info *info)
+ const struct p2p_peer_info *info, int new_device)
{
struct wpa_driver_test_data *drv = ctx;
union wpa_event_data event;
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index d655484..d422499 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;
}
@@ -1118,7 +1121,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 8324399..baf51d8 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -430,6 +430,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
@@ -437,7 +438,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 0207c5b..91ba5fd 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 */