|  | #!/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) | 
|  | else: | 
|  | val += " " + str(i) | 
|  | val += " ]" | 
|  | return val | 
|  |  | 
|  | def extract_values(values): | 
|  | val = "{" | 
|  | for key in values.keys(): | 
|  | val += " " + key + "=" | 
|  | if key in ["PrefixLength"]: | 
|  | val += "%s" % (int(values[key])) | 
|  | elif key in ["IPv4", "IPv6", "Ethernet" ]: | 
|  | val += extract_values(values[key]) | 
|  | elif key in [ "AllowedBearers" ]: | 
|  | val += extract_list(values[key]) | 
|  | else: | 
|  | if key in ["Servers", "Excludes"]: | 
|  | val += extract_list(values[key]) | 
|  | else: | 
|  | val += str(values[key]) | 
|  | val += " }" | 
|  | return val | 
|  |  | 
|  | def extract(name, value): | 
|  | val = None | 
|  |  | 
|  | if name in ["Strength", "Priority"]: | 
|  | val = int(value) | 
|  | elif name in ["IPv4", "IPv6", "Ethernet", "Proxy" ]: | 
|  | val = extract_values(value) | 
|  | elif name in ["Services", "Technologies", | 
|  | "Nameservers", "Domains", "Timeservers"]: | 
|  | 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", | 
|  | signal_name = "PropertyChanged", | 
|  | path_keyword="path", | 
|  | interface_keyword="interface") | 
|  |  | 
|  | bus.add_match_string("member=Change,interface=net.connman.Session") | 
|  | bus.add_match_string("member=Update,interface=net.connman.Notification") | 
|  | bus.add_message_filter(message_filter) | 
|  |  | 
|  | mainloop = gobject.MainLoop() | 
|  |  | 
|  | mainloop.run() |