]> git.ipfire.org Git - thirdparty/hostap.git/blame - wpa_supplicant/examples/p2p/p2p_disconnect.py
tests: Use python3 compatible "except" statement
[thirdparty/hostap.git] / wpa_supplicant / examples / p2p / p2p_disconnect.py
CommitLineData
2ce70336
MN
1#!/usr/bin/python
2# Tests P2P_Disconnect
3# Will perform disconnect on interface_name
4######### MAY NEED TO RUN AS SUDO #############
5
6import dbus
7import sys, os
8import time
9import gobject
10import threading
11import getopt
12from dbus.mainloop.glib import DBusGMainLoop
13
14def usage():
15 print "Usage:"
16 print " %s -i <interface_name> \ " \
17 % sys.argv[0]
18 print " [-w <wpas_dbus_interface>]"
19 print "Options:"
20 print " -i = interface name"
21 print " -w = wpas dbus interface = fi.w1.wpa_supplicant1"
22 print "Example:"
23 print " %s -i p2p-wlan0-0" % sys.argv[0]
24
25# Required Signals
26def GroupFinished(status, etc):
27 print "Disconnected"
28 os._exit(0)
29
30class P2P_Disconnect (threading.Thread):
31 # Needed Variables
32 global bus
33 global wpas_object
34 global interface_object
35 global p2p_interface
36 global interface_name
37 global wpas
38 global wpas_dbus_interface
39 global path
40 global timeout
41
42 # Dbus Paths
43 global wpas_dbus_opath
44 global wpas_dbus_interfaces_opath
45 global wpas_dbus_interfaces_interface
46 global wpas_dbus_interfaces_p2pdevice
47
48 # Constructor
49 def __init__(self,interface_name,wpas_dbus_interface,timeout):
50 # Initializes variables and threads
51 self.interface_name = interface_name
52 self.wpas_dbus_interface = wpas_dbus_interface
53 self.timeout = timeout
54
55 # Initializes thread and daemon allows for ctrl-c kill
56 threading.Thread.__init__(self)
57 self.daemon = True
58
59 # Generating interface/object paths
60 self.wpas_dbus_opath = "/" + \
61 self.wpas_dbus_interface.replace(".","/")
62 self.wpas_wpas_dbus_interfaces_opath = self.wpas_dbus_opath + \
63 "/Interfaces"
64 self.wpas_dbus_interfaces_interface = \
65 self.wpas_dbus_interface + ".Interface"
66 self.wpas_dbus_interfaces_p2pdevice = \
67 self.wpas_dbus_interfaces_interface \
68 + ".P2PDevice"
69
70 # Getting interfaces and objects
71 DBusGMainLoop(set_as_default=True)
72 self.bus = dbus.SystemBus()
73 self.wpas_object = self.bus.get_object(
74 self.wpas_dbus_interface,
75 self.wpas_dbus_opath)
76 self.wpas = dbus.Interface(self.wpas_object,
77 self.wpas_dbus_interface)
78
79 # Try to see if supplicant knows about interface
80 # If not, throw an exception
81 try:
82 self.path = self.wpas.GetInterface(
83 self.interface_name)
bab493b9 84 except dbus.DBusException as exc:
2ce70336
MN
85 error = 'Error:\n Interface ' + self.interface_name \
86 + ' was not found'
87 print error
88 usage()
89 os._exit(0)
90
91 self.interface_object = self.bus.get_object(
92 self.wpas_dbus_interface, self.path)
93 self.p2p_interface = dbus.Interface(self.interface_object,
94 self.wpas_dbus_interfaces_p2pdevice)
95
96 # Signals
97 self.bus.add_signal_receiver(GroupFinished,
98 dbus_interface=self.wpas_dbus_interfaces_p2pdevice,
99 signal_name="GroupFinished")
100
101 # Runs p2p_disconnect
102 def run(self):
103 # Allows other threads to keep working while MainLoop runs
104 # Required for timeout implementation
105 gobject.MainLoop().get_context().iteration(True)
106 gobject.threads_init()
107 self.p2p_interface.Disconnect()
108 gobject.MainLoop().run()
109
110
111if __name__ == "__main__":
112
113 timeout = 5
114 # Defaults for optional inputs
115 wpas_dbus_interface = 'fi.w1.wpa_supplicant1'
116
117 # interface_name is required
118 interface_name = None
119
120 # Using getopts to handle options
121 try:
122 options, args = getopt.getopt(sys.argv[1:],"hi:w:")
123
124 except getopt.GetoptError:
125 usage()
126 quit()
127
128 # If theres a switch, override default option
129 for key, value in options:
130 # Help
131 if (key == "-h"):
132 usage()
133 quit()
134 # Interface Name
135 elif (key == "-i"):
136 interface_name = value
137 # Dbus interface
138 elif (key == "-w"):
139 wpas_dbus_interface = value
140 else:
141 assert False, "unhandled option"
142
143 # Interface name is required and was not given
144 if (interface_name == None):
145 print "Error:\n interface_name is required"
146 usage()
147 quit()
148
149 # Constructor
150 try:
151 p2p_disconnect_test = P2P_Disconnect(interface_name,
152 wpas_dbus_interface,timeout)
153
154 except:
155 print "Error:\n Invalid wpas_dbus_interface"
156 usage()
157 quit()
158
159 # Start P2P_Disconnect
160 p2p_disconnect_test.start()
161
162 try:
163 time.sleep(int(p2p_disconnect_test.timeout))
164
165 except:
166 pass
167
168 print "Disconnect timed out"
169 quit()