Add support for changing the AutoConnect value of services
[framework/connectivity/connman.git] / test / test-connman
1 #!/usr/bin/python
2
3 import sys
4 import dbus
5
6 bus = dbus.SystemBus()
7
8 manager = dbus.Interface(bus.get_object("org.moblin.connman", "/"),
9                                         "org.moblin.connman.Manager")
10
11 if len(sys.argv) < 2:
12         print "Usage: %s <command>" % (sys.argv[0])
13         print ""
14         print "  state"
15         print "  services"
16         print "  passphrase <service> [passphrase]"
17         print "  autoconnect <service> [autoconnect]"
18         print "  connect <service>"
19         print "  disconnect <service>"
20         print "  remove <service>"
21         print ""
22         print "  scan [type]"
23         print "  enable <type>"
24         print "  disable <type>"
25         print "  offlinemode [on|off]"
26         print ""
27         print "  dev <interface>"
28         print "  dev <interface> scan"
29         print "  dev <interface> networks"
30         print "  dev <interface> connect <network>"
31         print "  dev <interface> disconnect [network]"
32         print "  dev <interface> powered [on|off]"
33         sys.exit(1)
34
35 def print_properties(path, properties):
36         print "[ %s ]" % (path)
37         for key in properties.keys():
38                 if key == "Networks":
39                         continue
40
41                 if key in ["Powered", "Scanning", "Connected",
42                                         "Available", "Remember", "Default"]:
43                         if properties[key] == dbus.Boolean(1):
44                                 val = "true"
45                         else:
46                                 val = "false"
47                 elif key in ["Strength", "Priority"]:
48                         val = int(properties[key])
49                 else:
50                         val = str(properties[key])
51
52                 print "     %s = %s" % (key, val)
53
54         if "Networks" in properties.keys():
55                 list = ""
56                 for path in properties["Networks"]:
57                         val = str(path)
58                         list = list + val[val.rfind("/") + 1:] + " "
59                 print "     Networks = [ %s]" % (list)
60
61 def print_networks(networks):
62         for path in networks:
63                 network = dbus.Interface(bus.get_object("org.moblin.connman", path),
64                                                 "org.moblin.connman.Network")
65
66                 properties = network.GetProperties()
67
68                 if properties["Connected"] == dbus.Boolean(1):
69                         connected = "*"
70                 else:
71                         connected = " "
72
73                 if "Name" in properties.keys():
74                         name = properties["Name"]
75                 else:
76                         name = ""
77
78                 strength = int(properties["Strength"])
79
80                 details = ""
81                 try:
82                         details += "{" + properties["WiFi.Mode"] + "} "
83                 except:
84                         pass
85                 try:
86                         details += "{" + properties["WiFi.Security"] + "} "
87                 except:
88                         pass
89                 if "WiFi.Passphrase" in properties.keys():
90                         if properties["WiFi.Passphrase"] != "":
91                                 details += "{passphrase present}"
92
93                 print "%s %-26s %3d%%  %s" % (connected,
94                                                 name, strength, details)
95
96 def select_network(networks, name):
97         for path in networks:
98                 network = dbus.Interface(bus.get_object("org.moblin.connman", path),
99                                                 "org.moblin.connman.Network")
100
101                 properties = network.GetProperties()
102
103                 if properties["Name"] != name:
104                         continue
105
106                 if properties["Connected"] == dbus.Boolean(1):
107                         print "Already connected to network %s" % (name)
108                         break
109
110                 print "Selecting network %s" % (name)
111
112                 network.Connect()
113
114 def disconnect_network(networks, name):
115         for path in networks:
116                 network = dbus.Interface(bus.get_object("org.moblin.connman", path),
117                                                 "org.moblin.connman.Network")
118
119                 properties = network.GetProperties()
120
121                 if name != "" and properties["Name"] != name:
122                         continue
123
124                 if properties["Connected"] == dbus.Boolean(1):
125                         name = properties["Name"]
126                         print "Disconnecting from network %s" % (name)
127                         network.Disconnect()
128
129 def print_services(services):
130         for path in services:
131                 service = dbus.Interface(bus.get_object("org.moblin.connman", path),
132                                                 "org.moblin.connman.Service")
133
134                 properties = service.GetProperties()
135
136                 identifier = path[path.rfind("/") + 1:]
137
138                 if properties["Favorite"] == dbus.Boolean(1):
139                         favorite = "*"
140                 else:
141                         favorite = " "
142
143                 if "Name" in properties.keys():
144                         name = properties["Name"]
145                 else:
146                         name = "{" + properties["Type"] + "}"
147
148                 print "%s %-26s { %s }" % (favorite, name, identifier)
149
150 if sys.argv[1] == "state":
151         properties = manager.GetProperties()
152
153         print "System is %s" % (properties["State"])
154
155 elif sys.argv[1] in ["services", "list", "show"]:
156         properties = manager.GetProperties()
157
158         print_services(properties["Services"])
159
160 elif sys.argv[1] in ["passphrase", "pass"]:
161         if (len(sys.argv) < 3):
162                 print "Need at least service parameter"
163                 sys.exit(1)
164
165         path = "/profile/default/" + sys.argv[2]
166
167         service = dbus.Interface(bus.get_object("org.moblin.connman", path),
168                                                 "org.moblin.connman.Service")
169
170         if (len(sys.argv) > 3):
171                 passphrase = sys.argv[3]
172
173                 service.SetProperty("Passphrase", passphrase);
174
175                 print "Passphrase %s set for %s" % (passphrase, sys.argv[2])
176         else:
177                 properties = service.GetProperties()
178
179                 if "Name" in properties.keys():
180                         name = properties["Name"]
181                 else:
182                         name = "{" + properties["Type"] + "}"
183
184                 if "Passphrase" in properties.keys():
185                         passphrase = properties["Passphrase"]
186                 else:
187                         passphrase = "not set"
188
189                 print "Passphrase for %s is %s" % (name, passphrase)
190
191 elif sys.argv[1] in ["autoconnect", "autoconn"]:
192         if (len(sys.argv) < 3):
193                 print "Need at least service parameter"
194                 sys.exit(1)
195
196         path = "/profile/default/" + sys.argv[2]
197
198         service = dbus.Interface(bus.get_object("org.moblin.connman", path),
199                                                 "org.moblin.connman.Service")
200
201         if (len(sys.argv) > 3):
202                 autoconnect = dbus.Boolean(sys.argv[3])
203
204                 service.SetProperty("AutoConnect", autoconnect);
205
206                 print "Auto connect %s for %s" % (autoconnect, sys.argv[2])
207         else:
208                 properties = service.GetProperties()
209
210                 if "Name" in properties.keys():
211                         name = properties["Name"]
212                 else:
213                         name = "{" + properties["Type"] + "}"
214
215                 if "AutoConnect" in properties.keys():
216                         autoconnect = properties["AutoConnect"]
217                 else:
218                         autoconnect = dbus.Boolean(0)
219
220                 print "Auto connect %s for %s" % (autoconnect, name)
221
222 elif sys.argv[1] in ["connect", "conn"]:
223         if (len(sys.argv) < 3):
224                 print "Need at least service parameter"
225                 sys.exit(1)
226
227         path = "/profile/default/" + sys.argv[2]
228
229         service = dbus.Interface(bus.get_object("org.moblin.connman", path),
230                                                 "org.moblin.connman.Service")
231
232         try:
233                 service.Connect(timeout=60000)
234         except dbus.DBusException, error:
235                 print "%s: %s" % (error._dbus_error_name, error.message)
236
237 elif sys.argv[1] in ["disconnect", "disc"]:
238         if (len(sys.argv) < 3):
239                 print "Need at least service parameter"
240                 sys.exit(1)
241
242         path = "/profile/default/" + sys.argv[2]
243
244         service = dbus.Interface(bus.get_object("org.moblin.connman", path),
245                                                 "org.moblin.connman.Service")
246
247         try:
248                 service.Disconnect()
249         except dbus.DBusException, error:
250                 print "%s: %s" % (error._dbus_error_name, error.message)
251
252 elif sys.argv[1] in ["remove"]:
253         if (len(sys.argv) < 3):
254                 print "Need at least service parameter"
255                 sys.exit(1)
256
257         path = "/profile/default/" + sys.argv[2]
258
259         service = dbus.Interface(bus.get_object("org.moblin.connman", path),
260                                                 "org.moblin.connman.Service")
261
262         properties = service.GetProperties()
263
264         if properties["Favorite"] == dbus.Boolean(0):
265                 print "Only favorite services can be removed"
266                 sys.exit(1)
267
268         try:
269                 service.Remove()
270         except dbus.DBusException, error:
271                 print "%s: %s" % (error._dbus_error_name, error.message)
272
273 elif sys.argv[1] == "scan":
274         if len(sys.argv) > 2:
275                 manager.RequestScan(sys.argv[2])
276         else:
277                 manager.RequestScan("")
278
279 elif sys.argv[1] == "enable":
280         if len(sys.argv) > 2:
281                 manager.EnableTechnology(sys.argv[2])
282         else:
283                 manager.EnableTechnology("")
284
285 elif sys.argv[1] == "disable":
286         if len(sys.argv) > 2:
287                 manager.DisableTechnology(sys.argv[2])
288         else:
289                 manager.DisableTechnology("")
290
291 elif sys.argv[1] in ["offlinemode", "flightmode"]:
292         if len(sys.argv) > 2:
293                 if sys.argv[2] == "on":
294                         active = dbus.Boolean(1)
295                 elif sys.argv[2] == "off":
296                         active = dbus.Boolean(0)
297                 else:
298                         active = dbus.Boolean(sys.argv[2])
299                 manager.SetProperty("OfflineMode", active)
300         else:
301                 properties = manager.GetProperties()
302                 print "Offline mode is %s" % (properties["OfflineMode"])
303
304 elif sys.argv[1] == "dev":
305         properties = manager.GetProperties()
306
307         interface = ""
308         command = ""
309         value = ""
310         found = 0
311
312         if len(sys.argv) > 2:
313                 interface = sys.argv[2]
314                 if len(sys.argv) > 3:
315                         command = sys.argv[3]
316                         if len(sys.argv) > 4:
317                                 value = sys.argv[4]
318
319         for path in properties["Devices"]:
320                 device = dbus.Interface(bus.get_object("org.moblin.connman", path),
321                                                 "org.moblin.connman.Device")
322
323                 properties = device.GetProperties()
324
325                 if interface != "" and properties["Interface"] != interface:
326                         continue
327
328                 if command == "scan":
329                         if properties["Type"] in ["wifi", "wimax"]:
330                                 interface = properties["Interface"]
331                                 print "Scan for device %s" % (interface)
332                                 device.ProposeScan()
333                         else:
334                                 print "No scanning for device %s" % (interface)
335                 elif command in ["networks", "net"]:
336                         if "Networks" in properties.keys():
337                                 print_networks(properties["Networks"])
338                         else:
339                                 print "Device has no networks"
340                 elif command in ["connect", "conn"] and value != "":
341                         if "Networks" in properties.keys():
342                                 select_network(properties["Networks"], value)
343                         else:
344                                 print "Device can't connect networks"
345                 elif command in ["connect", "conn"]:
346                         print "Need to specify network"
347                 elif command in ["disconnect", "disc"] and value != "":
348                         if "Networks" in properties.keys():
349                                 disconnect_network(properties["Networks"], value)
350                         else:
351                                 print "Device has no networks"
352                 elif command in ["discconnect", "disc"]:
353                         if "Networks" in properties.keys():
354                                 disconnect_network(properties["Networks"], "")
355                         else:
356                                 print "Device has no networks"
357                 elif command == "powered" and value != "":
358                         if value == "on":
359                                 powered = dbus.Boolean(1)
360                         elif value == "off":
361                                 powered = dbus.Boolean(0)
362                         else:
363                                 powered = dbus.Boolean(value)
364                         device.SetProperty("Powered", powered)
365                 elif command == "powered":
366                         interface = properties["Interface"]
367                         if properties["Powered"] == dbus.Boolean(1):
368                                 powered = "on"
369                         else:
370                                 powered = "off"
371                         print "Device %s is powered %s" % (interface, powered)
372                 elif command == "list" or command == "":
373                         print_properties(path, properties)
374                 else:
375                         print "Unknown command"
376
377 else:
378         print "Unknown command"