aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
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 /wpa_supplicant
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 'wpa_supplicant')
-rw-r--r--wpa_supplicant/events.c7
-rw-r--r--wpa_supplicant/p2p_supplicant.c3
-rw-r--r--wpa_supplicant/p2p_supplicant.h3
3 files changed, 10 insertions, 3 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index f3644f6..91f1873 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2014,7 +2014,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
peer_info.dev_capab = data->p2p_dev_found.dev_capab;
peer_info.group_capab = data->p2p_dev_found.group_capab;
- wpas_dev_found(wpa_s, data->p2p_dev_found.addr, &peer_info);
+ /*
+ * FIX: new_device=1 is not necessarily correct. We should
+ * maintain a P2P peer database in wpa_supplicant and update
+ * this information based on whether the peer is truly new.
+ */
+ wpas_dev_found(wpa_s, data->p2p_dev_found.addr, &peer_info, 1);
break;
}
case EVENT_P2P_GO_NEG_REQ_RX:
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index e532ce2..cdfcd75 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -1131,7 +1131,8 @@ void wpas_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id)
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];
diff --git a/wpa_supplicant/p2p_supplicant.h b/wpa_supplicant/p2p_supplicant.h
index ac4b13f..5b3b1d2 100644
--- a/wpa_supplicant/p2p_supplicant.h
+++ b/wpa_supplicant/p2p_supplicant.h
@@ -64,7 +64,8 @@ void wpas_p2p_rx_action(struct wpa_supplicant *wpa_s, const u8 *da,
void wpas_p2p_scan_ie(struct wpa_supplicant *wpa_s, struct wpabuf *ies);
void wpas_p2p_group_deinit(struct wpa_supplicant *wpa_s);
void wpas_dev_found(void *ctx, const u8 *addr,
- const struct p2p_peer_info *info);
+ const struct p2p_peer_info *info,
+ int new_device);
void wpas_go_neg_completed(void *ctx, struct p2p_go_neg_results *res);
void wpas_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id);
void wpas_prov_disc_req(void *ctx, const u8 *peer, u16 config_methods,