P2P: Add D-Bus python scripts to perform additional commands
Four D-Bus scripts using python glib are added to perform the following operations: p2p_flush, p2p_group_add, p2p_listen and p2p_stop_find. Signed-hostap: Michael Naumov <michael.naumov@intel.com> Signed-hostap: Nirav Shah <nirav.j2.shah@intel.com>
This commit is contained in:
parent
46d69fa5c6
commit
b682d6a73d
4 changed files with 746 additions and 0 deletions
168
wpa_supplicant/examples/p2p/p2p_flush.py
Normal file
168
wpa_supplicant/examples/p2p/p2p_flush.py
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# Tests P2P_Flush
|
||||||
|
# Will flush the p2p interface
|
||||||
|
# Then Program will exit
|
||||||
|
######### MAY NEED TO RUN AS SUDO #############
|
||||||
|
|
||||||
|
import dbus
|
||||||
|
import sys, os
|
||||||
|
import time
|
||||||
|
import gobject
|
||||||
|
import threading
|
||||||
|
import getopt
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print "Usage:"
|
||||||
|
print " %s -i <interface_name> \ " \
|
||||||
|
% sys.argv[0]
|
||||||
|
print " [-w <wpas_dbus_interface>]"
|
||||||
|
print "Options:"
|
||||||
|
print " -i = interface name"
|
||||||
|
print " -w = wpas dbus interface = fi.w1.wpa_supplicant1"
|
||||||
|
print "Example:"
|
||||||
|
print " %s -i wlan0" % sys.argv[0]
|
||||||
|
|
||||||
|
# Required Signals\
|
||||||
|
def deviceLost(devicepath):
|
||||||
|
print "Device lost: %s" % (devicepath)
|
||||||
|
|
||||||
|
class P2P_Flush (threading.Thread):
|
||||||
|
# Needed Variables
|
||||||
|
global bus
|
||||||
|
global wpas_object
|
||||||
|
global interface_object
|
||||||
|
global p2p_interface
|
||||||
|
global interface_name
|
||||||
|
global wpas
|
||||||
|
global wpas_dbus_interface
|
||||||
|
global path
|
||||||
|
global timeout
|
||||||
|
|
||||||
|
# Dbus Paths
|
||||||
|
global wpas_dbus_opath
|
||||||
|
global wpas_dbus_interfaces_opath
|
||||||
|
global wpas_dbus_interfaces_interface
|
||||||
|
global wpas_dbus_interfaces_p2pdevice
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
def __init__(self,interface_name,wpas_dbus_interface,timeout):
|
||||||
|
# Initializes variables and threads
|
||||||
|
self.interface_name = interface_name
|
||||||
|
self.wpas_dbus_interface = wpas_dbus_interface
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
|
# Initializes thread and daemon allows for ctrl-c kill
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
|
||||||
|
# Generating interface/object paths
|
||||||
|
self.wpas_dbus_opath = "/" + \
|
||||||
|
self.wpas_dbus_interface.replace(".","/")
|
||||||
|
self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \
|
||||||
|
"/Interfaces"
|
||||||
|
self.wpas_dbus_interfaces_interface = \
|
||||||
|
self.wpas_dbus_interface + ".Interface"
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice = \
|
||||||
|
self.wpas_dbus_interfaces_interface \
|
||||||
|
+ ".P2PDevice"
|
||||||
|
|
||||||
|
# Getting interfaces and objects
|
||||||
|
DBusGMainLoop(set_as_default=True)
|
||||||
|
self.bus = dbus.SystemBus()
|
||||||
|
self.wpas_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface,
|
||||||
|
self.wpas_dbus_opath)
|
||||||
|
self.wpas = dbus.Interface(self.wpas_object,
|
||||||
|
self.wpas_dbus_interface)
|
||||||
|
|
||||||
|
# Try to see if supplicant knows about interface
|
||||||
|
# If not, throw an exception
|
||||||
|
try:
|
||||||
|
self.path = self.wpas.GetInterface(
|
||||||
|
self.interface_name)
|
||||||
|
except dbus.DBusException, exc:
|
||||||
|
error = 'Error:\n Interface ' + self.interface_name \
|
||||||
|
+ ' was not found'
|
||||||
|
print error
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
self.interface_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface, self.path)
|
||||||
|
self.p2p_interface = dbus.Interface(self.interface_object,
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice)
|
||||||
|
|
||||||
|
# Signals
|
||||||
|
self.bus.add_signal_receiver(deviceLost,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="DeviceLost")
|
||||||
|
|
||||||
|
# Runs p2p_flush
|
||||||
|
def run(self):
|
||||||
|
# Allows other threads to keep working while MainLoop runs
|
||||||
|
# Required for timeout implementation
|
||||||
|
gobject.MainLoop().get_context().iteration(True)
|
||||||
|
gobject.threads_init()
|
||||||
|
self.p2p_interface.Flush()
|
||||||
|
gobject.MainLoop().run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Needed to show which devices were lost
|
||||||
|
timeout = 5
|
||||||
|
# Defaults for optional inputs
|
||||||
|
wpas_dbus_interface = 'fi.w1.wpa_supplicant1'
|
||||||
|
|
||||||
|
# interface_name is required
|
||||||
|
interface_name = None
|
||||||
|
|
||||||
|
# Using getopts to handle options
|
||||||
|
try:
|
||||||
|
options, args = getopt.getopt(sys.argv[1:],"hi:w:")
|
||||||
|
|
||||||
|
except getopt.GetoptError:
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# If theres a switch, override default option
|
||||||
|
for key, value in options:
|
||||||
|
# Help
|
||||||
|
if (key == "-h"):
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
# Interface Name
|
||||||
|
elif (key == "-i"):
|
||||||
|
interface_name = value
|
||||||
|
# Dbus interface
|
||||||
|
elif (key == "-w"):
|
||||||
|
wpas_dbus_interface = value
|
||||||
|
else:
|
||||||
|
assert False, "unhandled option"
|
||||||
|
|
||||||
|
# Interface name is required and was not given
|
||||||
|
if (interface_name == None):
|
||||||
|
print "Error:\n interface_name is required"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
try:
|
||||||
|
p2p_flush_test = P2P_Flush(interface_name, wpas_dbus_interface,timeout)
|
||||||
|
|
||||||
|
except:
|
||||||
|
print "Error:\n Invalid wpas_dbus_interface"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Start P2P_Find
|
||||||
|
p2p_flush_test.start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
time.sleep(int(p2p_flush_test.timeout))
|
||||||
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
print "p2p_flush complete"
|
||||||
|
quit()
|
222
wpa_supplicant/examples/p2p/p2p_group_add.py
Normal file
222
wpa_supplicant/examples/p2p/p2p_group_add.py
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# Tests p2p_group_add
|
||||||
|
######### MAY NEED TO RUN AS SUDO #############
|
||||||
|
|
||||||
|
import dbus
|
||||||
|
import sys, os
|
||||||
|
import time
|
||||||
|
import gobject
|
||||||
|
import getopt
|
||||||
|
import threading
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print "Usage:"
|
||||||
|
print " %s -i <interface_name> [-p <persistent>] \ " \
|
||||||
|
% sys.argv[0]
|
||||||
|
print " [-f <frequency>] [-o <group_object_path>] \ "
|
||||||
|
print " [-w <wpas_dbus_interface>]"
|
||||||
|
print "Options:"
|
||||||
|
print " -i = interface name"
|
||||||
|
print " -p = persistant group = 0 (0=false, 1=true)"
|
||||||
|
print " -f = frequency"
|
||||||
|
print " -o = persistent group object path"
|
||||||
|
print " -w = wpas dbus interface = fi.w1.wpa_supplicant1"
|
||||||
|
print "Example:"
|
||||||
|
print " %s -i wlan0" % sys.argv[0]
|
||||||
|
|
||||||
|
# Required Signals
|
||||||
|
def GroupStarted(properties):
|
||||||
|
if properties.has_key("group_object"):
|
||||||
|
print 'Group Formation Complete %s' \
|
||||||
|
% properties["group_object"]
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
def WpsFailure(status, etc):
|
||||||
|
print "WPS Authentication Failure".format(status)
|
||||||
|
print etc
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
class P2P_Group_Add (threading.Thread):
|
||||||
|
# Needed Variables
|
||||||
|
global bus
|
||||||
|
global wpas_object
|
||||||
|
global interface_object
|
||||||
|
global p2p_interface
|
||||||
|
global interface_name
|
||||||
|
global wpas
|
||||||
|
global wpas_dbus_interface
|
||||||
|
global path
|
||||||
|
global persistent
|
||||||
|
global frequency
|
||||||
|
global persistent_group_object
|
||||||
|
|
||||||
|
# Dbus Paths
|
||||||
|
global wpas_dbus_opath
|
||||||
|
global wpas_dbus_interfaces_opath
|
||||||
|
global wpas_dbus_interfaces_interface
|
||||||
|
global wpas_dbus_interfaces_p2pdevice
|
||||||
|
|
||||||
|
# Arguements
|
||||||
|
global P2PDictionary
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
def __init__(self,interface_name,wpas_dbus_interface,persistent,frequency,
|
||||||
|
persistent_group_object):
|
||||||
|
# Initializes variables and threads
|
||||||
|
self.interface_name = interface_name
|
||||||
|
self.wpas_dbus_interface = wpas_dbus_interface
|
||||||
|
self.persistent = persistent
|
||||||
|
self.frequency = frequency
|
||||||
|
self.persistent_group_object = persistent_group_object
|
||||||
|
|
||||||
|
# Initializes thread and daemon allows for ctrl-c kill
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
|
||||||
|
# Generating interface/object paths
|
||||||
|
self.wpas_dbus_opath = "/" + \
|
||||||
|
self.wpas_dbus_interface.replace(".","/")
|
||||||
|
self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \
|
||||||
|
"/Interfaces"
|
||||||
|
self.wpas_dbus_interfaces_interface = \
|
||||||
|
self.wpas_dbus_interface + ".Interface"
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice = \
|
||||||
|
self.wpas_dbus_interfaces_interface \
|
||||||
|
+ ".P2PDevice"
|
||||||
|
|
||||||
|
# Getting interfaces and objects
|
||||||
|
DBusGMainLoop(set_as_default=True)
|
||||||
|
self.bus = dbus.SystemBus()
|
||||||
|
self.wpas_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface,
|
||||||
|
self.wpas_dbus_opath)
|
||||||
|
self.wpas = dbus.Interface(self.wpas_object,
|
||||||
|
self.wpas_dbus_interface)
|
||||||
|
|
||||||
|
# Try to see if supplicant knows about interface
|
||||||
|
# If not, throw an exception
|
||||||
|
try:
|
||||||
|
self.path = self.wpas.GetInterface(
|
||||||
|
self.interface_name)
|
||||||
|
except dbus.DBusException, exc:
|
||||||
|
error = 'Error:\n Interface ' + self.interface_name \
|
||||||
|
+ ' was not found'
|
||||||
|
print error
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
self.interface_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface, self.path)
|
||||||
|
self.p2p_interface = dbus.Interface(self.interface_object,
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice)
|
||||||
|
|
||||||
|
#Adds listeners
|
||||||
|
self.bus.add_signal_receiver(GroupStarted,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="GroupStarted")
|
||||||
|
self.bus.add_signal_receiver(WpsFailure,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="WpsFailed")
|
||||||
|
|
||||||
|
# Sets up p2p_group_add dictionary
|
||||||
|
def constructArguements(self):
|
||||||
|
self.P2PDictionary = {'persistent':self.persistent}
|
||||||
|
|
||||||
|
if (self.frequency != None):
|
||||||
|
if (int(self.frequency) > 0):
|
||||||
|
self.P2PDictionary.update({'frequency':int(self.frequency)})
|
||||||
|
else:
|
||||||
|
print "Error:\n Frequency must be greater than 0"
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
if (self.persistent_group_object != None):
|
||||||
|
self.P2PDictionary.update({'persistent_group_object':
|
||||||
|
self.persistent_group_object})
|
||||||
|
|
||||||
|
# Run p2p_group_remove
|
||||||
|
def run(self):
|
||||||
|
try:
|
||||||
|
self.p2p_interface.GroupAdd(self.P2PDictionary)
|
||||||
|
|
||||||
|
except:
|
||||||
|
print "Error:\n Could not preform group add"
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
# Allows other threads to keep working while MainLoop runs
|
||||||
|
# Required for timeout implementation
|
||||||
|
gobject.MainLoop().get_context().iteration(True)
|
||||||
|
gobject.threads_init()
|
||||||
|
gobject.MainLoop().run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
# Defaults for optional inputs
|
||||||
|
# 0 = false, 1 = true
|
||||||
|
persistent = False
|
||||||
|
frequency = None
|
||||||
|
persistent_group_object = None
|
||||||
|
wpas_dbus_interface = 'fi.w1.wpa_supplicant1'
|
||||||
|
|
||||||
|
# interface_name is required
|
||||||
|
interface_name = None
|
||||||
|
|
||||||
|
# Using getopts to handle options
|
||||||
|
try:
|
||||||
|
options, args = getopt.getopt(sys.argv[1:],"hi:p:f:o:w:")
|
||||||
|
|
||||||
|
except getopt.GetoptError:
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# If theres a switch, override default option
|
||||||
|
for key, value in options:
|
||||||
|
# Help
|
||||||
|
if (key == "-h"):
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
# Interface Name
|
||||||
|
elif (key == "-i"):
|
||||||
|
interface_name = value
|
||||||
|
# Timeout
|
||||||
|
elif (key == "-p"):
|
||||||
|
if (value == '0'):
|
||||||
|
persistent = False
|
||||||
|
elif (value == '1'):
|
||||||
|
persistent = True
|
||||||
|
else:
|
||||||
|
print "Error:\n Persistent can only be 1 or 0"
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
# Frequency
|
||||||
|
elif (key == "-f"):
|
||||||
|
frequency = value
|
||||||
|
# Persistent group object path
|
||||||
|
elif (key == "-o"):
|
||||||
|
persistent_group_object = value
|
||||||
|
# Dbus interface
|
||||||
|
elif (key == "-w"):
|
||||||
|
wpas_dbus_interface = value
|
||||||
|
else:
|
||||||
|
assert False, "unhandled option"
|
||||||
|
|
||||||
|
# Interface name is required and was not given
|
||||||
|
if (interface_name == None):
|
||||||
|
print "Error:\n interface_name is required"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
try:
|
||||||
|
p2p_group_add_test = P2P_Group_Add(interface_name,wpas_dbus_interface,
|
||||||
|
persistent,frequency,persistent_group_object)
|
||||||
|
except:
|
||||||
|
print "Error:\n Invalid Arguements"
|
||||||
|
|
||||||
|
p2p_group_add_test.constructArguements()
|
||||||
|
p2p_group_add_test.start()
|
||||||
|
time.sleep(5)
|
||||||
|
print "Error:\n Group formation timed out"
|
||||||
|
os._exit(0)
|
182
wpa_supplicant/examples/p2p/p2p_listen.py
Normal file
182
wpa_supplicant/examples/p2p/p2p_listen.py
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# Tests P2P_Find
|
||||||
|
# Will listen
|
||||||
|
# Then Program will exit
|
||||||
|
######### MAY NEED TO RUN AS SUDO #############
|
||||||
|
|
||||||
|
import dbus
|
||||||
|
import sys, os
|
||||||
|
import time
|
||||||
|
import gobject
|
||||||
|
import threading
|
||||||
|
import getopt
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print "Usage:"
|
||||||
|
print " %s -i <interface_name> [-t <timeout>] \ " \
|
||||||
|
% sys.argv[0]
|
||||||
|
print " [-w <wpas_dbus_interface>]"
|
||||||
|
print "Options:"
|
||||||
|
print " -i = interface name"
|
||||||
|
print " -t = timeout = 0s (infinite)"
|
||||||
|
print " -w = wpas dbus interface = fi.w1.wpa_supplicant1"
|
||||||
|
print "Example:"
|
||||||
|
print " %s -i wlan0 -t 5" % sys.argv[0]
|
||||||
|
|
||||||
|
# Required Signals
|
||||||
|
def p2pStateChange(status):
|
||||||
|
print status
|
||||||
|
|
||||||
|
class P2P_Listen(threading.Thread):
|
||||||
|
# Needed Variables
|
||||||
|
global bus
|
||||||
|
global wpas_object
|
||||||
|
global interface_object
|
||||||
|
global p2p_interface
|
||||||
|
global interface_name
|
||||||
|
global wpas
|
||||||
|
global wpas_dbus_interface
|
||||||
|
global path
|
||||||
|
global timeout
|
||||||
|
|
||||||
|
# Dbus Paths
|
||||||
|
global wpas_dbus_opath
|
||||||
|
global wpas_dbus_interfaces_opath
|
||||||
|
global wpas_dbus_interfaces_interface
|
||||||
|
global wpas_dbus_interfaces_p2pdevice
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
def __init__(self,interface_name,wpas_dbus_interface,timeout):
|
||||||
|
# Initializes variables and threads
|
||||||
|
self.timeout = int(timeout)
|
||||||
|
self.interface_name = interface_name
|
||||||
|
self.wpas_dbus_interface = wpas_dbus_interface
|
||||||
|
|
||||||
|
# Initializes thread and daemon allows for ctrl-c kill
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
|
||||||
|
# Generating interface/object paths
|
||||||
|
self.wpas_dbus_opath = "/" + \
|
||||||
|
self.wpas_dbus_interface.replace(".","/")
|
||||||
|
self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \
|
||||||
|
"/Interfaces"
|
||||||
|
self.wpas_dbus_interfaces_interface = \
|
||||||
|
self.wpas_dbus_interface + ".Interface"
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice = \
|
||||||
|
self.wpas_dbus_interfaces_interface \
|
||||||
|
+ ".P2PDevice"
|
||||||
|
|
||||||
|
# Getting interfaces and objects
|
||||||
|
DBusGMainLoop(set_as_default=True)
|
||||||
|
self.bus = dbus.SystemBus()
|
||||||
|
self.wpas_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface,
|
||||||
|
self.wpas_dbus_opath)
|
||||||
|
self.wpas = dbus.Interface(self.wpas_object,
|
||||||
|
self.wpas_dbus_interface)
|
||||||
|
|
||||||
|
# Try to see if supplicant knows about interface
|
||||||
|
# If not, throw an exception
|
||||||
|
try:
|
||||||
|
self.path = self.wpas.GetInterface(
|
||||||
|
self.interface_name)
|
||||||
|
except dbus.DBusException, exc:
|
||||||
|
error = 'Error:\n Interface ' + self.interface_name \
|
||||||
|
+ ' was not found'
|
||||||
|
print error
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
self.interface_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface, self.path)
|
||||||
|
self.p2p_interface = dbus.Interface(self.interface_object,
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice)
|
||||||
|
|
||||||
|
self.bus.add_signal_receiver(p2pStateChange,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="P2PStateChanged")
|
||||||
|
|
||||||
|
# Run p2p_find
|
||||||
|
def run(self):
|
||||||
|
# Sets up p2p_listen
|
||||||
|
self.p2p_interface.Listen(int(self.timeout))
|
||||||
|
|
||||||
|
# Allows other threads to keep working while MainLoop runs
|
||||||
|
# Required for timeout implementation
|
||||||
|
gobject.MainLoop().get_context().iteration(True)
|
||||||
|
gobject.threads_init()
|
||||||
|
gobject.MainLoop().run()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
# Defaults for optional inputs
|
||||||
|
timeout = 0
|
||||||
|
wpas_dbus_interface = 'fi.w1.wpa_supplicant1'
|
||||||
|
|
||||||
|
# interface_name is required
|
||||||
|
interface_name = None
|
||||||
|
|
||||||
|
# Using getopts to handle options
|
||||||
|
try:
|
||||||
|
options, args = getopt.getopt(sys.argv[1:],"hi:t:w:")
|
||||||
|
|
||||||
|
except getopt.GetoptError:
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# If theres a switch, override default option
|
||||||
|
for key, value in options:
|
||||||
|
# Help
|
||||||
|
if (key == "-h"):
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
# Interface Name
|
||||||
|
elif (key == "-i"):
|
||||||
|
interface_name = value
|
||||||
|
# Timeout
|
||||||
|
elif (key == "-t"):
|
||||||
|
if ( int(value) >= 0):
|
||||||
|
timeout = value
|
||||||
|
else:
|
||||||
|
print "Error:\n Timeout cannot be negative"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
# Dbus interface
|
||||||
|
elif (key == "-w"):
|
||||||
|
wpas_dbus_interface = value
|
||||||
|
else:
|
||||||
|
assert False, "unhandled option"
|
||||||
|
|
||||||
|
# Interface name is required and was not given
|
||||||
|
if (interface_name == None):
|
||||||
|
print "Error:\n interface_name is required"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
try:
|
||||||
|
p2p_listen_test = P2P_Listen(interface_name, wpas_dbus_interface, timeout)
|
||||||
|
|
||||||
|
except:
|
||||||
|
print "Error:\n Invalid wpas_dbus_interface"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Start P2P_Find
|
||||||
|
p2p_listen_test.start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# If timeout is 0, then run forever
|
||||||
|
if (int(p2p_listen_test.timeout) == 0):
|
||||||
|
while(True):
|
||||||
|
pass
|
||||||
|
# Else sleep for (timeout)
|
||||||
|
else:
|
||||||
|
time.sleep(int(p2p_listen_test.timeout))
|
||||||
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
quit()
|
174
wpa_supplicant/examples/p2p/p2p_stop_find.py
Normal file
174
wpa_supplicant/examples/p2p/p2p_stop_find.py
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# Tests p2p_stop_find
|
||||||
|
######### MAY NEED TO RUN AS SUDO #############
|
||||||
|
|
||||||
|
import dbus
|
||||||
|
import sys, os
|
||||||
|
import time
|
||||||
|
import gobject
|
||||||
|
import threading
|
||||||
|
import getopt
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print "Usage:"
|
||||||
|
print " %s -i <interface_name> \ " \
|
||||||
|
% sys.argv[0]
|
||||||
|
print " [-w <wpas_dbus_interface>]"
|
||||||
|
print "Options:"
|
||||||
|
print " -i = interface name"
|
||||||
|
print " -w = wpas dbus interface = fi.w1.wpa_supplicant1"
|
||||||
|
print "Example:"
|
||||||
|
print " %s -i wlan0" % sys.argv[0]
|
||||||
|
|
||||||
|
# Required Signals
|
||||||
|
def deviceLost(devicepath):
|
||||||
|
print "Device lost: %s" % (devicepath)
|
||||||
|
|
||||||
|
def p2pStateChange(status):
|
||||||
|
print status
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
class P2P_Stop_Find (threading.Thread):
|
||||||
|
# Needed Variables
|
||||||
|
global bus
|
||||||
|
global wpas_object
|
||||||
|
global interface_object
|
||||||
|
global p2p_interface
|
||||||
|
global interface_name
|
||||||
|
global wpas
|
||||||
|
global wpas_dbus_interface
|
||||||
|
global path
|
||||||
|
global timeout
|
||||||
|
|
||||||
|
# Dbus Paths
|
||||||
|
global wpas_dbus_opath
|
||||||
|
global wpas_dbus_interfaces_opath
|
||||||
|
global wpas_dbus_interfaces_interface
|
||||||
|
global wpas_dbus_interfaces_p2pdevice
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
def __init__(self,interface_name,wpas_dbus_interface,timeout):
|
||||||
|
# Initializes variables and threads
|
||||||
|
self.interface_name = interface_name
|
||||||
|
self.wpas_dbus_interface = wpas_dbus_interface
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
|
# Initializes thread and daemon allows for ctrl-c kill
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
|
||||||
|
# Generating interface/object paths
|
||||||
|
self.wpas_dbus_opath = "/" + \
|
||||||
|
self.wpas_dbus_interface.replace(".","/")
|
||||||
|
self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \
|
||||||
|
"/Interfaces"
|
||||||
|
self.wpas_dbus_interfaces_interface = \
|
||||||
|
self.wpas_dbus_interface + ".Interface"
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice = \
|
||||||
|
self.wpas_dbus_interfaces_interface \
|
||||||
|
+ ".P2PDevice"
|
||||||
|
|
||||||
|
# Getting interfaces and objects
|
||||||
|
DBusGMainLoop(set_as_default=True)
|
||||||
|
self.bus = dbus.SystemBus()
|
||||||
|
self.wpas_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface,
|
||||||
|
self.wpas_dbus_opath)
|
||||||
|
self.wpas = dbus.Interface(self.wpas_object,
|
||||||
|
self.wpas_dbus_interface)
|
||||||
|
|
||||||
|
# Try to see if supplicant knows about interface
|
||||||
|
# If not, throw an exception
|
||||||
|
try:
|
||||||
|
self.path = self.wpas.GetInterface(
|
||||||
|
self.interface_name)
|
||||||
|
except dbus.DBusException, exc:
|
||||||
|
error = 'Error:\n Interface ' + self.interface_name \
|
||||||
|
+ ' was not found'
|
||||||
|
print error
|
||||||
|
usage()
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
self.interface_object = self.bus.get_object(
|
||||||
|
self.wpas_dbus_interface, self.path)
|
||||||
|
self.p2p_interface = dbus.Interface(self.interface_object,
|
||||||
|
self.wpas_dbus_interfaces_p2pdevice)
|
||||||
|
|
||||||
|
# Signals
|
||||||
|
self.bus.add_signal_receiver(deviceLost,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="DeviceLost")
|
||||||
|
self.bus.add_signal_receiver(p2pStateChange,
|
||||||
|
dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
|
||||||
|
signal_name="P2PStateChanged")
|
||||||
|
|
||||||
|
# Runs p2p_stop_find
|
||||||
|
def run(self):
|
||||||
|
# Allows other threads to keep working while MainLoop runs
|
||||||
|
# Required for timeout implementation
|
||||||
|
gobject.MainLoop().get_context().iteration(True)
|
||||||
|
gobject.threads_init()
|
||||||
|
self.p2p_interface.StopFind()
|
||||||
|
gobject.MainLoop().run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Needed because P2PStateChanged signal is not caught
|
||||||
|
timeout = 5
|
||||||
|
# Defaults for optional inputs
|
||||||
|
wpas_dbus_interface = 'fi.w1.wpa_supplicant1'
|
||||||
|
|
||||||
|
# interface_name is required
|
||||||
|
interface_name = None
|
||||||
|
|
||||||
|
# Using getopts to handle options
|
||||||
|
try:
|
||||||
|
options, args = getopt.getopt(sys.argv[1:],"ht:i:w:")
|
||||||
|
|
||||||
|
except getopt.GetoptError:
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# If theres a switch, override default option
|
||||||
|
for key, value in options:
|
||||||
|
# Help
|
||||||
|
if (key == "-h"):
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
# Interface Name
|
||||||
|
elif (key == "-i"):
|
||||||
|
interface_name = value
|
||||||
|
# Dbus interface
|
||||||
|
elif (key == "-w"):
|
||||||
|
wpas_dbus_interface = value
|
||||||
|
else:
|
||||||
|
assert False, "unhandled option"
|
||||||
|
|
||||||
|
# Interface name is required and was not given
|
||||||
|
if (interface_name == None):
|
||||||
|
print "Error:\n interface_name is required"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
try:
|
||||||
|
p2p_stop_find_test = P2P_Stop_Find(interface_name,
|
||||||
|
wpas_dbus_interface,timeout)
|
||||||
|
|
||||||
|
except:
|
||||||
|
print "Error:\n Invalid wpas_dbus_interface"
|
||||||
|
usage()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
# Start P2P_Find
|
||||||
|
p2p_stop_find_test.start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
time.sleep(int(p2p_stop_find_test.timeout))
|
||||||
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
print "p2p find stopped"
|
||||||
|
quit()
|
Loading…
Reference in a new issue