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