161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#!/usr/bin/python 261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# Tests p2p_group_add 361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt######### MAY NEED TO RUN AS SUDO ############# 461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport dbus 661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport sys, os 761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport time 861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport gobject 961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport getopt 1061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport threading 1161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtfrom dbus.mainloop.glib import DBusGMainLoop 1261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef usage(): 1461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Usage:" 1561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " %s -i <interface_name> [-p <persistent>] \ " \ 1661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt % sys.argv[0] 1761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " [-f <frequency>] [-o <group_object_path>] \ " 1861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " [-w <wpas_dbus_interface>]" 1961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Options:" 2061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -i = interface name" 2161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -p = persistant group = 0 (0=false, 1=true)" 2261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -f = frequency" 2361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -o = persistent group object path" 2461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -w = wpas dbus interface = fi.w1.wpa_supplicant1" 2561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Example:" 2661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " %s -i wlan0" % sys.argv[0] 2761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 2861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# Required Signals 2961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef GroupStarted(properties): 3061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if properties.has_key("group_object"): 3161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print 'Group Formation Complete %s' \ 3261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt % properties["group_object"] 3361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 3461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef WpsFailure(status, etc): 3661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "WPS Authentication Failure".format(status) 3761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print etc 3861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 3961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 4061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtclass P2P_Group_Add (threading.Thread): 4161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Needed Variables 4261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global bus 4361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_object 4461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global interface_object 4561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global p2p_interface 4661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global interface_name 4761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas 4861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interface 4961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global path 5061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global persistent 5161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global frequency 5261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global persistent_group_object 5361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Dbus Paths 5561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_opath 5661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_opath 5761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_interface 5861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_p2pdevice 5961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 6061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Arguements 6161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global P2PDictionary 6261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 6361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Constructor 6461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def __init__(self,interface_name,wpas_dbus_interface,persistent,frequency, 6561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent_group_object): 6661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Initializes variables and threads 6761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.interface_name = interface_name 6861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface = wpas_dbus_interface 6961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.persistent = persistent 7061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.frequency = frequency 7161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.persistent_group_object = persistent_group_object 7261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Initializes thread and daemon allows for ctrl-c kill 7461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt threading.Thread.__init__(self) 7561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.daemon = True 7661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Generating interface/object paths 7861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_opath = "/" + \ 7961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface.replace(".","/") 8061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \ 8161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt "/Interfaces" 8261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_interface = \ 8361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface + ".Interface" 8461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_p2pdevice = \ 8561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_interface \ 8661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt + ".P2PDevice" 8761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Getting interfaces and objects 8961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt DBusGMainLoop(set_as_default=True) 9061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus = dbus.SystemBus() 9161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_object = self.bus.get_object( 9261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface, 9361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_opath) 9461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas = dbus.Interface(self.wpas_object, 9561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface) 9661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 9761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Try to see if supplicant knows about interface 9861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # If not, throw an exception 9961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 10061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.path = self.wpas.GetInterface( 10161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.interface_name) 10261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except dbus.DBusException, exc: 10361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt error = 'Error:\n Interface ' + self.interface_name \ 10461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt + ' was not found' 10561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print error 10661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 10761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 10861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 10961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.interface_object = self.bus.get_object( 11061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface, self.path) 11161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_interface = dbus.Interface(self.interface_object, 11261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_p2pdevice) 11361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 11461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt #Adds listeners 11561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(GroupStarted, 11661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 11761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="GroupStarted") 11861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(WpsFailure, 11961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 12061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="WpsFailed") 12161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 12261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Sets up p2p_group_add dictionary 12361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def constructArguements(self): 12461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.P2PDictionary = {'persistent':self.persistent} 12561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 12661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.frequency != None): 12761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (int(self.frequency) > 0): 12861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.P2PDictionary.update({'frequency':int(self.frequency)}) 12961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 13061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Frequency must be greater than 0" 13161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 13261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 13361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 13461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.persistent_group_object != None): 13561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.P2PDictionary.update({'persistent_group_object': 13661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.persistent_group_object}) 13761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 13861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Run p2p_group_remove 13961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def run(self): 14061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 14161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_interface.GroupAdd(self.P2PDictionary) 14261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 14361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except: 14461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Could not preform group add" 14561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 14661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 14761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 14861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Allows other threads to keep working while MainLoop runs 14961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Required for timeout implementation 15061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt gobject.MainLoop().get_context().iteration(True) 15161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt gobject.threads_init() 15261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt gobject.MainLoop().run() 15361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 15461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 15561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtif __name__ == "__main__": 15661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 15761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Defaults for optional inputs 15861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # 0 = false, 1 = true 15961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent = False 16061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt frequency = None 16161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent_group_object = None 16261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpas_dbus_interface = 'fi.w1.wpa_supplicant1' 16361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 16461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # interface_name is required 16561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt interface_name = None 16661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 16761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Using getopts to handle options 16861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 16961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt options, args = getopt.getopt(sys.argv[1:],"hi:p:f:o:w:") 17061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 17161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except getopt.GetoptError: 17261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 17361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 17461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 17561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # If theres a switch, override default option 17661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt for key, value in options: 17761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Help 17861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (key == "-h"): 17961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 18061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 18161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Interface Name 18261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-i"): 18361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt interface_name = value 18461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Timeout 18561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-p"): 18661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (value == '0'): 18761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent = False 18861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (value == '1'): 18961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent = True 19061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 19161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Persistent can only be 1 or 0" 19261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 19361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 19461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Frequency 19561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-f"): 19661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt frequency = value 19761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Persistent group object path 19861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-o"): 19961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent_group_object = value 20061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Dbus interface 20161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-w"): 20261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpas_dbus_interface = value 20361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 20461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt assert False, "unhandled option" 20561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 20661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Interface name is required and was not given 20761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (interface_name == None): 20861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n interface_name is required" 20961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 21061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 21161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 21261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 21361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_group_add_test = P2P_Group_Add(interface_name,wpas_dbus_interface, 21461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt persistent,frequency,persistent_group_object) 21561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except: 21661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Invalid Arguements" 21761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 21861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_group_add_test.constructArguements() 21961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_group_add_test.start() 22061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt time.sleep(5) 22161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Group formation timed out" 22261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 223