]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
WPS NFC: Clean up nfcpy script no-wait operations
authorJouni Malinen <jouni@qca.qualcomm.com>
Fri, 29 Nov 2013 10:57:34 +0000 (12:57 +0200)
committerJouni Malinen <j@w1.fi>
Mon, 27 Jan 2014 20:08:13 +0000 (22:08 +0200)
This allows the scripts to terminate at proper point with --no-wait.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

hostapd/wps-ap-nfc.py
wpa_supplicant/examples/wps-nfc.py

index f72564f72cc5c26ab554a7e937290bbe5f2e00d2..8fe7b9e17409e01c5b51c9b4f9cc1a01cca25cb8 100755 (executable)
@@ -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
index ea00497cdd517cad6a8bfcb06e813730f2a75baa..0680be609b0dd2b7ad73d8b013e4d141ac8d15a4 100755 (executable)
@@ -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"