WPS NFC: Clean up nfcpy script no-wait operations

This allows the scripts to terminate at proper point with --no-wait.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2013-11-29 12:57:34 +02:00 committed by Jouni Malinen
parent 79ede5a7e6
commit 1f1b5b31d7
2 changed files with 32 additions and 14 deletions

View File

@ -149,10 +149,10 @@ def rdwr_connected_write(tag):
while write_wait_remove and tag.is_present:
time.sleep(0.1)
def wps_write_config_tag(clf):
def wps_write_config_tag(clf, wait_remove=True):
print "Write WPS config token"
global write_data, write_wait_remove
write_wait_remove = True
write_wait_remove = wait_remove
write_data = wpas_get_config_token()
if write_data == None:
print "Could not get WPS config token from hostapd"
@ -162,10 +162,10 @@ def wps_write_config_tag(clf):
clf.connect(rdwr={'on-connect': rdwr_connected_write})
def wps_write_password_tag(clf):
def wps_write_password_tag(clf, wait_remove=True):
print "Write WPS password token"
global write_data, write_wait_remove
write_wait_remove = True
write_wait_remove = wait_remove
write_data = wpas_get_password_token()
if write_data == None:
print "Could not get WPS password token from hostapd"
@ -176,7 +176,7 @@ def wps_write_password_tag(clf):
def rdwr_connected(tag):
global only_one
global only_one, no_wait
print "Tag connected: " + str(tag)
if tag.ndef:
@ -191,8 +191,6 @@ def rdwr_connected(tag):
continue_loop = False
else:
print "Not an NDEF tag - remove tag"
while tag.is_present:
time.sleep(0.1)
return not no_wait
@ -218,6 +216,8 @@ def main():
parser = argparse.ArgumentParser(description='nfcpy to hostapd integration for WPS NFC operations')
parser.add_argument('--only-one', '-1', action='store_true',
help='run only one operation and exit')
parser.add_argument('--no-wait', action='store_true',
help='do not wait for tag to be removed before exiting')
parser.add_argument('command', choices=['write-config',
'write-password'],
nargs='?')
@ -226,17 +226,20 @@ def main():
global only_one
only_one = args.only_one
global no_wait
no_wait = args.no_wait
try:
if not clf.open("usb"):
print "Could not open connection with an NFC device"
raise SystemExit
if args.command == "write-config":
wps_write_config_tag(clf)
wps_write_config_tag(clf, wait_remove=not args.no_wait)
raise SystemExit
if args.command == "write-password":
wps_write_password_tag(clf)
wps_write_password_tag(clf, wait_remove=not args.no_wait)
raise SystemExit
global continue_loop

View File

@ -27,6 +27,7 @@ import wpaspy
wpas_ctrl = '/var/run/wpa_supplicant'
srv = None
continue_loop = True
terminate_now = False
def wpas_connect():
ifaces = []
@ -226,6 +227,11 @@ def wps_handover_init(llc):
global continue_loop
continue_loop = False
global no_wait
if no_wait:
print "Trying to exit.."
global terminate_now
terminate_now = True
def wps_tag_read(tag, wait_remove=True):
success = False
@ -300,7 +306,7 @@ def wps_write_password_tag(clf, wait_remove=True):
def rdwr_connected(tag):
global only_one
global only_one, no_wait
print "Tag connected: " + str(tag)
if tag.ndef:
@ -315,15 +321,15 @@ def rdwr_connected(tag):
continue_loop = False
else:
print "Not an NDEF tag - remove tag"
while tag.is_present:
time.sleep(0.1)
return True
return not no_wait
def llcp_worker(llc):
global arg_uuid
if arg_uuid is None:
wps_handover_init(llc)
print "Exiting llcp_worker thread"
return
global srv
@ -356,9 +362,14 @@ def llcp_connected(llc):
srv.start()
else:
threading.Thread(target=llcp_worker, args=(llc,)).start()
print "llcp_connected returning"
return True
def terminate_loop():
global terminate_now
return terminate_now
def main():
clf = nfc.ContactlessFrontend()
@ -383,6 +394,9 @@ def main():
global only_one
only_one = args.only_one
global no_wait
no_wait = args.no_wait
try:
if not clf.open("usb"):
print "Could not open connection with an NFC device"
@ -407,7 +421,8 @@ def main():
try:
if not clf.connect(rdwr={'on-connect': rdwr_connected},
llcp={'on-startup': llcp_startup,
'on-connect': llcp_connected}):
'on-connect': llcp_connected},
terminate=terminate_loop):
break
except Exception, e:
print "clf.connect failed"