#!/usr/bin/python import sys import dbus import dbus.glib import telepathy bus = dbus.Bus() def get_names(): bus_obj = bus.get_object('org.freedesktop.DBus', '/') iface = dbus.Interface(bus_obj, 'org.freedesktop.DBus') return iface.ListNames() def get_managers(): return [ name[len(telepathy.CONN_MGR_INTERFACE) + 1:] for name in get_names() if name.startswith(telepathy.CONN_MGR_INTERFACE)] def get_parameters(name): full_name = '%s.%s' % (telepathy.CONN_MGR_INTERFACE, name) path = '/org/freedesktop/Telepathy/ConnectionManager/%s' % name bus_obj = bus.get_object(full_name, path) iface = dbus.Interface(bus_obj, telepathy.CONN_MGR_INTERFACE) stanzas = [] stanza = [] stanza.append('[ConnectionManager]') stanza.append('Name = %s' % name) stanza.append('BusName = %s' % full_name) stanza.append('ObjectPath = %s' % path) stanzas.append(stanza) for protocol in iface.ListProtocols(): stanza = [] stanza.append('[Protocol %s]' % protocol) for name, flags, sig, default in iface.GetParameters(protocol): decl = [sig] if flags & telepathy.CONN_MGR_PARAM_FLAG_REQUIRED: decl.append('required') if flags & telepathy.CONN_MGR_PARAM_FLAG_REGISTER: decl.append('register') stanza.append('param-%s = %s' % (name, ' '.join(decl))) stanzas.append(stanza) return ''.join( ''.join(line + '\n' for line in stanza) for stanza in stanzas) def get_connections(name): full_name = '%s.%s' % (telepathy.CONN_INTERFACE, name) return [ x[len(full_name) + 1:].split('.') for x in get_names() if x.startswith(full_name)] def inspect_connection(manager, protocol, name): full_name = '.'.join((telepathy.CONN_INTERFACE, manager, protocol, name)) conn_path = '/'.join(( '/org/freedesktop/Telepathy/Connection', manager, protocol, name)) bus_obj = bus.get_object(full_name, conn_path) iface = dbus.Interface(bus_obj, telepathy.CONN_INTERFACE) stanza = [] stanza.append("Connection '%s'" % name) stanza.append(" Protocol: %s" % protocol) for path, type, handle_type, handle in iface.ListChannels(): name = path[len(conn_path) + 1:] stanza.append(" Channel '%s'" % name) stanza.append(" Type: %s" % type) return ''.join(line + '\n' for line in stanza) def inspect_manager(manager): stanzas = [] for protocol, name in get_connections(manager): stanzas.append([inspect_connection(manager, protocol, name)]) return ''.join( ''.join(line + '\n' for line in stanza) for stanza in stanzas) def indent(n, s): return ''.join(' ' * n + line + '\n' for line in s.splitlines()) if __name__ == '__main__': if len(sys.argv) > 1: name = sys.argv[1] full_name = '%s.%s' % (telepathy.CONN_MGR_INTERFACE, name) if full_name not in get_names(): raise RuntimeError("connection manager '%s' not found on the bus" % name) print get_parameters(name), else: managers = get_managers() if managers: print 'Found connection managers:' for manager in managers: print ' %s' % manager print indent(4, inspect_manager(manager)) else: print 'No connection managers found'