161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#!/usr/bin/python 261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# Tests p2p_connect 361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# Will try to connect to another peer 461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# and form a group 561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt######### MAY NEED TO RUN AS SUDO ############# 661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport dbus 861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport sys, os 961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport time 1061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport gobject 1161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtimport getopt 1261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtfrom dbus.mainloop.glib import DBusGMainLoop 1361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef usage(): 1661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Usage:" 1761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " %s -i <interface_name> -m <wps_method> \ " \ 1861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt % sys.argv[0] 1961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -a <addr> [-p <pin>] [-g <go_intent>] \ " 2061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " [-w <wpas_dbus_interface>]" 2161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Options:" 2261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -i = interface name" 2361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -m = wps method" 2461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -a = peer address" 2561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -p = pin number (8 digits)" 2661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -g = group owner intent" 2761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " -w = wpas dbus interface = fi.w1.wpa_supplicant1" 2861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Example:" 2961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print " %s -i wlan0 -a 0015008352c0 -m display -p 12345670" % sys.argv[0] 3061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt# Required Signals 3361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef GONegotiationSuccess(status): 3461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Go Negotiation Success" 3561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef GONegotiationFailure(status): 3761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print 'Go Negotiation Failed. Status:' 3861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print format(status) 3961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 4061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 4161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef GroupStarted(properties): 4261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if properties.has_key("group_object"): 4361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print 'Group Formation Complete %s' \ 4461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt % properties["group_object"] 4561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 4661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 4761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtdef WpsFailure(status, etc): 4861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "WPS Authentication Failure".format(status) 4961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print etc 5061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 5161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtclass P2P_Connect(): 5361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Needed Variables 5461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global bus 5561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_object 5661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global interface_object 5761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global p2p_interface 5861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global ifname 5961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas 6061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interface 6161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global timeout 6261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global path 6361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wps_method 6461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global go_intent 6561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global addr 6661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global pin 6761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 6861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Dbus Paths 6961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_opath 7061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_opath 7161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_interface 7261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global wpas_dbus_interfaces_p2pdevice 7361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Dictionary of Arguements 7561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt global p2p_connect_arguements 7661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Constructor 7861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def __init__(self,ifname,wpas_dbus_interface,addr, 7961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pin,wps_method,go_intent): 8061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Initializes variables and threads 8161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.ifname = ifname 8261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface = wpas_dbus_interface 8361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wps_method = wps_method 8461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.go_intent = go_intent 8561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.addr = addr 8661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.pin = pin 8761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Generating interface/object paths 8961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_opath = \ 9061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt "/" + self.wpas_dbus_interface.replace(".","/") 9161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_wpas_dbus_interfaces_opath = \ 9261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_opath + "/Interfaces" 9361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_interface = \ 9461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface + ".Interface" 9561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_p2pdevice = \ 9661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_interface + ".P2PDevice" 9761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 9861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Getting interfaces and objects 9961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt DBusGMainLoop(set_as_default=True) 10061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus = dbus.SystemBus() 10161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_object = self.bus.get_object( 10261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface, 10361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_opath) 10461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas = dbus.Interface( 10561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_object, self.wpas_dbus_interface) 10661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 10761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # See if wpa_supplicant already knows about this interface 10861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.path = None 10961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 11061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.path = self.wpas.GetInterface(ifname) 11161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except: 11261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if not str(exc).startswith( 11361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface + \ 11461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt ".InterfaceUnknown:"): 11561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt raise exc 11661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 11761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt path = self.wpas.CreateInterface( 11861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt {'Ifname': ifname, 'Driver': 'test'}) 11961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt time.sleep(1) 12061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 12161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except dbus.DBusException, exc: 12261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if not str(exc).startswith( 12361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface + \ 12461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt ".InterfaceExists:"): 12561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt raise exc 12661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 12761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Get Interface and objects 12861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.interface_object = self.bus.get_object( 12961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interface,self.path) 13061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_interface = dbus.Interface( 13161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.interface_object, 13261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.wpas_dbus_interfaces_p2pdevice) 13361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 13461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Add signals 13561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(GONegotiationSuccess, 13661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 13761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="GONegotiationSuccess") 13861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(GONegotiationFailure, 13961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 14061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="GONegotiationFailure") 14161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(GroupStarted, 14261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 14361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="GroupStarted") 14461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.bus.add_signal_receiver(WpsFailure, 14561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt dbus_interface=self.wpas_dbus_interfaces_p2pdevice, 14661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt signal_name="WpsFailed") 14761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 14861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 14961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt #Constructing all the arguements needed to connect 15061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def constructArguements(self): 15161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Adding required arguements 15261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_connect_arguements = {'wps_method':self.wps_method, 15361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 'peer':dbus.ObjectPath(self.path+'/Peers/'+self.addr)} 15461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 15561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Display requires a pin, and a go intent of 15 15661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.wps_method == 'display'): 15761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.pin != None): 15861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_connect_arguements.update({'pin':self.pin}) 15961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 16061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Pin required for wps_method=display" 16161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 16261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 16361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 16461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.go_intent != None and int(self.go_intent) != 15): 16561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "go_intent overwritten to 15" 16661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 16761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.go_intent = '15' 16861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 16961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Keypad requires a pin, and a go intent of less than 15 17061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (self.wps_method == 'keypad'): 17161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.pin != None): 17261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_connect_arguements.update({'pin':self.pin}) 17361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 17461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Pin required for wps_method=keypad" 17561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 17661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 17761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 17861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.go_intent != None and int(self.go_intent) == 15): 17961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt error = "Error :\n Group Owner intent cannot be" + \ 18061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt " 15 for wps_method=keypad" 18161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print error 18261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 18361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 18461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 18561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Doesn't require pin 18661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # for ./wpa_cli, p2p_connect [mac] [pin#], wps_method=keypad 18761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (self.wps_method == 'pin'): 18861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.pin != None): 18961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "pin ignored" 19061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 19161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # No pin is required for pbc so it is ignored 19261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (self.wps_method == 'pbc'): 19361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.pin != None): 19461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "pin ignored" 19561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 19661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 19761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n wps_method not supported or does not exist" 19861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 19961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 20061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 20161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Go_intent is optional for all arguements 20261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.go_intent != None): 20361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_connect_arguements.update( 20461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt {'go_intent':dbus.Int32(self.go_intent)}) 20561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 20661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Running p2p_connect 20761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt def run(self): 20861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 20961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt result_pin = self.p2p_interface.Connect( 21061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt self.p2p_connect_arguements) 21161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 21261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except dbus.DBusException, exc: 21361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt raise exc 21461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 21561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (self.wps_method == 'pin' and \ 21661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt not self.p2p_connect_arguements.has_key('pin') ): 21761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Connect return with pin value of %d " % int(result_pin) 21861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt gobject.MainLoop().run() 21961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 22061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtif __name__ == "__main__": 22161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 22261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Required 22361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt interface_name = None 22461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wps_method = None 22561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt addr = None 22661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 22761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Conditionally optional 22861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pin = None 22961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 23061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Optional 23161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpas_dbus_interface = 'fi.w1.wpa_supplicant1' 23261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt go_intent = None 23361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 23461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Using getopts to handle options 23561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 23661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt options, args = getopt.getopt(sys.argv[1:],"hi:m:a:p:g:w:") 23761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 23861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except getopt.GetoptError: 23961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 24061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 24161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 24261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # If theres a switch, override default option 24361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt for key, value in options: 24461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Help 24561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (key == "-h"): 24661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 24761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 24861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Interface Name 24961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-i"): 25061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt interface_name = value 25161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # WPS Method 25261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-m"): 25361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wps_method = value 25461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Address 25561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-a"): 25661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt addr = value 25761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Pin 25861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-p"): 25961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pin = value 26061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Group Owner Intent 26161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-g"): 26261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt go_intent = value 26361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Dbus interface 26461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt elif (key == "-w"): 26561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpas_dbus_interface = value 26661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt else: 26761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt assert False, "unhandled option" 26861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 26961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Required Arguements check 27061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (interface_name == None or wps_method == None or addr == None): 27161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Required arguements not specified" 27261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 27361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 27461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 27561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Group Owner Intent Check 27661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (go_intent != None and (int(go_intent) > 15 or int(go_intent) < 0) ): 27761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Group Owner Intent must be between 0 and 15 inclusive" 27861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 27961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 28061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 28161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt # Pin Check 28261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (pin != None and len(pin) != 8): 28361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Pin is not 8 digits" 28461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 28561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 28661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 28761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt try: 28861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_connect_test = P2P_Connect(interface_name,wpas_dbus_interface, 28961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt addr,pin,wps_method,go_intent) 29061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 29161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt except: 29261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt print "Error:\n Invalid Arguements" 29361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt usage() 29461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt quit() 29561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 29661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_connect_test.constructArguements() 29761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt p2p_connect_test.run() 29861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 29961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os._exit(0) 300