1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/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'
|