aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2012-05-30 11:18:46 -0700
committerDmitry Shmidt <dimitrysh@google.com>2012-05-30 11:22:51 -0700
commit98f9e76624da6bb96edc1982c423e4a119c5170a (patch)
tree7d3861403839d7e6e01820e9dcf846d970896780 /src
parent5b5fb02b225c5c05a4477bef58bdaceede5d68dc (diff)
downloadexternal_wpa_supplicant_8-98f9e76624da6bb96edc1982c423e4a119c5170a.zip
external_wpa_supplicant_8-98f9e76624da6bb96edc1982c423e4a119c5170a.tar.gz
external_wpa_supplicant_8-98f9e76624da6bb96edc1982c423e4a119c5170a.tar.bz2
wpa_supplicant: Update to Version 0.8.27 from BRCM
- Fix crash during TRUE pbc overlap - Fix p2p_stop_find event - Avoid race condition in GO-NEG process if both peers enter p2p_connect at the same time - Retry assoc immediately on ASSOC-REJECT. Previously assoc was retried on authentication timeout (which occurs after 10secs). Now on assoc reject, we cancel the auth timer and then initiate a assoc scan. BUG: 6543705, 6427094 Change-Id: I4489fb14b6cead069f0d14fcbb9e2224f790d77b Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/driver_nl80211.c3
-rw-r--r--src/p2p/p2p.c14
-rw-r--r--src/p2p/p2p_go_neg.c3
-rw-r--r--src/wps/wps_registrar.c5
4 files changed, 25 insertions, 0 deletions
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 721b73b..77a6a35 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -2190,6 +2190,9 @@ static int process_global_event(struct nl_msg *msg, void *arg)
if (ifidx == -1 || ifidx == drv->ifindex ||
have_ifidx(drv, ifidx))
do_process_drv_event(drv, gnlh->cmd, tb);
+#ifdef ANDROID_P2P
+ break;
+#endif
}
return NL_SKIP;
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 68dfb8d..a010699 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -60,6 +60,7 @@ int p2p_connection_in_progress(struct p2p_data *p2p)
case P2P_CONNECT_LISTEN:
case P2P_GO_NEG:
case P2P_WAIT_PEER_CONNECT:
+ case P2P_WAIT_PEER_IDLE:
case P2P_PROVISIONING:
case P2P_INVITE:
case P2P_INVITE_LISTEN:
@@ -67,6 +68,7 @@ int p2p_connection_in_progress(struct p2p_data *p2p)
break;
default:
+ wpa_printf(MSG_DEBUG, "p2p_connection_in_progress state %d", p2p->state);
ret = 0;
}
@@ -2283,6 +2285,11 @@ void p2p_flush(struct p2p_data *p2p)
{
struct p2p_device *dev, *prev;
p2p_clear_timeout(p2p);
+#ifdef ANDROID_P2P
+ if (p2p->state == P2P_SEARCH)
+ wpa_msg(p2p->cfg->msg_ctx, MSG_INFO,
+ P2P_EVENT_FIND_STOPPED);
+#endif
p2p_set_state(p2p, P2P_IDLE);
p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
p2p->go_neg_peer = NULL;
@@ -2683,12 +2690,19 @@ static void p2p_go_neg_req_cb(struct p2p_data *p2p, int success)
}
if (success) {
+#ifndef ANDROID_P2P
dev->go_neg_req_sent++;
+#endif
if (dev->flags & P2P_DEV_USER_REJECTED) {
p2p_set_state(p2p, P2P_IDLE);
return;
}
}
+#ifdef ANDROID_P2P
+ else {
+ dev->go_neg_req_sent--;
+ }
+#endif
if (!success &&
(dev->info.dev_capab & P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY) &&
diff --git a/src/p2p/p2p_go_neg.c b/src/p2p/p2p_go_neg.c
index 1a0c7d4..6e818c2 100644
--- a/src/p2p/p2p_go_neg.c
+++ b/src/p2p/p2p_go_neg.c
@@ -203,6 +203,9 @@ int p2p_connect_send(struct p2p_data *p2p, struct p2p_device *dev)
p2p->go_neg_peer = dev;
dev->flags |= P2P_DEV_WAIT_GO_NEG_RESPONSE;
dev->connect_reqs++;
+#ifdef ANDROID_P2P
+ dev->go_neg_req_sent++;
+#endif
if (p2p_send_action(p2p, freq, dev->info.p2p_device_addr,
p2p->cfg->dev_addr, dev->info.p2p_device_addr,
wpabuf_head(req), wpabuf_len(req), 200) < 0) {
diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
index 85ec317..5ed7ea4 100644
--- a/src/wps/wps_registrar.c
+++ b/src/wps/wps_registrar.c
@@ -312,8 +312,13 @@ static void wps_registrar_remove_pbc_session(struct wps_registrar *reg,
pbc = reg->pbc_sessions;
while (pbc) {
if (os_memcmp(pbc->uuid_e, uuid_e, WPS_UUID_LEN) == 0 ||
+#ifdef ANDROID_P2P
+ (p2p_dev_addr && !is_zero_ether_addr(pbc->addr) &&
+ os_memcmp(pbc->addr, p2p_dev_addr, ETH_ALEN) ==
+#else
(p2p_dev_addr && !is_zero_ether_addr(reg->p2p_dev_addr) &&
os_memcmp(reg->p2p_dev_addr, p2p_dev_addr, ETH_ALEN) ==
+#endif
0)) {
if (prev)
prev->next = pbc->next;