diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-18 16:16:31 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-18 16:16:31 +0200 |
commit | 4755fce1dc286432a952fa5acb54c7fa880fe1b2 (patch) | |
tree | 6a4a0c0180adf2cd982bd83fb0c3240eaf183ee2 /sys/src | |
parent | b6122a4c42b4f078f671a62c95a8147e34ffb38c (diff) |
wpa: wait for bss to connect
waiting at the auth command is too late because we want to
read the brsne first to build the rsne used in the auth message.
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/aux/wpa.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/sys/src/cmd/aux/wpa.c b/sys/src/cmd/aux/wpa.c index 61f765146..430d1b091 100644 --- a/sys/src/cmd/aux/wpa.c +++ b/sys/src/cmd/aux/wpa.c @@ -155,6 +155,22 @@ getessid(void) } int +connected(void) +{ + char status[1024]; + + if(getifstats("status:", status, sizeof(status)) == nil) + return 0; + if(strcmp(status, "connecting") == 0) + return 0; + if(strcmp(status, "unauthenticated") == 0) + return 0; + if(debug) + fprint(2, "status: %s\n", status); + return 1; +} + +int buildrsne(uchar rsne[258]) { char buf[1024]; @@ -598,6 +614,10 @@ main(int argc, char *argv[]) free(s); } + /* bss scan might not be complete yet, so check for 10 seconds. */ + for(try = 10; try >= 0 && !connected(); try--) + sleep(1000); + if(rsnelen <= 0){ static uchar brsne[258]; @@ -618,13 +638,10 @@ main(int argc, char *argv[]) /* * we use write() instead of fprint so the message gets written - * at once and not chunked up on fprint buffer. bss scan might - * not be complete yet, so retry for 10 seconds. + * at once and not chunked up on fprint buffer. */ n = sprint((char*)buf, "auth %.*H", rsnelen, rsne); - for(try = 10; try >= 0 && write(cfd, buf, n) != n; try--) - sleep(1000); - if(try < 0) + if(write(cfd, buf, n) != n) sysfatal("write auth: %r"); if(!debug){ |