Imported Upstream connman version 1.38
[platform/upstream/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 list(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 ["Services", "Technologies",
46                         "Nameservers", "Domains", "Timeservers"]:
47                 val = extract_list(value)
48         else:
49                 val = str(value)
50
51         return val
52
53 def property_changed(name, value, path, interface):
54         iface = interface[interface.rfind(".") + 1:]
55         val = extract(name, value)
56
57         print("{%s} [%s] %s = %s" % (iface, path, name, val))
58
59 def message_filter(connection, message):
60         if not isinstance(message, MethodCallMessage):
61                 return HANDLER_RESULT_NOT_YET_HANDLED
62
63         interface = message.get_interface()
64         path = message.get_path()
65         name = message.get_member()
66         args = message.get_args_list()
67
68         property_changed(name, args, path, interface)
69
70 if __name__ == '__main__':
71         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
72
73         bus = dbus.SystemBus()
74
75         bus.add_signal_receiver(property_changed,
76                                         bus_name="net.connman",
77                                         signal_name = "PropertyChanged",
78                                                 path_keyword="path",
79                                                 interface_keyword="interface")
80
81         bus.add_match_string("member=Change,interface=net.connman.Session")
82         bus.add_match_string("member=Update,interface=net.connman.Notification")
83         bus.add_message_filter(message_filter)
84
85         mainloop = gobject.MainLoop()
86
87         mainloop.run()