1252190Srpaulo#!/usr/bin/python 2252190Srpaulo# Tests P2P_Flush 3252190Srpaulo# Will flush the p2p interface 4252190Srpaulo# Then Program will exit 5252190Srpaulo######### MAY NEED TO RUN AS SUDO ############# 6252190Srpaulo 7252190Srpauloimport dbus 8252190Srpauloimport sys, os 9252190Srpauloimport time 10252190Srpauloimport gobject 11252190Srpauloimport threading 12252190Srpauloimport getopt 13252190Srpaulofrom dbus.mainloop.glib import DBusGMainLoop 14252190Srpaulo 15252190Srpaulodef usage(): 16252190Srpaulo print "Usage:" 17252190Srpaulo print " %s -i <interface_name> \ " \ 18252190Srpaulo % sys.argv[0] 19252190Srpaulo print " [-w <wpas_dbus_interface>]" 20252190Srpaulo print "Options:" 21252190Srpaulo print " -i = interface name" 22252190Srpaulo print " -w = wpas dbus interface = fi.w1.wpa_supplicant1" 23252190Srpaulo print "Example:" 24252190Srpaulo print " %s -i wlan0" % sys.argv[0] 25252190Srpaulo 26252190Srpaulo# Required Signals\ 27252190Srpaulodef deviceLost(devicepath): 28252190Srpaulo print "Device lost: %s" % (devicepath) 29252190Srpaulo 30252190Srpauloclass P2P_Flush (threading.Thread): 31252190Srpaulo # Needed Variables 32252190Srpaulo global bus 33252190Srpaulo global wpas_object 34252190Srpaulo global interface_object 35252190Srpaulo global p2p_interface 36252190Srpaulo global interface_name 37252190Srpaulo global wpas 38252190Srpaulo global wpas_dbus_interface 39252190Srpaulo global path 40252190Srpaulo global timeout 41252190Srpaulo 42252190Srpaulo # Dbus Paths 43252190Srpaulo global wpas_dbus_opath 44252190Srpaulo global wpas_dbus_interfaces_opath 45252190Srpaulo global wpas_dbus_interfaces_interface 46252190Srpaulo global wpas_dbus_interfaces_p2pdevice 47252190Srpaulo 48252190Srpaulo # Constructor 49252190Srpaulo def __init__(self,interface_name,wpas_dbus_interface,timeout): 50252190Srpaulo # Initializes variables and threads 51252190Srpaulo self.interface_name = interface_name 52252190Srpaulo self.wpas_dbus_interface = wpas_dbus_interface 53252190Srpaulo self.timeout = timeout 54252190Srpaulo 55252190Srpaulo # Initializes thread and daemon allows for ctrl-c kill 56252190Srpaulo threading.Thread.__init__(self) 57252190Srpaulo self.daemon = True 58252190Srpaulo 59252190Srpaulo # Generating interface/object paths 60252190Srpaulo self.wpas_dbus_opath = "/" + \ 61252190Srpaulo self.wpas_dbus_interface.replace(".","/") 62252190Srpaulo self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \ 63252190Srpaulo "/Interfaces" 64252190Srpaulo self.wpas_dbus_interfaces_interface = \ 65252190Srpaulo self.wpas_dbus_interface + ".Interface" 66252190Srpaulo self.wpas_dbus_interfaces_p2pdevice = \ 67252190Srpaulo self.wpas_dbus_interfaces_interface \ 68252190Srpaulo + ".P2PDevice" 69252190Srpaulo 70252190Srpaulo # Getting interfaces and objects 71252190Srpaulo DBusGMainLoop(set_as_default=True) 72252190Srpaulo self.bus = dbus.SystemBus() 73252190Srpaulo self.wpas_object = self.bus.get_object( 74252190Srpaulo self.wpas_dbus_interface, 75252190Srpaulo self.wpas_dbus_opath) 76252190Srpaulo self.wpas = dbus.Interface(self.wpas_object, 77252190Srpaulo self.wpas_dbus_interface) 78252190Srpaulo 79252190Srpaulo # Try to see if supplicant knows about interface 80252190Srpaulo # If not, throw an exception 81252190Srpaulo try: 82252190Srpaulo self.path = self.wpas.GetInterface( 83252190Srpaulo self.interface_name) 84252190Srpaulo except dbus.DBusException, exc: 85252190Srpaulo error = 'Error:\n Interface ' + self.interface_name \ 86252190Srpaulo + ' was not found' 87252190Srpaulo print error 88252190Srpaulo usage() 89252190Srpaulo os._exit(0) 90252190Srpaulo 91252190Srpaulo self.interface_object = self.bus.get_object( 92252190Srpaulo self.wpas_dbus_interface, self.path) 93252190Srpaulo self.p2p_interface = dbus.Interface(self.interface_object, 94252190Srpaulo self.wpas_dbus_interfaces_p2pdevice) 95252190Srpaulo 96252190Srpaulo # Signals 97252190Srpaulo self.bus.add_signal_receiver(deviceLost, 98252190Srpaulo dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 99252190Srpaulo signal_name="DeviceLost") 100252190Srpaulo 101252190Srpaulo # Runs p2p_flush 102252190Srpaulo def run(self): 103252190Srpaulo # Allows other threads to keep working while MainLoop runs 104252190Srpaulo # Required for timeout implementation 105252190Srpaulo gobject.MainLoop().get_context().iteration(True) 106252190Srpaulo gobject.threads_init() 107252190Srpaulo self.p2p_interface.Flush() 108252190Srpaulo gobject.MainLoop().run() 109252190Srpaulo 110252190Srpaulo 111252190Srpauloif __name__ == "__main__": 112252190Srpaulo # Needed to show which devices were lost 113252190Srpaulo timeout = 5 114252190Srpaulo # Defaults for optional inputs 115252190Srpaulo wpas_dbus_interface = 'fi.w1.wpa_supplicant1' 116252190Srpaulo 117252190Srpaulo # interface_name is required 118252190Srpaulo interface_name = None 119252190Srpaulo 120252190Srpaulo # Using getopts to handle options 121252190Srpaulo try: 122252190Srpaulo options, args = getopt.getopt(sys.argv[1:],"hi:w:") 123252190Srpaulo 124252190Srpaulo except getopt.GetoptError: 125252190Srpaulo usage() 126252190Srpaulo quit() 127252190Srpaulo 128252190Srpaulo # If theres a switch, override default option 129252190Srpaulo for key, value in options: 130252190Srpaulo # Help 131252190Srpaulo if (key == "-h"): 132252190Srpaulo usage() 133252190Srpaulo quit() 134252190Srpaulo # Interface Name 135252190Srpaulo elif (key == "-i"): 136252190Srpaulo interface_name = value 137252190Srpaulo # Dbus interface 138252190Srpaulo elif (key == "-w"): 139252190Srpaulo wpas_dbus_interface = value 140252190Srpaulo else: 141252190Srpaulo assert False, "unhandled option" 142252190Srpaulo 143252190Srpaulo # Interface name is required and was not given 144252190Srpaulo if (interface_name == None): 145252190Srpaulo print "Error:\n interface_name is required" 146252190Srpaulo usage() 147252190Srpaulo quit() 148252190Srpaulo 149252190Srpaulo # Constructor 150252190Srpaulo try: 151252190Srpaulo p2p_flush_test = P2P_Flush(interface_name, wpas_dbus_interface,timeout) 152252190Srpaulo 153252190Srpaulo except: 154252190Srpaulo print "Error:\n Invalid wpas_dbus_interface" 155252190Srpaulo usage() 156252190Srpaulo quit() 157252190Srpaulo 158252190Srpaulo # Start P2P_Find 159252190Srpaulo p2p_flush_test.start() 160252190Srpaulo 161252190Srpaulo try: 162252190Srpaulo time.sleep(int(p2p_flush_test.timeout)) 163252190Srpaulo 164252190Srpaulo except: 165252190Srpaulo pass 166252190Srpaulo 167252190Srpaulo print "p2p_flush complete" 168252190Srpaulo quit() 169