| #!/usr/bin/python | |
| import gobject | |
| import dbus | |
| import dbus.mainloop.glib | |
| from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED | |
| def extract_list(list): | |
| val = "[" | |
| for i in list: | |
| if type(i).__name__ == 'Dictionary': | |
| val += extract_values(i) | |
| elif type(i).__name__ == 'Struct': | |
| val += extract_list(i) | |
| else: | |
| val += " " + str(i) | |
| val += "]" | |
| return val | |
| def extract_values(values): | |
| val = "{" | |
| for key in values.keys(): | |
| val += " " + key + "=" | |
| if key in ["ProtocolFamily"]: | |
| val += "%s" % (int(values[key])) | |
| elif key in ["IPv4", "IPv6"]: | |
| val += extract_values(values[key]) | |
| else: | |
| val += str(values[key]) | |
| val += " }" | |
| return val | |
| def extract(name, value): | |
| val = None | |
| if name in ["Index"]: | |
| val = int(value) | |
| elif name in ["IPv4", "IPv6" ]: | |
| val = extract_values(value) | |
| elif name in ["UserRoutes", "ServerRoutes", "Nameservers"]: | |
| val = extract_list(value) | |
| else: | |
| val = str(value) | |
| return val | |
| def property_changed(name, value, path, interface): | |
| iface = interface[interface.rfind(".") + 1:] | |
| val = extract(name, value) | |
| print "{%s} [%s] %s = %s" % (iface, path, name, val) | |
| def message_filter(connection, message): | |
| if not isinstance(message, MethodCallMessage): | |
| return HANDLER_RESULT_NOT_YET_HANDLED | |
| interface = message.get_interface() | |
| path = message.get_path() | |
| name = message.get_member() | |
| args = message.get_args_list() | |
| property_changed(name, args, path, interface) | |
| if __name__ == '__main__': | |
| dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | |
| bus = dbus.SystemBus() | |
| bus.add_signal_receiver(property_changed, | |
| bus_name="net.connman.vpn", | |
| signal_name = "PropertyChanged", | |
| path_keyword="path", | |
| interface_keyword="interface") | |
| bus.add_message_filter(message_filter) | |
| mainloop = gobject.MainLoop() | |
| mainloop.run() |