test-connman: Use Powered property to enable/disable Technologies
[framework/connectivity/connman.git] / test / monitor-connman
1 #!/usr/bin/python
2
3 import gobject
4
5 import dbus
6 import dbus.mainloop.glib
7
8 from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED
9
10 def extract_list(list):
11         val = "["
12         for i in list:
13                 if type(i).__name__ == 'Dictionary':
14                         val = extract_values(i)
15                 else:
16                         val += " " + str(i)
17         val += " ]"
18         return val
19
20 def extract_values(values):
21         val = "{"
22         for key in values.keys():
23                 val += " " + key + "="
24                 if key in ["PrefixLength"]:
25                         val += "%s" % (int(values[key]))
26                 elif key in ["IPv4", "IPv6", "Ethernet" ]:
27                         val += extract_values(values[key])
28                 elif key in [ "AllowedBearers" ]:
29                         val += extract_list(values[key])
30                 else:
31                         if key in ["Servers", "Excludes"]:
32                                 val += extract_list(values[key])
33                         else:
34                                 val += str(values[key])
35         val += " }"
36         return val
37
38 def extract(name, value):
39         val = None
40
41         if name in ["Strength", "Priority"]:
42                 val = int(value)
43         elif name in ["IPv4", "IPv6", "Ethernet", "Proxy" ]:
44                 val = extract_values(value)
45         elif name in ["Nameservers", "Domains", "Services",
46                       "Update", "Technologies", "AvailableTechnologies",
47                       "EnabledTechnologies", "ConnectedTechnologies" ]:
48                 val = extract_list(value)
49         else:
50                 val = str(value)
51
52         return val
53
54 def property_changed(name, value, path, interface):
55         iface = interface[interface.rfind(".") + 1:]
56         val = extract(name, value)
57
58         print "{%s} [%s] %s = %s" % (iface, path, name, val)
59
60 def message_filter(connection, message):
61         if not isinstance(message, MethodCallMessage):
62                 return HANDLER_RESULT_NOT_YET_HANDLED
63
64         interface = message.get_interface()
65         path = message.get_path()
66         name = message.get_member()
67         args = message.get_args_list()
68
69         property_changed(name, args, path, interface)
70
71 if __name__ == '__main__':
72         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
73
74         bus = dbus.SystemBus()
75
76         bus.add_signal_receiver(property_changed,
77                                         bus_name="net.connman",
78                                         signal_name = "PropertyChanged",
79                                                 path_keyword="path",
80                                                 interface_keyword="interface")
81
82         bus.add_match_string("member=Change,interface=net.connman.Session")
83         bus.add_match_string("member=Update,interface=net.connman.Notification")
84         bus.add_message_filter(message_filter)
85
86         mainloop = gobject.MainLoop()
87
88         mainloop.run()