aboutsummaryrefslogtreecommitdiffstats
path: root/src/p2p
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2014-05-22 15:13:07 -0700
committerDmitry Shmidt <dimitrysh@google.com>2014-05-22 15:13:07 -0700
commit3c57b3f85a2d1d586b8b42014a806df23d309824 (patch)
treebf293d3708f011b6772a1f7237dfe86db8c47703 /src/p2p
parent50b691dc36a8075e8f594e8bea93cb524fa6b1d2 (diff)
downloadandroid_external_wpa_supplicant_8-3c57b3f85a2d1d586b8b42014a806df23d309824.tar.gz
android_external_wpa_supplicant_8-3c57b3f85a2d1d586b8b42014a806df23d309824.tar.bz2
android_external_wpa_supplicant_8-3c57b3f85a2d1d586b8b42014a806df23d309824.zip
Cumulative patch from commit 2396f02a431dd6e4526fd79c93f06695211cb3e4
2396f02 Reserve QCA vendor specific nl80211 commands 14..19 5661bd0 P2P: Avoid resetting pending_listen_freq if p2p_listen is pending 8802326 nl80211: Indicate SHA256-based AKM suites in CONNECT/ASSOCIATE Change-Id: Id62b66e9683e87e888b91e0fd6407c1beb87b9c6 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/p2p')
-rw-r--r--src/p2p/p2p.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index c2f8d9b1..1a190414 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -238,6 +238,12 @@ static void p2p_listen_in_find(struct p2p_data *p2p, int dev_disc)
p2p_dbg(p2p, "Starting short listen state (state=%s)",
p2p_state_txt(p2p->state));
+ if (p2p->pending_listen_freq) {
+ /* We have a pending p2p_listen request */
+ p2p_dbg(p2p, "p2p_listen command pending already");
+ return;
+ }
+
freq = p2p_channel_to_freq(p2p->cfg->reg_class, p2p->cfg->channel);
if (freq < 0) {
p2p_dbg(p2p, "Unknown regulatory class/channel");
@@ -260,14 +266,14 @@ static void p2p_listen_in_find(struct p2p_data *p2p, int dev_disc)
return;
}
- p2p->pending_listen_freq = freq;
- p2p->pending_listen_sec = 0;
- p2p->pending_listen_usec = 1024 * tu;
-
ies = p2p_build_probe_resp_ies(p2p);
if (ies == NULL)
return;
+ p2p->pending_listen_freq = freq;
+ p2p->pending_listen_sec = 0;
+ p2p->pending_listen_usec = 1024 * tu;
+
if (p2p->cfg->start_listen(p2p->cfg->cb_ctx, freq, 1024 * tu / 1000,
ies) < 0) {
p2p_dbg(p2p, "Failed to start listen mode");
@@ -284,13 +290,18 @@ int p2p_listen(struct p2p_data *p2p, unsigned int timeout)
p2p_dbg(p2p, "Going to listen(only) state");
+ if (p2p->pending_listen_freq) {
+ /* We have a pending p2p_listen request */
+ p2p_dbg(p2p, "p2p_listen command pending already");
+ return -1;
+ }
+
freq = p2p_channel_to_freq(p2p->cfg->reg_class, p2p->cfg->channel);
if (freq < 0) {
p2p_dbg(p2p, "Unknown regulatory class/channel");
return -1;
}
- p2p->pending_listen_freq = freq;
p2p->pending_listen_sec = timeout / 1000;
p2p->pending_listen_usec = (timeout % 1000) * 1000;
@@ -308,6 +319,8 @@ int p2p_listen(struct p2p_data *p2p, unsigned int timeout)
if (ies == NULL)
return -1;
+ p2p->pending_listen_freq = freq;
+
if (p2p->cfg->start_listen(p2p->cfg->cb_ctx, freq, timeout, ies) < 0) {
p2p_dbg(p2p, "Failed to start listen mode");
p2p->pending_listen_freq = 0;
@@ -1116,6 +1129,7 @@ void p2p_stop_listen(struct p2p_data *p2p)
void p2p_stop_find(struct p2p_data *p2p)
{
+ p2p->pending_listen_freq = 0;
p2p_stop_find_for_freq(p2p, 0);
}