Codebase list telepathy-glib / 4c692c0
Imported Upstream version 0.11.11 Simon McVittie 13 years ago
132 changed file(s) with 15406 addition(s) and 2458 deletion(s). Raw diff Collapse all Expand all
0 commit b6fa84ee7ea93f84fac2e993c08769264476a8b6
1 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2 Date: 2010-07-26 17:13:04 +0100
3
4 Prepare version 0.11.11
5
6 commit 4b0cb12dc3c79717083b29ca0728aa16b72604d8
7 Merge: 2887e0a a5a7a96
8 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
9 Date: 2010-07-26 16:46:33 +0100
10
11 Merge branch 'pwith-gir'
12
13 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
14 Reviewed-by: Danielle Madeley <danielle.madeley@collabora.co.uk>
15 Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29197
16
17 commit a5a7a96f55f9b490da50a97df9b4e26f219e0454
18 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
19 Date: 2010-07-26 14:47:53 +0100
20
21 Hide TpBaseConnectionCreateHandleReposImpl in a way that satisfies gtk-doc
22
23 commit b8222d14fa8b0d88e43a92c1504563a0396f7875
24 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
25 Date: 2010-07-26 14:40:00 +0100
26
27 tp_base_connection_register: allow the out parameters to be NULL
28
29 commit 46a688feb51a2ead968eafe38bda17658aeb078e
30 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
31 Date: 2010-07-26 14:39:38 +0100
32
33 TpBaseConnection: use /* */ rather than /** */ for private methods
34
35 This way, we don't need to worry about gtk-doc or g-i picking them up.
36
37 commit ec71e88e08d6c014023ebd34d9e8b91db69629fa
38 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
39 Date: 2010-07-26 14:39:08 +0100
40
41 TpBaseConnection: remove some content-free doc-comments for private methods
42
43 commit 38f6011dbd0545bf41c1841d2011bbbade261c2a
44 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
45 Date: 2010-07-26 14:31:59 +0100
46
47 TpBaseConnectionCreateHandleReposImpl: hide from g-i
48
49 Its signature isn't (currently) introspectable; see fd.o #29197.
50
51 commit 4fc4750eaefe56e02ab08c9b462c16aef3754531
52 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
53 Date: 2010-07-26 14:29:46 +0100
54
55 TpHandleSetMemberFunc: omit from introspection, and move docs to .c
56
57 commit 2887e0a49d80dde7bcb9d8a150a2a168eea0a703
58 Merge: 76e518f 96a893e
59 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
60 Date: 2010-07-26 12:35:12 +0100
61
62 Merge remote branch 'treitter/vala-packaging1'
63
64 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
65
66 commit 9340bb0e0d8e638c46d21d9ae49c052baf6265fe
67 Author: Philip Withnall <philip.withnall@collabora.co.uk>
68 Date: 2010-07-23 11:45:53 +0100
69
70 Add some annotations to TpHandleSet
71
72 commit 94dbbcc400e58ea41f2a5b9cd6e3809280c41722
73 Author: Philip Withnall <philip.withnall@collabora.co.uk>
74 Date: 2010-07-21 18:09:33 +0100
75
76 Annotate direction of parameters in tp_base_connection_register()
77
78 commit 6f21a610ff956d993c17acba792aa09b611e9294
79 Author: Philip Withnall <philip.withnall@collabora.co.uk>
80 Date: 2010-07-21 18:00:06 +0100
81
82 Add (transfer) annotation to tp_base_connection_get_handles()
83
84 commit e9eee08ae83f598dc02bbcd655f18493d1a83e76
85 Author: Philip Withnall <philip.withnall@collabora.co.uk>
86 Date: 2010-07-21 16:40:02 +0100
87
88 Add (skip) annotations to all newly-bound symbols not used in libfolks tests
89
90 commit b555c14fd3ace2b99db4d08e078f0a858ff77760
91 Author: Philip Withnall <philip.withnall@collabora.co.uk>
92 Date: 2010-07-14 18:41:32 +0100
93
94 Add files needed for libfolks tests to introspection build
95
96 commit e04846b92d7ba07573e50607c64beaec8ad7351e
97 Author: Philip Withnall <philip.withnall@collabora.co.uk>
98 Date: 2010-07-14 18:41:26 +0100
99
100 Fix annotations on TpChannel::group-members-changed-detailed
101
102 commit 76e518ffe1d0fec9a7a1c36a9bebaa8e35f04a02
103 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
104 Date: 2010-07-22 15:50:53 +0100
105
106 Use a static, complete .manager file for echo2 if installing examples
107
108 Reviewed-by: Senko Rasic <senko.rasic@collabora.co.uk>
109
110 commit cde5c2b0b70a5bf7d7c4073619e520060bf223bd
111 Author: Danielle Madeley <danielle.madeley@collabora.co.uk>
112 Date: 2010-07-21 10:44:13 +0100
113
114 Check if the VAPIGEN variable is empty, and if required provide a useful hint
115
116 commit 359d48070778d177ae64c5a10e62586c38418595
117 Merge: 465e4ad 23987de
118 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
119 Date: 2010-07-20 18:09:41 +0100
120
121 Merge branch 'spec'
122
123 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
124
125 commit 23987de49ff8b7239bbb09b15951b87a24783bd9
126 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
127 Date: 2010-07-20 17:44:18 +0100
128
129 Update NEWS
130
131 commit a9c1c3458cbcfb404285826f2e32357825abad2b
132 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
133 Date: 2010-07-20 17:02:27 +0100
134
135 Allow Protocol to be introspected
136
137 commit 4589aef40ae3c6c3bc94aafd5651717bcfa7ecb2
138 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
139 Date: 2010-07-20 16:34:01 +0100
140
141 Generate code for ContactSearch channels and add them to the gtk-doc
142
143 commit 251354fc96c0a82c1ee8897ae39755e13f330272
144 Merge: 11f06e3 001d1c3
145 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
146 Date: 2010-07-20 17:29:21 +0100
147
148 Merge branch 'protocol3' into spec
149
150 Reviewed by Andre (partially) and Senko (the rest).
151
152 Conflicts:
153 spec/Connection_Manager.xml
154 spec/Makefile.am
155 spec/Protocol.xml
156 spec/all.xml
157 telepathy-glib/extra-gtkdoc.h
158
159 commit 11f06e38a50fffe3ef02540e09123aeca4113200
160 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
161 Date: 2010-07-20 17:27:15 +0100
162
163 Update spec to 0.19.10
164
165 commit 001d1c37b5acdd2a74bdc6a41346b6a67284804c
166 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
167 Date: 2010-07-20 15:52:11 +0100
168
169 Revert "Temporarily allow unstable API for Protocol development"
170
171 This reverts commit b14b460123cd876f575edeeb80116b678ac7b3ec.
172
173 commit 96a893e5c22db626ba6607e1bd4138a19ffb50f5
174 Author: Travis Reitter <travis.reitter@collabora.co.uk>
175 Date: 2010-07-16 15:07:23 -0700
176
177 Install telepathy-glib.vapi to a more conventional location and update telepathy-vala.pc to reflect that.
178
179 commit 4d74feb906b7f9e37238a9d89245eeaaf1a0ffed
180 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
181 Date: 2010-07-16 16:06:44 +0100
182
183 Introduce some typedefs to document TpBaseProtocol's methods better
184
185 commit 2f54e7858a8faeca03a844d0ea3fbb2a2bb33172
186 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
187 Date: 2010-07-16 16:02:49 +0100
188
189 tp_base_protocol_constructed: ensure that strings are non-NULL and vcard_field is lower case
190
191 commit 835e32d5c07423eb1bfbb3afc9feb07b0925bcef
192 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
193 Date: 2010-07-16 15:32:51 +0100
194
195 get_connection_details: return channel managers instead of RCCs
196
197 commit ab458b8730940ac0dae4f380c941837257034847
198 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
199 Date: 2010-07-16 14:20:05 +0100
200
201 message-mixin test: assert that echo2's Connection RCCs still work
202
203 commit 391bc71437fbc7b700f055204c2e5826891c551a
204 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
205 Date: 2010-07-16 14:19:38 +0100
206
207 echo2 example: implement type_foreach_channel_class and use it for the Protocol
208
209 commit c1688cf9b594231528bac6601450526d774d2bef
210 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
211 Date: 2010-07-16 14:10:18 +0100
212
213 tp_base_protocol_build_requestable_channel_classes: new utility function
214
215 Undocumented, so far.
216
217 commit 78ec5ee421bf5fa7bb49b7982639430053008e16
218 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
219 Date: 2010-07-16 14:05:51 +0100
220
221 TpChannelManager: add type_foreach_channel_class()
222
223 Protocol objects want to iterate over all possible channel classes before
224 a channel manager has been instantiated.
225
226 commit b3240716ffe94460d15057ad899445eabb58d3fd
227 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
228 Date: 2010-07-15 15:00:05 +0100
229
230 Don't allow mandatory parameters to be omitted from IdentifyAccount
231
232 commit 6bfc392a998de57c19def1d7929bde785dc31b86
233 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
234 Date: 2010-07-15 14:59:06 +0100
235
236 protocol_identify_account: use tp_base_protocol_sanitize_parameters
237
238 This means implementations of @identify_account no longer need to worry
239 about receiving unexpected parameters, or parameters of unexpected types.
240
241 commit 0a4a1594704253ffffa587a16a69b2a5674bc1a2
242 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
243 Date: 2010-07-15 14:58:33 +0100
244
245 Factor out tp_base_protocol_sanitize_parameters
246
247 commit 78d7eff35b01b1415e877de9841d00624623e2d4
248 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
249 Date: 2010-07-15 14:30:08 +0100
250
251 IdentifyAccount: correct virtual method check and error message
252
253 commit 688e2d2446b28f574ee3b9505c1defb423ee0c34
254 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
255 Date: 2010-07-14 18:02:05 +0100
256
257 tp_base_connection_manager_register: check for valid protocol names
258
259 commit ab2d8cfc97bd5f49f79b89ce859aa23dc6ffd9e0
260 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
261 Date: 2010-07-14 18:01:55 +0100
262
263 TpBaseConnectionManager: correctly replace "-" with "_" in TpBaseProtocol object paths
264
265 commit 8547a35d88bd92121cbc0acb997835601ab5b6bd
266 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
267 Date: 2010-07-14 17:01:31 +0100
268
269 tp_base_connection_manager_add_protocol: use tp_base_protocol_get_name
270
271 commit 13bf0e510b90984faadcdf0e970665834238fe50
272 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
273 Date: 2010-07-14 16:59:23 +0100
274
275 tp_base_protocol_get_name: add "C binding" for TpBaseProtocol:name
276
277 commit 465e4adf6f999d45ee0d780321fe415c76cd150f
278 Merge: 6f1d558 0bb8c92
279 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
280 Date: 2010-07-14 15:30:13 +0100
281
282 Merge remote branch 'pwith/vala-build'
283
284 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
285
286 commit 0bb8c92e23925b58dc6d9a36c4b9430d6fd8e01c
287 Author: Philip Withnall <philip.withnall@collabora.co.uk>
288 Date: 2010-07-14 15:10:46 +0100
289
290 Add and install a deps file for the Vala bindings
291
292 commit dd9ae6841b01d542b37b1d3dccec7d232abdd525
293 Author: Philip Withnall <philip.withnall@collabora.co.uk>
294 Date: 2010-07-14 15:07:07 +0100
295
296 Remove unused lines from the Vala Makefile
297
298 commit 6f1d558ae60efa3dcb97a38f146827fa845dfa0d
299 Author: Travis Reitter <travis.reitter@collabora.co.uk>
300 Date: 2010-07-12 10:54:02 -0700
301
302 Expose Capabilities.get_channel_classes() to g-i.
303
304 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
305 Acked-by: Danielle Madeley <danielle.madeley@collabora.co.uk>
306
307 commit 7c722839833495d4ac3fc9d0c2e413dadecd123c
308 Merge: 68b320e af60400
309 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
310 Date: 2010-07-13 15:51:27 +0100
311
312 Merge branch 'trivia'
313
314 Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
315
316 commit af60400a97e07f070861de420822ffe7094416c3
317 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
318 Date: 2010-07-13 15:15:03 +0100
319
320 TpBaseClient: add "C bindings" for all three properties
321
322 commit 469c2403440e3c39a6a4887a3d98d39b5c8c4dac
323 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
324 Date: 2010-07-13 15:14:18 +0100
325
326 TpBaseClient: check that it's really a base client in public methods
327
328 commit a756b988b7138806dab477674f00331452b2cbbf
329 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
330 Date: 2010-07-13 14:08:36 +0100
331
332 Split out avatar requirements into connection-avatars.c
333
334 commit 8c6e42eab846ad29b5646fd299e0439e61b44e97
335 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
336 Date: 2010-07-13 11:44:02 +0100
337
338 tp_proxy_has_interface, tp_proxy_has_interface_by_id: improve docs
339
340 This partially addresses fd.o #19096.
341
342 commit de1340a8db04eb7c06911b1116d7ed5f8d0cbbdb
343 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
344 Date: 2010-07-13 11:43:24 +0100
345
346 tp_proxy_has_interface_by_id: check that it's really a proxy
347
348 commit f87e71d50ae577edc7d48c25baa7803280f5cf97
349 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
350 Date: 2010-07-13 11:41:58 +0100
351
352 fd.o #28751: tp_proxy_has_interface: convert from macro to function
353
354 This makes it introspectable.
355
356 commit 68b320e29f10e083b817d02c69b4b6a582c1cdda
357 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
358 Date: 2010-07-13 11:21:25 +0100
359
360 Nano version
361
0362 commit df9104ff6b1e86d5b237682283444746da404dde
1363 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2364 Date: 2010-07-12 19:36:44 +0100
210572
211573 ignore a SELinux leak
212574
575 commit 2d179a09f1b0a0a6f975d3e6770d39a4760fa1d9
576 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
577 Date: 2010-07-01 11:55:45 +0100
578
579 Fix documentation generation for TpSimpleHandler
580
213581 commit 32f7a50a1d7bcefe4a6c0bd4c512980a1b54e5c5
214582 Author: Travis Reitter <travis.reitter@collabora.co.uk>
215583 Date: 2010-06-30 15:52:27 -0700
236604 Merge branch 'valgrind'
237605
238606 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
607
608 commit f04885136bae4147e7e3cbf84c182045afdfff2e
609 Author: Andre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>
610 Date: 2010-06-29 20:47:05 -0300
611
612 Updated to latest changes in tests (mainly namespace).
613
614 commit b9f9c225ede960194d3e5f3451205edf972d57fe
615 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
616 Date: 2010-05-06 14:38:15 +0100
617
618 TpProtocol: omit both PARAMETERS and CORE if immutable properties were not provided
619
620 We *could* make a GetAll call, but we'd also have to replicate
621 TpConnectionManager's logic for falling back to GetParameters, and life's
622 too short.
623
624 commit 9764867acf239382be4a1569a09ad99a5b917801
625 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
626 Date: 2010-05-06 14:38:33 +0100
627
628 Test TpProtocol objects extracted from a TpConnectionManager
629
630 commit 4fbad8e679e6b497c7192696166262e3c8f777d0
631 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
632 Date: 2010-05-06 13:32:46 +0100
633
634 TpProtocol: add more API
635
636 commit e95a1aceb7e311513e7e184354bcd1a4208b08ea
637 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
638 Date: 2010-05-06 13:30:13 +0100
639
640 Add API to get the TpProtocol objects from a TpConnectionManager
641
642 commit 49cdb374f84c88e62e99b7b8854b5c075734108b
643 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
644 Date: 2010-05-06 12:46:14 +0100
645
646 Move TpConnectionManagerParam to protocol.h
647
648 commit 65bca93da6a6b0ea9e2375271e3a2fe3c0cbcc2a
649 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
650 Date: 2010-05-05 18:10:32 +0100
651
652 TpProtocol: extract param specs from the immutable properties
653
654 This moves tp_connection_manager_params_from_param_specs to
655 TpProtocol; the only changes in that function were to
656 rename it to tp_protocol_params_from_param_specs, and rename cm_name
657 to cm_debug_name to indicate that it's only for debug messages (it used
658 to be the CM's short name, but now it's the entire bus name).
659
660 commit 674d58a0c9376be28aa14019723fe44ce284f5de
661 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
662 Date: 2010-05-05 17:55:59 +0100
663
664 TpProtocol: keep our own immutable properties
665
666 commit c072ebbb9aa3b4b1fed8f94d54ba7b5f34ed85fc
667 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
668 Date: 2010-05-06 14:52:18 +0100
669
670 Parse protocols from .manager files by turning them into immutable properties
671
672 init_gvalue_from_dbus_sig and parse_default_value are unmodified from
673 TpConnectionManager.
674
675 commit e08c4d65b4d42720a93e5af9fea16dbe31c58eb6
676 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
677 Date: 2010-05-05 14:42:54 +0100
678
679 TpConnectionManager: create TpProtocol objects from Protocols if possible
680
681 commit 70833f52c2402a17e69c52ad57b3bac55d387b0e
682 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
683 Date: 2010-05-05 14:42:12 +0100
684
685 tp_connection_manager_params_from_param_specs: factor out
686
687 commit b92f8a4f42588210193007668b83d3e5c8ce3575
688 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
689 Date: 2010-05-05 12:14:02 +0100
690
691 Parse interfaces from .manager files too
692
693 commit 549a0386bdb0e424e4cc365895622bf836594ceb
694 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
695 Date: 2010-05-05 11:32:37 +0100
696
697 TpConnectionManager: call GetAll for Properties
698
699 For now, act on the Interfaces, but just debug about the Protocols.
700
701 commit ec3a401fc7c88f56331598dd74a201dc9d126a53
702 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
703 Date: 2010-03-15 15:54:10 +0000
704
705 TpProtocol: add C accessor tp_protocol_get_name
706
707 commit 84f06d14d87d892b652a91d713f75dd64dcb0979
708 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
709 Date: 2010-05-04 15:38:25 +0100
710
711 TpProtocol: track our own name rather than having it poked in from outside
712
713 commit aa8e3c7e23ecb90ea976281dedae7ce0006ebe33
714 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
715 Date: 2010-05-04 15:35:50 +0100
716
717 TpConnectionManager: implement protocol structs by borrowing from protocol objects
718
719 commit d9bfe2d7a46398e0c595510b5f1e79f114dba73a
720 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
721 Date: 2010-05-04 13:14:53 +0100
722
723 tp_connection_manager_read_file: ignore protocols with invalid names
724
725 commit cea970d04a6f0318c978fb20449f10cb0e604e5a
726 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
727 Date: 2010-05-04 13:14:05 +0100
728
729 tp_connection_manager_read_file: parse protocol names without an extra malloc/free
730
731 commit 948eb176272b0875f3bff42b5c28c83044e34a26
732 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
733 Date: 2010-03-11 15:26:24 +0000
734
735 tp_connection_manager_got_protocols: ignore protocols with invalid names
736
737 commit 03af3647c963a6bf2d3ca83b858a426bd40ca9f3
738 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
739 Date: 2010-05-04 15:04:14 +0100
740
741 Give TpProtocol objects an internal TpConnectionManagerProtocol struct
742
743 commit 5e20b7c21e686c4d37fc4cf8d4777907fb06bafd
744 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
745 Date: 2010-03-10 15:15:38 +0000
746
747 TpConnectionManager: rename priv->protocols to protocol_structs
748
749 Just calling it "protocols" is confusing when we have protocol objects too.
750
751 commit c789e1c35d9bb4763e87562240c759ed79788a88
752 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
753 Date: 2010-05-06 13:32:00 +0100
754
755 protocol-objects test: use test_assert_empty_strv
756
757 commit e473282821ed0f384b87f227c3d9684e8d2202be
758 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
759 Date: 2010-05-05 18:25:33 +0100
760
761 Make sure the fallback path through GetParameters is still tested
762
763 commit 726f219d21dcb510f49a1c86af62673cb7d7847c
764 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
765 Date: 2010-05-06 13:31:34 +0100
766
767 protocol-objects test: test the fallback path (an old CM) too
768
769 commit abae02361c2d63eda585c9efa94e223dc843643f
770 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
771 Date: 2010-05-05 15:04:57 +0100
772
773 Test the Protocols property of a ConnectionManager
774
775 In passing, also test the Interfaces property.
776
777 commit dd828f13cd8c02da1e32cc07eb22d0ac0717bbbc
778 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
779 Date: 2010-05-05 15:00:47 +0100
780
781 test_protocol_properties: assert that Parameters are present
782
783 commit db301466e838a67049d36ec73d324230c9170f98
784 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
785 Date: 2010-05-05 13:33:48 +0100
786
787 TpBaseConnectionManager: implement the keys of Protocols
788
789 commit 51055389a10b4d0182c3da683a6ef56a59fdaa90
790 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
791 Date: 2010-05-05 13:33:32 +0100
792
793 TpBaseProtocol: for stub implementations, only return Parameters as an immutable property
794
795 commit 783e50ca84cc373e3d2cf26a1374f5fd87acb037
796 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
797 Date: 2010-05-05 13:23:14 +0100
798
799 TpBaseProtocol:immutable-properties: add
800
801 commit 6dc3273d5e81bce7f8be9f9cb139cf9b7e90abaa
802 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
803 Date: 2010-05-05 13:22:35 +0100
804
805 tp_dbus_properties_mixin_fill_properties_hash: add
806
807 commit bc38ea93c05e569bc960b68e7106ef0402296dc9
808 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
809 Date: 2010-05-05 12:50:21 +0100
810
811 TpBaseConnection: implement a stub form of the Protocols property
812
813 commit 525803a565fa0cdc525655773ad222048dcfcbaa
814 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
815 Date: 2010-05-05 12:50:03 +0100
816
817 TpBaseConnection: implement the Interfaces property
818
819 commit 9e9e3780d175aed4fbd9af4a5b53cc037d662446
820 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
821 Date: 2010-05-06 16:40:07 +0100
822
823 Update Connection_Manager.xml from spec branch smcv/protocols
824
825 commit 550b18d0a2f05662fa60f669972d1d23bea0d150
826 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
827 Date: 2010-03-11 14:52:11 +0000
828
829 test-cm: don't assert that protocols come out in the expected order
830
831 commit be7c9b7b704e0c30d412a6a650df898cebf56e73
832 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
833 Date: 2010-05-06 16:04:25 +0100
834
835 Update Protocol spec draft, and fix C code accordingly
836
837 - flatten guaranteed and possible Connection interfaces into one list
838 - likewise for requestable channel classes
839 - rename DisplayName to EnglishName
840
841 commit 6f1e44c46648579d64ba5dece89b03a53c224100
842 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
843 Date: 2010-03-09 21:43:56 +0000
844
845 Add a simple smoke-test for protocol objects
846
847 commit 7979f1e7dcf4c857c181d82344705f378df9a7cb
848 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
849 Date: 2010-03-09 12:37:28 +0000
850
851 Echo 2 example: implement the Protocol object's basic properties
852
853 commit cf9428ad8cf54c5c6976c9913a3005f78a8d55f5
854 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
855 Date: 2010-03-09 12:09:08 +0000
856
857 TpBaseProtocol: implement the various Protocol properties
858
859 These are fetched once on initialization and cached for the lifetime of
860 the object.
861
862 commit c4bda10688bd357ec5bf5fb8c9f33da444b8f3e3
863 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
864 Date: 2010-03-08 21:07:48 +0000
865
866 TpBaseProtocol: export the 'Parameters' property
867
868 commit cd6b9d5e2e5584a39a56a93a865b334e84939a2d
869 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
870 Date: 2010-03-08 20:59:30 +0000
871
872 TpBaseProtocol: implement the Protocol D-Bus methods
873
874 commit 0c6c3d812f9eec55c7d180469929e8278e27eafa
875 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
876 Date: 2010-05-03 19:51:37 +0100
877
878 Export non-stub TpBaseProtocol instances on D-Bus
879
880 commit cfdf65c0b154194f0252bfd928bfae2f93f8f9b5
881 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
882 Date: 2010-05-03 19:33:33 +0100
883
884 Generate code for Protocol objects and add a stub TpProtocol class
885
886 commit c7edd5df70bf015b1e0c8da52ab1fde54c1f9b83
887 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
888 Date: 2010-05-04 12:58:37 +0100
889
890 Add an early version of the Protocol spec
891
892 commit b14b460123cd876f575edeeb80116b678ac7b3ec
893 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
894 Date: 2010-05-03 19:31:11 +0100
895
896 Temporarily allow unstable API for Protocol development
897
898 This must be reverted before this branch is merged.
899
900 commit e7ba2cf141a3492fab1fa146035fc0f074e0860c
901 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
902 Date: 2010-03-08 19:45:35 +0000
903
904 _tp_cm_param_spec_set_default: remove, no longer called
905
906 commit 3f39b55aa5193a2f9b411899c4d6314aaddadd2c
907 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
908 Date: 2010-03-08 17:00:54 +0000
909
910 _TpLegacyProtocol: remove filtering/sanity-checking which is now done more generally
911
912 commit 776535c409736fa4021cc045e3fb1628b18f18bc
913 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
914 Date: 2010-05-04 12:07:04 +0100
915
916 tp_base_protocol_new_connection: improve documentation
917
918 commit 41feeb69da219b01ae3a9582ae8957388b59fb4d
919 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
920 Date: 2010-05-03 19:13:20 +0100
921
922 tp_base_protocol_new_connection: TpBaseProtocol: before calling subclass's new_connection, check that mandatory params are given and types are right, and fill in defaults
923
924 commit e87fc31347d604ec683f48da9fe58cf14ada2fb4
925 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
926 Date: 2010-05-03 19:01:10 +0100
927
928 TpBaseConnectionManager: allow new_connection and protocol_params to both be NULL
929
930 commit f618299c278f0b8b43d903d2dee3e23abab5d928
931 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
932 Date: 2010-03-08 13:52:59 +0000
933
934 tp_base_connection_manager_list_protocols: implement in terms of the protocols hash table
935
936 commit 0a1f438652ecf57831b84c6f5b64171b55f8ad57
937 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
938 Date: 2010-03-08 13:43:23 +0000
939
940 echo2 example CM: use Protocol objects
941
942 commit f56af5b763698351231ff71a794206fd5a4e03c0
943 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
944 Date: 2010-05-04 12:10:39 +0100
945
946 TpBaseConnectionManager: delegate creation of a new connection to Protocol objects
947
948 commit 45bb5f0b580dc4394d4eca52cf7fe476f8d168e5
949 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
950 Date: 2010-03-05 19:29:10 +0000
951
952 TpBaseConnectionManager: get TpCMParamSpec structures via Protocol objects
953
954 commit 672137cc51cee0588bc3055df264dfc92cb58815
955 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
956 Date: 2010-03-05 18:14:52 +0000
957
958 Add an internal _TpLegacyProtocol class, and make one for each protocol
959
960 commit 8f9fe6bc77532ab7a72ca653708f1c3c7bfa2d7d
961 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
962 Date: 2010-03-05 18:13:53 +0000
963
964 TpBaseConnectionManager: have a table of TpBaseProtocol objects
965
966 commit b854f818155db93799050d7fcb088402d4c761a3
967 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
968 Date: 2010-03-05 18:11:27 +0000
969
970 TpBaseProtocol: move struct definitions to header so it can be subclassed
971
972 commit 2736d861bf5bc4e22513423ccc3b8aa8a42b01b5
973 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
974 Date: 2010-03-05 18:01:37 +0000
975
976 TpBaseProtocol: have a 'name' property
977
978 commit 7682b77a4aac62915bb5ba38ccaaece165e443b9
979 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
980 Date: 2010-05-03 18:35:12 +0100
981
982 Add an empty TpBaseProtocol class
983
984 commit f3e5b1593eb303fbda3b0a8eabed667d6ed2991c
985 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
986 Date: 2010-05-03 18:26:24 +0100
987
988 Add stub base-protocol.[ch] and move some TpCMParamSpec functionality there
989
990 _tp_cm_param_spec_to_dbus is new code, which streamlines the conversion
991 between a TpCMParamSpec and the Param_Spec (susv) struct used on D-Bus;
992 the rest has been moved without changes.
239993
240994 commit 6d25edceddb2ef98b856e064ffcf53950e4ede9d
241995 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
0 telepathy-glib 0.11.11 (2010-07-26)
1 ===================================
2
3 The “xev claims I'm typing in Japanese” release.
4
5 Enhancements:
6
7 ↭ Updated spec to 0.19.10 (smcv):
8 ↯ generate code for Protocol objects, and the ContactSearch channel type
9
10 ↭ fd.o #27997: add TpProtocol client-side API, and TpBaseProtocol service-side
11 base class, for Protocol objects (smcv)
12
13 ↭ fd.o #28751: tp_proxy_has_interface is now a real function, not a macro, for
14 better introspection (smcv)
15
16 ↭ TpBaseClient's properties now have accessor methods for convenient use in C
17 (smcv)
18
19 ↭ tp_capabilities_get_channel_classes is now visible to g-i (pwithnall)
20
21 Fixes:
22
23 ↭ Install a .deps file for the Vala bindings (pwithnall)
24
25 ↭ Vala bindings now install to the normal location, making it unnecessary to
26 look up telepathy-vala in pkg-config; that pkg-config file will be removed
27 in a future version (treitter)
28
29 ↭ fd.o #29197: expand g-i coverage of connection manager code enough to
30 use it for libfolks' regression tests (pwithnall, smcv)
31
032 telepathy-glib 0.11.10 (2010-07-12)
133 ===================================
234
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.65 for Telepathy-GLib 0.11.10.
2 # Generated by GNU Autoconf 2.65 for Telepathy-GLib 0.11.11.
33 #
44 # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-glib>.
55 #
701701 # Identity of this package.
702702 PACKAGE_NAME='Telepathy-GLib'
703703 PACKAGE_TARNAME='telepathy-glib'
704 PACKAGE_VERSION='0.11.10'
705 PACKAGE_STRING='Telepathy-GLib 0.11.10'
704 PACKAGE_VERSION='0.11.11'
705 PACKAGE_STRING='Telepathy-GLib 0.11.11'
706706 PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-glib'
707707 PACKAGE_URL=''
708708
15251525 # Omit some internal or obsolete options to make the list less imposing.
15261526 # This message is too long to be a string in the A/UX 3.1 sh.
15271527 cat <<_ACEOF
1528 \`configure' configures Telepathy-GLib 0.11.10 to adapt to many kinds of systems.
1528 \`configure' configures Telepathy-GLib 0.11.11 to adapt to many kinds of systems.
15291529
15301530 Usage: $0 [OPTION]... [VAR=VALUE]...
15311531
15951595
15961596 if test -n "$ac_init_help"; then
15971597 case $ac_init_help in
1598 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.10:";;
1598 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.11:";;
15991599 esac
16001600 cat <<\_ACEOF
16011601
17421742 test -n "$ac_init_help" && exit $ac_status
17431743 if $ac_init_version; then
17441744 cat <<\_ACEOF
1745 Telepathy-GLib configure 0.11.10
1745 Telepathy-GLib configure 0.11.11
17461746 generated by GNU Autoconf 2.65
17471747
17481748 Copyright (C) 2009 Free Software Foundation, Inc.
22342234 This file contains any messages produced by compilers while
22352235 running configure, to aid debugging if configure makes a mistake.
22362236
2237 It was created by Telepathy-GLib $as_me 0.11.10, which was
2237 It was created by Telepathy-GLib $as_me 0.11.11, which was
22382238 generated by GNU Autoconf 2.65. Invocation command line was
22392239
22402240 $ $0 $@
30453045
30463046 # Define the identity of the package.
30473047 PACKAGE='telepathy-glib'
3048 VERSION='0.11.10'
3048 VERSION='0.11.11'
30493049
30503050
30513051 cat >>confdefs.h <<_ACEOF
1144611446
1144711447
1144811448
11449 LT_CURRENT=39
11450 LT_REVISION=2
11451 LT_AGE=39
11449 LT_CURRENT=40
11450 LT_REVISION=0
11451 LT_AGE=40
1145211452
1145311453
1145411454
1231512315
1231612316
1231712317
12318 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vapigen" >&5
12319 $as_echo_n "checking for vapigen... " >&6; }
1231812320 VAPIGEN=`$PKG_CONFIG --variable=vapigen vala-1.0`
12321
12322 if test "x$VAPIGEN" = "x"; then
12323 as_fn_error "not found. Was vala compiled with --enable-vapigen?" "$LINENO" 5
12324 else
12325 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VAPIGEN" >&5
12326 $as_echo "$VAPIGEN" >&6; }
12327 fi
12328
1231912329
1232012330 fi
1232112331
1537215382 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1537315383 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1537415384 -e 's:$: $lt_compiler_flag:'`
15375 (eval echo "\"\$as_me:15376: $lt_compile\"" >&5)
15385 (eval echo "\"\$as_me:15386: $lt_compile\"" >&5)
1537615386 (eval "$lt_compile" 2>conftest.err)
1537715387 ac_status=$?
1537815388 cat conftest.err >&5
15379 echo "$as_me:15380: \$? = $ac_status" >&5
15389 echo "$as_me:15390: \$? = $ac_status" >&5
1538015390 if (exit $ac_status) && test -s "$ac_outfile"; then
1538115391 # The compiler can only warn and ignore the option if not recognized
1538215392 # So say no if there are warnings other than the usual output.
1547115481 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1547215482 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1547315483 -e 's:$: $lt_compiler_flag:'`
15474 (eval echo "\"\$as_me:15475: $lt_compile\"" >&5)
15484 (eval echo "\"\$as_me:15485: $lt_compile\"" >&5)
1547515485 (eval "$lt_compile" 2>out/conftest.err)
1547615486 ac_status=$?
1547715487 cat out/conftest.err >&5
15478 echo "$as_me:15479: \$? = $ac_status" >&5
15488 echo "$as_me:15489: \$? = $ac_status" >&5
1547915489 if (exit $ac_status) && test -s out/conftest2.$ac_objext
1548015490 then
1548115491 # The compiler can only warn and ignore the option if not recognized
1552315533 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1552415534 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1552515535 -e 's:$: $lt_compiler_flag:'`
15526 (eval echo "\"\$as_me:15527: $lt_compile\"" >&5)
15536 (eval echo "\"\$as_me:15537: $lt_compile\"" >&5)
1552715537 (eval "$lt_compile" 2>out/conftest.err)
1552815538 ac_status=$?
1552915539 cat out/conftest.err >&5
15530 echo "$as_me:15531: \$? = $ac_status" >&5
15540 echo "$as_me:15541: \$? = $ac_status" >&5
1553115541 if (exit $ac_status) && test -s out/conftest2.$ac_objext
1553215542 then
1553315543 # The compiler can only warn and ignore the option if not recognized
1710017110 # report actual input values of CONFIG_FILES etc. instead of their
1710117111 # values after options handling.
1710217112 ac_log="
17103 This file was extended by Telepathy-GLib $as_me 0.11.10, which was
17113 This file was extended by Telepathy-GLib $as_me 0.11.11, which was
1710417114 generated by GNU Autoconf 2.65. Invocation command line was
1710517115
1710617116 CONFIG_FILES = $CONFIG_FILES
1716617176 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1716717177 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1716817178 ac_cs_version="\\
17169 Telepathy-GLib config.status 0.11.10
17179 Telepathy-GLib config.status 0.11.11
1717017180 configured by $0, generated by GNU Autoconf 2.65,
1717117181 with options \\"\$ac_cs_config\\"
1717217182
1010
1111 m4_define([tp_glib_major_version], [0])
1212 m4_define([tp_glib_minor_version], [11])
13 m4_define([tp_glib_micro_version], [10])
13 m4_define([tp_glib_micro_version], [11])
1414 m4_define([tp_glib_nano_version], [0])
1515
1616 # If library source has changed since last release, increment revision
2525 # (we don't guarantee that we won't add ABI then remove it again, if it was
2626 # never seen in a release).
2727
28 m4_define([tp_glib_lt_current], [39])
29 m4_define([tp_glib_lt_revision], [2])
30 m4_define([tp_glib_lt_age], [39])
28 m4_define([tp_glib_lt_current], [40])
29 m4_define([tp_glib_lt_revision], [0])
30 m4_define([tp_glib_lt_age], [40])
3131
3232 # Some magic
3333 m4_define([tp_glib_base_version],
203203 AC_SUBST(VALAC)
204204 AC_SUBST(VALAFLAGS)
205205
206 AC_MSG_CHECKING([for vapigen])
206207 VAPIGEN=`$PKG_CONFIG --variable=vapigen vala-1.0`
208
209 if test "x$VAPIGEN" = "x"; then
210 AC_MSG_ERROR([not found. Was vala compiled with --enable-vapigen?])
211 else
212 AC_MSG_RESULT([$VAPIGEN])
213 fi
214
207215 AC_SUBST(VAPIGEN)
208216 fi
209217
6464 IGNORE_HFILES=\
6565 add-dispatch-operation-context-internal.h \
6666 channel-dispatch-operation-internal.h \
67 base-protocol-internal.h \
6768 channel-internal.h \
6869 connection-internal.h \
6970 debug-internal.h \
7071 handle-channels-context-internal.h \
7172 handle-repo-internal.h \
7273 observe-channels-context-internal.h \
74 protocol-internal.h \
7375 proxy-internal.h \
7476 proxy-introspectable.h
7577
289289 IGNORE_HFILES = \
290290 add-dispatch-operation-context-internal.h \
291291 channel-dispatch-operation-internal.h \
292 base-protocol-internal.h \
292293 channel-internal.h \
293294 connection-internal.h \
294295 debug-internal.h \
295296 handle-channels-context-internal.h \
296297 handle-repo-internal.h \
297298 observe-channels-context-internal.h \
299 protocol-internal.h \
298300 proxy-internal.h \
299301 proxy-introspectable.h
300302
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
8 <link rel="prev" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager">
8 <link rel="prev" href="telepathy-glib-base-protocol.html" title="TpBaseProtocol">
99 <link rel="next" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="TpBaseConnectionManager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-base-protocol.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-service-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
235235 <pre class="programlisting">typedef struct {
236236 GObjectClass parent_class;
237237
238 #ifdef __GI_SCANNER__
239 #else
238240 TpBaseConnectionCreateHandleReposImpl create_handle_repos;
241 #endif
239242
240243 TpBaseConnectionCreateChannelFactoriesImpl create_channel_factories;
241244
571574 name and object path used. If <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned, the connection owns the
572575 bus name, and will release it when destroyed.
573576 </p>
577 <p>
578 Since 0.11.UNRELEASED, <em class="parameter"><code>bus_name</code></em> and <em class="parameter"><code>object_path</code></em> may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
579 strings are not needed.
580 </p>
574581 <div class="variablelist"><table border="0">
575582 <col align="left" valign="top">
576583 <tbody>
586593 </tr>
587594 <tr>
588595 <td><p><span class="term"><em class="parameter"><code>bus_name</code></em> :</span></p></td>
589 <td>Used to return the bus name corresponding to the connection
590 if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned; must not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. To be freed by the caller.
596 <td> Used to return the bus name corresponding to the connection
597 if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned. To be freed by the caller. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
591598 </td>
592599 </tr>
593600 <tr>
594601 <td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
595 <td>Used to return the object path of the connection if
596 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned; must not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. To be freed by the caller.
602 <td> Used to return the object path of the connection if
603 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned. To be freed by the caller. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
597604 </td>
598605 </tr>
599606 <tr>
632639 </tr>
633640 <tr>
634641 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
635 <td> the handle repository corresponding to the given handle type,
636 or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if it's unsupported or invalid.
642 <td> the handle repository corresponding to the given
643 handle type, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if it's unsupported or invalid. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
637644 </td>
638645 </tr>
639646 </tbody>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-run.html" title="Connection manager life cycle">
9 <link rel="next" href="TpBaseConnection.html" title="TpBaseConnection">
9 <link rel="next" href="telepathy-glib-base-protocol.html" title="TpBaseProtocol">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-service-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="TpBaseConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-base-protocol.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#TpBaseConnectionManager.synopsis" class="shortcut">Top</a>
7575 <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="returnvalue">TpDBusDaemon</span></a> * <a class="link" href="TpBaseConnectionManager.html#tp-base-connection-manager-get-dbus-daemon" title="tp_base_connection_manager_get_dbus_daemon ()">tp_base_connection_manager_get_dbus_daemon</a>
7676 (<em class="parameter"><code><a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a> *self</code></em>);
7777 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="TpBaseConnectionManager.html#tp-base-connection-manager-register" title="tp_base_connection_manager_register ()">tp_base_connection_manager_register</a> (<em class="parameter"><code><a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a> *self</code></em>);
78 <span class="returnvalue">void</span> <a class="link" href="TpBaseConnectionManager.html#tp-base-connection-manager-add-protocol" title="tp_base_connection_manager_add_protocol ()">tp_base_connection_manager_add_protocol</a>
79 (<em class="parameter"><code><a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a> *self</code></em>,
80 <em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *protocol</code></em>);
7881 </pre>
7982 </div>
8083 <div class="refsect1" title="Object Hierarchy">
8891 <a name="TpBaseConnectionManager.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
8992 <p>
9093 TpBaseConnectionManager implements
91 <a class="link" href="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager">TpSvcConnectionManager</a>.</p>
94 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a> and <a class="link" href="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager">TpSvcConnectionManager</a>.</p>
9295 </div>
9396 <div class="refsect1" title="Properties">
9497 <a name="TpBaseConnectionManager.properties"></a><h2>Properties</h2>
9598 <pre class="synopsis">
9699 "<a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon" title='The "dbus-daemon" property'>dbus-daemon</a>" <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a>* : Read / Write / Construct Only
100 "<a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManager--interfaces" title='The "interfaces" property'>interfaces</a>" <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a>* : Read
101 "<a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManager--protocols" title='The "protocols" property'>protocols</a>" <span class="type">GHashTable_gchararray+GHashTable_gchararray+GValue__*</span> : Read
97102 </pre>
98103 </div>
99104 <div class="refsect1" title="Signals">
458463 const char *cm_dbus_name;
459464 const TpCMProtocolSpec *protocol_params;
460465 TpBaseConnectionManagerNewConnFunc new_connection;
466
467 const gchar * const *interfaces;
461468 } TpBaseConnectionManagerClass;
462469 </pre>
463470 <p>
464471 The class structure for <a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a>.
465472 </p>
466473 <p>
467 In addition to the fields documented here, there are four gpointer fields
474 In addition to the fields documented here, there are some gpointer fields
468475 which must currently be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (a meaning may be defined for these in a
469 future version of telepathy-glib), and a pointer to opaque private data.
476 future version of telepathy-glib).
470477 </p>
471478 <p>
472479 Changed in 0.7.1: it is a fatal error for <em class="parameter"><code>cm_dbus_name</code></em> not to conform to
473480 the specification.
481 </p>
482 <p>
483 Changed in 0.11.UNRELEASED: protocol_params and new_connection may both be
484 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. If so, this connection manager is assumed to use Protocol objects
485 instead.
474486 </p>
475487 <div class="variablelist"><table border="0">
476488 <col align="left" valign="top">
492504 <td><p><span class="term">const <a class="link" href="TpBaseConnectionManager.html#TpCMProtocolSpec" title="TpCMProtocolSpec"><span class="type">TpCMProtocolSpec</span></a> *<em class="structfield"><code><a name="TpBaseConnectionManagerClass.protocol-params"></a>protocol_params</code></em>;</span></p></td>
493505 <td>An array of <a class="link" href="TpBaseConnectionManager.html#TpCMProtocolSpec" title="TpCMProtocolSpec"><span class="type">TpCMProtocolSpec</span></a> structures representing
494506 the protocols this connection manager supports, terminated by a structure
495 whose name member is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
507 whose name member is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>; or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this CM uses Protocol objects.
496508 </td>
497509 </tr>
498510 <tr>
499511 <td><p><span class="term"><a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManagerNewConnFunc" title="TpBaseConnectionManagerNewConnFunc ()"><span class="type">TpBaseConnectionManagerNewConnFunc</span></a> <em class="structfield"><code><a name="TpBaseConnectionManagerClass.new-connection"></a>new_connection</code></em>;</span></p></td>
500512 <td>A <a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManagerNewConnFunc" title="TpBaseConnectionManagerNewConnFunc ()"><span class="type">TpBaseConnectionManagerNewConnFunc</span></a> used to construct
501 new connections. Must be filled in by subclasses in their class_init
502 function.
513 new connections, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this CM uses Protocol objects.
514 </td>
515 </tr>
516 <tr>
517 <td><p><span class="term">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> * const  *<em class="structfield"><code><a name="TpBaseConnectionManagerClass.interfaces"></a>interfaces</code></em>;</span></p></td>
518 <td>A <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> of extra D-Bus interfaces implemented
519 by instances of this class, which may be filled in by subclasses. The
520 default is to list no additional interfaces. Since: 0.11.UNRELEASED
503521 </td>
504522 </tr>
505523 </tbody>
616634 </tbody>
617635 </table></div>
618636 </div>
637 <hr>
638 <div class="refsect2" title="tp_base_connection_manager_add_protocol ()">
639 <a name="tp-base-connection-manager-add-protocol"></a><h3>tp_base_connection_manager_add_protocol ()</h3>
640 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_connection_manager_add_protocol
641 (<em class="parameter"><code><a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a> *self</code></em>,
642 <em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *protocol</code></em>);</pre>
643 <p>
644 Add a protocol object to the set of supported protocols.
645 </p>
646 <div class="variablelist"><table border="0">
647 <col align="left" valign="top">
648 <tbody>
649 <tr>
650 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
651 <td>a connection manager object which has not yet registered on D-Bus
652 (i.e. <a class="link" href="TpBaseConnectionManager.html#tp-base-connection-manager-register" title="tp_base_connection_manager_register ()"><code class="function">tp_base_connection_manager_register()</code></a> must not have been called)
653 </td>
654 </tr>
655 <tr>
656 <td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
657 <td>a protocol object, which must not have the same protocol name as
658 any that has already been added
659 </td>
660 </tr>
661 </tbody>
662 </table></div>
663 </div>
619664 </div>
620665 <div class="refsect1" title="Property Details">
621666 <a name="TpBaseConnectionManager.property-details"></a><h2>Property Details</h2>
634679 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
635680 </p>
636681 <p class="since">Since 0.11.3</p>
682 </div>
683 <hr>
684 <div class="refsect2" title='The "interfaces" property'>
685 <a name="TpBaseConnectionManager--interfaces"></a><h3>The <code class="literal">"interfaces"</code> property</h3>
686 <pre class="programlisting"> "interfaces" <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a>* : Read</pre>
687 <p>
688 The set of D-Bus interfaces available on this ConnectionManager, other
689 than ConnectionManager itself.
690 </p>
691 <p class="since">Since 0.11.UNRELEASED</p>
692 </div>
693 <hr>
694 <div class="refsect2" title='The "protocols" property'>
695 <a name="TpBaseConnectionManager--protocols"></a><h3>The <code class="literal">"protocols"</code> property</h3>
696 <pre class="programlisting"> "protocols" <span class="type">GHashTable_gchararray+GHashTable_gchararray+GValue__*</span> : Read</pre>
697 <p>
698 The Protocol objects available on this ConnectionManager.
699 </p>
700 <p class="since">Since 0.11.UNRELEASED</p>
637701 </div>
638702 </div>
639703 <div class="refsect1" title="Signal Details">
5151 (<em class="parameter"><code><a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> *manager</code></em>,
5252 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerChannelClassFunc" title="TpChannelManagerChannelClassFunc ()"><span class="type">TpChannelManagerChannelClassFunc</span></a> func</code></em>,
5353 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
54 <span class="returnvalue">void</span> (<a class="link" href="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc" title="TpChannelManagerTypeChannelClassFunc ()">*TpChannelManagerTypeChannelClassFunc</a>)
55 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
56 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *fixed_properties</code></em>,
57 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> * const *allowed_properties</code></em>,
58 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
59 <span class="returnvalue">void</span> (<a class="link" href="TpChannelManager.html#TpChannelManagerTypeForeachChannelClassFunc" title="TpChannelManagerTypeForeachChannelClassFunc ()">*TpChannelManagerTypeForeachChannelClassFunc</a>)
60 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
61 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc" title="TpChannelManagerTypeChannelClassFunc ()"><span class="type">TpChannelManagerTypeChannelClassFunc</span></a> func</code></em>,
62 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
5463 <span class="returnvalue">void</span> (<a class="link" href="TpChannelManager.html#TpChannelManagerForeachChannelFunc" title="TpChannelManagerForeachChannelFunc ()">*TpChannelManagerForeachChannelFunc</a>)
5564 (<em class="parameter"><code><a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> *manager</code></em>,
5665 <em class="parameter"><code><a class="link" href="TpExportableChannel.html#TpExportableChannelFunc" title="TpExportableChannelFunc ()"><span class="type">TpExportableChannelFunc</span></a> func</code></em>,
107116 (<em class="parameter"><code><a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> *manager</code></em>,
108117 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerChannelClassFunc" title="TpChannelManagerChannelClassFunc ()"><span class="type">TpChannelManagerChannelClassFunc</span></a> func</code></em>,
109118 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
119 <span class="returnvalue">void</span> <a class="link" href="TpChannelManager.html#tp-channel-manager-type-foreach-channel-class" title="tp_channel_manager_type_foreach_channel_class ()">tp_channel_manager_type_foreach_channel_class</a>
120 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
121 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc" title="TpChannelManagerTypeChannelClassFunc ()"><span class="type">TpChannelManagerTypeChannelClassFunc</span></a> func</code></em>,
122 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
110123 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="TpChannelManager.html#tp-channel-manager-request-channel" title="tp_channel_manager_request_channel ()">tp_channel_manager_request_channel</a> (<em class="parameter"><code><a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> *manager</code></em>,
111124 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> request_token</code></em>,
112125 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *request_properties</code></em>);
211224 <tr>
212225 <td><p><span class="term"><em class="parameter"><code>manager</code></em> :</span></p></td>
213226 <td>An object implementing <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>
227 </td>
228 </tr>
229 <tr>
230 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
231 <td>A function
232 </td>
233 </tr>
234 <tr>
235 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
236 <td>Arbitrary data to be passed as the final argument of <em class="parameter"><code>func</code></em>
237 </td>
238 </tr>
239 </tbody>
240 </table></div>
241 </div>
242 <hr>
243 <div class="refsect2" title="TpChannelManagerTypeChannelClassFunc ()">
244 <a name="TpChannelManagerTypeChannelClassFunc"></a><h3>TpChannelManagerTypeChannelClassFunc ()</h3>
245 <pre class="programlisting"><span class="returnvalue">void</span> (*TpChannelManagerTypeChannelClassFunc)
246 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
247 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *fixed_properties</code></em>,
248 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> * const *allowed_properties</code></em>,
249 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
250 <p>
251 Signature of callbacks which act on each channel class potentially supported
252 by instances of <em class="parameter"><code>type</code></em>.
253 </p>
254 <div class="variablelist"><table border="0">
255 <col align="left" valign="top">
256 <tbody>
257 <tr>
258 <td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
259 <td>A type whose instances implement <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>
260 </td>
261 </tr>
262 <tr>
263 <td><p><span class="term"><em class="parameter"><code>fixed_properties</code></em> :</span></p></td>
264 <td>A table mapping (const gchar *) property names to
265 GValues, representing the values those properties must take to request
266 channels of a particular class.
267 </td>
268 </tr>
269 <tr>
270 <td><p><span class="term"><em class="parameter"><code>allowed_properties</code></em> :</span></p></td>
271 <td>A <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of property names which may
272 appear in requests for a particular channel class.
273 </td>
274 </tr>
275 <tr>
276 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
277 <td>Arbitrary user-supplied data.
278 </td>
279 </tr>
280 </tbody>
281 </table></div>
282 </div>
283 <hr>
284 <div class="refsect2" title="TpChannelManagerTypeForeachChannelClassFunc ()">
285 <a name="TpChannelManagerTypeForeachChannelClassFunc"></a><h3>TpChannelManagerTypeForeachChannelClassFunc ()</h3>
286 <pre class="programlisting"><span class="returnvalue">void</span> (*TpChannelManagerTypeForeachChannelClassFunc)
287 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
288 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc" title="TpChannelManagerTypeChannelClassFunc ()"><span class="type">TpChannelManagerTypeChannelClassFunc</span></a> func</code></em>,
289 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
290 <p>
291 Signature of an implementation of type_foreach_channel_class, which must
292 call func(type, fixed, allowed, user_data) for each channel class
293 potentially understood by instances of <em class="parameter"><code>type</code></em>.
294 </p>
295 <div class="variablelist"><table border="0">
296 <col align="left" valign="top">
297 <tbody>
298 <tr>
299 <td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
300 <td>A type whose instances implement <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>
214301 </td>
215302 </tr>
216303 <tr>
357444 TpChannelManagerRequestFunc create_channel;
358445 TpChannelManagerRequestFunc request_channel;
359446 TpChannelManagerRequestFunc ensure_channel;
447
448 TpChannelManagerTypeForeachChannelClassFunc type_foreach_channel_class;
360449 } TpChannelManagerIface;
361450 </pre>
362451 <p>
384473 <tr>
385474 <td><p><span class="term"><a class="link" href="TpChannelManager.html#TpChannelManagerForeachChannelClassFunc" title="TpChannelManagerForeachChannelClassFunc ()"><span class="type">TpChannelManagerForeachChannelClassFunc</span></a> <em class="structfield"><code><a name="TpChannelManagerIface.foreach-channel-class"></a>foreach_channel_class</code></em>;</span></p></td>
386475 <td>Call func(manager, fixed, allowed, user_data) for
387 each class of channel that this manager can create. If not implemented, the
388 manager is assumed to be able to create no classes of channels.
476 each class of channel that this instance can create (a subset of the
477 channel classes produced by <em class="parameter"><code>type_foreach_channel_class</code></em>). If not
478 implemented, <em class="parameter"><code>type_foreach_channel_class</code></em> is used.
389479 </td>
390480 </tr>
391481 <tr>
408498 with the Connection.Interface.Requests.EnsureChannel method. See
409499 <a class="link" href="TpChannelManager.html#TpChannelManagerRequestFunc" title="TpChannelManagerRequestFunc ()"><span class="type">TpChannelManagerRequestFunc</span></a> for details.
410500 Since: 0.7.16
501 </td>
502 </tr>
503 <tr>
504 <td><p><span class="term"><a class="link" href="TpChannelManager.html#TpChannelManagerTypeForeachChannelClassFunc" title="TpChannelManagerTypeForeachChannelClassFunc ()"><span class="type">TpChannelManagerTypeForeachChannelClassFunc</span></a> <em class="structfield"><code><a name="TpChannelManagerIface.type-foreach-channel-class"></a>type_foreach_channel_class</code></em>;</span></p></td>
505 <td>Call func(cls, fixed, allowed, user_data)
506 for each class of channel that instances of this class might be able to
507 create.
508 Since: 0.11.UNRELEASED
411509 </td>
412510 </tr>
413511 </tbody>
861959 </tbody>
862960 </table></div>
863961 <p class="since">Since 0.7.15</p>
962 </div>
963 <hr>
964 <div class="refsect2" title="tp_channel_manager_type_foreach_channel_class ()">
965 <a name="tp-channel-manager-type-foreach-channel-class"></a><h3>tp_channel_manager_type_foreach_channel_class ()</h3>
966 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_manager_type_foreach_channel_class
967 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>,
968 <em class="parameter"><code><a class="link" href="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc" title="TpChannelManagerTypeChannelClassFunc ()"><span class="type">TpChannelManagerTypeChannelClassFunc</span></a> func</code></em>,
969 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
970 <p>
971 Calls func(type, fixed, allowed, user_data) for each channel class
972 potentially understood by instances of <em class="parameter"><code>type</code></em>.
973 </p>
974 <div class="variablelist"><table border="0">
975 <col align="left" valign="top">
976 <tbody>
977 <tr>
978 <td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
979 <td>A type whose instances implement <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>
980 </td>
981 </tr>
982 <tr>
983 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
984 <td>A function
985 </td>
986 </tr>
987 <tr>
988 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
989 <td>Arbitrary data to be passed as the final argument of <em class="parameter"><code>func</code></em>
990 </td>
991 </tr>
992 </tbody>
993 </table></div>
994 <p class="since">Since 0.11.UNRELEASED</p>
864995 </div>
865996 <hr>
866997 <div class="refsect2" title="tp_channel_manager_request_channel ()">
1919 <td> </td>
2020 </tr>
2121 <tr><td colspan="5" class="shortcuts">
22 <a class="shortcut" href="#glsO">O</a>
22 <a class="shortcut" href="#glsA">A</a>
23  | 
24 <a class="shortcut" href="#glsO">O</a>
2325  | 
2426 <a class="shortcut" href="#glsA">A</a>
2527  | 
2628 <a class="shortcut" href="#glsE">E</a>
29  | 
30 <a class="shortcut" href="#glsT">T</a>
31  | 
32 <a class="shortcut" href="#glsS">S</a>
2733  | 
2834 <a class="shortcut" href="#glsT">T</a>
2935 </td></tr>
3137 <div class="glossary" title="Annotation Glossary">
3238 <div class="titlepage"><div><div><h2 class="title">
3339 <a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
40 <a name="glsA"></a><h3 class="title">A</h3>
41 <dt>
42 <a name="annotation-glossterm-array"></a>array</dt>
43 <dd><p>Parameter points to an array of items.</p></dd>
3444 <a name="glsO"></a><h3 class="title">O</h3>
3545 <dt>
3646 <a name="annotation-glossterm-out"></a>out</dt>
3747 <dd><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
3848 <a name="glsA"></a><h3 class="title">A</h3>
39 <dt>
40 <a name="annotation-glossterm-array"></a>array</dt>
41 <dd><p>Parameter points to an array of items.</p></dd>
4249 <dt>
4350 <a name="annotation-glossterm-allow-none"></a>allow-none</dt>
4451 <dd><p>NULL is ok, both for passing and for returning.</p></dd>
5360 <dt>
5461 <a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
5562 <dd><p>Free data after the code is done.</p></dd>
63 <a name="glsS"></a><h3 class="title">S</h3>
64 <dt>
65 <a name="annotation-glossterm-scope%20call"></a>scope call</dt>
66 <dd><p>The callback is valid only during the call to the method.</p></dd>
67 <a name="glsT"></a><h3 class="title">T</h3>
5668 <dt>
5769 <a name="annotation-glossterm-transfer%20none"></a>transfer none</dt>
5870 <dd><p>Don't free data after the code is done.</p></dd>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="telepathy-glib-connection-manager.html">TpConnectionManager</a></span><span class="refpurpose"> — proxy object for a Telepathy connection manager</span>
27 </dt>
28 <dt>
29 <span class="refentrytitle"><a href="telepathy-glib-protocol.html">TpProtocol</a></span><span class="refpurpose"> — proxy for a Telepathy Protocol object</span>
2730 </dt>
2831 <dt>
2932 <span class="refentrytitle"><a href="telepathy-glib-connection.html">TpConnection</a></span><span class="refpurpose"> — proxy object for a Telepathy connection</span>
9598 <span class="refentrytitle"><a href="telepathy-glib-channel-roomlist.html">Room List channels</a></span><span class="refpurpose"> — client-side wrappers for the Room List channel type</span>
9699 </dt>
97100 <dt>
101 <span class="refentrytitle"><a href="telepathy-glib-channel-contactsearch.html">Contact Search channels</a></span><span class="refpurpose"> — client-side wrappers for the Contact Search channel type</span>
102 </dt>
103 <dt>
98104 <span class="refentrytitle"><a href="telepathy-glib-cli-anonymity.html">Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — client-side wrappers for the Anonymity interfaces</span>
99105 </dt>
100106 <dt>
2727 </dt>
2828 <dt>
2929 <span class="refentrytitle"><a href="TpBaseConnectionManager.html">TpBaseConnectionManager</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager"><span class="type">TpSvcConnectionManager</span></a> implementations</span>
30 </dt>
31 <dt>
32 <span class="refentrytitle"><a href="telepathy-glib-base-protocol.html">TpBaseProtocol</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> implementations</span>
3033 </dt>
3134 <dt>
3235 <span class="refentrytitle"><a href="TpBaseConnection.html">TpBaseConnection</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-connection.html#TpSvcConnection"><span class="type">TpSvcConnection</span></a> implementations</span>
4141 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-contactlist.html">Contact List channels</a></span><span class="refpurpose"> — service-side interface for the Contact List channel type</span>
4242 </dt>
4343 <dt>
44 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-contactsearch.html">Contact Search channels</a></span><span class="refpurpose"> — service-side interface for the Contact Search channel
45 type</span>
46 </dt>
47 <dt>
4448 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-text.html">Text channels</a></span><span class="refpurpose"> — service-side interfaces for the Text channel type, and
4549 the Chat State and Password interfaces</span>
4650 </dt>
8084 <span class="refentrytitle"><a href="telepathy-glib-svc-connection-manager.html">Service-side Connection Manager interface</a></span><span class="refpurpose"> — GInterface for Telepathy ConnectionManager objects</span>
8185 </dt>
8286 <dt>
87 <span class="refentrytitle"><a href="telepathy-glib-svc-protocol.html">Service-side Protocol interface</a></span><span class="refpurpose"> — GInterface for Telepathy Protocol objects</span>
88 </dt>
89 <dt>
8390 <span class="refentrytitle"><a href="telepathy-glib-svc-account-manager.html">Service-side Account Manager interface</a></span><span class="refpurpose"> — GInterface for Telepathy AccountManager objects</span>
8491 </dt>
8592 <dt>
7373 <span class="refentrytitle"><a href="telepathy-glib-connection-manager.html">TpConnectionManager</a></span><span class="refpurpose"> — proxy object for a Telepathy connection manager</span>
7474 </dt>
7575 <dt>
76 <span class="refentrytitle"><a href="telepathy-glib-protocol.html">TpProtocol</a></span><span class="refpurpose"> — proxy for a Telepathy Protocol object</span>
77 </dt>
78 <dt>
7679 <span class="refentrytitle"><a href="telepathy-glib-connection.html">TpConnection</a></span><span class="refpurpose"> — proxy object for a Telepathy connection</span>
7780 </dt>
7881 <dt>
140143 </dt>
141144 <dt>
142145 <span class="refentrytitle"><a href="telepathy-glib-channel-roomlist.html">Room List channels</a></span><span class="refpurpose"> — client-side wrappers for the Room List channel type</span>
146 </dt>
147 <dt>
148 <span class="refentrytitle"><a href="telepathy-glib-channel-contactsearch.html">Contact Search channels</a></span><span class="refpurpose"> — client-side wrappers for the Contact Search channel type</span>
143149 </dt>
144150 <dt>
145151 <span class="refentrytitle"><a href="telepathy-glib-cli-anonymity.html">Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — client-side wrappers for the Anonymity interfaces</span>
193199 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-contactlist.html">Contact List channels</a></span><span class="refpurpose"> — service-side interface for the Contact List channel type</span>
194200 </dt>
195201 <dt>
202 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-contactsearch.html">Contact Search channels</a></span><span class="refpurpose"> — service-side interface for the Contact Search channel
203 type</span>
204 </dt>
205 <dt>
196206 <span class="refentrytitle"><a href="telepathy-glib-svc-channel-text.html">Text channels</a></span><span class="refpurpose"> — service-side interfaces for the Text channel type, and
197207 the Chat State and Password interfaces</span>
198208 </dt>
232242 <span class="refentrytitle"><a href="telepathy-glib-svc-connection-manager.html">Service-side Connection Manager interface</a></span><span class="refpurpose"> — GInterface for Telepathy ConnectionManager objects</span>
233243 </dt>
234244 <dt>
245 <span class="refentrytitle"><a href="telepathy-glib-svc-protocol.html">Service-side Protocol interface</a></span><span class="refpurpose"> — GInterface for Telepathy Protocol objects</span>
246 </dt>
247 <dt>
235248 <span class="refentrytitle"><a href="telepathy-glib-svc-account-manager.html">Service-side Account Manager interface</a></span><span class="refpurpose"> — GInterface for Telepathy AccountManager objects</span>
236249 </dt>
237250 <dt>
257270 </dt>
258271 <dt>
259272 <span class="refentrytitle"><a href="TpBaseConnectionManager.html">TpBaseConnectionManager</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager"><span class="type">TpSvcConnectionManager</span></a> implementations</span>
273 </dt>
274 <dt>
275 <span class="refentrytitle"><a href="telepathy-glib-base-protocol.html">TpBaseProtocol</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> implementations</span>
260276 </dt>
261277 <dt>
262278 <span class="refentrytitle"><a href="TpBaseConnection.html">TpBaseConnection</a></span><span class="refpurpose"> — base class for <a class="link" href="telepathy-glib-svc-connection.html#TpSvcConnection"><span class="type">TpSvcConnection</span></a> implementations</span>
290290 <ANCHOR id="TP-IFACE-QUARK-DEBUG:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-DEBUG:CAPS">
291291 <ANCHOR id="TP-IFACE-CONNECTION-MANAGER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-MANAGER:CAPS">
292292 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-MANAGER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-MANAGER:CAPS">
293 <ANCHOR id="TP-IFACE-PROTOCOL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-PROTOCOL:CAPS">
294 <ANCHOR id="TP-IFACE-QUARK-PROTOCOL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-PROTOCOL:CAPS">
293295 <ANCHOR id="TP-IFACE-CONNECTION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION:CAPS">
294296 <ANCHOR id="TP-IFACE-QUARK-CONNECTION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS">
295297 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS">
324326 <ANCHOR id="TP-IFACE-QUARK-CHANNEL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS">
325327 <ANCHOR id="TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS">
326328 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-LIST:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-LIST:CAPS">
329 <ANCHOR id="TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS">
330 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS">
327331 <ANCHOR id="TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS">
328332 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-TYPE-FILE-TRANSFER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-FILE-TRANSFER:CAPS">
329333 <ANCHOR id="TP-IFACE-CHANNEL-TYPE-STREAMED-MEDIA:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-STREAMED-MEDIA:CAPS">
455459 <ANCHOR id="TP-PROP-CHANNEL-TARGET-HANDLE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE:CAPS">
456460 <ANCHOR id="TP-PROP-CHANNEL-TARGET-HANDLE-TYPE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE-TYPE:CAPS">
457461 <ANCHOR id="TP-PROP-CHANNEL-TARGET-ID:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-ID:CAPS">
462 <ANCHOR id="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS">
463 <ANCHOR id="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS">
464 <ANCHOR id="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS">
465 <ANCHOR id="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS">
458466 <ANCHOR id="TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS">
459467 <ANCHOR id="TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SERVICE-NAME:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SERVICE-NAME:CAPS">
460468 <ANCHOR id="TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SUPPORTED-ACCESS-CONTROLS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SUPPORTED-ACCESS-CONTROLS:CAPS">
519527 <ANCHOR id="TP-PROP-MEDIA-STREAM-HANDLER-NAT-TRAVERSAL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-NAT-TRAVERSAL:CAPS">
520528 <ANCHOR id="TP-PROP-MEDIA-STREAM-HANDLER-RELAY-INFO:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-RELAY-INFO:CAPS">
521529 <ANCHOR id="TP-PROP-MEDIA-STREAM-HANDLER-STUN-SERVERS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-STUN-SERVERS:CAPS">
530 <ANCHOR id="TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS">
531 <ANCHOR id="TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS">
532 <ANCHOR id="TP-PROP-PROTOCOL-ICON:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ICON:CAPS">
533 <ANCHOR id="TP-PROP-PROTOCOL-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-INTERFACES:CAPS">
534 <ANCHOR id="TP-PROP-PROTOCOL-PARAMETERS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-PARAMETERS:CAPS">
535 <ANCHOR id="TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS">
536 <ANCHOR id="TP-PROP-PROTOCOL-VCARD-FIELD:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-VCARD-FIELD:CAPS">
522537 <ANCHOR id="TP-TOKEN-CONNECTION-CONTACT-ID:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-CONTACT-ID:CAPS">
523538 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS">
524539 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS">
10211036 <ANCHOR id="TP-STRUCT-TYPE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS">
10221037 <ANCHOR id="TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS">
10231038 <ANCHOR id="TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS">
1039 <ANCHOR id="TpChannelContactSearchState" href="telepathy-glib/telepathy-glib-gtypes.html#TpChannelContactSearchState">
1040 <ANCHOR id="TP-CHANNEL-CONTACT-SEARCH-STATE-NOT-STARTED:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-NOT-STARTED:CAPS">
1041 <ANCHOR id="TP-CHANNEL-CONTACT-SEARCH-STATE-IN-PROGRESS:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-IN-PROGRESS:CAPS">
1042 <ANCHOR id="TP-CHANNEL-CONTACT-SEARCH-STATE-MORE-AVAILABLE:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-MORE-AVAILABLE:CAPS">
1043 <ANCHOR id="TP-CHANNEL-CONTACT-SEARCH-STATE-COMPLETED:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-COMPLETED:CAPS">
1044 <ANCHOR id="TP-CHANNEL-CONTACT-SEARCH-STATE-FAILED:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-FAILED:CAPS">
1045 <ANCHOR id="NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS">
1046 <ANCHOR id="TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS">
1047 <ANCHOR id="TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS">
10241048 <ANCHOR id="TP-STRUCT-TYPE-AVATAR:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS">
10251049 <ANCHOR id="TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS">
10261050 <ANCHOR id="TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS">
10711095 <ANCHOR id="tp-connection-manager-dup-protocol-names" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-dup-protocol-names">
10721096 <ANCHOR id="tp-connection-manager-has-protocol" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-has-protocol">
10731097 <ANCHOR id="tp-connection-manager-get-protocol" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol">
1098 <ANCHOR id="tp-connection-manager-get-protocol-object" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol-object">
10741099 <ANCHOR id="TpConnectionManagerProtocol" href="telepathy-glib/telepathy-glib-connection-manager.html#TpConnectionManagerProtocol">
10751100 <ANCHOR id="tp-connection-manager-protocol-can-register" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-protocol-can-register">
10761101 <ANCHOR id="tp-connection-manager-protocol-dup-param-names" href="telepathy-glib/telepathy-glib-connection-manager.html#tp-connection-manager-protocol-dup-param-names">
11121137 <ANCHOR id="TpConnectionManager-exited" href="telepathy-glib/telepathy-glib-connection-manager.html#TpConnectionManager-exited">
11131138 <ANCHOR id="TpConnectionManager-got-info" href="telepathy-glib/telepathy-glib-connection-manager.html#TpConnectionManager-got-info">
11141139 <ANCHOR id="telepathy-glib-connection-manager.see-also" href="telepathy-glib/telepathy-glib-connection-manager.html#telepathy-glib-connection-manager.see-also">
1140 <ANCHOR id="telepathy-glib-protocol" href="telepathy-glib/telepathy-glib-protocol.html">
1141 <ANCHOR id="telepathy-glib-protocol.synopsis" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.synopsis">
1142 <ANCHOR id="TpProtocol" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol">
1143 <ANCHOR id="telepathy-glib-protocol.object-hierarchy" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.object-hierarchy">
1144 <ANCHOR id="telepathy-glib-protocol.properties" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.properties">
1145 <ANCHOR id="telepathy-glib-protocol.description" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.description">
1146 <ANCHOR id="telepathy-glib-protocol.details" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.details">
1147 <ANCHOR id="TpProtocol-struct" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol-struct">
1148 <ANCHOR id="TpProtocolClass" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocolClass">
1149 <ANCHOR id="tp-protocol-new" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-new">
1150 <ANCHOR id="tp-protocol-get-name" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-name">
1151 <ANCHOR id="tp-protocol-init-known-interfaces" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-init-known-interfaces">
1152 <ANCHOR id="TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" href="telepathy-glib/telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS">
1153 <ANCHOR id="tp-protocol-dup-param-names" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-dup-param-names">
1154 <ANCHOR id="tp-protocol-get-param" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-param">
1155 <ANCHOR id="tp-protocol-has-param" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-has-param">
1156 <ANCHOR id="tp-protocol-can-register" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-can-register">
1157 <ANCHOR id="TP-PROTOCOL-FEATURE-CORE:CAPS" href="telepathy-glib/telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS">
1158 <ANCHOR id="tp-protocol-get-capabilities" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-capabilities">
1159 <ANCHOR id="tp-protocol-get-english-name" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-english-name">
1160 <ANCHOR id="tp-protocol-get-icon-name" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-icon-name">
1161 <ANCHOR id="tp-protocol-get-vcard-field" href="telepathy-glib/telepathy-glib-protocol.html#tp-protocol-get-vcard-field">
1162 <ANCHOR id="tp-cli-protocol-call-identify-account" href="telepathy-glib/telepathy-glib-protocol.html#tp-cli-protocol-call-identify-account">
1163 <ANCHOR id="tp-cli-protocol-call-normalize-contact" href="telepathy-glib/telepathy-glib-protocol.html#tp-cli-protocol-call-normalize-contact">
1164 <ANCHOR id="tp-cli-protocol-callback-for-identify-account" href="telepathy-glib/telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account">
1165 <ANCHOR id="tp-cli-protocol-callback-for-normalize-contact" href="telepathy-glib/telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact">
1166 <ANCHOR id="telepathy-glib-protocol.property-details" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.property-details">
1167 <ANCHOR id="TpProtocol--capabilities" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--capabilities">
1168 <ANCHOR id="TpProtocol--english-name" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--english-name">
1169 <ANCHOR id="TpProtocol--icon-name" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--icon-name">
1170 <ANCHOR id="TpProtocol--param-names" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--param-names">
1171 <ANCHOR id="TpProtocol--protocol-name" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--protocol-name">
1172 <ANCHOR id="TpProtocol--protocol-properties" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--protocol-properties">
1173 <ANCHOR id="TpProtocol--vcard-field" href="telepathy-glib/telepathy-glib-protocol.html#TpProtocol--vcard-field">
1174 <ANCHOR id="telepathy-glib-protocol.see-also" href="telepathy-glib/telepathy-glib-protocol.html#telepathy-glib-protocol.see-also">
11151175 <ANCHOR id="telepathy-glib-connection" href="telepathy-glib/telepathy-glib-connection.html">
11161176 <ANCHOR id="telepathy-glib-connection.synopsis" href="telepathy-glib/telepathy-glib-connection.html#telepathy-glib-connection.synopsis">
11171177 <ANCHOR id="TpConnection" href="telepathy-glib/telepathy-glib-connection.html#TpConnection">
18071867 <ANCHOR id="tp-cli-channel-type-room-list-signal-callback-got-rooms" href="telepathy-glib/telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms">
18081868 <ANCHOR id="tp-cli-channel-type-room-list-signal-callback-listing-rooms" href="telepathy-glib/telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms">
18091869 <ANCHOR id="telepathy-glib-channel-roomlist.see-also" href="telepathy-glib/telepathy-glib-channel-roomlist.html#telepathy-glib-channel-roomlist.see-also">
1870 <ANCHOR id="telepathy-glib-channel-contactsearch" href="telepathy-glib/telepathy-glib-channel-contactsearch.html">
1871 <ANCHOR id="telepathy-glib-channel-contactsearch.synopsis" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#telepathy-glib-channel-contactsearch.synopsis">
1872 <ANCHOR id="telepathy-glib-channel-contactsearch.description" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#telepathy-glib-channel-contactsearch.description">
1873 <ANCHOR id="telepathy-glib-channel-contactsearch.details" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#telepathy-glib-channel-contactsearch.details">
1874 <ANCHOR id="tp-cli-channel-type-contact-search-call-more" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-more">
1875 <ANCHOR id="tp-cli-channel-type-contact-search-call-search" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-search">
1876 <ANCHOR id="tp-cli-channel-type-contact-search-call-stop" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-stop">
1877 <ANCHOR id="tp-cli-channel-type-contact-search-callback-for-more" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more">
1878 <ANCHOR id="tp-cli-channel-type-contact-search-callback-for-search" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search">
1879 <ANCHOR id="tp-cli-channel-type-contact-search-callback-for-stop" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop">
1880 <ANCHOR id="tp-cli-channel-type-contact-search-connect-to-search-result-received" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-result-received">
1881 <ANCHOR id="tp-cli-channel-type-contact-search-connect-to-search-state-changed" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-state-changed">
1882 <ANCHOR id="tp-cli-channel-type-contact-search-run-more" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-more">
1883 <ANCHOR id="tp-cli-channel-type-contact-search-run-search" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-search">
1884 <ANCHOR id="tp-cli-channel-type-contact-search-run-stop" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-stop">
1885 <ANCHOR id="tp-cli-channel-type-contact-search-signal-callback-search-result-received" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received">
1886 <ANCHOR id="tp-cli-channel-type-contact-search-signal-callback-search-state-changed" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed">
1887 <ANCHOR id="telepathy-glib-channel-contactsearch.see-also" href="telepathy-glib/telepathy-glib-channel-contactsearch.html#telepathy-glib-channel-contactsearch.see-also">
18101888 <ANCHOR id="telepathy-glib-cli-anonymity" href="telepathy-glib/telepathy-glib-cli-anonymity.html">
18111889 <ANCHOR id="telepathy-glib-cli-anonymity.synopsis" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.synopsis">
18121890 <ANCHOR id="telepathy-glib-cli-anonymity.description" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.description">
22802358 <ANCHOR id="telepathy-glib-svc-channel-contactlist.details" href="telepathy-glib/telepathy-glib-svc-channel-contactlist.html#telepathy-glib-svc-channel-contactlist.details">
22812359 <ANCHOR id="TpSvcChannelTypeContactList-struct" href="telepathy-glib/telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactList-struct">
22822360 <ANCHOR id="TpSvcChannelTypeContactListClass" href="telepathy-glib/telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactListClass">
2361 <ANCHOR id="telepathy-glib-svc-channel-contactsearch" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html">
2362 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.synopsis" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.synopsis">
2363 <ANCHOR id="TpSvcChannelTypeContactSearch" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch">
2364 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.object-hierarchy" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.object-hierarchy">
2365 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.signals" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.signals">
2366 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.description" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.description">
2367 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.details" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.details">
2368 <ANCHOR id="TpSvcChannelTypeContactSearch-struct" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-struct">
2369 <ANCHOR id="TpSvcChannelTypeContactSearchClass" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass">
2370 <ANCHOR id="tp-svc-channel-type-contact-search-emit-search-result-received" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-result-received">
2371 <ANCHOR id="tp-svc-channel-type-contact-search-emit-search-state-changed" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-state-changed">
2372 <ANCHOR id="tp-svc-channel-type-contact-search-implement-more" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-more">
2373 <ANCHOR id="tp-svc-channel-type-contact-search-implement-search" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-search">
2374 <ANCHOR id="tp-svc-channel-type-contact-search-implement-stop" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-stop">
2375 <ANCHOR id="tp-svc-channel-type-contact-search-more-impl" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl">
2376 <ANCHOR id="tp-svc-channel-type-contact-search-return-from-more" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-more">
2377 <ANCHOR id="tp-svc-channel-type-contact-search-return-from-search" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-search">
2378 <ANCHOR id="tp-svc-channel-type-contact-search-return-from-stop" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-stop">
2379 <ANCHOR id="tp-svc-channel-type-contact-search-search-impl" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl">
2380 <ANCHOR id="tp-svc-channel-type-contact-search-stop-impl" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl">
2381 <ANCHOR id="telepathy-glib-svc-channel-contactsearch.signal-details" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#telepathy-glib-svc-channel-contactsearch.signal-details">
2382 <ANCHOR id="TpSvcChannelTypeContactSearch-search-result-received" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-result-received">
2383 <ANCHOR id="TpSvcChannelTypeContactSearch-search-state-changed" href="telepathy-glib/telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-state-changed">
22832384 <ANCHOR id="telepathy-glib-svc-channel-text" href="telepathy-glib/telepathy-glib-svc-channel-text.html">
22842385 <ANCHOR id="telepathy-glib-svc-channel-text.synopsis" href="telepathy-glib/telepathy-glib-svc-channel-text.html#telepathy-glib-svc-channel-text.synopsis">
22852386 <ANCHOR id="TpSvcChannelTypeText" href="telepathy-glib/telepathy-glib-svc-channel-text.html#TpSvcChannelTypeText">
29303031 <ANCHOR id="telepathy-glib-svc-connection-manager.signal-details" href="telepathy-glib/telepathy-glib-svc-connection-manager.html#telepathy-glib-svc-connection-manager.signal-details">
29313032 <ANCHOR id="TpSvcConnectionManager-new-connection" href="telepathy-glib/telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager-new-connection">
29323033 <ANCHOR id="telepathy-glib-svc-connection-manager.see-also" href="telepathy-glib/telepathy-glib-svc-connection-manager.html#telepathy-glib-svc-connection-manager.see-also">
3034 <ANCHOR id="telepathy-glib-svc-protocol" href="telepathy-glib/telepathy-glib-svc-protocol.html">
3035 <ANCHOR id="telepathy-glib-svc-protocol.synopsis" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.synopsis">
3036 <ANCHOR id="TpSvcProtocol" href="telepathy-glib/telepathy-glib-svc-protocol.html#TpSvcProtocol">
3037 <ANCHOR id="telepathy-glib-svc-protocol.object-hierarchy" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.object-hierarchy">
3038 <ANCHOR id="telepathy-glib-svc-protocol.implementations" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.implementations">
3039 <ANCHOR id="telepathy-glib-svc-protocol.description" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.description">
3040 <ANCHOR id="telepathy-glib-svc-protocol.details" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.details">
3041 <ANCHOR id="TpSvcProtocol-struct" href="telepathy-glib/telepathy-glib-svc-protocol.html#TpSvcProtocol-struct">
3042 <ANCHOR id="TpSvcProtocolClass" href="telepathy-glib/telepathy-glib-svc-protocol.html#TpSvcProtocolClass">
3043 <ANCHOR id="tp-svc-protocol-identify-account-impl" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl">
3044 <ANCHOR id="tp-svc-protocol-implement-identify-account" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-identify-account">
3045 <ANCHOR id="tp-svc-protocol-implement-normalize-contact" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-normalize-contact">
3046 <ANCHOR id="tp-svc-protocol-normalize-contact-impl" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl">
3047 <ANCHOR id="tp-svc-protocol-return-from-identify-account" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-identify-account">
3048 <ANCHOR id="tp-svc-protocol-return-from-normalize-contact" href="telepathy-glib/telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-normalize-contact">
3049 <ANCHOR id="telepathy-glib-svc-protocol.see-also" href="telepathy-glib/telepathy-glib-svc-protocol.html#telepathy-glib-svc-protocol.see-also">
29333050 <ANCHOR id="telepathy-glib-svc-account-manager" href="telepathy-glib/telepathy-glib-svc-account-manager.html">
29343051 <ANCHOR id="telepathy-glib-svc-account-manager.synopsis" href="telepathy-glib/telepathy-glib-svc-account-manager.html#telepathy-glib-svc-account-manager.synopsis">
29353052 <ANCHOR id="TpSvcAccountManager" href="telepathy-glib/telepathy-glib-svc-account-manager.html#TpSvcAccountManager">
31053222 <ANCHOR id="TpBaseConnectionManagerNewConnFunc" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManagerNewConnFunc">
31063223 <ANCHOR id="tp-base-connection-manager-get-dbus-daemon" href="telepathy-glib/TpBaseConnectionManager.html#tp-base-connection-manager-get-dbus-daemon">
31073224 <ANCHOR id="tp-base-connection-manager-register" href="telepathy-glib/TpBaseConnectionManager.html#tp-base-connection-manager-register">
3225 <ANCHOR id="tp-base-connection-manager-add-protocol" href="telepathy-glib/TpBaseConnectionManager.html#tp-base-connection-manager-add-protocol">
31083226 <ANCHOR id="TpBaseConnectionManager.property-details" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager.property-details">
31093227 <ANCHOR id="TpBaseConnectionManager--dbus-daemon" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon">
3228 <ANCHOR id="TpBaseConnectionManager--interfaces" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager--interfaces">
3229 <ANCHOR id="TpBaseConnectionManager--protocols" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager--protocols">
31103230 <ANCHOR id="TpBaseConnectionManager.signal-details" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager.signal-details">
31113231 <ANCHOR id="TpBaseConnectionManager-no-more-connections" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager-no-more-connections">
31123232 <ANCHOR id="TpBaseConnectionManager.see-also" href="telepathy-glib/TpBaseConnectionManager.html#TpBaseConnectionManager.see-also">
3233 <ANCHOR id="telepathy-glib-base-protocol" href="telepathy-glib/telepathy-glib-base-protocol.html">
3234 <ANCHOR id="telepathy-glib-base-protocol.synopsis" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.synopsis">
3235 <ANCHOR id="TpBaseProtocol" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocol">
3236 <ANCHOR id="telepathy-glib-base-protocol.object-hierarchy" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.object-hierarchy">
3237 <ANCHOR id="telepathy-glib-base-protocol.implemented-interfaces" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.implemented-interfaces">
3238 <ANCHOR id="telepathy-glib-base-protocol.properties" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.properties">
3239 <ANCHOR id="telepathy-glib-base-protocol.description" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.description">
3240 <ANCHOR id="telepathy-glib-base-protocol.details" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.details">
3241 <ANCHOR id="TpBaseProtocol-struct" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocol-struct">
3242 <ANCHOR id="tp-base-protocol-get-name" href="telepathy-glib/telepathy-glib-base-protocol.html#tp-base-protocol-get-name">
3243 <ANCHOR id="tp-base-protocol-get-immutable-properties" href="telepathy-glib/telepathy-glib-base-protocol.html#tp-base-protocol-get-immutable-properties">
3244 <ANCHOR id="tp-base-protocol-get-parameters" href="telepathy-glib/telepathy-glib-base-protocol.html#tp-base-protocol-get-parameters">
3245 <ANCHOR id="tp-base-protocol-new-connection" href="telepathy-glib/telepathy-glib-base-protocol.html#tp-base-protocol-new-connection">
3246 <ANCHOR id="TpBaseProtocolClass" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolClass">
3247 <ANCHOR id="TpBaseProtocolGetParametersFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolGetParametersFunc">
3248 <ANCHOR id="TpBaseProtocolNewConnectionFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolNewConnectionFunc">
3249 <ANCHOR id="TpBaseProtocolNormalizeContactFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolNormalizeContactFunc">
3250 <ANCHOR id="TpBaseProtocolIdentifyAccountFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolIdentifyAccountFunc">
3251 <ANCHOR id="TpBaseProtocolGetInterfacesFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolGetInterfacesFunc">
3252 <ANCHOR id="TpBaseProtocolGetConnectionDetailsFunc" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocolGetConnectionDetailsFunc">
3253 <ANCHOR id="telepathy-glib-base-protocol.property-details" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.property-details">
3254 <ANCHOR id="TpBaseProtocol--immutable-properties" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocol--immutable-properties">
3255 <ANCHOR id="TpBaseProtocol--name" href="telepathy-glib/telepathy-glib-base-protocol.html#TpBaseProtocol--name">
3256 <ANCHOR id="telepathy-glib-base-protocol.see-also" href="telepathy-glib/telepathy-glib-base-protocol.html#telepathy-glib-base-protocol.see-also">
31133257 <ANCHOR id="TpBaseConnection" href="telepathy-glib/TpBaseConnection.html">
31143258 <ANCHOR id="TpBaseConnection.synopsis" href="telepathy-glib/TpBaseConnection.html#TpBaseConnection.synopsis">
31153259 <ANCHOR id="TpBaseConnection.object-hierarchy" href="telepathy-glib/TpBaseConnection.html#TpBaseConnection.object-hierarchy">
31903334 <ANCHOR id="TpChannelManager.details" href="telepathy-glib/TpChannelManager.html#TpChannelManager.details">
31913335 <ANCHOR id="TpChannelManagerChannelClassFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerChannelClassFunc">
31923336 <ANCHOR id="TpChannelManagerForeachChannelClassFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerForeachChannelClassFunc">
3337 <ANCHOR id="TpChannelManagerTypeChannelClassFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerTypeChannelClassFunc">
3338 <ANCHOR id="TpChannelManagerTypeForeachChannelClassFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerTypeForeachChannelClassFunc">
31933339 <ANCHOR id="TpChannelManagerForeachChannelFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerForeachChannelFunc">
31943340 <ANCHOR id="TpChannelManagerRequestFunc" href="telepathy-glib/TpChannelManager.html#TpChannelManagerRequestFunc">
31953341 <ANCHOR id="TpChannelManager-struct" href="telepathy-glib/TpChannelManager.html#TpChannelManager-struct">
32063352 <ANCHOR id="tp-channel-manager-ensure-channel" href="telepathy-glib/TpChannelManager.html#tp-channel-manager-ensure-channel">
32073353 <ANCHOR id="tp-channel-manager-foreach-channel" href="telepathy-glib/TpChannelManager.html#tp-channel-manager-foreach-channel">
32083354 <ANCHOR id="tp-channel-manager-foreach-channel-class" href="telepathy-glib/TpChannelManager.html#tp-channel-manager-foreach-channel-class">
3355 <ANCHOR id="tp-channel-manager-type-foreach-channel-class" href="telepathy-glib/TpChannelManager.html#tp-channel-manager-type-foreach-channel-class">
32093356 <ANCHOR id="tp-channel-manager-request-channel" href="telepathy-glib/TpChannelManager.html#tp-channel-manager-request-channel">
32103357 <ANCHOR id="TpChannelManager.signal-details" href="telepathy-glib/TpChannelManager.html#TpChannelManager.signal-details">
32113358 <ANCHOR id="TpChannelManager-channel-closed" href="telepathy-glib/TpChannelManager.html#TpChannelManager-channel-closed">
32493396 <ANCHOR id="tp-dbus-properties-mixin-implement-interface" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-implement-interface">
32503397 <ANCHOR id="tp-dbus-properties-mixin-iface-init" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-iface-init">
32513398 <ANCHOR id="tp-dbus-properties-mixin-get" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-get">
3399 <ANCHOR id="tp-dbus-properties-mixin-fill-properties-hash" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-fill-properties-hash">
32523400 <ANCHOR id="tp-dbus-properties-mixin-make-properties-hash" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-make-properties-hash">
32533401 <ANCHOR id="telepathy-glib-dbus-properties-mixin.see-also" href="telepathy-glib/telepathy-glib-dbus-properties-mixin.html#telepathy-glib-dbus-properties-mixin.see-also">
32543402 <ANCHOR id="TpExportableChannel" href="telepathy-glib/TpExportableChannel.html">
34663614 <ANCHOR id="tp-base-client-unregister" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-unregister">
34673615 <ANCHOR id="tp-base-client-get-bus-name" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-bus-name">
34683616 <ANCHOR id="tp-base-client-get-object-path" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-object-path">
3617 <ANCHOR id="tp-base-client-get-dbus-daemon" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-dbus-daemon">
3618 <ANCHOR id="tp-base-client-get-name" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-name">
3619 <ANCHOR id="tp-base-client-get-uniquify-name" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-uniquify-name">
34693620 <ANCHOR id="telepathy-glib-base-client.property-details" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.property-details">
34703621 <ANCHOR id="TpBaseClient--dbus-daemon" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient--dbus-daemon">
34713622 <ANCHOR id="TpBaseClient--name" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient--name">
38053956 <ANCHOR id="tp-heap-peek-first" href="telepathy-glib/telepathy-glib-TpHeap.html#tp-heap-peek-first">
38063957 <ANCHOR id="tp-heap-extract-first" href="telepathy-glib/telepathy-glib-TpHeap.html#tp-heap-extract-first">
38073958 <ANCHOR id="tp-heap-size" href="telepathy-glib/telepathy-glib-TpHeap.html#tp-heap-size">
3959 <ANCHOR id="annotation-glossterm-array" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-array">
38083960 <ANCHOR id="annotation-glossterm-out" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-out">
3809 <ANCHOR id="annotation-glossterm-array" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-array">
38103961 <ANCHOR id="annotation-glossterm-allow-none" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-allow-none">
38113962 <ANCHOR id="annotation-glossterm-element-type" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-element-type">
38123963 <ANCHOR id="annotation-glossterm-transfer container" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-transfer container">
38133964 <ANCHOR id="annotation-glossterm-transfer full" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-transfer full">
3965 <ANCHOR id="annotation-glossterm-scope call" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-scope call">
38143966 <ANCHOR id="annotation-glossterm-transfer none" href="telepathy-glib/annotation-glossary.html#annotation-glossterm-transfer none">
23102310 </tr>
23112311 <tr>
23122312 <td><p><span class="term"><em class="parameter"><code>out_Reconnect_Required</code></em> :</span></p></td>
2313 <td>Used to return an 'out' argument if <em class="parameter"><code>error</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>: A list of the names of parameters with changes that will not take effect until the account is reconnected (this may be empty, e.g. if all the parameters are D-Bus properties or parameters for which the account manager has specific support). User interfaces that require &amp;quot;instant apply&amp;quot; semantics MAY call &lt;tp:member-ref&gt;Reconnect&lt;/tp:member-ref&gt; in response to receiving a non-empty list.
2313 <td>Used to return an 'out' argument if <em class="parameter"><code>error</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>: &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;If all of the parameters had the &lt;code&gt;DBus_Property&lt;/code&gt; flag, the empty list, signifying that no reconnection is required for the new parameters to take effect. For example, if the only parameter updated is &lt;tt&gt;...Cellular.&lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.Cellular"&gt;MessageValidityPeriod&lt;/tp:dbus-ref&gt;&lt;/tt&gt;, the new value can be applied immediately to the connection.&lt;/p&gt; &lt;p&gt;Otherwise, a list of the names of parameters with changes that will not take effect until the account is reconnected. User interfaces that require &amp;quot;instant apply&amp;quot; semantics MAY call &lt;tp:member-ref&gt;Reconnect&lt;/tp:member-ref&gt; in response to receiving a non-empty list. For example, if the caller updates both &lt;tt&gt;...Anonymity.&lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.Anonymity"&gt;AnonymityMandatory&lt;/tp:dbus-ref&gt;&lt;/tt&gt; and &lt;tt&gt;require-encryption&lt;/tt&gt;, the former can be applied to the current connection, but the latter needs a reconnect to take effect, so this method should return &lt;code&gt;[&amp;quot;require-encryption&amp;quot;]&lt;/code&gt;.&lt;/p&gt;
23142314 </td>
23152315 </tr>
23162316 <tr>
23482348 Start a UpdateParameters method call.
23492349 </p>
23502350 <p>
2351 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Change the value of the &lt;tp:member-ref&gt;Parameters&lt;/tp:member-ref&gt; property.&lt;/p&gt; &lt;p&gt;If any of the changed parameters' &lt;tp:type&gt;Conn_Mgr_Param_Flags&lt;/tp:type&gt; include &lt;code&gt;DBus_Property&lt;/code&gt;, the change will be applied to the corresponding D-Bus Property on the active &lt;tp:member-ref&gt;Connection&lt;/tp:member-ref&gt;, if there is one. Changes to other parameters will not take effect until the next time the account is disconnected and reconnected.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;In general, reconnecting is a destructive operation that shouldn't happen as a side-effect. In particular, migration tools that twiddle the settings of all accounts shouldn't cause an automatic disconnect and reconnect.&lt;/p&gt; &lt;/tp:rationale&gt;
2351 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Change the value of the &lt;tp:member-ref&gt;Parameters&lt;/tp:member-ref&gt; property.&lt;/p&gt; &lt;p&gt;If any of the changed parameters' &lt;tp:type&gt;Conn_Mgr_Param_Flags&lt;/tp:type&gt; include &lt;code&gt;DBus_Property&lt;/code&gt;, the change will be applied immediately to the corresponding D-Bus Property on the active &lt;tp:member-ref&gt;Connection&lt;/tp:member-ref&gt;, if there is one. Changes to other parameters will not take effect until the next time the account is disconnected and reconnected.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;In general, reconnecting is a destructive operation that shouldn't happen as a side-effect. In particular, migration tools that twiddle the settings of all accounts shouldn't cause an automatic disconnect and reconnect.&lt;/p&gt; &lt;/tp:rationale&gt;
23522352 </p>
23532353 <div class="variablelist"><table border="0">
23542354 <col align="left" valign="top">
234234 <p>
235235 </p>
236236 <div class="example">
237 <a name="id430872"></a><p class="title"><b>Example 1. Using <a class="link" href="telepathy-glib-asv.html#tp-asv-new" title="tp_asv_new ()"><code class="function">tp_asv_new()</code></a></b></p>
237 <a name="id659456"></a><p class="title"><b>Example 1. Using <a class="link" href="telepathy-glib-asv.html#tp-asv-new" title="tp_asv_new ()"><code class="function">tp_asv_new()</code></a></b></p>
238238 <div class="example-contents">
239239 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
240240 <tbody>
117117 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-unregister" title="tp_base_client_unregister ()">tp_base_client_unregister</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
118118 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-bus-name" title="tp_base_client_get_bus_name ()">tp_base_client_get_bus_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
119119 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-object-path" title="tp_base_client_get_object_path ()">tp_base_client_get_object_path</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
120 <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="returnvalue">TpDBusDaemon</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-dbus-daemon" title="tp_base_client_get_dbus_daemon ()">tp_base_client_get_dbus_daemon</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
121 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-name" title="tp_base_client_get_name ()">tp_base_client_get_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
122 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-uniquify-name" title="tp_base_client_get_uniquify_name ()">tp_base_client_get_uniquify_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
120123 </pre>
121124 </div>
122125 <div class="refsect1" title="Object Hierarchy">
11331136 </table></div>
11341137 <p class="since">Since 0.11.5</p>
11351138 </div>
1139 <hr>
1140 <div class="refsect2" title="tp_base_client_get_dbus_daemon ()">
1141 <a name="tp-base-client-get-dbus-daemon"></a><h3>tp_base_client_get_dbus_daemon ()</h3>
1142 <pre class="programlisting"><a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="returnvalue">TpDBusDaemon</span></a> * tp_base_client_get_dbus_daemon (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
1143 <p>
1144 Return the <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon" title='The "dbus-daemon" property'><span class="type">"dbus-daemon"</span></a> construct-only property, which
1145 represents the D-Bus connection used to export this client object.
1146 </p>
1147 <p>
1148 The returned object's reference count is not incremented, so it is not
1149 necessarily valid after <em class="parameter"><code>self</code></em> is destroyed.
1150 </p>
1151 <div class="variablelist"><table border="0">
1152 <col align="left" valign="top">
1153 <tbody>
1154 <tr>
1155 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1156 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1157 </td>
1158 </tr>
1159 <tr>
1160 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1161 <td> the value of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon" title='The "dbus-daemon" property'><span class="type">"dbus-daemon"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1162 </td>
1163 </tr>
1164 </tbody>
1165 </table></div>
1166 <p class="since">Since 0.11.UNRELEASED</p>
1167 </div>
1168 <hr>
1169 <div class="refsect2" title="tp_base_client_get_name ()">
1170 <a name="tp-base-client-get-name"></a><h3>tp_base_client_get_name ()</h3>
1171 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_base_client_get_name (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
1172 <p>
1173 Return the <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--name" title='The "name" property'><span class="type">"name"</span></a> construct-only property, which is used as
1174 part of the bus name and object path.
1175 </p>
1176 <div class="variablelist"><table border="0">
1177 <col align="left" valign="top">
1178 <tbody>
1179 <tr>
1180 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1181 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1182 </td>
1183 </tr>
1184 <tr>
1185 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1186 <td> the value of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--name" title='The "name" property'><span class="type">"name"</span></a>
1187 </td>
1188 </tr>
1189 </tbody>
1190 </table></div>
1191 <p class="since">Since 0.11.UNRELEASED</p>
1192 </div>
1193 <hr>
1194 <div class="refsect2" title="tp_base_client_get_uniquify_name ()">
1195 <a name="tp-base-client-get-uniquify-name"></a><h3>tp_base_client_get_uniquify_name ()</h3>
1196 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_base_client_get_uniquify_name (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
1197 <p>
1198 Return the <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--uniquify-name" title='The "uniquify-name" property'><span class="type">"uniquify-name"</span></a> construct-only property; if this
1199 is true, the bus name and object path will be made unique by appending
1200 a suffix that includes the D-Bus unique name and a per-process counter.
1201 </p>
1202 <div class="variablelist"><table border="0">
1203 <col align="left" valign="top">
1204 <tbody>
1205 <tr>
1206 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1207 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1208 </td>
1209 </tr>
1210 <tr>
1211 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1212 <td> the value of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--uniquify-name" title='The "uniquify-name" property'><span class="type">"uniquify-name"</span></a>
1213 </td>
1214 </tr>
1215 </tbody>
1216 </table></div>
1217 <p class="since">Since 0.11.UNRELEASED</p>
1218 </div>
11361219 </div>
11371220 <div class="refsect1" title="Property Details">
11381221 <a name="telepathy-glib-base-client.property-details"></a><h2>Property Details</h2>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>TpBaseProtocol</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
8 <link rel="prev" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager">
9 <link rel="next" href="TpBaseConnection.html" title="TpBaseConnection">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="TpBaseConnectionManager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-service-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="TpBaseConnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-base-protocol.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-base-protocol.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-base-protocol.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-base-protocol.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
30  | 
31 <a href="#telepathy-glib-base-protocol.properties" class="shortcut">Properties</a>
32 </td></tr>
33 </table>
34 <div class="refentry" title="TpBaseProtocol">
35 <a name="telepathy-glib-base-protocol"></a><div class="titlepage"></div>
36 <div class="refnamediv"><table width="100%"><tr>
37 <td valign="top">
38 <h2><span class="refentrytitle"><a name="telepathy-glib-base-protocol.top_of_page"></a>TpBaseProtocol</span></h2>
39 <p>TpBaseProtocol — base class for <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> implementations</p>
40 </td>
41 <td valign="top" align="right"></td>
42 </tr></table></div>
43 <div class="refsynopsisdiv" title="Synopsis">
44 <a name="telepathy-glib-base-protocol.synopsis"></a><h2>Synopsis</h2>
45 <a name="TpBaseProtocol"></a><pre class="synopsis">
46 #include &lt;telepathy-glib/base-protocol.h&gt;
47
48 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol-struct" title="TpBaseProtocol">TpBaseProtocol</a>;
49 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-get-name" title="tp_base_protocol_get_name ()">tp_base_protocol_get_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);
50 <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-get-immutable-properties" title="tp_base_protocol_get_immutable_properties ()">tp_base_protocol_get_immutable_properties</a>
51 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);
52 const <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec" title="TpCMParamSpec"><span class="returnvalue">TpCMParamSpec</span></a> * <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-get-parameters" title="tp_base_protocol_get_parameters ()">tp_base_protocol_get_parameters</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);
53 <a class="link" href="TpBaseConnection.html" title="TpBaseConnection"><span class="returnvalue">TpBaseConnection</span></a> * <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-new-connection" title="tp_base_protocol_new_connection ()">tp_base_protocol_new_connection</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
54 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
55 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
56
57 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass" title="TpBaseProtocolClass">TpBaseProtocolClass</a>;
58 const <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec" title="TpCMParamSpec"><span class="returnvalue">TpCMParamSpec</span></a> * (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolGetParametersFunc" title="TpBaseProtocolGetParametersFunc ()">*TpBaseProtocolGetParametersFunc</a>)
59 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);
60 <a class="link" href="TpBaseConnection.html" title="TpBaseConnection"><span class="returnvalue">TpBaseConnection</span></a> * (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolNewConnectionFunc" title="TpBaseProtocolNewConnectionFunc ()">*TpBaseProtocolNewConnectionFunc</a>) (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
61 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
62 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
63 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolNormalizeContactFunc" title="TpBaseProtocolNormalizeContactFunc ()">*TpBaseProtocolNormalizeContactFunc</a>)
64 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
65 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *contact</code></em>,
66 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
67 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolIdentifyAccountFunc" title="TpBaseProtocolIdentifyAccountFunc ()">*TpBaseProtocolIdentifyAccountFunc</a>)
68 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
69 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
70 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
71 <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="returnvalue">GStrv</span></a> (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolGetInterfacesFunc" title="TpBaseProtocolGetInterfacesFunc ()">*TpBaseProtocolGetInterfacesFunc</a>) (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);
72 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolGetConnectionDetailsFunc" title="TpBaseProtocolGetConnectionDetailsFunc ()">*TpBaseProtocolGetConnectionDetailsFunc</a>)
73 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
74 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> *connection_interfaces</code></em>,
75 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> **channel_manager_types</code></em>,
76 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **icon_name</code></em>,
77 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **english_name</code></em>,
78 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **vcard_field</code></em>);
79 </pre>
80 </div>
81 <div class="refsect1" title="Object Hierarchy">
82 <a name="telepathy-glib-base-protocol.object-hierarchy"></a><h2>Object Hierarchy</h2>
83 <pre class="synopsis">
84 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
85 +----TpBaseProtocol
86 </pre>
87 </div>
88 <div class="refsect1" title="Implemented Interfaces">
89 <a name="telepathy-glib-base-protocol.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
90 <p>
91 TpBaseProtocol implements
92 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a> and <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol">TpSvcProtocol</a>.</p>
93 </div>
94 <div class="refsect1" title="Properties">
95 <a name="telepathy-glib-base-protocol.properties"></a><h2>Properties</h2>
96 <pre class="synopsis">
97 "<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol--immutable-properties" title='The "immutable-properties" property'>immutable-properties</a>" <span class="type">GHashTable_gchararray+GValue_*</span> : Read
98 "<a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol--name" title='The "name" property'>name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
99 </pre>
100 </div>
101 <div class="refsect1" title="Description">
102 <a name="telepathy-glib-base-protocol.description"></a><h2>Description</h2>
103 <p>
104 Base class for Telepathy Protocol objects.
105 </p>
106 </div>
107 <div class="refsect1" title="Details">
108 <a name="telepathy-glib-base-protocol.details"></a><h2>Details</h2>
109 <div class="refsect2" title="TpBaseProtocol">
110 <a name="TpBaseProtocol-struct"></a><h3>TpBaseProtocol</h3>
111 <pre class="programlisting">typedef struct _TpBaseProtocol TpBaseProtocol;</pre>
112 <p>
113 An object providing static details of the implementation of one real-time
114 communications protocol.
115 </p>
116 <p class="since">Since 0.11.UNRELEASED</p>
117 </div>
118 <hr>
119 <div class="refsect2" title="tp_base_protocol_get_name ()">
120 <a name="tp-base-protocol-get-name"></a><h3>tp_base_protocol_get_name ()</h3>
121 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_base_protocol_get_name (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);</pre>
122 <p>
123
124 </p>
125 <div class="variablelist"><table border="0">
126 <col align="left" valign="top">
127 <tbody>
128 <tr>
129 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
130 <td>a Protocol
131 </td>
132 </tr>
133 <tr>
134 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
135 <td> the value of <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol--name" title='The "name" property'><span class="type">"name"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
136 </td>
137 </tr>
138 </tbody>
139 </table></div>
140 </div>
141 <hr>
142 <div class="refsect2" title="tp_base_protocol_get_immutable_properties ()">
143 <a name="tp-base-protocol-get-immutable-properties"></a><h3>tp_base_protocol_get_immutable_properties ()</h3>
144 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * tp_base_protocol_get_immutable_properties
145 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);</pre>
146 <p>
147 Return a basic set of immutable properties for this Protocol object,
148 by using <a class="link" href="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-make-properties-hash" title="tp_dbus_properties_mixin_make_properties_hash ()"><code class="function">tp_dbus_properties_mixin_make_properties_hash()</code></a>.
149 </p>
150 <p>
151 Additional keys and values can be inserted into the returned hash table;
152 if this is done, the inserted keys and values will be freed when the
153 hash table is destroyed. The keys must be allocated with <a href="/usr/share/gtk-doc/html/glib/glib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a> or
154 equivalent, and the values must be slice-allocated (for instance with
155 <a class="link" href="telepathy-glib-util.html#tp-g-value-slice-new-string" title="tp_g_value_slice_new_string ()"><code class="function">tp_g_value_slice_new_string()</code></a> or a similar function).
156 </p>
157 <p>
158 Note that in particular, <a class="link" href="telepathy-glib-asv.html#tp-asv-set-string" title="tp_asv_set_string ()"><code class="function">tp_asv_set_string()</code></a> and similar functions should
159 not be used with this hash table.
160 </p>
161 <div class="variablelist"><table border="0">
162 <col align="left" valign="top">
163 <tbody>
164 <tr>
165 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
166 <td>a Protocol
167 </td>
168 </tr>
169 <tr>
170 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
171 <td> a hash table mapping (gchar *) fully-qualified property names to
172 GValues, which must be freed by the caller (at which point its
173 contents will also be freed).
174 </td>
175 </tr>
176 </tbody>
177 </table></div>
178 </div>
179 <hr>
180 <div class="refsect2" title="tp_base_protocol_get_parameters ()">
181 <a name="tp-base-protocol-get-parameters"></a><h3>tp_base_protocol_get_parameters ()</h3>
182 <pre class="programlisting">const <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec" title="TpCMParamSpec"><span class="returnvalue">TpCMParamSpec</span></a> * tp_base_protocol_get_parameters (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);</pre>
183 <p>
184 Returns the parameters supported by this protocol, as an array of structs
185 which must remain valid at least as long as <em class="parameter"><code>self</code></em> exists (it will typically
186 be a global static array).
187 </p>
188 <div class="variablelist"><table border="0">
189 <col align="left" valign="top">
190 <tbody>
191 <tr>
192 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
193 <td>a Protocol object
194 </td>
195 </tr>
196 <tr>
197 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
198 <td> a description of the
199 parameters supported by this protocol. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
200 </td>
201 </tr>
202 </tbody>
203 </table></div>
204 </div>
205 <hr>
206 <div class="refsect2" title="tp_base_protocol_new_connection ()">
207 <a name="tp-base-protocol-new-connection"></a><h3>tp_base_protocol_new_connection ()</h3>
208 <pre class="programlisting"><a class="link" href="TpBaseConnection.html" title="TpBaseConnection"><span class="returnvalue">TpBaseConnection</span></a> * tp_base_protocol_new_connection (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
209 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
210 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
211 <p>
212 Create a new connection using the <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.get-parameters"><span class="type">TpBaseProtocolClass.get_parameters</span></a> and
213 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.new-connection"><span class="type">TpBaseProtocolClass.new_connection</span></a> implementations provided by a subclass.
214 This is used to implement the <code class="function">RequestConnection()</code> D-Bus method.
215 </p>
216 <p>
217 If the parameters in <em class="parameter"><code>asv</code></em> do not fit the result of <em class="parameter"><code>get_parameters</code></em> (unknown
218 parameters are given, types are inappropriate, required parameters are
219 not given, or a <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec.filter"><span class="type">TpCMParamSpec.filter</span></a> fails), then this method raises an
220 error and <em class="parameter"><code>new_connection</code></em> is not called.
221 </p>
222 <p>
223 Otherwise, <em class="parameter"><code>new_connection</code></em> is called. Its <em class="parameter"><code>asv</code></em> argument is a copy of the
224 <em class="parameter"><code>asv</code></em> given to this method, with default values for missing parameters
225 filled in where available, and parameters' types converted to the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a>
226 specified by <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec.gtype"><span class="type">TpCMParamSpec.gtype</span></a>.
227 </p>
228 <div class="variablelist"><table border="0">
229 <col align="left" valign="top">
230 <tbody>
231 <tr>
232 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
233 <td>a Protocol object
234 </td>
235 </tr>
236 <tr>
237 <td><p><span class="term"><em class="parameter"><code>asv</code></em> :</span></p></td>
238 <td> the parameters
239 provided via D-Bus. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
240 </td>
241 </tr>
242 <tr>
243 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
244 <td>used to return an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned
245 </td>
246 </tr>
247 <tr>
248 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
249 <td> a new connection, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error
250 </td>
251 </tr>
252 </tbody>
253 </table></div>
254 </div>
255 <hr>
256 <div class="refsect2" title="TpBaseProtocolClass">
257 <a name="TpBaseProtocolClass"></a><h3>TpBaseProtocolClass</h3>
258 <pre class="programlisting">typedef struct {
259 GObjectClass parent_class;
260 TpDBusPropertiesMixinClass dbus_properties_class;
261
262 gboolean is_stub;
263 const TpCMParamSpec *(*get_parameters) (TpBaseProtocol *self);
264 TpBaseConnection *(*new_connection) (TpBaseProtocol *self,
265 GHashTable *asv,
266 GError **error);
267
268 gchar *(*normalize_contact) (TpBaseProtocol *self,
269 const gchar *contact,
270 GError **error);
271 gchar *(*identify_account) (TpBaseProtocol *self,
272 GHashTable *asv,
273 GError **error);
274
275 GStrv (*get_interfaces) (TpBaseProtocol *self);
276
277 void (*get_connection_details) (TpBaseProtocol *self,
278 GStrv *connection_interfaces,
279 GType **channel_manager_types,
280 gchar **icon_name,
281 gchar **english_name,
282 gchar **vcard_field);
283 } TpBaseProtocolClass;
284 </pre>
285 <p>
286 The class of a <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a>.
287 </p>
288 <div class="variablelist"><table border="0">
289 <col align="left" valign="top">
290 <tbody>
291 <tr>
292 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> <em class="structfield"><code><a name="TpBaseProtocolClass.parent-class"></a>parent_class</code></em>;</span></p></td>
293 <td>the parent class
294 </td>
295 </tr>
296 <tr>
297 <td><p><span class="term"><a class="link" href="telepathy-glib-dbus-properties-mixin.html#TpDBusPropertiesMixinClass" title="TpDBusPropertiesMixinClass"><span class="type">TpDBusPropertiesMixinClass</span></a> <em class="structfield"><code><a name="TpBaseProtocolClass.dbus-properties-class"></a>dbus_properties_class</code></em>;</span></p></td>
298 <td>a D-Bus properties mixin
299 </td>
300 </tr>
301 <tr>
302 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="TpBaseProtocolClass.is-stub"></a>is_stub</code></em>;</span></p></td>
303 <td>if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, this protocol will not be advertised on D-Bus (for
304 internal use by <a class="link" href="TpBaseConnection.html" title="TpBaseConnection"><span class="type">TpBaseConnection</span></a>)
305 </td>
306 </tr>
307 <tr>
308 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.get-parameters"></a>get_parameters</code></em> ()</span></p></td>
309 <td>a callback used to implement
310 <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-get-parameters" title="tp_base_protocol_get_parameters ()"><code class="function">tp_base_protocol_get_parameters()</code></a>, which all subclasses must provide;
311 see the documentation of that method for details
312 </td>
313 </tr>
314 <tr>
315 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.new-connection"></a>new_connection</code></em> ()</span></p></td>
316 <td>a callback used to implement
317 <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-new-connection" title="tp_base_protocol_new_connection ()"><code class="function">tp_base_protocol_new_connection()</code></a>, which all subclasses must provide;
318 see the documentation of that method for details
319 </td>
320 </tr>
321 <tr>
322 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.normalize-contact"></a>normalize_contact</code></em> ()</span></p></td>
323 <td>a callback used to implement the NormalizeContact
324 D-Bus method; it must either return a newly allocated string that is the
325 normalized version of <em class="parameter"><code>contact</code></em>, or raise an error via <em class="parameter"><code>error</code></em> and
326 return <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. If not implemented, <a class="link" href="telepathy-glib-errors.html#TP-ERROR-NOT-IMPLEMENTED:CAPS"><code class="literal">TP_ERROR_NOT_IMPLEMENTED</code></a> will be raised
327 instead.
328 </td>
329 </tr>
330 <tr>
331 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.identify-account"></a>identify_account</code></em> ()</span></p></td>
332 <td>a callback used to implement the IdentifyAccount
333 D-Bus method; it takes as input a map from strings to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>s,
334 and must either return a newly allocated string that represents the
335 "identity" of the parameters in <em class="parameter"><code>asv</code></em> (usually the "account" parameter),
336 or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> with an error raised via <em class="parameter"><code>error</code></em>
337 </td>
338 </tr>
339 <tr>
340 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.get-interfaces"></a>get_interfaces</code></em> ()</span></p></td>
341 <td>a callback used to implement the Interfaces D-Bus property;
342 it must return a newly allocated <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> containing D-Bus interface names
343 </td>
344 </tr>
345 <tr>
346 <td><p><span class="term"><em class="structfield"><code><a name="TpBaseProtocolClass.get-connection-details"></a>get_connection_details</code></em> ()</span></p></td>
347 <td>a callback used to implement the Protocol D-Bus
348 properties that represent details of the connections provided by this
349 protocol
350 </td>
351 </tr>
352 </tbody>
353 </table></div>
354 <p class="since">Since 0.11.UNRELEASED</p>
355 </div>
356 <hr>
357 <div class="refsect2" title="TpBaseProtocolGetParametersFunc ()">
358 <a name="TpBaseProtocolGetParametersFunc"></a><h3>TpBaseProtocolGetParametersFunc ()</h3>
359 <pre class="programlisting">const <a class="link" href="TpBaseConnectionManager.html#TpCMParamSpec" title="TpCMParamSpec"><span class="returnvalue">TpCMParamSpec</span></a> * (*TpBaseProtocolGetParametersFunc)
360 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);</pre>
361 <p>
362 Signature of a virtual method to get the allowed parameters for connections
363 to a protocol.
364 </p>
365 <p>
366 Returns the parameters supported by this protocol, as an array of structs
367 which must remain valid at least as long as <em class="parameter"><code>self</code></em> exists (it will typically
368 be a global static array).
369 </p>
370 <div class="variablelist"><table border="0">
371 <col align="left" valign="top">
372 <tbody>
373 <tr>
374 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
375 <td>a protocol
376 </td>
377 </tr>
378 <tr>
379 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
380 <td> a description of the
381 parameters supported by this protocol. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
382 </td>
383 </tr>
384 </tbody>
385 </table></div>
386 </div>
387 <hr>
388 <div class="refsect2" title="TpBaseProtocolNewConnectionFunc ()">
389 <a name="TpBaseProtocolNewConnectionFunc"></a><h3>TpBaseProtocolNewConnectionFunc ()</h3>
390 <pre class="programlisting"><a class="link" href="TpBaseConnection.html" title="TpBaseConnection"><span class="returnvalue">TpBaseConnection</span></a> * (*TpBaseProtocolNewConnectionFunc) (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
391 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
392 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
393 <p>
394 Signature of a virtual method to create a new connection to this protocol.
395 This is used to implement the RequestConnection D-Bus method.
396 </p>
397 <p>
398 Implementations of <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.new-connection"><span class="type">TpBaseProtocolClass.new_connection</span></a> may assume that
399 the parameters in <em class="parameter"><code>asv</code></em> conform to the specifications given by
400 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.get-parameters"><span class="type">TpBaseProtocolClass.get_parameters</span></a>.
401 </p>
402 <div class="variablelist"><table border="0">
403 <col align="left" valign="top">
404 <tbody>
405 <tr>
406 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
407 <td>a protocol
408 </td>
409 </tr>
410 <tr>
411 <td><p><span class="term"><em class="parameter"><code>asv</code></em> :</span></p></td>
412 <td> the parameters
413 provided via D-Bus. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
414 </td>
415 </tr>
416 <tr>
417 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
418 <td>used to return an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned
419 </td>
420 </tr>
421 <tr>
422 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
423 <td> a new connection, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
424 </td>
425 </tr>
426 </tbody>
427 </table></div>
428 </div>
429 <hr>
430 <div class="refsect2" title="TpBaseProtocolNormalizeContactFunc ()">
431 <a name="TpBaseProtocolNormalizeContactFunc"></a><h3>TpBaseProtocolNormalizeContactFunc ()</h3>
432 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * (*TpBaseProtocolNormalizeContactFunc)
433 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
434 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *contact</code></em>,
435 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
436 <p>
437 Signature of a virtual method to perform best-effort offline normalization
438 of a contact's identifier. It must either return a newly allocated string
439 that is the normalized form of <em class="parameter"><code>contact</code></em>, or raise an error and return <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
440 </p>
441 <div class="variablelist"><table border="0">
442 <col align="left" valign="top">
443 <tbody>
444 <tr>
445 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
446 <td>a protocol
447 </td>
448 </tr>
449 <tr>
450 <td><p><span class="term"><em class="parameter"><code>contact</code></em> :</span></p></td>
451 <td>a contact's identifier
452 </td>
453 </tr>
454 <tr>
455 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
456 <td>used to return an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned
457 </td>
458 </tr>
459 <tr>
460 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
461 <td> a normalized identifier, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
462 </td>
463 </tr>
464 </tbody>
465 </table></div>
466 </div>
467 <hr>
468 <div class="refsect2" title="TpBaseProtocolIdentifyAccountFunc ()">
469 <a name="TpBaseProtocolIdentifyAccountFunc"></a><h3>TpBaseProtocolIdentifyAccountFunc ()</h3>
470 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * (*TpBaseProtocolIdentifyAccountFunc)
471 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
472 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *asv</code></em>,
473 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
474 <p>
475 Signature of a virtual method to choose a unique name for an account whose
476 connection parameters are <em class="parameter"><code>asv</code></em>. This will typically return a copy of
477 the 'account' parameter from <em class="parameter"><code>asv</code></em>, but may do something more complex (for
478 instance, on IRC it could combine the nickname and the IRC network).
479 </p>
480 <p>
481 Implementations of <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.identify-account"><span class="type">TpBaseProtocolClass.identify_account</span></a> may assume that
482 the parameters in <em class="parameter"><code>asv</code></em> conform to the specifications given by
483 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocolClass.get-parameters"><span class="type">TpBaseProtocolClass.get_parameters</span></a>.
484 </p>
485 <div class="variablelist"><table border="0">
486 <col align="left" valign="top">
487 <tbody>
488 <tr>
489 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
490 <td>a protocol
491 </td>
492 </tr>
493 <tr>
494 <td><p><span class="term"><em class="parameter"><code>asv</code></em> :</span></p></td>
495 <td>parameters that might be passed to the RequestConnection D-Bus method
496 </td>
497 </tr>
498 <tr>
499 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
500 <td>used to return an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned
501 </td>
502 </tr>
503 <tr>
504 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
505 <td> a unique name for the account, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
506 </td>
507 </tr>
508 </tbody>
509 </table></div>
510 </div>
511 <hr>
512 <div class="refsect2" title="TpBaseProtocolGetInterfacesFunc ()">
513 <a name="TpBaseProtocolGetInterfacesFunc"></a><h3>TpBaseProtocolGetInterfacesFunc ()</h3>
514 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="returnvalue">GStrv</span></a> (*TpBaseProtocolGetInterfacesFunc) (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>);</pre>
515 <p>
516 Signature of a virtual method to get the D-Bus interfaces implemented by
517 <em class="parameter"><code>self</code></em>, in addition to the Protocol interface.
518 </p>
519 <div class="variablelist"><table border="0">
520 <col align="left" valign="top">
521 <tbody>
522 <tr>
523 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
524 <td>a protocol
525 </td>
526 </tr>
527 <tr>
528 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
529 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of D-Bus interface names. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
530 </td>
531 </tr>
532 </tbody>
533 </table></div>
534 </div>
535 <hr>
536 <div class="refsect2" title="TpBaseProtocolGetConnectionDetailsFunc ()">
537 <a name="TpBaseProtocolGetConnectionDetailsFunc"></a><h3>TpBaseProtocolGetConnectionDetailsFunc ()</h3>
538 <pre class="programlisting"><span class="returnvalue">void</span> (*TpBaseProtocolGetConnectionDetailsFunc)
539 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> *self</code></em>,
540 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> *connection_interfaces</code></em>,
541 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> **channel_manager_types</code></em>,
542 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **icon_name</code></em>,
543 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **english_name</code></em>,
544 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **vcard_field</code></em>);</pre>
545 <p>
546 Signature of a virtual method to get the D-Bus interfaces implemented by
547 <em class="parameter"><code>self</code></em>, in addition to the Protocol interface.
548 </p>
549 <div class="variablelist"><table border="0">
550 <col align="left" valign="top">
551 <tbody>
552 <tr>
553 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
554 <td>a protocol
555 </td>
556 </tr>
557 <tr>
558 <td><p><span class="term"><em class="parameter"><code>connection_interfaces</code></em> :</span></p></td>
559 <td> used to return a
560 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of interfaces which might be implemented on
561 connections to this protocol. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
562 </td>
563 </tr>
564 <tr>
565 <td><p><span class="term"><em class="parameter"><code>channel_manager_types</code></em> :</span></p></td>
566 <td>
567 used to return a <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-TYPE-INVALID:CAPS"><code class="literal">G_TYPE_INVALID</code></a>-terminated array of types that implement
568 <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>, which must include all channel managers that might be
569 present on connections to this protocol; the channel managers should
570 all implement <a class="link" href="TpChannelManager.html#TpChannelManagerIface.type-foreach-channel-class"><span class="type">TpChannelManagerIface.type_foreach_channel_class</span></a>. The
571 array will be freed with <a href="/usr/share/gtk-doc/html/glib/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> by the caller. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
572 </td>
573 </tr>
574 <tr>
575 <td><p><span class="term"><em class="parameter"><code>icon_name</code></em> :</span></p></td>
576 <td> used to return the name of an icon
577 for this protocol, such as "im-icq", or an empty string. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
578 </td>
579 </tr>
580 <tr>
581 <td><p><span class="term"><em class="parameter"><code>english_name</code></em> :</span></p></td>
582 <td> used to return a human-readable
583 but non-localized name for this protocol, or an empty string. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
584 </td>
585 </tr>
586 <tr>
587 <td><p><span class="term"><em class="parameter"><code>vcard_field</code></em> :</span></p></td>
588 <td> used to return the name of the vCard
589 field typically used with this protocol, or an empty string. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
590 </td>
591 </tr>
592 </tbody>
593 </table></div>
594 </div>
595 </div>
596 <div class="refsect1" title="Property Details">
597 <a name="telepathy-glib-base-protocol.property-details"></a><h2>Property Details</h2>
598 <div class="refsect2" title='The "immutable-properties" property'>
599 <a name="TpBaseProtocol--immutable-properties"></a><h3>The <code class="literal">"immutable-properties"</code> property</h3>
600 <pre class="programlisting"> "immutable-properties" <span class="type">GHashTable_gchararray+GValue_*</span> : Read</pre>
601 <p>
602 The D-Bus properties to be announced in the ConnectionManager
603 interface's Protocols property, as a map from
604 interface.name.propertyname to GValue.
605 </p>
606 <p>
607 A protocol's immutable properties are constant for its lifetime on the
608 bus, so this property should never change. All of the D-Bus
609 properties mentioned here should also be exposed through the D-Bus
610 properties interface.
611 </p>
612 <p>
613 The <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a> base class implements this property to be correct
614 for the basic set of properties. It can be reimplemented by
615 subclasses to have more immutable properties; if so, the subclass
616 should use <a class="link" href="telepathy-glib-base-protocol.html#tp-base-protocol-get-immutable-properties" title="tp_base_protocol_get_immutable_properties ()"><code class="function">tp_base_protocol_get_immutable_properties()</code></a>,
617 then augment the result using
618 <a class="link" href="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-fill-properties-hash" title="tp_dbus_properties_mixin_fill_properties_hash ()"><code class="function">tp_dbus_properties_mixin_fill_properties_hash()</code></a>.
619 </p>
620 </div>
621 <hr>
622 <div class="refsect2" title='The "name" property'>
623 <a name="TpBaseProtocol--name"></a><h3>The <code class="literal">"name"</code> property</h3>
624 <pre class="programlisting"> "name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
625 <p>The Protocol from telepathy-spec, such as 'jabber' or 'local-xmpp'.</p>
626 <p>Default value: NULL</p>
627 </div>
628 </div>
629 <div class="refsect1" title="See Also">
630 <a name="telepathy-glib-base-protocol.see-also"></a><h2>See Also</h2>
631 <a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager"><span class="type">TpBaseConnectionManager</span></a>, <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a>
632 </div>
633 </div>
634 <div class="footer">
635 <hr>
636 Generated by GTK-Doc V1.15</div>
637 </body>
638 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Contact Search channels</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
9 <link rel="next" href="telepathy-glib-cli-anonymity.html" title="Connection and Channel Anonymity interfaces">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-channel-roomlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-cli-anonymity.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-channel-contactsearch.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-channel-contactsearch.description" class="shortcut">Description</a>
26 </td></tr>
27 </table>
28 <div class="refentry" title="Contact Search channels">
29 <a name="telepathy-glib-channel-contactsearch"></a><div class="titlepage"></div>
30 <div class="refnamediv"><table width="100%"><tr>
31 <td valign="top">
32 <h2><span class="refentrytitle"><a name="telepathy-glib-channel-contactsearch.top_of_page"></a>Contact Search channels</span></h2>
33 <p>Contact Search channels — client-side wrappers for the Contact Search channel type</p>
34 </td>
35 <td valign="top" align="right"></td>
36 </tr></table></div>
37 <div class="refsynopsisdiv" title="Synopsis">
38 <a name="telepathy-glib-channel-contactsearch.synopsis"></a><h2>Synopsis</h2>
39 <pre class="synopsis">
40 #include &lt;telepathy-glib/channel.h&gt;
41
42 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-more" title="tp_cli_channel_type_contact_search_call_more ()">tp_cli_channel_type_contact_search_call_more</a>
43 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
44 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
45 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more" title="tp_cli_channel_type_contact_search_callback_for_more ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_more</span></a> callback</code></em>,
46 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
47 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
48 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
49 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-search" title="tp_cli_channel_type_contact_search_call_search ()">tp_cli_channel_type_contact_search_call_search</a>
50 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
51 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
52 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
53 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search" title="tp_cli_channel_type_contact_search_callback_for_search ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_search</span></a> callback</code></em>,
54 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
55 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
56 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
57 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-stop" title="tp_cli_channel_type_contact_search_call_stop ()">tp_cli_channel_type_contact_search_call_stop</a>
58 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
59 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
60 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop" title="tp_cli_channel_type_contact_search_callback_for_stop ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_stop</span></a> callback</code></em>,
61 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
62 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
63 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
64 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more" title="tp_cli_channel_type_contact_search_callback_for_more ()">*tp_cli_channel_type_contact_search_callback_for_more</a>)
65 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
66 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
67 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
68 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
69 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search" title="tp_cli_channel_type_contact_search_callback_for_search ()">*tp_cli_channel_type_contact_search_callback_for_search</a>)
70 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
71 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
72 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
73 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
74 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop" title="tp_cli_channel_type_contact_search_callback_for_stop ()">*tp_cli_channel_type_contact_search_callback_for_stop</a>)
75 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
76 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
77 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
78 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
79 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-result-received" title="tp_cli_channel_type_contact_search_connect_to_search_result_received ()">tp_cli_channel_type_contact_search_connect_to_search_result_received</a>
80 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
81 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received" title="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()"><span class="type">tp_cli_channel_type_contact_search_signal_callback_search_result_received</span></a> callback</code></em>,
82 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
83 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
84 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
85 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
86 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-state-changed" title="tp_cli_channel_type_contact_search_connect_to_search_state_changed ()">tp_cli_channel_type_contact_search_connect_to_search_state_changed</a>
87 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
88 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed" title="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()"><span class="type">tp_cli_channel_type_contact_search_signal_callback_search_state_changed</span></a> callback</code></em>,
89 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
90 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
91 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
92 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
93 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-more" title="tp_cli_channel_type_contact_search_run_more ()">tp_cli_channel_type_contact_search_run_more</a>
94 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
95 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
96 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
97 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);
98 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-search" title="tp_cli_channel_type_contact_search_run_search ()">tp_cli_channel_type_contact_search_run_search</a>
99 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
100 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
101 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
102 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
103 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);
104 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-stop" title="tp_cli_channel_type_contact_search_run_stop ()">tp_cli_channel_type_contact_search_run_stop</a>
105 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
106 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
107 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
108 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);
109 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received" title="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()">*tp_cli_channel_type_contact_search_signal_callback_search_result_received</a>)
110 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
111 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Result</code></em>,
112 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
113 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
114 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed" title="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()">*tp_cli_channel_type_contact_search_signal_callback_search_state_changed</a>)
115 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
116 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_State</code></em>,
117 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg_Error</code></em>,
118 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Details</code></em>,
119 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
120 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
121 </pre>
122 </div>
123 <div class="refsect1" title="Description">
124 <a name="telepathy-glib-channel-contactsearch.description"></a><h2>Description</h2>
125 <p>
126 Some instant messaging protocols allow searching for contacts by name or
127 other details. In Telepathy, each search attempt is represented as a
128 Channel.
129 </p>
130 <p>
131 This section documents the auto-generated C wrappers for the Contact Search
132 channel type.
133 </p>
134 </div>
135 <div class="refsect1" title="Details">
136 <a name="telepathy-glib-channel-contactsearch.details"></a><h2>Details</h2>
137 <div class="refsect2" title="tp_cli_channel_type_contact_search_call_more ()">
138 <a name="tp-cli-channel-type-contact-search-call-more"></a><h3>tp_cli_channel_type_contact_search_call_more ()</h3>
139 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_channel_type_contact_search_call_more
140 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
141 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
142 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more" title="tp_cli_channel_type_contact_search_callback_for_more ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_more</span></a> callback</code></em>,
143 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
144 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
145 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
146 <p>
147 Start a More method call.
148 </p>
149 <p>
150 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; Request that a search in &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; &lt;code&gt;More_Available&lt;/code&gt; move back to state &lt;code&gt;In_Progress&lt;/code&gt; and continue listing up to &lt;tp:member-ref&gt;Limit&lt;/tp:member-ref&gt; more results.
151 </p>
152 <div class="variablelist"><table border="0">
153 <col align="left" valign="top">
154 <tbody>
155 <tr>
156 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
157 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
158 </td>
159 </tr>
160 <tr>
161 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
162 <td>the timeout in milliseconds, or -1 to use the
163 default
164 </td>
165 </tr>
166 <tr>
167 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
168 <td>called when the method call succeeds or fails;
169 may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to make a "fire and forget" call with no
170 reply tracking
171 </td>
172 </tr>
173 <tr>
174 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
175 <td>user-supplied data passed to the callback;
176 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
177 </td>
178 </tr>
179 <tr>
180 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
181 <td>called with the user_data as argument, after the
182 call has succeeded, failed or been cancelled;
183 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
184 </td>
185 </tr>
186 <tr>
187 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
188 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be
189 weakly referenced; if it is destroyed, this call
190 will automatically be cancelled. Must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
191 <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
192 </td>
193 </tr>
194 <tr>
195 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
196 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
197 progress. It is borrowed from the object, and will become
198 invalid when the callback is called, the call is
199 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
200 </td>
201 </tr>
202 </tbody>
203 </table></div>
204 </div>
205 <hr>
206 <div class="refsect2" title="tp_cli_channel_type_contact_search_call_search ()">
207 <a name="tp-cli-channel-type-contact-search-call-search"></a><h3>tp_cli_channel_type_contact_search_call_search ()</h3>
208 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_channel_type_contact_search_call_search
209 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
210 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
211 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
212 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search" title="tp_cli_channel_type_contact_search_callback_for_search ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_search</span></a> callback</code></em>,
213 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
214 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
215 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
216 <p>
217 Start a Search method call.
218 </p>
219 <p>
220 Send a request to start a search for contacts on this connection. This may only be called while the &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; is Not_Started; a valid search request will cause the &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; signal to be emitted with the state In_Progress.
221 </p>
222 <div class="variablelist"><table border="0">
223 <col align="left" valign="top">
224 <tbody>
225 <tr>
226 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
227 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
228 </td>
229 </tr>
230 <tr>
231 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
232 <td>the timeout in milliseconds, or -1 to use the
233 default
234 </td>
235 </tr>
236 <tr>
237 <td><p><span class="term"><em class="parameter"><code>in_Terms</code></em> :</span></p></td>
238 <td>Used to pass an 'in' argument: A dictionary mapping search key names to the desired values
239 </td>
240 </tr>
241 <tr>
242 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
243 <td>called when the method call succeeds or fails;
244 may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to make a "fire and forget" call with no
245 reply tracking
246 </td>
247 </tr>
248 <tr>
249 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
250 <td>user-supplied data passed to the callback;
251 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
252 </td>
253 </tr>
254 <tr>
255 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
256 <td>called with the user_data as argument, after the
257 call has succeeded, failed or been cancelled;
258 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
259 </td>
260 </tr>
261 <tr>
262 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
263 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be
264 weakly referenced; if it is destroyed, this call
265 will automatically be cancelled. Must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
266 <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
267 </td>
268 </tr>
269 <tr>
270 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
271 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
272 progress. It is borrowed from the object, and will become
273 invalid when the callback is called, the call is
274 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
275 </td>
276 </tr>
277 </tbody>
278 </table></div>
279 </div>
280 <hr>
281 <div class="refsect2" title="tp_cli_channel_type_contact_search_call_stop ()">
282 <a name="tp-cli-channel-type-contact-search-call-stop"></a><h3>tp_cli_channel_type_contact_search_call_stop ()</h3>
283 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_channel_type_contact_search_call_stop
284 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
285 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
286 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop" title="tp_cli_channel_type_contact_search_callback_for_stop ()"><span class="type">tp_cli_channel_type_contact_search_callback_for_stop</span></a> callback</code></em>,
287 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
288 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
289 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
290 <p>
291 Start a Stop method call.
292 </p>
293 <p>
294 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Stop the current search. This may not be called while the &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; is Not_Started. If called while the SearchState is In_Progress, &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; will be emitted, with the state Failed and the error &lt;code&gt;org.freedesktop.Telepathy.Errors.Cancelled&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Calling this method on a search in state Completed or Failed succeeds, but has no effect.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Specifying Stop to succeed when the search has finished means that clients who call Stop just before receiving &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; don't have to handle a useless error.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Depending on the protocol, the connection manager may not be able to prevent the server from sending further results after this method returns; if this is the case, it MUST ignore any further results.&lt;/p&gt;
295 </p>
296 <div class="variablelist"><table border="0">
297 <col align="left" valign="top">
298 <tbody>
299 <tr>
300 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
301 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
302 </td>
303 </tr>
304 <tr>
305 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
306 <td>the timeout in milliseconds, or -1 to use the
307 default
308 </td>
309 </tr>
310 <tr>
311 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
312 <td>called when the method call succeeds or fails;
313 may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to make a "fire and forget" call with no
314 reply tracking
315 </td>
316 </tr>
317 <tr>
318 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
319 <td>user-supplied data passed to the callback;
320 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
321 </td>
322 </tr>
323 <tr>
324 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
325 <td>called with the user_data as argument, after the
326 call has succeeded, failed or been cancelled;
327 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
328 </td>
329 </tr>
330 <tr>
331 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
332 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be
333 weakly referenced; if it is destroyed, this call
334 will automatically be cancelled. Must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
335 <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
336 </td>
337 </tr>
338 <tr>
339 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
340 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
341 progress. It is borrowed from the object, and will become
342 invalid when the callback is called, the call is
343 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
344 </td>
345 </tr>
346 </tbody>
347 </table></div>
348 </div>
349 <hr>
350 <div class="refsect2" title="tp_cli_channel_type_contact_search_callback_for_more ()">
351 <a name="tp-cli-channel-type-contact-search-callback-for-more"></a><h3>tp_cli_channel_type_contact_search_callback_for_more ()</h3>
352 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_type_contact_search_callback_for_more)
353 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
354 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
355 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
356 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
357 <p>
358 Signature of the callback called when a More method call
359 succeeds or fails.
360 </p>
361 <div class="variablelist"><table border="0">
362 <col align="left" valign="top">
363 <tbody>
364 <tr>
365 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
366 <td>the proxy on which the call was made
367 </td>
368 </tr>
369 <tr>
370 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
371 <td>
372 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on success, or an error on failure
373 </td>
374 </tr>
375 <tr>
376 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
377 <td>user-supplied data
378 </td>
379 </tr>
380 <tr>
381 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
382 <td>user-supplied object
383 </td>
384 </tr>
385 </tbody>
386 </table></div>
387 </div>
388 <hr>
389 <div class="refsect2" title="tp_cli_channel_type_contact_search_callback_for_search ()">
390 <a name="tp-cli-channel-type-contact-search-callback-for-search"></a><h3>tp_cli_channel_type_contact_search_callback_for_search ()</h3>
391 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_type_contact_search_callback_for_search)
392 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
393 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
394 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
395 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
396 <p>
397 Signature of the callback called when a Search method call
398 succeeds or fails.
399 </p>
400 <div class="variablelist"><table border="0">
401 <col align="left" valign="top">
402 <tbody>
403 <tr>
404 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
405 <td>the proxy on which the call was made
406 </td>
407 </tr>
408 <tr>
409 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
410 <td>
411 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on success, or an error on failure
412 </td>
413 </tr>
414 <tr>
415 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
416 <td>user-supplied data
417 </td>
418 </tr>
419 <tr>
420 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
421 <td>user-supplied object
422 </td>
423 </tr>
424 </tbody>
425 </table></div>
426 </div>
427 <hr>
428 <div class="refsect2" title="tp_cli_channel_type_contact_search_callback_for_stop ()">
429 <a name="tp-cli-channel-type-contact-search-callback-for-stop"></a><h3>tp_cli_channel_type_contact_search_callback_for_stop ()</h3>
430 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_type_contact_search_callback_for_stop)
431 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
432 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
433 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
434 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
435 <p>
436 Signature of the callback called when a Stop method call
437 succeeds or fails.
438 </p>
439 <div class="variablelist"><table border="0">
440 <col align="left" valign="top">
441 <tbody>
442 <tr>
443 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
444 <td>the proxy on which the call was made
445 </td>
446 </tr>
447 <tr>
448 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
449 <td>
450 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on success, or an error on failure
451 </td>
452 </tr>
453 <tr>
454 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
455 <td>user-supplied data
456 </td>
457 </tr>
458 <tr>
459 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
460 <td>user-supplied object
461 </td>
462 </tr>
463 </tbody>
464 </table></div>
465 </div>
466 <hr>
467 <div class="refsect2" title="tp_cli_channel_type_contact_search_connect_to_search_result_received ()">
468 <a name="tp-cli-channel-type-contact-search-connect-to-search-result-received"></a><h3>tp_cli_channel_type_contact_search_connect_to_search_result_received ()</h3>
469 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_channel_type_contact_search_connect_to_search_result_received
470 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
471 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received" title="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()"><span class="type">tp_cli_channel_type_contact_search_signal_callback_search_result_received</span></a> callback</code></em>,
472 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
473 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
474 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
475 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
476 <p>
477 Connect a handler to the signal SearchResultReceived.
478 </p>
479 <p>
480 Emitted when a some search results are received from the server. This signal can be fired arbitrarily many times so clients MUST NOT assume they'll get only one signal.
481 </p>
482 <div class="variablelist"><table border="0">
483 <col align="left" valign="top">
484 <tbody>
485 <tr>
486 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
487 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
488 </td>
489 </tr>
490 <tr>
491 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
492 <td>Callback to be called when the signal is
493 received
494 </td>
495 </tr>
496 <tr>
497 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
498 <td>User-supplied data for the callback
499 </td>
500 </tr>
501 <tr>
502 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
503 <td>Destructor for the user-supplied data, which
504 will be called when this signal is disconnected, or
505 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
506 </td>
507 </tr>
508 <tr>
509 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
510 <td>A <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be weakly referenced;
511 if it is destroyed, this callback will automatically be
512 disconnected
513 </td>
514 </tr>
515 <tr>
516 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
517 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, used to raise an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is
518 returned
519 </td>
520 </tr>
521 <tr>
522 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
523 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
524 above, which can be used to disconnect the signal; or
525 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the proxy does not have the desired interface
526 or has become invalid.
527 </td>
528 </tr>
529 </tbody>
530 </table></div>
531 </div>
532 <hr>
533 <div class="refsect2" title="tp_cli_channel_type_contact_search_connect_to_search_state_changed ()">
534 <a name="tp-cli-channel-type-contact-search-connect-to-search-state-changed"></a><h3>tp_cli_channel_type_contact_search_connect_to_search_state_changed ()</h3>
535 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_channel_type_contact_search_connect_to_search_state_changed
536 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
537 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed" title="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()"><span class="type">tp_cli_channel_type_contact_search_signal_callback_search_state_changed</span></a> callback</code></em>,
538 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
539 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
540 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
541 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
542 <p>
543 Connect a handler to the signal SearchStateChanged.
544 </p>
545 <p>
546 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Emitted when the &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; property changes. The implementation MUST NOT make transitions other than the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;Not_Started&lt;/code&gt; → &lt;code&gt;In_Progress&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;In_Progress&lt;/code&gt; → &lt;code&gt;More_Available&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;More_Available&lt;/code&gt; → &lt;code&gt;In_Progress&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;In_Progress&lt;/code&gt; → &lt;code&gt;Completed&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;In_Progress&lt;/code&gt; → &lt;code&gt;Failed&lt;/code&gt;&lt;/li&gt; &lt;/ul&gt;
547 </p>
548 <div class="variablelist"><table border="0">
549 <col align="left" valign="top">
550 <tbody>
551 <tr>
552 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
553 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
554 </td>
555 </tr>
556 <tr>
557 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
558 <td>Callback to be called when the signal is
559 received
560 </td>
561 </tr>
562 <tr>
563 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
564 <td>User-supplied data for the callback
565 </td>
566 </tr>
567 <tr>
568 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
569 <td>Destructor for the user-supplied data, which
570 will be called when this signal is disconnected, or
571 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
572 </td>
573 </tr>
574 <tr>
575 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
576 <td>A <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be weakly referenced;
577 if it is destroyed, this callback will automatically be
578 disconnected
579 </td>
580 </tr>
581 <tr>
582 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
583 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, used to raise an error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is
584 returned
585 </td>
586 </tr>
587 <tr>
588 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
589 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
590 above, which can be used to disconnect the signal; or
591 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the proxy does not have the desired interface
592 or has become invalid.
593 </td>
594 </tr>
595 </tbody>
596 </table></div>
597 </div>
598 <hr>
599 <div class="refsect2" title="tp_cli_channel_type_contact_search_run_more ()">
600 <a name="tp-cli-channel-type-contact-search-run-more"></a><h3>tp_cli_channel_type_contact_search_run_more ()</h3>
601 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_cli_channel_type_contact_search_run_more
602 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
603 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
604 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
605 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);</pre>
606 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
607 <h3 class="title">Warning</h3>
608 <p><code class="literal">tp_cli_channel_type_contact_search_run_more</code> is deprecated and should not be used in newly-written code.</p>
609 </div>
610 <p>
611 Call the method More and run the main loop
612 until it returns. Before calling this method, you must
613 add a reference to any borrowed objects you need to keep,
614 and generally ensure that everything is in a consistent
615 state.
616 </p>
617 <p>
618 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; Request that a search in &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; &lt;code&gt;More_Available&lt;/code&gt; move back to state &lt;code&gt;In_Progress&lt;/code&gt; and continue listing up to &lt;tp:member-ref&gt;Limit&lt;/tp:member-ref&gt; more results.
619 </p>
620 <div class="variablelist"><table border="0">
621 <col align="left" valign="top">
622 <tbody>
623 <tr>
624 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
625 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
626 </td>
627 </tr>
628 <tr>
629 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
630 <td>Timeout in milliseconds, or -1 for default
631 </td>
632 </tr>
633 <tr>
634 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
635 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, used to return errors if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
636 is returned
637 </td>
638 </tr>
639 <tr>
640 <td><p><span class="term"><em class="parameter"><code>loop</code></em> :</span></p></td>
641 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, set before re-entering
642 the main loop, to point to a <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a>
643 which can be used to cancel this call with
644 <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#g-main-loop-quit"><code class="function">g_main_loop_quit()</code></a>, causing a return of
645 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> with <em class="parameter"><code>error</code></em> set to <a class="link" href="telepathy-glib-proxy.html#TP-DBUS-ERROR-CANCELLED:CAPS"><code class="literal">TP_DBUS_ERROR_CANCELLED</code></a>
646 </td>
647 </tr>
648 <tr>
649 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
650 <td> TRUE on success, FALSE and sets <em class="parameter"><code>error</code></em> on error
651 </td>
652 </tr>
653 </tbody>
654 </table></div>
655 </div>
656 <hr>
657 <div class="refsect2" title="tp_cli_channel_type_contact_search_run_search ()">
658 <a name="tp-cli-channel-type-contact-search-run-search"></a><h3>tp_cli_channel_type_contact_search_run_search ()</h3>
659 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_cli_channel_type_contact_search_run_search
660 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
661 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
662 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
663 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
664 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);</pre>
665 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
666 <h3 class="title">Warning</h3>
667 <p><code class="literal">tp_cli_channel_type_contact_search_run_search</code> is deprecated and should not be used in newly-written code.</p>
668 </div>
669 <p>
670 Call the method Search and run the main loop
671 until it returns. Before calling this method, you must
672 add a reference to any borrowed objects you need to keep,
673 and generally ensure that everything is in a consistent
674 state.
675 </p>
676 <p>
677 Send a request to start a search for contacts on this connection. This may only be called while the &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; is Not_Started; a valid search request will cause the &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; signal to be emitted with the state In_Progress.
678 </p>
679 <div class="variablelist"><table border="0">
680 <col align="left" valign="top">
681 <tbody>
682 <tr>
683 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
684 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
685 </td>
686 </tr>
687 <tr>
688 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
689 <td>Timeout in milliseconds, or -1 for default
690 </td>
691 </tr>
692 <tr>
693 <td><p><span class="term"><em class="parameter"><code>in_Terms</code></em> :</span></p></td>
694 <td>Used to pass an 'in' argument: A dictionary mapping search key names to the desired values
695 </td>
696 </tr>
697 <tr>
698 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
699 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, used to return errors if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
700 is returned
701 </td>
702 </tr>
703 <tr>
704 <td><p><span class="term"><em class="parameter"><code>loop</code></em> :</span></p></td>
705 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, set before re-entering
706 the main loop, to point to a <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a>
707 which can be used to cancel this call with
708 <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#g-main-loop-quit"><code class="function">g_main_loop_quit()</code></a>, causing a return of
709 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> with <em class="parameter"><code>error</code></em> set to <a class="link" href="telepathy-glib-proxy.html#TP-DBUS-ERROR-CANCELLED:CAPS"><code class="literal">TP_DBUS_ERROR_CANCELLED</code></a>
710 </td>
711 </tr>
712 <tr>
713 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
714 <td> TRUE on success, FALSE and sets <em class="parameter"><code>error</code></em> on error
715 </td>
716 </tr>
717 </tbody>
718 </table></div>
719 </div>
720 <hr>
721 <div class="refsect2" title="tp_cli_channel_type_contact_search_run_stop ()">
722 <a name="tp-cli-channel-type-contact-search-run-stop"></a><h3>tp_cli_channel_type_contact_search_run_stop ()</h3>
723 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_cli_channel_type_contact_search_run_stop
724 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
725 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
726 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
727 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> **loop</code></em>);</pre>
728 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
729 <h3 class="title">Warning</h3>
730 <p><code class="literal">tp_cli_channel_type_contact_search_run_stop</code> is deprecated and should not be used in newly-written code.</p>
731 </div>
732 <p>
733 Call the method Stop and run the main loop
734 until it returns. Before calling this method, you must
735 add a reference to any borrowed objects you need to keep,
736 and generally ensure that everything is in a consistent
737 state.
738 </p>
739 <p>
740 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Stop the current search. This may not be called while the &lt;tp:member-ref&gt;SearchState&lt;/tp:member-ref&gt; is Not_Started. If called while the SearchState is In_Progress, &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; will be emitted, with the state Failed and the error &lt;code&gt;org.freedesktop.Telepathy.Errors.Cancelled&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Calling this method on a search in state Completed or Failed succeeds, but has no effect.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Specifying Stop to succeed when the search has finished means that clients who call Stop just before receiving &lt;tp:member-ref&gt;SearchStateChanged&lt;/tp:member-ref&gt; don't have to handle a useless error.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Depending on the protocol, the connection manager may not be able to prevent the server from sending further results after this method returns; if this is the case, it MUST ignore any further results.&lt;/p&gt;
741 </p>
742 <div class="variablelist"><table border="0">
743 <col align="left" valign="top">
744 <tbody>
745 <tr>
746 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
747 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
748 </td>
749 </tr>
750 <tr>
751 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
752 <td>Timeout in milliseconds, or -1 for default
753 </td>
754 </tr>
755 <tr>
756 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
757 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, used to return errors if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
758 is returned
759 </td>
760 </tr>
761 <tr>
762 <td><p><span class="term"><em class="parameter"><code>loop</code></em> :</span></p></td>
763 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, set before re-entering
764 the main loop, to point to a <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a>
765 which can be used to cancel this call with
766 <a href="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#g-main-loop-quit"><code class="function">g_main_loop_quit()</code></a>, causing a return of
767 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> with <em class="parameter"><code>error</code></em> set to <a class="link" href="telepathy-glib-proxy.html#TP-DBUS-ERROR-CANCELLED:CAPS"><code class="literal">TP_DBUS_ERROR_CANCELLED</code></a>
768 </td>
769 </tr>
770 <tr>
771 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
772 <td> TRUE on success, FALSE and sets <em class="parameter"><code>error</code></em> on error
773 </td>
774 </tr>
775 </tbody>
776 </table></div>
777 </div>
778 <hr>
779 <div class="refsect2" title="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()">
780 <a name="tp-cli-channel-type-contact-search-signal-callback-search-result-received"></a><h3>tp_cli_channel_type_contact_search_signal_callback_search_result_received ()</h3>
781 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_type_contact_search_signal_callback_search_result_received)
782 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
783 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Result</code></em>,
784 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
785 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
786 <p>
787 Represents the signature of a callback for the signal SearchResultReceived.
788 </p>
789 <div class="variablelist"><table border="0">
790 <col align="left" valign="top">
791 <tbody>
792 <tr>
793 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
794 <td>The proxy on which <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-result-received" title="tp_cli_channel_type_contact_search_connect_to_search_result_received ()"><code class="function">tp_cli_channel_type_contact_search_connect_to_search_result_received()</code></a>
795 was called
796 </td>
797 </tr>
798 <tr>
799 <td><p><span class="term"><em class="parameter"><code>arg_Result</code></em> :</span></p></td>
800 <td>A mapping from contact identifier to an array of fields representing information about this contact.
801 </td>
802 </tr>
803 <tr>
804 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
805 <td>User-supplied data
806 </td>
807 </tr>
808 <tr>
809 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
810 <td>User-supplied weakly referenced object
811 </td>
812 </tr>
813 </tbody>
814 </table></div>
815 </div>
816 <hr>
817 <div class="refsect2" title="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()">
818 <a name="tp-cli-channel-type-contact-search-signal-callback-search-state-changed"></a><h3>tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()</h3>
819 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_type_contact_search_signal_callback_search_state_changed)
820 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
821 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_State</code></em>,
822 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg_Error</code></em>,
823 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Details</code></em>,
824 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
825 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
826 <p>
827 Represents the signature of a callback for the signal SearchStateChanged.
828 </p>
829 <div class="variablelist"><table border="0">
830 <col align="left" valign="top">
831 <tbody>
832 <tr>
833 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
834 <td>The proxy on which <a class="link" href="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-state-changed" title="tp_cli_channel_type_contact_search_connect_to_search_state_changed ()"><code class="function">tp_cli_channel_type_contact_search_connect_to_search_state_changed()</code></a>
835 was called
836 </td>
837 </tr>
838 <tr>
839 <td><p><span class="term"><em class="parameter"><code>arg_State</code></em> :</span></p></td>
840 <td>The new search state
841 </td>
842 </tr>
843 <tr>
844 <td><p><span class="term"><em class="parameter"><code>arg_Error</code></em> :</span></p></td>
845 <td>&lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; If the new state is &lt;code&gt;Failed&lt;/code&gt;, the name of a D-Bus error describing what went wrong. Otherwise, the empty string.
846 </td>
847 </tr>
848 <tr>
849 <td><p><span class="term"><em class="parameter"><code>arg_Details</code></em> :</span></p></td>
850 <td>&lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Additional information about the state transition, which may include the following well-known keys:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;debug-message (s)&lt;/dt&gt; &lt;dd&gt;Debugging information on the change, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances&lt;/dd&gt; &lt;/dl&gt; &lt;tp:rationale&gt; &lt;p&gt;This argument allows for future extensions. For instance, if moving to state &lt;code&gt;Failed&lt;/code&gt; because the server rejected one of our search terms, we could define a key that indicates which terms were invalid.&lt;/p&gt; &lt;/tp:rationale&gt;
851 </td>
852 </tr>
853 <tr>
854 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
855 <td>User-supplied data
856 </td>
857 </tr>
858 <tr>
859 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
860 <td>User-supplied weakly referenced object
861 </td>
862 </tr>
863 </tbody>
864 </table></div>
865 </div>
866 </div>
867 <div class="refsect1" title="See Also">
868 <a name="telepathy-glib-channel-contactsearch.see-also"></a><h2>See Also</h2>
869 <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>
870 </div>
871 </div>
872 <div class="footer">
873 <hr>
874 Generated by GTK-Doc V1.15</div>
875 </body>
876 </html>
25722572 Connect a handler to the signal MembersChanged.
25732573 </p>
25742574 <p>
2575 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. There may also be a message from the server regarding this change, which may be displayed to the user if desired.&lt;/p&gt; &lt;p&gt;All channel-specific handles that are mentioned in this signal MUST be represented in the value of the &lt;tp:member-ref&gt;HandleOwners&lt;/tp:member-ref&gt; property. In practice, this will mean that &lt;tp:member-ref&gt;HandleOwnersChanged&lt;/tp:member-ref&gt; is emitted &lt;em&gt;before&lt;/em&gt; emitting a MembersChanged signal in which channel-specific handles are added, but that it is emitted &lt;em&gt;after&lt;/em&gt; emitting a MembersChanged signal in which channel-specific handles are removed.&lt;/p&gt;
2575 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. There may also be a message from the server regarding this change, which may be displayed to the user if desired.&lt;/p&gt; &lt;p&gt;All channel-specific handles that are mentioned in this signal MUST be represented in the value of the &lt;tp:member-ref&gt;HandleOwners&lt;/tp:member-ref&gt; property. In practice, this will mean that &lt;tp:member-ref&gt;HandleOwnersChanged&lt;/tp:member-ref&gt; is emitted &lt;em&gt;before&lt;/em&gt; emitting a MembersChanged signal in which channel-specific handles are added, but that it is emitted &lt;em&gt;after&lt;/em&gt; emitting a MembersChanged signal in which channel-specific handles are removed.&lt;/p&gt; &lt;p&gt;See &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel.Type"&gt;StreamedMedia&lt;/tp:dbus-ref&gt; for an overview of how group state changes are used to indicate the progress of a call.&lt;/p&gt;
25762576 </p>
25772577 <div class="variablelist"><table border="0">
25782578 <col align="left" valign="top">
26382638 Connect a handler to the signal MembersChangedDetailed.
26392639 </p>
26402640 <p>
2641 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. This signal provides a superset of the information provided by &lt;tp:member-ref&gt;MembersChanged&lt;/tp:member-ref&gt;; if the channel's &lt;tp:member-ref&gt;GroupFlags&lt;/tp:member-ref&gt; contains Members_Changed_Detailed, then clients may listen exclusively to this signal in preference to that signal.&lt;/p&gt; &lt;p&gt;All channel-specific handles that are mentioned in this signal MUST be represented in the value of the &lt;tp:member-ref&gt;HandleOwners&lt;/tp:member-ref&gt; property. In practice, this will mean that &lt;tp:member-ref&gt;HandleOwnersChanged&lt;/tp:member-ref&gt; is emitted &lt;em&gt;before&lt;/em&gt; emitting a MembersChangedDetailed signal in which channel-specific handles are added, but that it is emitted &lt;em&gt;after&lt;/em&gt; emitting a MembersChangedDetailed signal in which channel-specific handles are removed.&lt;/p&gt;
2641 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. This signal provides a superset of the information provided by &lt;tp:member-ref&gt;MembersChanged&lt;/tp:member-ref&gt;; if the channel's &lt;tp:member-ref&gt;GroupFlags&lt;/tp:member-ref&gt; contains Members_Changed_Detailed, then clients may listen exclusively to this signal in preference to that signal.&lt;/p&gt; &lt;p&gt;All channel-specific handles that are mentioned in this signal MUST be represented in the value of the &lt;tp:member-ref&gt;HandleOwners&lt;/tp:member-ref&gt; property. In practice, this will mean that &lt;tp:member-ref&gt;HandleOwnersChanged&lt;/tp:member-ref&gt; is emitted &lt;em&gt;before&lt;/em&gt; emitting a MembersChangedDetailed signal in which channel-specific handles are added, but that it is emitted &lt;em&gt;after&lt;/em&gt; emitting a MembersChangedDetailed signal in which channel-specific handles are removed.&lt;/p&gt; &lt;p&gt;See &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel.Type"&gt;StreamedMedia&lt;/tp:dbus-ref&gt; for an overview of how group state changes are used to indicate the progress of a call.&lt;/p&gt;
26422642 </p>
26432643 <div class="variablelist"><table border="0">
26442644 <col align="left" valign="top">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-tube.html" title="Tube channels">
9 <link rel="next" href="telepathy-glib-cli-anonymity.html" title="Connection and Channel Anonymity interfaces">
9 <link rel="next" href="telepathy-glib-channel-contactsearch.html" title="Contact Search channels">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-cli-anonymity.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-channel-contactsearch.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-channel-roomlist.synopsis" class="shortcut">Top</a>
25072507 <td>
25082508 a <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> mapping (gchar *) to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing details
25092509 about the change, as described in the specification of the
2510 MembersChangedDetailed signal. <span class="annotation">[type GLib.HashTable): (element-type utf8 GObject.Value]</span>
2510 MembersChangedDetailed signal. <span class="annotation">[type GLib.HashTable][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
25112511 </td>
25122512 </tr>
25132513 <tr>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
8 <link rel="prev" href="telepathy-glib-channel-contactsearch.html" title="Contact Search channels">
99 <link rel="next" href="telepathy-glib-cli-service-point.html" title="Connection and Channel ServicePoint interfaces">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-channel-roomlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-channel-contactsearch.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="ch-client.html" title="Client-side proxies">
9 <link rel="next" href="telepathy-glib-connection.html" title="TpConnection">
9 <link rel="next" href="telepathy-glib-protocol.html" title="TpProtocol">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-connection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-protocol.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-connection-manager.synopsis" class="shortcut">Top</a>
8585 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-has-protocol" title="tp_connection_manager_has_protocol ()">tp_connection_manager_has_protocol</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a> *self</code></em>,
8686 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
8787 const <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManagerProtocol" title="TpConnectionManagerProtocol"><span class="returnvalue">TpConnectionManagerProtocol</span></a> * <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol" title="tp_connection_manager_get_protocol ()">tp_connection_manager_get_protocol</a>
88 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a> *self</code></em>,
89 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
90 <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="returnvalue">TpProtocol</span></a> * <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol-object" title="tp_connection_manager_get_protocol_object ()">tp_connection_manager_get_protocol_object</a>
8891 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a> *self</code></em>,
8992 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
9093 <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManagerProtocol" title="TpConnectionManagerProtocol">TpConnectionManagerProtocol</a>;
552555 D-Bus or by reading the .manager file in which that information is cached.
553556 </p>
554557 <p>
558 Since 0.11.UNRELEASED, this feature also finds any extra interfaces that
559 this connection manager has, and adds them to <a class="link" href="telepathy-glib-proxy.html#TpProxy--interfaces" title='The "interfaces" property'><span class="type">"interfaces"</span></a> (where
560 they can be queried with <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface" title="tp_proxy_has_interface ()"><code class="function">tp_proxy_has_interface()</code></a>).
561 </p>
562 <p>
555563 (These are the same guarantees offered by the older
556564 <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-call-when-ready" title="tp_connection_manager_call_when_ready ()"><code class="function">tp_connection_manager_call_when_ready()</code></a> mechanism.)
557565 </p>
917925 manager does not support the specified protocol.
918926 </p>
919927 <p>
928 Since 0.11.UNRELEASED, you can get a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> version with more
929 functionality by calling <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol-object" title="tp_connection_manager_get_protocol_object ()"><code class="function">tp_connection_manager_get_protocol_object()</code></a>.
930 </p>
931 <p>
920932 If this function is called before the connection manager information has
921933 been obtained, the result is always <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Use
922934 <a class="link" href="telepathy-glib-connection-manager.html#tp-connection-manager-call-when-ready" title="tp_connection_manager_call_when_ready ()"><code class="function">tp_connection_manager_call_when_ready()</code></a> to wait for this.
948960 </tbody>
949961 </table></div>
950962 <p class="since">Since 0.7.26</p>
963 </div>
964 <hr>
965 <div class="refsect2" title="tp_connection_manager_get_protocol_object ()">
966 <a name="tp-connection-manager-get-protocol-object"></a><h3>tp_connection_manager_get_protocol_object ()</h3>
967 <pre class="programlisting"><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="returnvalue">TpProtocol</span></a> * tp_connection_manager_get_protocol_object
968 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a> *self</code></em>,
969 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
970 <p>
971 Returns an object representing a protocol, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this connection
972 manager does not support the specified protocol.
973 </p>
974 <p>
975 If this function is called before the connection manager information has
976 been obtained, the result is always <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Use <a class="link" href="telepathy-glib-proxy.html#tp-proxy-prepare-async" title="tp_proxy_prepare_async ()"><code class="function">tp_proxy_prepare_async()</code></a>
977 to wait for this.
978 </p>
979 <p>
980 The result should be referenced with <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a> if it will be kept.
981 </p>
982 <div class="variablelist"><table border="0">
983 <col align="left" valign="top">
984 <tbody>
985 <tr>
986 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
987 <td>a connection manager
988 </td>
989 </tr>
990 <tr>
991 <td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
992 <td>the name of a protocol as defined in the Telepathy D-Bus API,
993 e.g. "jabber" or "msn"
994 </td>
995 </tr>
996 <tr>
997 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
998 <td> an object representing the protocol, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
999 </td>
1000 </tr>
1001 </tbody>
1002 </table></div>
1003 <p class="since">Since 0.11.UNRELEASED</p>
9511004 </div>
9521005 <hr>
9531006 <div class="refsect2" title="TpConnectionManagerProtocol">
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-connection-manager.html" title="TpConnectionManager">
8 <link rel="prev" href="telepathy-glib-protocol.html" title="TpProtocol">
99 <link rel="next" href="telepathy-glib-contact.html" title="TpContact">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-connection-manager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-protocol.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
8989 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
9090 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
9191 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
92 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-fill-properties-hash" title="tp_dbus_properties_mixin_fill_properties_hash ()">tp_dbus_properties_mixin_fill_properties_hash</a>
93 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
94 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *table</code></em>,
95 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *first_interface</code></em>,
96 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *first_property</code></em>,
97 <em class="parameter"><code>...</code></em>);
9298 <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-make-properties-hash" title="tp_dbus_properties_mixin_make_properties_hash ()">tp_dbus_properties_mixin_make_properties_hash</a>
9399 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
94100 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *first_interface</code></em>,
811817 <p class="since">Since 0.7.13</p>
812818 </div>
813819 <hr>
820 <div class="refsect2" title="tp_dbus_properties_mixin_fill_properties_hash ()">
821 <a name="tp-dbus-properties-mixin-fill-properties-hash"></a><h3>tp_dbus_properties_mixin_fill_properties_hash ()</h3>
822 <pre class="programlisting"><span class="returnvalue">void</span> tp_dbus_properties_mixin_fill_properties_hash
823 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
824 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *table</code></em>,
825 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *first_interface</code></em>,
826 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *first_property</code></em>,
827 <em class="parameter"><code>...</code></em>);</pre>
828 <p>
829 Retrieves the values of several D-Bus properties from an object, and adds
830 them to a hash mapping the fully-qualified name of the property to its
831 value. This is equivalent to calling <a class="link" href="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-get" title="tp_dbus_properties_mixin_get ()"><code class="function">tp_dbus_properties_mixin_get()</code></a> for
832 each property and adding it to the table yourself, with the proviso that
833 this function will <a href="/usr/share/gtk-doc/html/glib/glib-Testing.html#g-assert"><code class="function">g_assert()</code></a> if retrieving a property fails (for instance,
834 because it does not exist).
835 </p>
836 <p>
837 Note that in particular, <em class="parameter"><code>table</code></em> does not have the same memory-allocation
838 model as the hash tables required by <a class="link" href="telepathy-glib-asv.html#tp-asv-set-string" title="tp_asv_set_string ()"><code class="function">tp_asv_set_string()</code></a> and similar
839 functions.
840 </p>
841 <div class="variablelist"><table border="0">
842 <col align="left" valign="top">
843 <tbody>
844 <tr>
845 <td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
846 <td>an object which uses the D-Bus properties mixin
847 </td>
848 </tr>
849 <tr>
850 <td><p><span class="term"><em class="parameter"><code>table</code></em> :</span></p></td>
851 <td> a hash table where the keys are
852 strings copied with <a href="/usr/share/gtk-doc/html/glib/glib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a> and the values are slice-allocated
853 <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>s. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
854 </td>
855 </tr>
856 <tr>
857 <td><p><span class="term"><em class="parameter"><code>first_interface</code></em> :</span></p></td>
858 <td>the interface of the first property to be retrieved
859 </td>
860 </tr>
861 <tr>
862 <td><p><span class="term"><em class="parameter"><code>first_property</code></em> :</span></p></td>
863 <td>the name of the first property to be retrieved
864 </td>
865 </tr>
866 <tr>
867 <td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
868 <td>more (interface name, property name) pairs, terminated by <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
869 </td>
870 </tr>
871 </tbody>
872 </table></div>
873 <p class="since">Since 0.11.UNRELEASED</p>
874 </div>
875 <hr>
814876 <div class="refsect2" title="tp_dbus_properties_mixin_make_properties_hash ()">
815877 <a name="tp-dbus-properties-mixin-make-properties-hash"></a><h3>tp_dbus_properties_mixin_make_properties_hash ()</h3>
816878 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * tp_dbus_properties_mixin_make_properties_hash
11711171 } TpChannelGroupChangeReason;
11721172 </pre>
11731173 <p>
1174 The reason for a set of handles to move to one of Members, LocalPendingMembers or RemotePendingMembers, or to be removed from the group. A client may supply a reason when attempting to remove members from a group with RemoveMembersWithReason, and reasons are supplied by the CM when emitting MembersChanged and MembersChangedDetailed. Some reason codes have different meanings depending on the Actor in a MembersChanged signal.
1175 </p>
1176 <p>
11741177 Bitfield/set of flags generated from the Telepathy specification.
11751178 </p>
11761179 <div class="variablelist"><table border="0">
12181221 </tr>
12191222 <tr>
12201223 <td><p><a name="TP-CHANNEL-GROUP-CHANGE-REASON-NO-ANSWER:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER</code></span></p></td>
1221 <td> The change is because the requested contact did not respond. If a one-to-one StreamedMedia call fails because the contact being called did not respond, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason No_Answer. Documenting existing practice. If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.NoAnswer.
1224 <td> The change is because the requested contact did not respond. If a one-to-one StreamedMedia call fails because the contact being called did not respond, or the local user did not respond to an incoming call, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason No_Answer. Documenting existing practice. If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.NoAnswer.
12221225 </td>
12231226 </tr>
12241227 <tr>
160160 #define <a class="link" href="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS" title="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST">TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST</a>
161161 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS" title="TP_STRUCT_TYPE_SERVICE_POINT_INFO">TP_STRUCT_TYPE_SERVICE_POINT_INFO</a>
162162
163 enum <a class="link" href="telepathy-glib-gtypes.html#TpChannelContactSearchState" title="enum TpChannelContactSearchState">TpChannelContactSearchState</a>;
164 #define <a class="link" href="telepathy-glib-gtypes.html#NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS" title="NUM_TP_CHANNEL_CONTACT_SEARCH_STATES">NUM_TP_CHANNEL_CONTACT_SEARCH_STATES</a>
165 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS" title="TP_HASH_TYPE_CONTACT_SEARCH_MAP">TP_HASH_TYPE_CONTACT_SEARCH_MAP</a>
166 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS" title="TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP">TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP</a>
167
163168 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS" title="TP_STRUCT_TYPE_AVATAR">TP_STRUCT_TYPE_AVATAR</a>
164169
165170 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS" title="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS">TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS</a>
534539 <pre class="programlisting">#define TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP (tp_type_dbus_hash_sa_7bsv_7d ())
535540 </pre>
536541 <p>
537 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;A map from protocol identifiers supported by a connection manager to the immutable properties of the corresponding &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Protocol.DRAFT&lt;/tp:dbus-ref&gt; objects.&lt;/p&gt;
542 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;A map from protocol identifiers supported by a connection manager to the immutable properties of the corresponding &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Protocol&lt;/tp:dbus-ref&gt; objects.&lt;/p&gt;
538543 </p>
539544 <p>
540545 This macro expands to a call to a function
27822787 </p>
27832788 </div>
27842789 <hr>
2790 <div class="refsect2" title="enum TpChannelContactSearchState">
2791 <a name="TpChannelContactSearchState"></a><h3>enum TpChannelContactSearchState</h3>
2792 <pre class="programlisting">typedef enum {
2793 TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED = 0,
2794 TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS = 1,
2795 TP_CHANNEL_CONTACT_SEARCH_STATE_MORE_AVAILABLE = 2,
2796 TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED = 3,
2797 TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED = 4,
2798 } TpChannelContactSearchState;
2799 </pre>
2800 <p>
2801 Bitfield/set of flags generated from the Telepathy specification.
2802 </p>
2803 <div class="variablelist"><table border="0">
2804 <col align="left" valign="top">
2805 <tbody>
2806 <tr>
2807 <td><p><a name="TP-CHANNEL-CONTACT-SEARCH-STATE-NOT-STARTED:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED</code></span></p></td>
2808 <td>The search has not started
2809 </td>
2810 </tr>
2811 <tr>
2812 <td><p><a name="TP-CHANNEL-CONTACT-SEARCH-STATE-IN-PROGRESS:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS</code></span></p></td>
2813 <td>The search is in progress
2814 </td>
2815 </tr>
2816 <tr>
2817 <td><p><a name="TP-CHANNEL-CONTACT-SEARCH-STATE-MORE-AVAILABLE:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_CONTACT_SEARCH_STATE_MORE_AVAILABLE</code></span></p></td>
2818 <td>The search has paused, but more results can be retrieved by calling More.
2819 </td>
2820 </tr>
2821 <tr>
2822 <td><p><a name="TP-CHANNEL-CONTACT-SEARCH-STATE-COMPLETED:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED</code></span></p></td>
2823 <td>The search has been completed
2824 </td>
2825 </tr>
2826 <tr>
2827 <td><p><a name="TP-CHANNEL-CONTACT-SEARCH-STATE-FAILED:CAPS"></a><span class="term"><code class="literal">TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED</code></span></p></td>
2828 <td>The search has failed
2829 </td>
2830 </tr>
2831 </tbody>
2832 </table></div>
2833 </div>
2834 <hr>
2835 <div class="refsect2" title="NUM_TP_CHANNEL_CONTACT_SEARCH_STATES">
2836 <a name="NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS"></a><h3>NUM_TP_CHANNEL_CONTACT_SEARCH_STATES</h3>
2837 <pre class="programlisting">#define NUM_TP_CHANNEL_CONTACT_SEARCH_STATES (4+1)
2838 </pre>
2839 <p>
2840 1 higher than the highest valid value of <a class="link" href="telepathy-glib-gtypes.html#TpChannelContactSearchState" title="enum TpChannelContactSearchState"><span class="type">TpChannelContactSearchState</span></a>.
2841 </p>
2842 </div>
2843 <hr>
2844 <div class="refsect2" title="TP_HASH_TYPE_CONTACT_SEARCH_MAP">
2845 <a name="TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS"></a><h3>TP_HASH_TYPE_CONTACT_SEARCH_MAP</h3>
2846 <pre class="programlisting">#define TP_HASH_TYPE_CONTACT_SEARCH_MAP (tp_type_dbus_hash_ss ())
2847 </pre>
2848 <p>
2849 A map from search keys to search terms.
2850 </p>
2851 <p>
2852 This macro expands to a call to a function
2853 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
2854 appropriate for representing a D-Bus
2855 dictionary of signature
2856 <code class="literal">a{ss}</code>.
2857 </p>
2858 <p>
2859 Keys (D-Bus type <code class="literal">s</code>,
2860 type <code class="literal">Contact_Search_Key</code>,
2861 named <code class="literal">Key</code>):
2862 The search key to match against
2863 </p>
2864 <p>
2865 Values (D-Bus type <code class="literal">s</code>,
2866 named <code class="literal">Term</code>):
2867 The term or terms to be searched for in the search key; depending on the protocol and the server implementation, this may be matched by exact or approximate equality, substring matching, word matching or any other matching algorithm
2868 </p>
2869 </div>
2870 <hr>
2871 <div class="refsect2" title="TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP">
2872 <a name="TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS"></a><h3>TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP</h3>
2873 <pre class="programlisting">#define TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP (tp_type_dbus_hash_sa_28sasas_29 ())
2874 </pre>
2875 <p>
2876 A map from contact identifier to search result, emitted in the &lt;tp:member-ref&gt;SearchResultReceived&lt;/tp:member-ref&gt; signal.
2877 </p>
2878 <p>
2879 This macro expands to a call to a function
2880 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
2881 appropriate for representing a D-Bus
2882 dictionary of signature
2883 <code class="literal">a{sa(sasas)}</code>.
2884 </p>
2885 <p>
2886 Keys (D-Bus type <code class="literal">s</code>,
2887 named <code class="literal">Contact_Identifier</code>):
2888 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; The identifier of a contact matching the search terms. &lt;tp:rationale&gt; This is an identifier rather than a handle in case we make handles immortal; see &lt;a href="https://bugs.freedesktop.org/show_bug.cgi?id=23155"&gt;fd.o<span class="type">23155</span>&lt;/a&gt; and &lt;a href="https://bugs.freedesktop.org/show_bug.cgi?id=13347<span class="type">c5</span>"&gt;fd.o<span class="type">13347</span> comment 5&lt;/a&gt;. &lt;/tp:rationale&gt;
2889 </p>
2890 <p>
2891 Values (D-Bus type <code class="literal">a(sasas)</code>,
2892 type <code class="literal">Contact_Info_Field[]</code>,
2893 named <code class="literal">Info</code>):
2894 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;An array of fields representing information about this contact, in the same format used in the &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface"&gt;ContactInfo&lt;/tp:dbus-ref&gt; interface. It is possible that a separate call to &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.ContactInfo"&gt;RequestContactInfo&lt;/tp:dbus-ref&gt; would return more information than this signal provides.&lt;/p&gt;
2895 </p>
2896 </div>
2897 <hr>
27852898 <div class="refsect2" title="TP_STRUCT_TYPE_AVATAR">
27862899 <a name="TP-STRUCT-TYPE-AVATAR:CAPS"></a><h3>TP_STRUCT_TYPE_AVATAR</h3>
27872900 <pre class="programlisting">#define TP_STRUCT_TYPE_AVATAR (tp_type_dbus_struct_ays ())
920920 </tr>
921921 <tr>
922922 <td><p><span class="term"><em class="parameter"><code>array</code></em> :</span></p></td>
923 <td>array of handles to be referenced by this set
923 <td> array of handles to be referenced by this set. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
924924 </td>
925925 </tr>
926926 <tr>
10111011 </tr>
10121012 <tr>
10131013 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1014 <td> the underlying <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> used by this <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a>
1014 <td> the underlying <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> used by this <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
10151015 </td>
10161016 </tr>
10171017 </tbody>
11231123 </tr>
11241124 <tr>
11251125 <td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
1126 <td>A callback
1126 <td> A callback. <span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span>
11271127 </td>
11281128 </tr>
11291129 <tr>
11301130 <td><p><span class="term"><em class="parameter"><code>userdata</code></em> :</span></p></td>
1131 <td>Arbitrary data to pass to <em class="parameter"><code>func</code></em>
1131 <td> Arbitrary data to pass to <em class="parameter"><code>func</code></em>. <span class="annotation">[closure]</span>
11321132 </td>
11331133 </tr>
11341134 </tbody>
12011201 </tr>
12021202 <tr>
12031203 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1204 <td> a newly-allocated GArray of guint representing the handles
1205 in the set
1204 <td> a newly-allocated GArray of guint representing
1205 the handles in the set. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
12061206 </td>
12071207 </tr>
12081208 </tbody>
6060 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-DEBUG:CAPS" title="TP_IFACE_QUARK_DEBUG">TP_IFACE_QUARK_DEBUG</a>
6161 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-MANAGER:CAPS" title="TP_IFACE_CONNECTION_MANAGER">TP_IFACE_CONNECTION_MANAGER</a>
6262 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-MANAGER:CAPS" title="TP_IFACE_QUARK_CONNECTION_MANAGER">TP_IFACE_QUARK_CONNECTION_MANAGER</a>
63 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-PROTOCOL:CAPS" title="TP_IFACE_PROTOCOL">TP_IFACE_PROTOCOL</a>
64 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-PROTOCOL:CAPS" title="TP_IFACE_QUARK_PROTOCOL">TP_IFACE_QUARK_PROTOCOL</a>
6365 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION:CAPS" title="TP_IFACE_CONNECTION">TP_IFACE_CONNECTION</a>
6466 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS" title="TP_IFACE_QUARK_CONNECTION">TP_IFACE_QUARK_CONNECTION</a>
6567 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_ALIASING">TP_IFACE_CONNECTION_INTERFACE_ALIASING</a>
9496 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS" title="TP_IFACE_QUARK_CHANNEL">TP_IFACE_QUARK_CHANNEL</a>
9597 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS" title="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST">TP_IFACE_CHANNEL_TYPE_CONTACT_LIST</a>
9698 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-LIST:CAPS" title="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_LIST">TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_LIST</a>
99 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS" title="TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH">TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH</a>
100 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS" title="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH">TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH</a>
97101 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS" title="TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER">TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER</a>
98102 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-FILE-TRANSFER:CAPS" title="TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER">TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER</a>
99103 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-STREAMED-MEDIA:CAPS" title="TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA">TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA</a>
225229 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE:CAPS" title="TP_PROP_CHANNEL_TARGET_HANDLE">TP_PROP_CHANNEL_TARGET_HANDLE</a>
226230 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE-TYPE:CAPS" title="TP_PROP_CHANNEL_TARGET_HANDLE_TYPE">TP_PROP_CHANNEL_TARGET_HANDLE_TYPE</a>
227231 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-ID:CAPS" title="TP_PROP_CHANNEL_TARGET_ID">TP_PROP_CHANNEL_TARGET_ID</a>
232 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS">TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS</a>
233 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT">TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT</a>
234 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE">TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE</a>
235 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER">TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER</a>
228236 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS" title="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES">TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES</a>
229237 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SERVICE-NAME:CAPS" title="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME">TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME</a>
230238 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SUPPORTED-ACCESS-CONTROLS:CAPS" title="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS">TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS</a>
289297 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-NAT-TRAVERSAL:CAPS" title="TP_PROP_MEDIA_STREAM_HANDLER_NAT_TRAVERSAL">TP_PROP_MEDIA_STREAM_HANDLER_NAT_TRAVERSAL</a>
290298 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-RELAY-INFO:CAPS" title="TP_PROP_MEDIA_STREAM_HANDLER_RELAY_INFO">TP_PROP_MEDIA_STREAM_HANDLER_RELAY_INFO</a>
291299 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-STUN-SERVERS:CAPS" title="TP_PROP_MEDIA_STREAM_HANDLER_STUN_SERVERS">TP_PROP_MEDIA_STREAM_HANDLER_STUN_SERVERS</a>
300 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS" title="TP_PROP_PROTOCOL_CONNECTION_INTERFACES">TP_PROP_PROTOCOL_CONNECTION_INTERFACES</a>
301 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS" title="TP_PROP_PROTOCOL_ENGLISH_NAME">TP_PROP_PROTOCOL_ENGLISH_NAME</a>
302 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ICON:CAPS" title="TP_PROP_PROTOCOL_ICON">TP_PROP_PROTOCOL_ICON</a>
303 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-INTERFACES:CAPS" title="TP_PROP_PROTOCOL_INTERFACES">TP_PROP_PROTOCOL_INTERFACES</a>
304 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-PARAMETERS:CAPS" title="TP_PROP_PROTOCOL_PARAMETERS">TP_PROP_PROTOCOL_PARAMETERS</a>
305 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS" title="TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES">TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES</a>
306 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-VCARD-FIELD:CAPS" title="TP_PROP_PROTOCOL_VCARD_FIELD">TP_PROP_PROTOCOL_VCARD_FIELD</a>
292307 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-CONTACT-ID:CAPS" title="TP_TOKEN_CONNECTION_CONTACT_ID">TP_TOKEN_CONNECTION_CONTACT_ID</a>
293308 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS">TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS</a>
294309 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN">TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN</a>
494509 </p>
495510 </div>
496511 <hr>
512 <div class="refsect2" title="TP_IFACE_PROTOCOL">
513 <a name="TP-IFACE-PROTOCOL:CAPS"></a><h3>TP_IFACE_PROTOCOL</h3>
514 <pre class="programlisting">#define TP_IFACE_PROTOCOL</pre>
515 <p>
516 The interface name "org.freedesktop.Telepathy.Protocol"
517 </p>
518 </div>
519 <hr>
520 <div class="refsect2" title="TP_IFACE_QUARK_PROTOCOL">
521 <a name="TP-IFACE-QUARK-PROTOCOL:CAPS"></a><h3>TP_IFACE_QUARK_PROTOCOL</h3>
522 <pre class="programlisting">#define TP_IFACE_QUARK_PROTOCOL</pre>
523 <p>
524 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Protocol"
525 </p>
526 </div>
527 <hr>
497528 <div class="refsect2" title="TP_IFACE_CONNECTION">
498529 <a name="TP-IFACE-CONNECTION:CAPS"></a><h3>TP_IFACE_CONNECTION</h3>
499530 <pre class="programlisting">#define TP_IFACE_CONNECTION</pre>
766797 </p>
767798 </div>
768799 <hr>
800 <div class="refsect2" title="TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH">
801 <a name="TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"></a><h3>TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH</h3>
802 <pre class="programlisting">#define TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH</pre>
803 <p>
804 The interface name "org.freedesktop.Telepathy.Channel.Type.ContactSearch"
805 </p>
806 </div>
807 <hr>
808 <div class="refsect2" title="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH">
809 <a name="TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"></a><h3>TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH</h3>
810 <pre class="programlisting">#define TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH</pre>
811 <p>
812 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Channel.Type.ContactSearch"
813 </p>
814 </div>
815 <hr>
769816 <div class="refsect2" title="TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER">
770817 <a name="TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS"></a><h3>TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER</h3>
771818 <pre class="programlisting">#define TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER</pre>
18141861 </p>
18151862 </div>
18161863 <hr>
1864 <div class="refsect2" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS">
1865 <a name="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS"></a><h3>TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS</h3>
1866 <pre class="programlisting">#define TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS</pre>
1867 <p>
1868 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Type.ContactSearch.AvailableSearchKeys"
1869 </p>
1870 </div>
1871 <hr>
1872 <div class="refsect2" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT">
1873 <a name="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS"></a><h3>TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT</h3>
1874 <pre class="programlisting">#define TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT</pre>
1875 <p>
1876 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Type.ContactSearch.Limit"
1877 </p>
1878 </div>
1879 <hr>
1880 <div class="refsect2" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE">
1881 <a name="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS"></a><h3>TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE</h3>
1882 <pre class="programlisting">#define TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE</pre>
1883 <p>
1884 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Type.ContactSearch.SearchState"
1885 </p>
1886 </div>
1887 <hr>
1888 <div class="refsect2" title="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER">
1889 <a name="TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS"></a><h3>TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER</h3>
1890 <pre class="programlisting">#define TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER</pre>
1891 <p>
1892 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Type.ContactSearch.Server"
1893 </p>
1894 </div>
1895 <hr>
18171896 <div class="refsect2" title="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES">
18181897 <a name="TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS"></a><h3>TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES</h3>
18191898 <pre class="programlisting">#define TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES</pre>
23262405 </p>
23272406 </div>
23282407 <hr>
2408 <div class="refsect2" title="TP_PROP_PROTOCOL_CONNECTION_INTERFACES">
2409 <a name="TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS"></a><h3>TP_PROP_PROTOCOL_CONNECTION_INTERFACES</h3>
2410 <pre class="programlisting">#define TP_PROP_PROTOCOL_CONNECTION_INTERFACES</pre>
2411 <p>
2412 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.ConnectionInterfaces"
2413 </p>
2414 </div>
2415 <hr>
2416 <div class="refsect2" title="TP_PROP_PROTOCOL_ENGLISH_NAME">
2417 <a name="TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS"></a><h3>TP_PROP_PROTOCOL_ENGLISH_NAME</h3>
2418 <pre class="programlisting">#define TP_PROP_PROTOCOL_ENGLISH_NAME</pre>
2419 <p>
2420 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.EnglishName"
2421 </p>
2422 </div>
2423 <hr>
2424 <div class="refsect2" title="TP_PROP_PROTOCOL_ICON">
2425 <a name="TP-PROP-PROTOCOL-ICON:CAPS"></a><h3>TP_PROP_PROTOCOL_ICON</h3>
2426 <pre class="programlisting">#define TP_PROP_PROTOCOL_ICON</pre>
2427 <p>
2428 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.Icon"
2429 </p>
2430 </div>
2431 <hr>
2432 <div class="refsect2" title="TP_PROP_PROTOCOL_INTERFACES">
2433 <a name="TP-PROP-PROTOCOL-INTERFACES:CAPS"></a><h3>TP_PROP_PROTOCOL_INTERFACES</h3>
2434 <pre class="programlisting">#define TP_PROP_PROTOCOL_INTERFACES</pre>
2435 <p>
2436 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.Interfaces"
2437 </p>
2438 </div>
2439 <hr>
2440 <div class="refsect2" title="TP_PROP_PROTOCOL_PARAMETERS">
2441 <a name="TP-PROP-PROTOCOL-PARAMETERS:CAPS"></a><h3>TP_PROP_PROTOCOL_PARAMETERS</h3>
2442 <pre class="programlisting">#define TP_PROP_PROTOCOL_PARAMETERS</pre>
2443 <p>
2444 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.Parameters"
2445 </p>
2446 </div>
2447 <hr>
2448 <div class="refsect2" title="TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES">
2449 <a name="TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS"></a><h3>TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES</h3>
2450 <pre class="programlisting">#define TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES</pre>
2451 <p>
2452 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.RequestableChannelClasses"
2453 </p>
2454 </div>
2455 <hr>
2456 <div class="refsect2" title="TP_PROP_PROTOCOL_VCARD_FIELD">
2457 <a name="TP-PROP-PROTOCOL-VCARD-FIELD:CAPS"></a><h3>TP_PROP_PROTOCOL_VCARD_FIELD</h3>
2458 <pre class="programlisting">#define TP_PROP_PROTOCOL_VCARD_FIELD</pre>
2459 <p>
2460 The fully-qualified property name "org.freedesktop.Telepathy.Protocol.VCardField"
2461 </p>
2462 </div>
2463 <hr>
23292464 <div class="refsect2" title="TP_TOKEN_CONNECTION_CONTACT_ID">
23302465 <a name="TP-TOKEN-CONNECTION-CONTACT-ID:CAPS"></a><h3>TP_TOKEN_CONNECTION_CONTACT_ID</h3>
23312466 <pre class="programlisting">#define TP_TOKEN_CONNECTION_CONTACT_ID</pre>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>TpProtocol</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-connection-manager.html" title="TpConnectionManager">
9 <link rel="next" href="telepathy-glib-connection.html" title="TpConnection">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-connection-manager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-connection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-protocol.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-protocol.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-protocol.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-protocol.properties" class="shortcut">Properties</a>
30 </td></tr>
31 </table>
32 <div class="refentry" title="TpProtocol">
33 <a name="telepathy-glib-protocol"></a><div class="titlepage"></div>
34 <div class="refnamediv"><table width="100%"><tr>
35 <td valign="top">
36 <h2><span class="refentrytitle"><a name="telepathy-glib-protocol.top_of_page"></a>TpProtocol</span></h2>
37 <p>TpProtocol — proxy for a Telepathy Protocol object</p>
38 </td>
39 <td valign="top" align="right"></td>
40 </tr></table></div>
41 <div class="refsynopsisdiv" title="Synopsis">
42 <a name="telepathy-glib-protocol.synopsis"></a><h2>Synopsis</h2>
43 <a name="TpProtocol"></a><pre class="synopsis">
44 #include &lt;telepathy-glib/protocol.h&gt;
45
46 <a class="link" href="telepathy-glib-protocol.html#TpProtocol-struct" title="TpProtocol">TpProtocol</a>;
47 <a class="link" href="telepathy-glib-protocol.html#TpProtocolClass" title="TpProtocolClass">TpProtocolClass</a>;
48 <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="returnvalue">TpProtocol</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-new" title="tp_protocol_new ()">tp_protocol_new</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> *dbus</code></em>,
49 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *cm_name</code></em>,
50 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol_name</code></em>,
51 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *immutable_properties</code></em>,
52 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
53 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-name" title="tp_protocol_get_name ()">tp_protocol_get_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
54 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-protocol.html#tp-protocol-init-known-interfaces" title="tp_protocol_init_known_interfaces ()">tp_protocol_init_known_interfaces</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
55
56 #define <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" title="TP_PROTOCOL_FEATURE_PARAMETERS">TP_PROTOCOL_FEATURE_PARAMETERS</a>
57 <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="returnvalue">GStrv</span></a> <a class="link" href="telepathy-glib-protocol.html#tp-protocol-dup-param-names" title="tp_protocol_dup_param_names ()">tp_protocol_dup_param_names</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
58 const <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManagerParam" title="TpConnectionManagerParam"><span class="returnvalue">TpConnectionManagerParam</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-param" title="tp_protocol_get_param ()">tp_protocol_get_param</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>,
59 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>);
60 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-protocol.html#tp-protocol-has-param" title="tp_protocol_has_param ()">tp_protocol_has_param</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>,
61 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>);
62 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-protocol.html#tp-protocol-can-register" title="tp_protocol_can_register ()">tp_protocol_can_register</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
63
64 #define <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE">TP_PROTOCOL_FEATURE_CORE</a>
65 <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="returnvalue">TpCapabilities</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-capabilities" title="tp_protocol_get_capabilities ()">tp_protocol_get_capabilities</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
66 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-english-name" title="tp_protocol_get_english_name ()">tp_protocol_get_english_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
67 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-icon-name" title="tp_protocol_get_icon_name ()">tp_protocol_get_icon_name</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
68 const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-protocol-get-vcard-field" title="tp_protocol_get_vcard_field ()">tp_protocol_get_vcard_field</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);
69
70 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-call-identify-account" title="tp_cli_protocol_call_identify_account ()">tp_cli_protocol_call_identify_account</a>
71 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> proxy</code></em>,
72 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
73 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Parameters</code></em>,
74 <em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account" title="tp_cli_protocol_callback_for_identify_account ()"><span class="type">tp_cli_protocol_callback_for_identify_account</span></a> callback</code></em>,
75 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
76 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
77 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
78 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-call-normalize-contact" title="tp_cli_protocol_call_normalize_contact ()">tp_cli_protocol_call_normalize_contact</a>
79 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> proxy</code></em>,
80 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
81 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *in_Contact_ID</code></em>,
82 <em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact" title="tp_cli_protocol_callback_for_normalize_contact ()"><span class="type">tp_cli_protocol_callback_for_normalize_contact</span></a> callback</code></em>,
83 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
84 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
85 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
86 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account" title="tp_cli_protocol_callback_for_identify_account ()">*tp_cli_protocol_callback_for_identify_account</a>)
87 (<em class="parameter"><code><a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> *proxy</code></em>,
88 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Account_ID</code></em>,
89 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
90 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
91 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
92 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact" title="tp_cli_protocol_callback_for_normalize_contact ()">*tp_cli_protocol_callback_for_normalize_contact</a>)
93 (<em class="parameter"><code><a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> *proxy</code></em>,
94 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Normalized_Contact_ID</code></em>,
95 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
96 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
97 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);
98 </pre>
99 </div>
100 <div class="refsect1" title="Object Hierarchy">
101 <a name="telepathy-glib-protocol.object-hierarchy"></a><h2>Object Hierarchy</h2>
102 <pre class="synopsis">
103 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
104 +----<a class="link" href="telepathy-glib-proxy.html#TpProxy">TpProxy</a>
105 +----TpProtocol
106 </pre>
107 </div>
108 <div class="refsect1" title="Properties">
109 <a name="telepathy-glib-protocol.properties"></a><h2>Properties</h2>
110 <pre class="synopsis">
111 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--capabilities" title='The "capabilities" property'>capabilities</a>" <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="type">TpCapabilities</span></a>* : Read
112 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--english-name" title='The "english-name" property'>english-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
113 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--icon-name" title='The "icon-name" property'>icon-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
114 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--param-names" title='The "param-names" property'>param-names</a>" <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a>* : Read
115 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--protocol-name" title='The "protocol-name" property'>protocol-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
116 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--protocol-properties" title='The "protocol-properties" property'>protocol-properties</a>" <span class="type">GHashTable_gchararray+GValue_*</span> : Read / Write / Construct Only
117 "<a class="link" href="telepathy-glib-protocol.html#TpProtocol--vcard-field" title='The "vcard-field" property'>vcard-field</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
118 </pre>
119 </div>
120 <div class="refsect1" title="Description">
121 <a name="telepathy-glib-protocol.description"></a><h2>Description</h2>
122 <p>
123 <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> objects represent the protocols implemented by Telepathy
124 connection managers. In modern connection managers, each protocol is
125 represented by a D-Bus object; in older connection managers, the protocols
126 are represented by data structures, and this object merely emulates a D-Bus
127 object.
128 </p>
129 </div>
130 <div class="refsect1" title="Details">
131 <a name="telepathy-glib-protocol.details"></a><h2>Details</h2>
132 <div class="refsect2" title="TpProtocol">
133 <a name="TpProtocol-struct"></a><h3>TpProtocol</h3>
134 <pre class="programlisting">typedef struct _TpProtocol TpProtocol;</pre>
135 <p>
136 A base class for connection managers' protocols.
137 </p>
138 <p class="since">Since 0.11.UNRELEASED</p>
139 </div>
140 <hr>
141 <div class="refsect2" title="TpProtocolClass">
142 <a name="TpProtocolClass"></a><h3>TpProtocolClass</h3>
143 <pre class="programlisting">typedef struct _TpProtocolClass TpProtocolClass;</pre>
144 <p>
145 The class of a <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a>.
146 </p>
147 <p class="since">Since 0.11.UNRELEASED</p>
148 </div>
149 <hr>
150 <div class="refsect2" title="tp_protocol_new ()">
151 <a name="tp-protocol-new"></a><h3>tp_protocol_new ()</h3>
152 <pre class="programlisting"><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="returnvalue">TpProtocol</span></a> * tp_protocol_new (<em class="parameter"><code><a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> *dbus</code></em>,
153 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *cm_name</code></em>,
154 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol_name</code></em>,
155 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *immutable_properties</code></em>,
156 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
157 <p>
158
159 </p>
160 <div class="variablelist"><table border="0">
161 <col align="left" valign="top">
162 <tbody>
163 <tr>
164 <td><p><span class="term"><em class="parameter"><code>dbus</code></em> :</span></p></td>
165 <td>proxy for the D-Bus daemon; may not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
166 </td>
167 </tr>
168 <tr>
169 <td><p><span class="term"><em class="parameter"><code>cm_name</code></em> :</span></p></td>
170 <td>the connection manager name (such as "gabble")
171 </td>
172 </tr>
173 <tr>
174 <td><p><span class="term"><em class="parameter"><code>protocol_name</code></em> :</span></p></td>
175 <td>the protocol name (such as "jabber")
176 </td>
177 </tr>
178 <tr>
179 <td><p><span class="term"><em class="parameter"><code>immutable_properties</code></em> :</span></p></td>
180 <td>the immutable D-Bus properties for this protocol
181 </td>
182 </tr>
183 <tr>
184 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
185 <td>used to indicate the error if <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned
186 </td>
187 </tr>
188 <tr>
189 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
190 <td> a new protocol proxy, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on invalid arguments
191
192 </td>
193 </tr>
194 </tbody>
195 </table></div>
196 <p class="since">Since 0.11.UNRELEASED</p>
197 </div>
198 <hr>
199 <div class="refsect2" title="tp_protocol_get_name ()">
200 <a name="tp-protocol-get-name"></a><h3>tp_protocol_get_name ()</h3>
201 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_protocol_get_name (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
202 <p>
203 Return the same thing as the protocol-name property, for convenient use
204 in C code. The returned string is valid for as long as <em class="parameter"><code>self</code></em> exists.
205 </p>
206 <div class="variablelist"><table border="0">
207 <col align="left" valign="top">
208 <tbody>
209 <tr>
210 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
211 <td>a protocol object
212 </td>
213 </tr>
214 <tr>
215 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
216 <td> the value of the <a class="link" href="telepathy-glib-protocol.html#TpProtocol--protocol-name" title='The "protocol-name" property'><span class="type">"protocol-name"</span></a> property
217
218 </td>
219 </tr>
220 </tbody>
221 </table></div>
222 <p class="since">Since 0.11.UNRELEASED</p>
223 </div>
224 <hr>
225 <div class="refsect2" title="tp_protocol_init_known_interfaces ()">
226 <a name="tp-protocol-init-known-interfaces"></a><h3>tp_protocol_init_known_interfaces ()</h3>
227 <pre class="programlisting"><span class="returnvalue">void</span> tp_protocol_init_known_interfaces (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
228 <p>
229 Ensure that the known interfaces for TpProtocol have been set up.
230 This is done automatically when necessary, but for correct
231 overriding of library interfaces by local extensions, you should
232 call this function before calling
233 <a class="link" href="telepathy-glib-proxy-subclass.html#tp-proxy-or-subclass-hook-on-interface-add" title="tp_proxy_or_subclass_hook_on_interface_add ()"><code class="function">tp_proxy_or_subclass_hook_on_interface_add()</code></a> with first argument
234 <code class="literal">TP_TYPE_PROTOCOL</code>.
235 </p>
236 <p class="since">Since 0.11.UNRELEASED</p>
237 </div>
238 <hr>
239 <div class="refsect2" title="TP_PROTOCOL_FEATURE_PARAMETERS">
240 <a name="TP-PROTOCOL-FEATURE-PARAMETERS:CAPS"></a><h3>TP_PROTOCOL_FEATURE_PARAMETERS</h3>
241 <pre class="programlisting">#define TP_PROTOCOL_FEATURE_PARAMETERS</pre>
242 <p>
243 Expands to a call to a function that returns a quark for the parameters
244 feature of a <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a>.
245 </p>
246 <p>
247 When this feature is prepared, the possible parameters for connections to
248 this protocol have been retrieved and are available for use.
249 </p>
250 <p>
251 Unlike <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a>, this feature can even be available on
252 connection managers that don't really have Protocol objects
253 (on these older connection managers, the <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> uses information from
254 ConnectionManager methods to provide the list of parameters).
255 </p>
256 <p>
257 One can ask for a feature to be prepared using the
258 <a class="link" href="telepathy-glib-proxy.html#tp-proxy-prepare-async" title="tp_proxy_prepare_async ()"><code class="function">tp_proxy_prepare_async()</code></a> function, and waiting for it to callback.
259 </p>
260 <p class="since">Since 0.11.UNRELEASED</p>
261 </div>
262 <hr>
263 <div class="refsect2" title="tp_protocol_dup_param_names ()">
264 <a name="tp-protocol-dup-param-names"></a><h3>tp_protocol_dup_param_names ()</h3>
265 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="returnvalue">GStrv</span></a> tp_protocol_dup_param_names (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
266 <p>
267 Returns a list of parameter names supported by this connection manager
268 for this protocol.
269 </p>
270 <p>
271 The result is copied and must be freed by the caller with <a href="/usr/share/gtk-doc/html/glib/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a>.
272 </p>
273 <div class="variablelist"><table border="0">
274 <col align="left" valign="top">
275 <tbody>
276 <tr>
277 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
278 <td>a protocol
279 </td>
280 </tr>
281 <tr>
282 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
283 <td> a copy of
284 <a class="link" href="telepathy-glib-protocol.html#TpProtocol--param-names" title='The "param-names" property'><span class="type">"param-names"</span></a>. <span class="annotation">[type GObject.Strv][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
285 </td>
286 </tr>
287 </tbody>
288 </table></div>
289 <p class="since">Since 0.11.UNRELEASED</p>
290 </div>
291 <hr>
292 <div class="refsect2" title="tp_protocol_get_param ()">
293 <a name="tp-protocol-get-param"></a><h3>tp_protocol_get_param ()</h3>
294 <pre class="programlisting">const <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManagerParam" title="TpConnectionManagerParam"><span class="returnvalue">TpConnectionManagerParam</span></a> * tp_protocol_get_param (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>,
295 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>);</pre>
296 <p>
297
298 </p>
299 <div class="variablelist"><table border="0">
300 <col align="left" valign="top">
301 <tbody>
302 <tr>
303 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
304 <td>a protocol
305 </td>
306 </tr>
307 <tr>
308 <td><p><span class="term"><em class="parameter"><code>param</code></em> :</span></p></td>
309 <td>a parameter name
310 </td>
311 </tr>
312 <tr>
313 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
314 <td> a structure representing the parameter <em class="parameter"><code>param</code></em>, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not
315 supported
316
317 </td>
318 </tr>
319 </tbody>
320 </table></div>
321 <p class="since">Since 0.11.UNRELEASED</p>
322 </div>
323 <hr>
324 <div class="refsect2" title="tp_protocol_has_param ()">
325 <a name="tp-protocol-has-param"></a><h3>tp_protocol_has_param ()</h3>
326 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_protocol_has_param (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>,
327 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>);</pre>
328 <p>
329
330 </p>
331 <div class="variablelist"><table border="0">
332 <col align="left" valign="top">
333 <tbody>
334 <tr>
335 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
336 <td>a protocol
337 </td>
338 </tr>
339 <tr>
340 <td><p><span class="term"><em class="parameter"><code>param</code></em> :</span></p></td>
341 <td>a parameter name
342 </td>
343 </tr>
344 <tr>
345 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
346 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>self</code></em> supports the parameter <em class="parameter"><code>param</code></em>.
347
348 </td>
349 </tr>
350 </tbody>
351 </table></div>
352 <p class="since">Since 0.11.UNRELEASED</p>
353 </div>
354 <hr>
355 <div class="refsect2" title="tp_protocol_can_register ()">
356 <a name="tp-protocol-can-register"></a><h3>tp_protocol_can_register ()</h3>
357 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_protocol_can_register (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
358 <p>
359 Return whether a new account can be registered on this protocol, by setting
360 the special "register" parameter to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.
361 </p>
362 <div class="variablelist"><table border="0">
363 <col align="left" valign="top">
364 <tbody>
365 <tr>
366 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
367 <td>a protocol
368 </td>
369 </tr>
370 <tr>
371 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
372 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>protocol</code></em> supports the parameter "register"
373
374 </td>
375 </tr>
376 </tbody>
377 </table></div>
378 <p class="since">Since 0.11.UNRELEASED</p>
379 </div>
380 <hr>
381 <div class="refsect2" title="TP_PROTOCOL_FEATURE_CORE">
382 <a name="TP-PROTOCOL-FEATURE-CORE:CAPS"></a><h3>TP_PROTOCOL_FEATURE_CORE</h3>
383 <pre class="programlisting">#define TP_PROTOCOL_FEATURE_CORE</pre>
384 <p>
385 Expands to a call to a function that returns a quark for the core
386 feature of a <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a>.
387 </p>
388 <p>
389 When this feature is prepared, at least the following basic information
390 about the protocol is available:
391 </p>
392 <p>
393 </p>
394 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
395 <li class="listitem">possible parameters for connections to this protocol</li>
396 <li class="listitem">interfaces expected on connections to this protocol</li>
397 <li class="listitem">classes of channel that could be requested from connections
398 to this protocol</li>
399 </ul></div>
400 <p>
401 </p>
402 <p>
403 (This feature implies that <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" title="TP_PROTOCOL_FEATURE_PARAMETERS"><code class="literal">TP_PROTOCOL_FEATURE_PARAMETERS</code></a> is also
404 available.)
405 </p>
406 <p>
407 Unlike <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" title="TP_PROTOCOL_FEATURE_PARAMETERS"><code class="literal">TP_PROTOCOL_FEATURE_PARAMETERS</code></a>, this feature can only become
408 available on connection managers that implement Protocol objects.
409 </p>
410 <p>
411 One can ask for a feature to be prepared using the
412 <a class="link" href="telepathy-glib-proxy.html#tp-proxy-prepare-async" title="tp_proxy_prepare_async ()"><code class="function">tp_proxy_prepare_async()</code></a> function, and waiting for it to callback.
413 </p>
414 <p class="since">Since 0.11.UNRELEASED</p>
415 </div>
416 <hr>
417 <div class="refsect2" title="tp_protocol_get_capabilities ()">
418 <a name="tp-protocol-get-capabilities"></a><h3>tp_protocol_get_capabilities ()</h3>
419 <pre class="programlisting"><a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="returnvalue">TpCapabilities</span></a> * tp_protocol_get_capabilities (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
420 <p>
421
422 </p>
423 <div class="variablelist"><table border="0">
424 <col align="left" valign="top">
425 <tbody>
426 <tr>
427 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
428 <td>a protocol object
429 </td>
430 </tr>
431 <tr>
432 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
433 <td> <a class="link" href="telepathy-glib-protocol.html#TpProtocol--capabilities" title='The "capabilities" property'><span class="type">"capabilities"</span></a>, which must be referenced
434 (if non-<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>) if it will be kept. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
435 </td>
436 </tr>
437 </tbody>
438 </table></div>
439 <p class="since">Since 0.11.UNRELEASED</p>
440 </div>
441 <hr>
442 <div class="refsect2" title="tp_protocol_get_english_name ()">
443 <a name="tp-protocol-get-english-name"></a><h3>tp_protocol_get_english_name ()</h3>
444 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_protocol_get_english_name (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
445 <p>
446
447 </p>
448 <div class="variablelist"><table border="0">
449 <col align="left" valign="top">
450 <tbody>
451 <tr>
452 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
453 <td>a protocol object
454 </td>
455 </tr>
456 <tr>
457 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
458 <td> the non-<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, non-empty value of <a class="link" href="telepathy-glib-protocol.html#TpProtocol--english-name" title='The "english-name" property'><span class="type">"english-name"</span></a>
459
460 </td>
461 </tr>
462 </tbody>
463 </table></div>
464 <p class="since">Since 0.11.UNRELEASED</p>
465 </div>
466 <hr>
467 <div class="refsect2" title="tp_protocol_get_icon_name ()">
468 <a name="tp-protocol-get-icon-name"></a><h3>tp_protocol_get_icon_name ()</h3>
469 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_protocol_get_icon_name (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
470 <p>
471
472 </p>
473 <div class="variablelist"><table border="0">
474 <col align="left" valign="top">
475 <tbody>
476 <tr>
477 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
478 <td>a protocol object
479 </td>
480 </tr>
481 <tr>
482 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
483 <td> the non-<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, non-empty value of <a class="link" href="telepathy-glib-protocol.html#TpProtocol--icon-name" title='The "icon-name" property'><span class="type">"icon-name"</span></a>
484
485 </td>
486 </tr>
487 </tbody>
488 </table></div>
489 <p class="since">Since 0.11.UNRELEASED</p>
490 </div>
491 <hr>
492 <div class="refsect2" title="tp_protocol_get_vcard_field ()">
493 <a name="tp-protocol-get-vcard-field"></a><h3>tp_protocol_get_vcard_field ()</h3>
494 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_protocol_get_vcard_field (<em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> *self</code></em>);</pre>
495 <p>
496
497 </p>
498 <div class="variablelist"><table border="0">
499 <col align="left" valign="top">
500 <tbody>
501 <tr>
502 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
503 <td>a protocol object
504 </td>
505 </tr>
506 <tr>
507 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
508 <td> the value of <a class="link" href="telepathy-glib-protocol.html#TpProtocol--vcard-field" title='The "vcard-field" property'><span class="type">"vcard-field"</span></a>
509
510 </td>
511 </tr>
512 </tbody>
513 </table></div>
514 <p class="since">Since 0.11.UNRELEASED</p>
515 </div>
516 <hr>
517 <div class="refsect2" title="tp_cli_protocol_call_identify_account ()">
518 <a name="tp-cli-protocol-call-identify-account"></a><h3>tp_cli_protocol_call_identify_account ()</h3>
519 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_protocol_call_identify_account
520 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> proxy</code></em>,
521 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
522 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Parameters</code></em>,
523 <em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account" title="tp_cli_protocol_callback_for_identify_account ()"><span class="type">tp_cli_protocol_callback_for_identify_account</span></a> callback</code></em>,
524 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
525 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
526 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
527 <p>
528 Start a IdentifyAccount method call.
529 </p>
530 <p>
531 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Return a string which uniquely identifies the account to which the given parameters would connect.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;For many protocols, this would return the well-known 'account' parameter. However, for IRC the returned string would be composed from the 'account' (i.e. nickname) and 'server' parameters. AccountManager implementations can use this to form the account-specific part of an Account's object path.&lt;/p&gt; &lt;/tp:rationale&gt;
532 </p>
533 <div class="variablelist"><table border="0">
534 <col align="left" valign="top">
535 <tbody>
536 <tr>
537 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
538 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
539 </td>
540 </tr>
541 <tr>
542 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
543 <td>the timeout in milliseconds, or -1 to use the
544 default
545 </td>
546 </tr>
547 <tr>
548 <td><p><span class="term"><em class="parameter"><code>in_Parameters</code></em> :</span></p></td>
549 <td>Used to pass an 'in' argument: A set of parameters as would be provided to &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ConnectionManager"&gt;RequestConnection&lt;/tp:dbus-ref&gt;
550 </td>
551 </tr>
552 <tr>
553 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
554 <td>called when the method call succeeds or fails;
555 may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to make a "fire and forget" call with no
556 reply tracking
557 </td>
558 </tr>
559 <tr>
560 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
561 <td>user-supplied data passed to the callback;
562 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
563 </td>
564 </tr>
565 <tr>
566 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
567 <td>called with the user_data as argument, after the
568 call has succeeded, failed or been cancelled;
569 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
570 </td>
571 </tr>
572 <tr>
573 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
574 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be
575 weakly referenced; if it is destroyed, this call
576 will automatically be cancelled. Must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
577 <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
578 </td>
579 </tr>
580 <tr>
581 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
582 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
583 progress. It is borrowed from the object, and will become
584 invalid when the callback is called, the call is
585 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
586 </td>
587 </tr>
588 </tbody>
589 </table></div>
590 </div>
591 <hr>
592 <div class="refsect2" title="tp_cli_protocol_call_normalize_contact ()">
593 <a name="tp-cli-protocol-call-normalize-contact"></a><h3>tp_cli_protocol_call_normalize_contact ()</h3>
594 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_protocol_call_normalize_contact
595 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> proxy</code></em>,
596 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> timeout_ms</code></em>,
597 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *in_Contact_ID</code></em>,
598 <em class="parameter"><code><a class="link" href="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact" title="tp_cli_protocol_callback_for_normalize_contact ()"><span class="type">tp_cli_protocol_callback_for_normalize_contact</span></a> callback</code></em>,
599 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
600 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
601 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
602 <p>
603 Start a NormalizeContact method call.
604 </p>
605 <p>
606 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Attempt to normalize the given contact ID. Where possible, this SHOULD return the same thing that would be returned by InspectHandles(RequestHandles(CONTACT, [Contact_ID])) on a connected &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Connection&lt;/tp:dbus-ref&gt;.&lt;/p&gt; &lt;p&gt;If full normalization requires network activity or is otherwise impossible to do without a &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Connection&lt;/tp:dbus-ref&gt;, this method SHOULD perform a best-effort normalization.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;One common example of a best-effort offline normalization differing from the ideal normalization is XMPP.&lt;/p&gt; &lt;p&gt;On XMPP, contacts' JIDs should normally have the resource removed during normalization, but for contacts in a MUC (chatroom), the resource is an integral part of the JID - so the contact JID alice<em class="parameter"><code>example.com</code></em>/Empathy should normalize to alice<em class="parameter"><code>example.com</code></em>, but the in-MUC JID wonderland<em class="parameter"><code>conference.example.com</code></em>/Alice should normalize to itself.&lt;/p&gt; &lt;p&gt;While online, the connection manager has enough context to know which chatrooms the user is in, and can infer from that whether to remove resources, but the best-effort normalization performed while offline does not have this context, so the best that can be done is to remove the resource from all JIDs.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;This method MAY simply raise NotImplemented on some protocols.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;In link-local XMPP, you can't talk to someone who isn't present on your local network, so normalizing identifiers in advance is meaningless.&lt;/p&gt; &lt;/tp:rationale&gt;
607 </p>
608 <div class="variablelist"><table border="0">
609 <col align="left" valign="top">
610 <tbody>
611 <tr>
612 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
613 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
614 </td>
615 </tr>
616 <tr>
617 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
618 <td>the timeout in milliseconds, or -1 to use the
619 default
620 </td>
621 </tr>
622 <tr>
623 <td><p><span class="term"><em class="parameter"><code>in_Contact_ID</code></em> :</span></p></td>
624 <td>Used to pass an 'in' argument: The identifier of a contact in this protocol
625 </td>
626 </tr>
627 <tr>
628 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
629 <td>called when the method call succeeds or fails;
630 may be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to make a "fire and forget" call with no
631 reply tracking
632 </td>
633 </tr>
634 <tr>
635 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
636 <td>user-supplied data passed to the callback;
637 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
638 </td>
639 </tr>
640 <tr>
641 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
642 <td>called with the user_data as argument, after the
643 call has succeeded, failed or been cancelled;
644 must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
645 </td>
646 </tr>
647 <tr>
648 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
649 <td>If not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> which will be
650 weakly referenced; if it is destroyed, this call
651 will automatically be cancelled. Must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
652 <em class="parameter"><code>callback</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
653 </td>
654 </tr>
655 <tr>
656 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
657 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
658 progress. It is borrowed from the object, and will become
659 invalid when the callback is called, the call is
660 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
661 </td>
662 </tr>
663 </tbody>
664 </table></div>
665 </div>
666 <hr>
667 <div class="refsect2" title="tp_cli_protocol_callback_for_identify_account ()">
668 <a name="tp-cli-protocol-callback-for-identify-account"></a><h3>tp_cli_protocol_callback_for_identify_account ()</h3>
669 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_protocol_callback_for_identify_account)
670 (<em class="parameter"><code><a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> *proxy</code></em>,
671 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Account_ID</code></em>,
672 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
673 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
674 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
675 <p>
676 Signature of the callback called when a IdentifyAccount method call
677 succeeds or fails.
678 </p>
679 <div class="variablelist"><table border="0">
680 <col align="left" valign="top">
681 <tbody>
682 <tr>
683 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
684 <td>the proxy on which the call was made
685 </td>
686 </tr>
687 <tr>
688 <td><p><span class="term"><em class="parameter"><code>out_Account_ID</code></em> :</span></p></td>
689 <td>Used to return an 'out' argument if <em class="parameter"><code>error</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>: &lt;p&gt;An opaque string suitable for use as the account-specific part of an &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Account&lt;/tp:dbus-ref&gt;'s object path. This is not necessarily globally unique, but should represent a &amp;quot;best-effort&amp;quot; identification of the account.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;For a pathological case, consider a user signing in as 'me<em class="parameter"><code>example.com</code></em>' with 'server' set to either jabber1.example.com or jabber2.example.com. Both of these should result in me<em class="parameter"><code>example.com</code></em> being returned from this method, even if the user can actually be signed in to those two servers simultaneously.&lt;/p&gt; &lt;/tp:rationale&gt;
690 </td>
691 </tr>
692 <tr>
693 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
694 <td>
695 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on success, or an error on failure
696 </td>
697 </tr>
698 <tr>
699 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
700 <td>user-supplied data
701 </td>
702 </tr>
703 <tr>
704 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
705 <td>user-supplied object
706 </td>
707 </tr>
708 </tbody>
709 </table></div>
710 </div>
711 <hr>
712 <div class="refsect2" title="tp_cli_protocol_callback_for_normalize_contact ()">
713 <a name="tp-cli-protocol-callback-for-normalize-contact"></a><h3>tp_cli_protocol_callback_for_normalize_contact ()</h3>
714 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_protocol_callback_for_normalize_contact)
715 (<em class="parameter"><code><a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> *proxy</code></em>,
716 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Normalized_Contact_ID</code></em>,
717 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
718 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
719 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
720 <p>
721 Signature of the callback called when a NormalizeContact method call
722 succeeds or fails.
723 </p>
724 <div class="variablelist"><table border="0">
725 <col align="left" valign="top">
726 <tbody>
727 <tr>
728 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
729 <td>the proxy on which the call was made
730 </td>
731 </tr>
732 <tr>
733 <td><p><span class="term"><em class="parameter"><code>out_Normalized_Contact_ID</code></em> :</span></p></td>
734 <td>Used to return an 'out' argument if <em class="parameter"><code>error</code></em> is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>: The identifier of a contact in this protocol, normalized as much as possible
735 </td>
736 </tr>
737 <tr>
738 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
739 <td>
740 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on success, or an error on failure
741 </td>
742 </tr>
743 <tr>
744 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
745 <td>user-supplied data
746 </td>
747 </tr>
748 <tr>
749 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
750 <td>user-supplied object
751 </td>
752 </tr>
753 </tbody>
754 </table></div>
755 </div>
756 </div>
757 <div class="refsect1" title="Property Details">
758 <a name="telepathy-glib-protocol.property-details"></a><h2>Property Details</h2>
759 <div class="refsect2" title='The "capabilities" property'>
760 <a name="TpProtocol--capabilities"></a><h3>The <code class="literal">"capabilities"</code> property</h3>
761 <pre class="programlisting"> "capabilities" <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="type">TpCapabilities</span></a>* : Read</pre>
762 <p>
763 The classes of channel that can be requested from connections to this
764 protocol, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this is unknown or the <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a>
765 feature has not been prepared.
766 </p>
767 <p class="since">Since 0.11.UNRELEASED</p>
768 </div>
769 <hr>
770 <div class="refsect2" title='The "english-name" property'>
771 <a name="TpProtocol--english-name"></a><h3>The <code class="literal">"english-name"</code> property</h3>
772 <pre class="programlisting"> "english-name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
773 <p>
774 The name of the protocol in a form suitable for display to users,
775 such as "AIM" or "Yahoo!", or a string based on <span class="type">"name"</span>
776 (currently constructed by putting the first character in title case,
777 but this is not guaranteed) if no better name is available or the
778 <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a> feature has not been prepared.
779 </p>
780 <p>
781 This is effectively in the C locale (international English); user
782 interfaces requiring a localized protocol name should look one up in their
783 own message catalog based on either <span class="type">"name"</span> or
784 <a class="link" href="telepathy-glib-protocol.html#TpProtocol--english-name" title='The "english-name" property'><span class="type">"english-name"</span></a>, but should use this English version as a
785 fallback if no translated version can be found.
786 </p>
787 <p>Default value: NULL</p>
788 <p class="since">Since 0.11.UNRELEASED</p>
789 </div>
790 <hr>
791 <div class="refsect2" title='The "icon-name" property'>
792 <a name="TpProtocol--icon-name"></a><h3>The <code class="literal">"icon-name"</code> property</h3>
793 <pre class="programlisting"> "icon-name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
794 <p>
795 The name of an icon in the system's icon theme. If none was supplied
796 by the Protocol, or the <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a> feature has not been
797 prepared, a default is used; currently, this is "im-" plus
798 <span class="type">"name"</span>.
799 </p>
800 <p>Default value: NULL</p>
801 <p class="since">Since 0.11.UNRELEASED</p>
802 </div>
803 <hr>
804 <div class="refsect2" title='The "param-names" property'>
805 <a name="TpProtocol--param-names"></a><h3>The <code class="literal">"param-names"</code> property</h3>
806 <pre class="programlisting"> "param-names" <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a>* : Read</pre>
807 <p>
808 A list of parameter names supported by this connection manager
809 for this protocol, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" title="TP_PROTOCOL_FEATURE_PARAMETERS"><code class="literal">TP_PROTOCOL_FEATURE_PARAMETERS</code></a> has not
810 been prepared.
811 </p>
812 <p class="since">Since 0.11.UNRELEASED</p>
813 </div>
814 <hr>
815 <div class="refsect2" title='The "protocol-name" property'>
816 <a name="TpProtocol--protocol-name"></a><h3>The <code class="literal">"protocol-name"</code> property</h3>
817 <pre class="programlisting"> "protocol-name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
818 <p>
819 The machine-readable name of the protocol, taken from the Telepathy
820 D-Bus Interface Specification, such as "jabber" or "local-xmpp".
821 </p>
822 <p>Default value: NULL</p>
823 <p class="since">Since 0.11.UNRELEASED</p>
824 </div>
825 <hr>
826 <div class="refsect2" title='The "protocol-properties" property'>
827 <a name="TpProtocol--protocol-properties"></a><h3>The <code class="literal">"protocol-properties"</code> property</h3>
828 <pre class="programlisting"> "protocol-properties" <span class="type">GHashTable_gchararray+GValue_*</span> : Read / Write / Construct Only</pre>
829 <p>
830 The immutable properties of this Protocol, as provided at construction
831 time. This is a map from string to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>, which must not be modified.
832 </p>
833 <p>
834 If the immutable properties were not provided at construction time,
835 the <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" title="TP_PROTOCOL_FEATURE_PARAMETERS"><code class="literal">TP_PROTOCOL_FEATURE_PARAMETERS</code></a> and <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a> features
836 will both be unavailable, and this <a class="link" href="telepathy-glib-protocol.html#TpProtocol"><span class="type">TpProtocol</span></a> object will only be useful
837 as a way to access lower-level D-Bus calls.
838 </p>
839 <p class="since">Since 0.11.UNRELEASED</p>
840 </div>
841 <hr>
842 <div class="refsect2" title='The "vcard-field" property'>
843 <a name="TpProtocol--vcard-field"></a><h3>The <code class="literal">"vcard-field"</code> property</h3>
844 <pre class="programlisting"> "vcard-field" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
845 <p>
846 The most common vCard field used for this protocol's contact
847 identifiers, normalized to lower case, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is no such field
848 or the <a class="link" href="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" title="TP_PROTOCOL_FEATURE_CORE"><code class="literal">TP_PROTOCOL_FEATURE_CORE</code></a> feature has not been prepared.
849 </p>
850 <p>Default value: NULL</p>
851 <p class="since">Since 0.11.UNRELEASED</p>
852 </div>
853 </div>
854 <div class="refsect1" title="See Also">
855 <a name="telepathy-glib-protocol.see-also"></a><h2>See Also</h2>
856 <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a>
857 </div>
858 </div>
859 <div class="footer">
860 <hr>
861 Generated by GTK-Doc V1.15</div>
862 </body>
863 </html>
4949 <a class="link" href="telepathy-glib-proxy.html#TpProxyFeature" title="TpProxyFeature">TpProxyFeature</a>;
5050 const <a class="link" href="telepathy-glib-proxy.html#TpProxyFeature" title="TpProxyFeature"><span class="returnvalue">TpProxyFeature</span></a> * (<a class="link" href="telepathy-glib-proxy.html#TpProxyClassFeatureListFunc" title="TpProxyClassFeatureListFunc ()">*TpProxyClassFeatureListFunc</a>) (<em class="parameter"><code><a class="link" href="telepathy-glib-proxy.html#TpProxyClass" title="TpProxyClass"><span class="type">TpProxyClass</span></a> *cls</code></em>);
5151 <a class="link" href="telepathy-glib-proxy.html#TpProxyClass" title="TpProxyClass">TpProxyClass</a>;
52 #define <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface" title="tp_proxy_has_interface()">tp_proxy_has_interface</a> (self,
53 iface)
52 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface" title="tp_proxy_has_interface ()">tp_proxy_has_interface</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> self</code></em>,
53 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *iface</code></em>);
5454 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface-by-id" title="tp_proxy_has_interface_by_id ()">tp_proxy_has_interface_by_id</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> self</code></em>,
5555 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> iface</code></em>);
5656 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-proxy.html#tp-proxy-is-prepared" title="tp_proxy_is_prepared ()">tp_proxy_is_prepared</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> self</code></em>,
9898 +----<a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon">TpDBusDaemon</a>
9999 +----<a class="link" href="telepathy-glib-media-interfaces.html#TpMediaSessionHandler">TpMediaSessionHandler</a>
100100 +----<a class="link" href="telepathy-glib-media-interfaces.html#TpMediaStreamHandler">TpMediaStreamHandler</a>
101 +----<a class="link" href="telepathy-glib-protocol.html#TpProtocol">TpProtocol</a>
101102 </pre>
102103 </div>
103104 <div class="refsect1" title="Properties">
210211 <p class="since">Since 0.7.1</p>
211212 </div>
212213 <hr>
213 <div class="refsect2" title="tp_proxy_has_interface()">
214 <a name="tp-proxy-has-interface"></a><h3>tp_proxy_has_interface()</h3>
215 <pre class="programlisting">#define tp_proxy_has_interface(self, iface)</pre>
216 <p>
217 A macro wrapping <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface-by-id" title="tp_proxy_has_interface_by_id ()"><code class="function">tp_proxy_has_interface_by_id()</code></a>. Returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this
218 proxy implements the given interface.
214 <div class="refsect2" title="tp_proxy_has_interface ()">
215 <a name="tp-proxy-has-interface"></a><h3>tp_proxy_has_interface ()</h3>
216 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_proxy_has_interface (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> self</code></em>,
217 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *iface</code></em>);</pre>
218 <p>
219 Return whether this proxy is known to have a particular interface. In
220 versions older than 0.11.UNRELEASED, this was a macro wrapper around
221 <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface-by-id" title="tp_proxy_has_interface_by_id ()"><code class="function">tp_proxy_has_interface_by_id()</code></a>.
222 </p>
223 <p>
224 For objects that discover their interfaces at runtime, this method will
225 indicate that interfaces are missing until they are known to be present.
226 In subclasses that define features for use with <a class="link" href="telepathy-glib-proxy.html#tp-proxy-prepare-async" title="tp_proxy_prepare_async ()"><code class="function">tp_proxy_prepare_async()</code></a>,
227 successfully preparing the "core" feature for that subclass (such as
228 <a class="link" href="telepathy-glib-channel.html#TP-CHANNEL-FEATURE-CORE:CAPS" title="TP_CHANNEL_FEATURE_CORE"><code class="literal">TP_CHANNEL_FEATURE_CORE</code></a> or <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CORE:CAPS" title="TP_CONNECTION_FEATURE_CORE"><code class="literal">TP_CONNECTION_FEATURE_CORE</code></a>) implies that the
229 interfaces are known.
219230 </p>
220231 <div class="variablelist"><table border="0">
221232 <col align="left" valign="top">
227238 </tr>
228239 <tr>
229240 <td><p><span class="term"><em class="parameter"><code>iface</code></em> :</span></p></td>
230 <td>the interface required, as a string
241 <td>the D-Bus interface required, as a string
242 </td>
243 </tr>
244 <tr>
245 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
246 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this proxy implements the given interface.
231247 </td>
232248 </tr>
233249 </tbody>
240256 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_proxy_has_interface_by_id (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> self</code></em>,
241257 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> iface</code></em>);</pre>
242258 <p>
243
259 Return whether this proxy is known to have a particular interface, by its
260 quark ID. This is equivalent to using <a href="/usr/share/gtk-doc/html/glib/glib-Quarks.html#g-quark-to-string"><code class="function">g_quark_to_string()</code></a> followed by
261 <a class="link" href="telepathy-glib-proxy.html#tp-proxy-has-interface" title="tp_proxy_has_interface ()"><code class="function">tp_proxy_has_interface()</code></a>, but more efficient.
244262 </p>
245263 <div class="variablelist"><table border="0">
246264 <col align="left" valign="top">
252270 </tr>
253271 <tr>
254272 <td><p><span class="term"><em class="parameter"><code>iface</code></em> :</span></p></td>
255 <td>quark representing the interface required
273 <td>quark representing the D-Bus interface required
256274 </td>
257275 </tr>
258276 <tr>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-connection-manager.html" title="Service-side Connection Manager interface">
8 <link rel="prev" href="telepathy-glib-svc-protocol.html" title="Service-side Protocol interface">
99 <link rel="next" href="telepathy-glib-svc-account.html" title="Service-side Account interfaces">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-connection-manager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-svc-protocol.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-group.html" title="Service-side Channel Group interface">
9 <link rel="next" href="telepathy-glib-svc-channel-text.html" title="Text channels">
9 <link rel="next" href="telepathy-glib-svc-channel-contactsearch.html" title="Contact Search channels">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-channel-text.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-svc-channel-contactsearch.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-svc-channel-contactlist.synopsis" class="shortcut">Top</a>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Contact Search channels</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-channel-contactlist.html" title="Contact List channels">
9 <link rel="next" href="telepathy-glib-svc-channel-text.html" title="Text channels">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-channel-contactlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-channel-text.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-svc-channel-contactsearch.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-svc-channel-contactsearch.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-svc-channel-contactsearch.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-svc-channel-contactsearch.signals" class="shortcut">Signals</a>
30 </td></tr>
31 </table>
32 <div class="refentry" title="Contact Search channels">
33 <a name="telepathy-glib-svc-channel-contactsearch"></a><div class="titlepage"></div>
34 <div class="refnamediv"><table width="100%"><tr>
35 <td valign="top">
36 <h2><span class="refentrytitle"><a name="telepathy-glib-svc-channel-contactsearch.top_of_page"></a>Contact Search channels</span></h2>
37 <p>Contact Search channels — service-side interface for the Contact Search channel
38 type</p>
39 </td>
40 <td valign="top" align="right"></td>
41 </tr></table></div>
42 <div class="refsynopsisdiv" title="Synopsis">
43 <a name="telepathy-glib-svc-channel-contactsearch.synopsis"></a><h2>Synopsis</h2>
44 <a name="TpSvcChannelTypeContactSearch"></a><pre class="synopsis">
45 #include &lt;telepathy-glib/svc-channel.h&gt;
46
47 <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-struct" title="TpSvcChannelTypeContactSearch">TpSvcChannelTypeContactSearch</a>;
48 <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass">TpSvcChannelTypeContactSearchClass</a>;
49 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-result-received" title="tp_svc_channel_type_contact_search_emit_search_result_received ()">tp_svc_channel_type_contact_search_emit_search_result_received</a>
50 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
51 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Result</code></em>);
52 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-state-changed" title="tp_svc_channel_type_contact_search_emit_search_state_changed ()">tp_svc_channel_type_contact_search_emit_search_state_changed</a>
53 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
54 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_State</code></em>,
55 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg_Error</code></em>,
56 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Details</code></em>);
57 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-more" title="tp_svc_channel_type_contact_search_implement_more ()">tp_svc_channel_type_contact_search_implement_more</a>
58 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
59 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl" title="tp_svc_channel_type_contact_search_more_impl ()"><span class="type">tp_svc_channel_type_contact_search_more_impl</span></a> impl</code></em>);
60 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-search" title="tp_svc_channel_type_contact_search_implement_search ()">tp_svc_channel_type_contact_search_implement_search</a>
61 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
62 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl" title="tp_svc_channel_type_contact_search_search_impl ()"><span class="type">tp_svc_channel_type_contact_search_search_impl</span></a> impl</code></em>);
63 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-stop" title="tp_svc_channel_type_contact_search_implement_stop ()">tp_svc_channel_type_contact_search_implement_stop</a>
64 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
65 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl" title="tp_svc_channel_type_contact_search_stop_impl ()"><span class="type">tp_svc_channel_type_contact_search_stop_impl</span></a> impl</code></em>);
66 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl" title="tp_svc_channel_type_contact_search_more_impl ()">*tp_svc_channel_type_contact_search_more_impl</a>)
67 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
68 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
69 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-more" title="tp_svc_channel_type_contact_search_return_from_more ()">tp_svc_channel_type_contact_search_return_from_more</a>
70 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
71 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-search" title="tp_svc_channel_type_contact_search_return_from_search ()">tp_svc_channel_type_contact_search_return_from_search</a>
72 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
73 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-stop" title="tp_svc_channel_type_contact_search_return_from_stop ()">tp_svc_channel_type_contact_search_return_from_stop</a>
74 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
75 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl" title="tp_svc_channel_type_contact_search_search_impl ()">*tp_svc_channel_type_contact_search_search_impl</a>)
76 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
77 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
78 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
79 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl" title="tp_svc_channel_type_contact_search_stop_impl ()">*tp_svc_channel_type_contact_search_stop_impl</a>)
80 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
81 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
82 </pre>
83 </div>
84 <div class="refsect1" title="Object Hierarchy">
85 <a name="telepathy-glib-svc-channel-contactsearch.object-hierarchy"></a><h2>Object Hierarchy</h2>
86 <pre class="synopsis">
87 GInterface
88 +----TpSvcChannelTypeContactSearch
89 </pre>
90 </div>
91 <div class="refsect1" title="Signals">
92 <a name="telepathy-glib-svc-channel-contactsearch.signals"></a><h2>Signals</h2>
93 <pre class="synopsis">
94 "<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-result-received" title='The "search-result-received" signal'>search-result-received</a>" : Run Last / Has Details
95 "<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-state-changed" title='The "search-state-changed" signal'>search-state-changed</a>" : Run Last / Has Details
96 </pre>
97 </div>
98 <div class="refsect1" title="Description">
99 <a name="telepathy-glib-svc-channel-contactsearch.description"></a><h2>Description</h2>
100 <p>
101 Some instant messaging protocols allow searching for contacts by name or
102 other details. In Telepathy, each search attempt is represented as a
103 Channel.
104 </p>
105 <p>
106 This section documents the auto-generated C wrappers for the Contact Search
107 channel type.
108 </p>
109 </div>
110 <div class="refsect1" title="Details">
111 <a name="telepathy-glib-svc-channel-contactsearch.details"></a><h2>Details</h2>
112 <div class="refsect2" title="TpSvcChannelTypeContactSearch">
113 <a name="TpSvcChannelTypeContactSearch-struct"></a><h3>TpSvcChannelTypeContactSearch</h3>
114 <pre class="programlisting">typedef struct _TpSvcChannelTypeContactSearch TpSvcChannelTypeContactSearch;</pre>
115 <p>
116 Dummy typedef representing any implementation of this interface.
117 </p>
118 </div>
119 <hr>
120 <div class="refsect2" title="TpSvcChannelTypeContactSearchClass">
121 <a name="TpSvcChannelTypeContactSearchClass"></a><h3>TpSvcChannelTypeContactSearchClass</h3>
122 <pre class="programlisting">typedef struct _TpSvcChannelTypeContactSearchClass TpSvcChannelTypeContactSearchClass;</pre>
123 <p>
124 The class of TpSvcChannelTypeContactSearch.
125 </p>
126 <p>
127 In a full implementation of this interface (i.e. all
128 methods implemented), the interface initialization
129 function used in <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> would
130 typically look like this:
131 </p>
132 <p>
133 </p>
134 <pre class="programlisting">
135 static void
136 implement_channel_type_contact_search (gpointer klass,
137 gpointer unused G_GNUC_UNUSED)
138 {
139 #define IMPLEMENT(x) tp_svc_channel_type_contact_search_implement_##x (\
140 klass, my_object_##x)
141 IMPLEMENT (search);
142 IMPLEMENT (more);
143 IMPLEMENT (stop);
144 #undef IMPLEMENT
145 }
146 </pre>
147 <p>
148 </p>
149 </div>
150 <hr>
151 <div class="refsect2" title="tp_svc_channel_type_contact_search_emit_search_result_received ()">
152 <a name="tp-svc-channel-type-contact-search-emit-search-result-received"></a><h3>tp_svc_channel_type_contact_search_emit_search_result_received ()</h3>
153 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_emit_search_result_received
154 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
155 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Result</code></em>);</pre>
156 <p>
157 Type-safe wrapper around g_signal_emit to emit the
158 SearchResultReceived signal on interface org.freedesktop.Telepathy.Channel.Type.ContactSearch.
159 </p>
160 <div class="variablelist"><table border="0">
161 <col align="left" valign="top">
162 <tbody>
163 <tr>
164 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
165 <td>The object implementing this interface
166 </td>
167 </tr>
168 <tr>
169 <td><p><span class="term"><em class="parameter"><code>arg_Result</code></em> :</span></p></td>
170 <td>GHashTable * (FIXME, generate documentation)
171 </td>
172 </tr>
173 </tbody>
174 </table></div>
175 </div>
176 <hr>
177 <div class="refsect2" title="tp_svc_channel_type_contact_search_emit_search_state_changed ()">
178 <a name="tp-svc-channel-type-contact-search-emit-search-state-changed"></a><h3>tp_svc_channel_type_contact_search_emit_search_state_changed ()</h3>
179 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_emit_search_state_changed
180 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
181 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_State</code></em>,
182 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg_Error</code></em>,
183 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *arg_Details</code></em>);</pre>
184 <p>
185 Type-safe wrapper around g_signal_emit to emit the
186 SearchStateChanged signal on interface org.freedesktop.Telepathy.Channel.Type.ContactSearch.
187 </p>
188 <div class="variablelist"><table border="0">
189 <col align="left" valign="top">
190 <tbody>
191 <tr>
192 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
193 <td>The object implementing this interface
194 </td>
195 </tr>
196 <tr>
197 <td><p><span class="term"><em class="parameter"><code>arg_State</code></em> :</span></p></td>
198 <td>guint (FIXME, generate documentation)
199 </td>
200 </tr>
201 <tr>
202 <td><p><span class="term"><em class="parameter"><code>arg_Error</code></em> :</span></p></td>
203 <td>const gchar * (FIXME, generate documentation)
204 </td>
205 </tr>
206 <tr>
207 <td><p><span class="term"><em class="parameter"><code>arg_Details</code></em> :</span></p></td>
208 <td>GHashTable * (FIXME, generate documentation)
209 </td>
210 </tr>
211 </tbody>
212 </table></div>
213 </div>
214 <hr>
215 <div class="refsect2" title="tp_svc_channel_type_contact_search_implement_more ()">
216 <a name="tp-svc-channel-type-contact-search-implement-more"></a><h3>tp_svc_channel_type_contact_search_implement_more ()</h3>
217 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_implement_more
218 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
219 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl" title="tp_svc_channel_type_contact_search_more_impl ()"><span class="type">tp_svc_channel_type_contact_search_more_impl</span></a> impl</code></em>);</pre>
220 <p>
221 Register an implementation for the More method in the vtable
222 of an implementation of this interface. To be called from
223 the interface init function.
224 </p>
225 <div class="variablelist"><table border="0">
226 <col align="left" valign="top">
227 <tbody>
228 <tr>
229 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
230 <td>A class whose instances implement this interface
231 </td>
232 </tr>
233 <tr>
234 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
235 <td>A callback used to implement the More D-Bus method
236 </td>
237 </tr>
238 </tbody>
239 </table></div>
240 </div>
241 <hr>
242 <div class="refsect2" title="tp_svc_channel_type_contact_search_implement_search ()">
243 <a name="tp-svc-channel-type-contact-search-implement-search"></a><h3>tp_svc_channel_type_contact_search_implement_search ()</h3>
244 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_implement_search
245 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
246 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl" title="tp_svc_channel_type_contact_search_search_impl ()"><span class="type">tp_svc_channel_type_contact_search_search_impl</span></a> impl</code></em>);</pre>
247 <p>
248 Register an implementation for the Search method in the vtable
249 of an implementation of this interface. To be called from
250 the interface init function.
251 </p>
252 <div class="variablelist"><table border="0">
253 <col align="left" valign="top">
254 <tbody>
255 <tr>
256 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
257 <td>A class whose instances implement this interface
258 </td>
259 </tr>
260 <tr>
261 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
262 <td>A callback used to implement the Search D-Bus method
263 </td>
264 </tr>
265 </tbody>
266 </table></div>
267 </div>
268 <hr>
269 <div class="refsect2" title="tp_svc_channel_type_contact_search_implement_stop ()">
270 <a name="tp-svc-channel-type-contact-search-implement-stop"></a><h3>tp_svc_channel_type_contact_search_implement_stop ()</h3>
271 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_implement_stop
272 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass" title="TpSvcChannelTypeContactSearchClass"><span class="type">TpSvcChannelTypeContactSearchClass</span></a> *klass</code></em>,
273 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl" title="tp_svc_channel_type_contact_search_stop_impl ()"><span class="type">tp_svc_channel_type_contact_search_stop_impl</span></a> impl</code></em>);</pre>
274 <p>
275 Register an implementation for the Stop method in the vtable
276 of an implementation of this interface. To be called from
277 the interface init function.
278 </p>
279 <div class="variablelist"><table border="0">
280 <col align="left" valign="top">
281 <tbody>
282 <tr>
283 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
284 <td>A class whose instances implement this interface
285 </td>
286 </tr>
287 <tr>
288 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
289 <td>A callback used to implement the Stop D-Bus method
290 </td>
291 </tr>
292 </tbody>
293 </table></div>
294 </div>
295 <hr>
296 <div class="refsect2" title="tp_svc_channel_type_contact_search_more_impl ()">
297 <a name="tp-svc-channel-type-contact-search-more-impl"></a><h3>tp_svc_channel_type_contact_search_more_impl ()</h3>
298 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_channel_type_contact_search_more_impl)
299 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
300 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
301 <p>
302 The signature of an implementation of the D-Bus method
303 More on interface org.freedesktop.Telepathy.Channel.Type.ContactSearch.
304 </p>
305 <div class="variablelist"><table border="0">
306 <col align="left" valign="top">
307 <tbody>
308 <tr>
309 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
310 <td>The object implementing this interface
311 </td>
312 </tr>
313 <tr>
314 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
315 <td>Used to return values or throw an error
316 </td>
317 </tr>
318 </tbody>
319 </table></div>
320 </div>
321 <hr>
322 <div class="refsect2" title="tp_svc_channel_type_contact_search_return_from_more ()">
323 <a name="tp-svc-channel-type-contact-search-return-from-more"></a><h3>tp_svc_channel_type_contact_search_return_from_more ()</h3>
324 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_return_from_more
325 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
326 <p>
327 Return successfully by calling <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#dbus-g-method-return"><code class="function">dbus_g_method_return()</code></a>.
328 This inline function exists only to provide type-safety.
329 </p>
330 <div class="variablelist"><table border="0">
331 <col align="left" valign="top">
332 <tbody><tr>
333 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
334 <td>The D-Bus method invocation context
335 </td>
336 </tr></tbody>
337 </table></div>
338 </div>
339 <hr>
340 <div class="refsect2" title="tp_svc_channel_type_contact_search_return_from_search ()">
341 <a name="tp-svc-channel-type-contact-search-return-from-search"></a><h3>tp_svc_channel_type_contact_search_return_from_search ()</h3>
342 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_return_from_search
343 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
344 <p>
345 Return successfully by calling <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#dbus-g-method-return"><code class="function">dbus_g_method_return()</code></a>.
346 This inline function exists only to provide type-safety.
347 </p>
348 <div class="variablelist"><table border="0">
349 <col align="left" valign="top">
350 <tbody><tr>
351 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
352 <td>The D-Bus method invocation context
353 </td>
354 </tr></tbody>
355 </table></div>
356 </div>
357 <hr>
358 <div class="refsect2" title="tp_svc_channel_type_contact_search_return_from_stop ()">
359 <a name="tp-svc-channel-type-contact-search-return-from-stop"></a><h3>tp_svc_channel_type_contact_search_return_from_stop ()</h3>
360 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_type_contact_search_return_from_stop
361 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
362 <p>
363 Return successfully by calling <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#dbus-g-method-return"><code class="function">dbus_g_method_return()</code></a>.
364 This inline function exists only to provide type-safety.
365 </p>
366 <div class="variablelist"><table border="0">
367 <col align="left" valign="top">
368 <tbody><tr>
369 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
370 <td>The D-Bus method invocation context
371 </td>
372 </tr></tbody>
373 </table></div>
374 </div>
375 <hr>
376 <div class="refsect2" title="tp_svc_channel_type_contact_search_search_impl ()">
377 <a name="tp-svc-channel-type-contact-search-search-impl"></a><h3>tp_svc_channel_type_contact_search_search_impl ()</h3>
378 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_channel_type_contact_search_search_impl)
379 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
380 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Terms</code></em>,
381 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
382 <p>
383 The signature of an implementation of the D-Bus method
384 Search on interface org.freedesktop.Telepathy.Channel.Type.ContactSearch.
385 </p>
386 <div class="variablelist"><table border="0">
387 <col align="left" valign="top">
388 <tbody>
389 <tr>
390 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
391 <td>The object implementing this interface
392 </td>
393 </tr>
394 <tr>
395 <td><p><span class="term"><em class="parameter"><code>in_Terms</code></em> :</span></p></td>
396 <td>GHashTable * (FIXME, generate documentation)
397 </td>
398 </tr>
399 <tr>
400 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
401 <td>Used to return values or throw an error
402 </td>
403 </tr>
404 </tbody>
405 </table></div>
406 </div>
407 <hr>
408 <div class="refsect2" title="tp_svc_channel_type_contact_search_stop_impl ()">
409 <a name="tp-svc-channel-type-contact-search-stop-impl"></a><h3>tp_svc_channel_type_contact_search_stop_impl ()</h3>
410 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_channel_type_contact_search_stop_impl)
411 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *self</code></em>,
412 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
413 <p>
414 The signature of an implementation of the D-Bus method
415 Stop on interface org.freedesktop.Telepathy.Channel.Type.ContactSearch.
416 </p>
417 <div class="variablelist"><table border="0">
418 <col align="left" valign="top">
419 <tbody>
420 <tr>
421 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
422 <td>The object implementing this interface
423 </td>
424 </tr>
425 <tr>
426 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
427 <td>Used to return values or throw an error
428 </td>
429 </tr>
430 </tbody>
431 </table></div>
432 </div>
433 </div>
434 <div class="refsect1" title="Signal Details">
435 <a name="telepathy-glib-svc-channel-contactsearch.signal-details"></a><h2>Signal Details</h2>
436 <div class="refsect2" title='The "search-result-received" signal'>
437 <a name="TpSvcChannelTypeContactSearch-search-result-received"></a><h3>The <code class="literal">"search-result-received"</code> signal</h3>
438 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *arg_Result,
439 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last / Has Details</pre>
440 <p>
441 The SearchResultReceived D-Bus signal is emitted whenever this GObject signal is.
442 </p>
443 <div class="variablelist"><table border="0">
444 <col align="left" valign="top">
445 <tbody>
446 <tr>
447 <td><p><span class="term"><em class="parameter"><code>arg_Result</code></em> :</span></p></td>
448 <td>GHashTable * (FIXME, generate documentation)
449 </td>
450 </tr>
451 <tr>
452 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
453 <td>user data set when the signal handler was connected.</td>
454 </tr>
455 </tbody>
456 </table></div>
457 </div>
458 <hr>
459 <div class="refsect2" title='The "search-state-changed" signal'>
460 <a name="TpSvcChannelTypeContactSearch-search-state-changed"></a><h3>The <code class="literal">"search-state-changed"</code> signal</h3>
461 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch"><span class="type">TpSvcChannelTypeContactSearch</span></a> *arg_State,
462 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_Error,
463 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg_Details,
464 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last / Has Details</pre>
465 <p>
466 The SearchStateChanged D-Bus signal is emitted whenever this GObject signal is.
467 </p>
468 <div class="variablelist"><table border="0">
469 <col align="left" valign="top">
470 <tbody>
471 <tr>
472 <td><p><span class="term"><em class="parameter"><code>arg_State</code></em> :</span></p></td>
473 <td>guint (FIXME, generate documentation)
474 </td>
475 </tr>
476 <tr>
477 <td><p><span class="term"><em class="parameter"><code>arg_Error</code></em> :</span></p></td>
478 <td>const gchar * (FIXME, generate documentation)
479 </td>
480 </tr>
481 <tr>
482 <td><p><span class="term"><em class="parameter"><code>arg_Details</code></em> :</span></p></td>
483 <td>GHashTable * (FIXME, generate documentation)
484 </td>
485 </tr>
486 <tr>
487 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
488 <td>user data set when the signal handler was connected.</td>
489 </tr>
490 </tbody>
491 </table></div>
492 </div>
493 </div>
494 </div>
495 <div class="footer">
496 <hr>
497 Generated by GTK-Doc V1.15</div>
498 </body>
499 </html>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-channel-contactlist.html" title="Contact List channels">
8 <link rel="prev" href="telepathy-glib-svc-channel-contactsearch.html" title="Contact Search channels">
99 <link rel="next" href="telepathy-glib-svc-channel-media.html" title="Media channels">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-channel-contactlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-svc-channel-contactsearch.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-media-interfaces.html" title="Service-side media streaming helper interfaces">
9 <link rel="next" href="telepathy-glib-svc-account-manager.html" title="Service-side Account Manager interface">
9 <link rel="next" href="telepathy-glib-svc-protocol.html" title="Service-side Protocol interface">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-account-manager.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-svc-protocol.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-svc-connection-manager.synopsis" class="shortcut">Top</a>
146146 <a name="telepathy-glib-svc-generic.implementations"></a><h2>Known Implementations</h2>
147147 <p>
148148 TpSvcDBusProperties is implemented by
149 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>, <a class="link" href="TpBaseConnection.html" title="TpBaseConnection">TpBaseConnection</a>, <a class="link" href="telepathy-glib-debug-sender.html#TpDebugSender">TpDebugSender</a>, <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a>, <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler">TpSimpleHandler</a> and <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>.</p>
149 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>, <a class="link" href="TpBaseConnection.html" title="TpBaseConnection">TpBaseConnection</a>, <a class="link" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager">TpBaseConnectionManager</a>, <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol">TpBaseProtocol</a>, <a class="link" href="telepathy-glib-debug-sender.html#TpDebugSender">TpDebugSender</a>, <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a>, <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler">TpSimpleHandler</a> and <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>.</p>
150150 </div>
151151 <div class="refsect1" title="Signals">
152152 <a name="telepathy-glib-svc-generic.signals"></a><h2>Signals</h2>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Service-side Protocol interface</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-connection-manager.html" title="Service-side Connection Manager interface">
9 <link rel="next" href="telepathy-glib-svc-account-manager.html" title="Service-side Account Manager interface">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-connection-manager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-account-manager.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-svc-protocol.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-svc-protocol.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-svc-protocol.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-svc-protocol.implementations" class="shortcut">Known Implementations</a>
30 </td></tr>
31 </table>
32 <div class="refentry" title="Service-side Protocol interface">
33 <a name="telepathy-glib-svc-protocol"></a><div class="titlepage"></div>
34 <div class="refnamediv"><table width="100%"><tr>
35 <td valign="top">
36 <h2><span class="refentrytitle"><a name="telepathy-glib-svc-protocol.top_of_page"></a>Service-side Protocol interface</span></h2>
37 <p>Service-side Protocol interface — GInterface for Telepathy Protocol objects</p>
38 </td>
39 <td valign="top" align="right"></td>
40 </tr></table></div>
41 <div class="refsynopsisdiv" title="Synopsis">
42 <a name="telepathy-glib-svc-protocol.synopsis"></a><h2>Synopsis</h2>
43 <a name="TpSvcProtocol"></a><pre class="synopsis">
44 #include &lt;telepathy-glib/svc-protocol.h&gt;
45
46 <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol-struct" title="TpSvcProtocol">TpSvcProtocol</a>;
47 <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocolClass" title="TpSvcProtocolClass">TpSvcProtocolClass</a>;
48
49 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl" title="tp_svc_protocol_identify_account_impl ()">*tp_svc_protocol_identify_account_impl</a>)
50 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> *self</code></em>,
51 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Parameters</code></em>,
52 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
53 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-identify-account" title="tp_svc_protocol_implement_identify_account ()">tp_svc_protocol_implement_identify_account</a>
54 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocolClass" title="TpSvcProtocolClass"><span class="type">TpSvcProtocolClass</span></a> *klass</code></em>,
55 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl" title="tp_svc_protocol_identify_account_impl ()"><span class="type">tp_svc_protocol_identify_account_impl</span></a> impl</code></em>);
56 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-normalize-contact" title="tp_svc_protocol_implement_normalize_contact ()">tp_svc_protocol_implement_normalize_contact</a>
57 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocolClass" title="TpSvcProtocolClass"><span class="type">TpSvcProtocolClass</span></a> *klass</code></em>,
58 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl" title="tp_svc_protocol_normalize_contact_impl ()"><span class="type">tp_svc_protocol_normalize_contact_impl</span></a> impl</code></em>);
59 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl" title="tp_svc_protocol_normalize_contact_impl ()">*tp_svc_protocol_normalize_contact_impl</a>)
60 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> *self</code></em>,
61 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *in_Contact_ID</code></em>,
62 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);
63 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-identify-account" title="tp_svc_protocol_return_from_identify_account ()">tp_svc_protocol_return_from_identify_account</a>
64 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>,
65 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Account_ID</code></em>);
66 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-normalize-contact" title="tp_svc_protocol_return_from_normalize_contact ()">tp_svc_protocol_return_from_normalize_contact</a>
67 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>,
68 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Normalized_Contact_ID</code></em>);
69 </pre>
70 </div>
71 <div class="refsect1" title="Object Hierarchy">
72 <a name="telepathy-glib-svc-protocol.object-hierarchy"></a><h2>Object Hierarchy</h2>
73 <pre class="synopsis">
74 GInterface
75 +----TpSvcProtocol
76 </pre>
77 </div>
78 <div class="refsect1" title="Known Implementations">
79 <a name="telepathy-glib-svc-protocol.implementations"></a><h2>Known Implementations</h2>
80 <p>
81 TpSvcProtocol is implemented by
82 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol">TpBaseProtocol</a>.</p>
83 </div>
84 <div class="refsect1" title="Description">
85 <a name="telepathy-glib-svc-protocol.description"></a><h2>Description</h2>
86 <p>
87 The <a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> interface (auto-generated from the Telepathy
88 spec) makes it easier to export an object implementing the Telepathy
89 Protocol interface.
90 </p>
91 </div>
92 <div class="refsect1" title="Details">
93 <a name="telepathy-glib-svc-protocol.details"></a><h2>Details</h2>
94 <div class="refsect2" title="TpSvcProtocol">
95 <a name="TpSvcProtocol-struct"></a><h3>TpSvcProtocol</h3>
96 <pre class="programlisting">typedef struct _TpSvcProtocol TpSvcProtocol;</pre>
97 <p>
98 Dummy typedef representing any implementation of this interface.
99 </p>
100 </div>
101 <hr>
102 <div class="refsect2" title="TpSvcProtocolClass">
103 <a name="TpSvcProtocolClass"></a><h3>TpSvcProtocolClass</h3>
104 <pre class="programlisting">typedef struct _TpSvcProtocolClass TpSvcProtocolClass;</pre>
105 <p>
106 The class of TpSvcProtocol.
107 </p>
108 <p>
109 In a full implementation of this interface (i.e. all
110 methods implemented), the interface initialization
111 function used in <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> would
112 typically look like this:
113 </p>
114 <p>
115 </p>
116 <pre class="programlisting">
117 static void
118 implement_protocol (gpointer klass,
119 gpointer unused G_GNUC_UNUSED)
120 {
121 #define IMPLEMENT(x) tp_svc_protocol_implement_##x (\
122 klass, my_object_##x)
123 IMPLEMENT (identify_account);
124 IMPLEMENT (normalize_contact);
125 #undef IMPLEMENT
126 }
127 </pre>
128 <p>
129 </p>
130 </div>
131 <hr>
132 <div class="refsect2" title="tp_svc_protocol_identify_account_impl ()">
133 <a name="tp-svc-protocol-identify-account-impl"></a><h3>tp_svc_protocol_identify_account_impl ()</h3>
134 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_protocol_identify_account_impl)
135 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> *self</code></em>,
136 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *in_Parameters</code></em>,
137 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
138 <p>
139 The signature of an implementation of the D-Bus method
140 IdentifyAccount on interface org.freedesktop.Telepathy.Protocol.
141 </p>
142 <div class="variablelist"><table border="0">
143 <col align="left" valign="top">
144 <tbody>
145 <tr>
146 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
147 <td>The object implementing this interface
148 </td>
149 </tr>
150 <tr>
151 <td><p><span class="term"><em class="parameter"><code>in_Parameters</code></em> :</span></p></td>
152 <td>GHashTable * (FIXME, generate documentation)
153 </td>
154 </tr>
155 <tr>
156 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
157 <td>Used to return values or throw an error
158 </td>
159 </tr>
160 </tbody>
161 </table></div>
162 </div>
163 <hr>
164 <div class="refsect2" title="tp_svc_protocol_implement_identify_account ()">
165 <a name="tp-svc-protocol-implement-identify-account"></a><h3>tp_svc_protocol_implement_identify_account ()</h3>
166 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_protocol_implement_identify_account
167 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocolClass" title="TpSvcProtocolClass"><span class="type">TpSvcProtocolClass</span></a> *klass</code></em>,
168 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl" title="tp_svc_protocol_identify_account_impl ()"><span class="type">tp_svc_protocol_identify_account_impl</span></a> impl</code></em>);</pre>
169 <p>
170 Register an implementation for the IdentifyAccount method in the vtable
171 of an implementation of this interface. To be called from
172 the interface init function.
173 </p>
174 <div class="variablelist"><table border="0">
175 <col align="left" valign="top">
176 <tbody>
177 <tr>
178 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
179 <td>A class whose instances implement this interface
180 </td>
181 </tr>
182 <tr>
183 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
184 <td>A callback used to implement the IdentifyAccount D-Bus method
185 </td>
186 </tr>
187 </tbody>
188 </table></div>
189 </div>
190 <hr>
191 <div class="refsect2" title="tp_svc_protocol_implement_normalize_contact ()">
192 <a name="tp-svc-protocol-implement-normalize-contact"></a><h3>tp_svc_protocol_implement_normalize_contact ()</h3>
193 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_protocol_implement_normalize_contact
194 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocolClass" title="TpSvcProtocolClass"><span class="type">TpSvcProtocolClass</span></a> *klass</code></em>,
195 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl" title="tp_svc_protocol_normalize_contact_impl ()"><span class="type">tp_svc_protocol_normalize_contact_impl</span></a> impl</code></em>);</pre>
196 <p>
197 Register an implementation for the NormalizeContact method in the vtable
198 of an implementation of this interface. To be called from
199 the interface init function.
200 </p>
201 <div class="variablelist"><table border="0">
202 <col align="left" valign="top">
203 <tbody>
204 <tr>
205 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
206 <td>A class whose instances implement this interface
207 </td>
208 </tr>
209 <tr>
210 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
211 <td>A callback used to implement the NormalizeContact D-Bus method
212 </td>
213 </tr>
214 </tbody>
215 </table></div>
216 </div>
217 <hr>
218 <div class="refsect2" title="tp_svc_protocol_normalize_contact_impl ()">
219 <a name="tp-svc-protocol-normalize-contact-impl"></a><h3>tp_svc_protocol_normalize_contact_impl ()</h3>
220 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_protocol_normalize_contact_impl)
221 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-protocol.html#TpSvcProtocol"><span class="type">TpSvcProtocol</span></a> *self</code></em>,
222 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *in_Contact_ID</code></em>,
223 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>);</pre>
224 <p>
225 The signature of an implementation of the D-Bus method
226 NormalizeContact on interface org.freedesktop.Telepathy.Protocol.
227 </p>
228 <div class="variablelist"><table border="0">
229 <col align="left" valign="top">
230 <tbody>
231 <tr>
232 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
233 <td>The object implementing this interface
234 </td>
235 </tr>
236 <tr>
237 <td><p><span class="term"><em class="parameter"><code>in_Contact_ID</code></em> :</span></p></td>
238 <td>const gchar * (FIXME, generate documentation)
239 </td>
240 </tr>
241 <tr>
242 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
243 <td>Used to return values or throw an error
244 </td>
245 </tr>
246 </tbody>
247 </table></div>
248 </div>
249 <hr>
250 <div class="refsect2" title="tp_svc_protocol_return_from_identify_account ()">
251 <a name="tp-svc-protocol-return-from-identify-account"></a><h3>tp_svc_protocol_return_from_identify_account ()</h3>
252 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_protocol_return_from_identify_account
253 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>,
254 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Account_ID</code></em>);</pre>
255 <p>
256 Return successfully by calling <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#dbus-g-method-return"><code class="function">dbus_g_method_return()</code></a>.
257 This inline function exists only to provide type-safety.
258 </p>
259 <div class="variablelist"><table border="0">
260 <col align="left" valign="top">
261 <tbody>
262 <tr>
263 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
264 <td>The D-Bus method invocation context
265 </td>
266 </tr>
267 <tr>
268 <td><p><span class="term"><em class="parameter"><code>out_Account_ID</code></em> :</span></p></td>
269 <td>const gchar * (FIXME, generate documentation)
270 </td>
271 </tr>
272 </tbody>
273 </table></div>
274 </div>
275 <hr>
276 <div class="refsect2" title="tp_svc_protocol_return_from_normalize_contact ()">
277 <a name="tp-svc-protocol-return-from-normalize-contact"></a><h3>tp_svc_protocol_return_from_normalize_contact ()</h3>
278 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_protocol_return_from_normalize_contact
279 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> *context</code></em>,
280 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *out_Normalized_Contact_ID</code></em>);</pre>
281 <p>
282 Return successfully by calling <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#dbus-g-method-return"><code class="function">dbus_g_method_return()</code></a>.
283 This inline function exists only to provide type-safety.
284 </p>
285 <div class="variablelist"><table border="0">
286 <col align="left" valign="top">
287 <tbody>
288 <tr>
289 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
290 <td>The D-Bus method invocation context
291 </td>
292 </tr>
293 <tr>
294 <td><p><span class="term"><em class="parameter"><code>out_Normalized_Contact_ID</code></em> :</span></p></td>
295 <td>const gchar * (FIXME, generate documentation)
296 </td>
297 </tr>
298 </tbody>
299 </table></div>
300 </div>
301 </div>
302 <div class="refsect1" title="See Also">
303 <a name="telepathy-glib-svc-protocol.see-also"></a><h2>See Also</h2>
304 <a class="link" href="telepathy-glib-base-protocol.html#TpBaseProtocol"><span class="type">TpBaseProtocol</span></a>
305 </div>
306 </div>
307 <div class="footer">
308 <hr>
309 Generated by GTK-Doc V1.15</div>
310 </body>
311 </html>
11461146 <p>
11471147 </p>
11481148 <div class="example">
1149 <a name="id946166"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
1149 <a name="id1192927"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
11501150 <div class="example-contents">
11511151 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
11521152 <tbody>
12121212 <p>
12131213 </p>
12141214 <div class="example">
1215 <a name="id946345"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
1215 <a name="id1193106"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
12161216 <div class="example-contents">
12171217 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
12181218 <tbody>
2020 </sub>
2121 <sub name="Client-side proxies" link="ch-client.html">
2222 <sub name="TpConnectionManager" link="telepathy-glib-connection-manager.html"/>
23 <sub name="TpProtocol" link="telepathy-glib-protocol.html"/>
2324 <sub name="TpConnection" link="telepathy-glib-connection.html"/>
2425 <sub name="TpContact" link="telepathy-glib-contact.html"/>
2526 <sub name="TpCapabilities" link="telepathy-glib-capabilities.html"/>
4243 <sub name="Tubes channels" link="telepathy-glib-channel-tubes.html"/>
4344 <sub name="Tube channels" link="telepathy-glib-channel-tube.html"/>
4445 <sub name="Room List channels" link="telepathy-glib-channel-roomlist.html"/>
46 <sub name="Contact Search channels" link="telepathy-glib-channel-contactsearch.html"/>
4547 <sub name="Connection and Channel Anonymity interfaces" link="telepathy-glib-cli-anonymity.html"/>
4648 <sub name="Connection and Channel ServicePoint interfaces" link="telepathy-glib-cli-service-point.html"/>
4749 <sub name="TpMediaSessionHandler, TpMediaStreamHandler" link="telepathy-glib-media-interfaces.html"/>
5860 <sub name="Service-side Channel base interface" link="telepathy-glib-svc-channel.html"/>
5961 <sub name="Service-side Channel Group interface" link="telepathy-glib-svc-channel-group.html"/>
6062 <sub name="Contact List channels" link="telepathy-glib-svc-channel-contactlist.html"/>
63 <sub name="Contact Search channels" link="telepathy-glib-svc-channel-contactsearch.html"/>
6164 <sub name="Text channels" link="telepathy-glib-svc-channel-text.html"/>
6265 <sub name="Media channels" link="telepathy-glib-svc-channel-media.html"/>
6366 <sub name="File Transfer channels" link="telepathy-glib-svc-channel-file-transfer.html"/>
7073 <sub name="Service-side Connection and Channel ServicePoint interfaces" link="telepathy-glib-svc-service-point.html"/>
7174 <sub name="Service-side media streaming helper interfaces" link="telepathy-glib-svc-media-interfaces.html"/>
7275 <sub name="Service-side Connection Manager interface" link="telepathy-glib-svc-connection-manager.html"/>
76 <sub name="Service-side Protocol interface" link="telepathy-glib-svc-protocol.html"/>
7377 <sub name="Service-side Account Manager interface" link="telepathy-glib-svc-account-manager.html"/>
7478 <sub name="Service-side Account interfaces" link="telepathy-glib-svc-account.html"/>
7579 <sub name="Service-side Channel Dispatcher interface" link="telepathy-glib-svc-channel-dispatcher.html"/>
8084 <sub name="Service-side implementation" link="ch-service-base.html">
8185 <sub name="Connection manager life cycle" link="telepathy-glib-run.html"/>
8286 <sub name="TpBaseConnectionManager" link="TpBaseConnectionManager.html"/>
87 <sub name="TpBaseProtocol" link="telepathy-glib-base-protocol.html"/>
8388 <sub name="TpBaseConnection" link="TpBaseConnection.html"/>
8489 <sub name="TpChannelFactoryIface" link="TpChannelFactoryIface.html"/>
8590 <sub name="TpChannelManager" link="TpChannelManager.html"/>
120125 <function name="TpProxyFeature" link="telepathy-glib-proxy.html#TpProxyFeature"/>
121126 <function name="TpProxyClassFeatureListFunc ()" link="telepathy-glib-proxy.html#TpProxyClassFeatureListFunc"/>
122127 <function name="TpProxyClass" link="telepathy-glib-proxy.html#TpProxyClass"/>
123 <function name="tp_proxy_has_interface()" link="telepathy-glib-proxy.html#tp-proxy-has-interface"/>
128 <function name="tp_proxy_has_interface ()" link="telepathy-glib-proxy.html#tp-proxy-has-interface"/>
124129 <function name="tp_proxy_has_interface_by_id ()" link="telepathy-glib-proxy.html#tp-proxy-has-interface-by-id"/>
125130 <function name="tp_proxy_is_prepared ()" link="telepathy-glib-proxy.html#tp-proxy-is-prepared"/>
126131 <function name="tp_proxy_prepare_async ()" link="telepathy-glib-proxy.html#tp-proxy-prepare-async"/>
344349 <function name="TP_IFACE_QUARK_DEBUG" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-DEBUG:CAPS"/>
345350 <function name="TP_IFACE_CONNECTION_MANAGER" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-MANAGER:CAPS"/>
346351 <function name="TP_IFACE_QUARK_CONNECTION_MANAGER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-MANAGER:CAPS"/>
352 <function name="TP_IFACE_PROTOCOL" link="telepathy-glib-interfaces.html#TP-IFACE-PROTOCOL:CAPS"/>
353 <function name="TP_IFACE_QUARK_PROTOCOL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-PROTOCOL:CAPS"/>
347354 <function name="TP_IFACE_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION:CAPS"/>
348355 <function name="TP_IFACE_QUARK_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS"/>
349356 <function name="TP_IFACE_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS"/>
378385 <function name="TP_IFACE_QUARK_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS"/>
379386 <function name="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
380387 <function name="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
388 <function name="TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"/>
389 <function name="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"/>
381390 <function name="TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS"/>
382391 <function name="TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-FILE-TRANSFER:CAPS"/>
383392 <function name="TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-STREAMED-MEDIA:CAPS"/>
509518 <function name="TP_PROP_CHANNEL_TARGET_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE:CAPS"/>
510519 <function name="TP_PROP_CHANNEL_TARGET_HANDLE_TYPE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE-TYPE:CAPS"/>
511520 <function name="TP_PROP_CHANNEL_TARGET_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-ID:CAPS"/>
521 <function name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS"/>
522 <function name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS"/>
523 <function name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS"/>
524 <function name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS"/>
512525 <function name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS"/>
513526 <function name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SERVICE-NAME:CAPS"/>
514527 <function name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SUPPORTED-ACCESS-CONTROLS:CAPS"/>
573586 <function name="TP_PROP_MEDIA_STREAM_HANDLER_NAT_TRAVERSAL" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-NAT-TRAVERSAL:CAPS"/>
574587 <function name="TP_PROP_MEDIA_STREAM_HANDLER_RELAY_INFO" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-RELAY-INFO:CAPS"/>
575588 <function name="TP_PROP_MEDIA_STREAM_HANDLER_STUN_SERVERS" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-STUN-SERVERS:CAPS"/>
589 <function name="TP_PROP_PROTOCOL_CONNECTION_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS"/>
590 <function name="TP_PROP_PROTOCOL_ENGLISH_NAME" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS"/>
591 <function name="TP_PROP_PROTOCOL_ICON" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ICON:CAPS"/>
592 <function name="TP_PROP_PROTOCOL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-INTERFACES:CAPS"/>
593 <function name="TP_PROP_PROTOCOL_PARAMETERS" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-PARAMETERS:CAPS"/>
594 <function name="TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS"/>
595 <function name="TP_PROP_PROTOCOL_VCARD_FIELD" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-VCARD-FIELD:CAPS"/>
576596 <function name="TP_TOKEN_CONNECTION_CONTACT_ID" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-CONTACT-ID:CAPS"/>
577597 <function name="TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS"/>
578598 <function name="TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS"/>
805825 <function name="TP_STRUCT_TYPE_SERVICE_POINT" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS"/>
806826 <function name="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS"/>
807827 <function name="TP_STRUCT_TYPE_SERVICE_POINT_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS"/>
828 <function name="enum TpChannelContactSearchState" link="telepathy-glib-gtypes.html#TpChannelContactSearchState"/>
829 <function name="NUM_TP_CHANNEL_CONTACT_SEARCH_STATES" link="telepathy-glib-gtypes.html#NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS"/>
830 <function name="TP_HASH_TYPE_CONTACT_SEARCH_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS"/>
831 <function name="TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS"/>
808832 <function name="TP_STRUCT_TYPE_AVATAR" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS"/>
809833 <function name="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS"/>
810834 <function name="TP_ARRAY_TYPE_DISPATCH_OPERATION_DETAILS_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS"/>
835859 <function name="tp_connection_manager_dup_protocol_names ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-dup-protocol-names"/>
836860 <function name="tp_connection_manager_has_protocol ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-has-protocol"/>
837861 <function name="tp_connection_manager_get_protocol ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol"/>
862 <function name="tp_connection_manager_get_protocol_object ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol-object"/>
838863 <function name="TpConnectionManagerProtocol" link="telepathy-glib-connection-manager.html#TpConnectionManagerProtocol"/>
839864 <function name="tp_connection_manager_protocol_can_register ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-protocol-can-register"/>
840865 <function name="tp_connection_manager_protocol_dup_param_names ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-protocol-dup-param-names"/>
873898 <function name="The &quot;activated&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-activated"/>
874899 <function name="The &quot;exited&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-exited"/>
875900 <function name="The &quot;got-info&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-got-info"/>
901 <function name="TpProtocol" link="telepathy-glib-protocol.html#TpProtocol-struct"/>
902 <function name="TpProtocolClass" link="telepathy-glib-protocol.html#TpProtocolClass"/>
903 <function name="tp_protocol_new ()" link="telepathy-glib-protocol.html#tp-protocol-new"/>
904 <function name="tp_protocol_get_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-name"/>
905 <function name="tp_protocol_init_known_interfaces ()" link="telepathy-glib-protocol.html#tp-protocol-init-known-interfaces"/>
906 <function name="TP_PROTOCOL_FEATURE_PARAMETERS" link="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS"/>
907 <function name="tp_protocol_dup_param_names ()" link="telepathy-glib-protocol.html#tp-protocol-dup-param-names"/>
908 <function name="tp_protocol_get_param ()" link="telepathy-glib-protocol.html#tp-protocol-get-param"/>
909 <function name="tp_protocol_has_param ()" link="telepathy-glib-protocol.html#tp-protocol-has-param"/>
910 <function name="tp_protocol_can_register ()" link="telepathy-glib-protocol.html#tp-protocol-can-register"/>
911 <function name="TP_PROTOCOL_FEATURE_CORE" link="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS"/>
912 <function name="tp_protocol_get_capabilities ()" link="telepathy-glib-protocol.html#tp-protocol-get-capabilities"/>
913 <function name="tp_protocol_get_english_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-english-name"/>
914 <function name="tp_protocol_get_icon_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-icon-name"/>
915 <function name="tp_protocol_get_vcard_field ()" link="telepathy-glib-protocol.html#tp-protocol-get-vcard-field"/>
916 <function name="tp_cli_protocol_call_identify_account ()" link="telepathy-glib-protocol.html#tp-cli-protocol-call-identify-account"/>
917 <function name="tp_cli_protocol_call_normalize_contact ()" link="telepathy-glib-protocol.html#tp-cli-protocol-call-normalize-contact"/>
918 <function name="tp_cli_protocol_callback_for_identify_account ()" link="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account"/>
919 <function name="tp_cli_protocol_callback_for_normalize_contact ()" link="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact"/>
920 <function name="The &quot;capabilities&quot; property" link="telepathy-glib-protocol.html#TpProtocol--capabilities"/>
921 <function name="The &quot;english-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--english-name"/>
922 <function name="The &quot;icon-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--icon-name"/>
923 <function name="The &quot;param-names&quot; property" link="telepathy-glib-protocol.html#TpProtocol--param-names"/>
924 <function name="The &quot;protocol-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--protocol-name"/>
925 <function name="The &quot;protocol-properties&quot; property" link="telepathy-glib-protocol.html#TpProtocol--protocol-properties"/>
926 <function name="The &quot;vcard-field&quot; property" link="telepathy-glib-protocol.html#TpProtocol--vcard-field"/>
876927 <function name="TpConnectionNameListCb ()" link="telepathy-glib-connection.html#TpConnectionNameListCb"/>
877928 <function name="tp_list_connection_names ()" link="telepathy-glib-connection.html#tp-list-connection-names"/>
878929 <function name="TpConnection" link="telepathy-glib-connection.html#TpConnection-struct"/>
14311482 <function name="tp_cli_channel_type_room_list_connect_to_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-connect-to-listing-rooms"/>
14321483 <function name="tp_cli_channel_type_room_list_signal_callback_got_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms"/>
14331484 <function name="tp_cli_channel_type_room_list_signal_callback_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms"/>
1485 <function name="tp_cli_channel_type_contact_search_call_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-more"/>
1486 <function name="tp_cli_channel_type_contact_search_call_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-search"/>
1487 <function name="tp_cli_channel_type_contact_search_call_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-stop"/>
1488 <function name="tp_cli_channel_type_contact_search_callback_for_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more"/>
1489 <function name="tp_cli_channel_type_contact_search_callback_for_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search"/>
1490 <function name="tp_cli_channel_type_contact_search_callback_for_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop"/>
1491 <function name="tp_cli_channel_type_contact_search_connect_to_search_result_received ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-result-received"/>
1492 <function name="tp_cli_channel_type_contact_search_connect_to_search_state_changed ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-state-changed"/>
1493 <function name="tp_cli_channel_type_contact_search_run_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-more"/>
1494 <function name="tp_cli_channel_type_contact_search_run_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-search"/>
1495 <function name="tp_cli_channel_type_contact_search_run_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-stop"/>
1496 <function name="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received"/>
1497 <function name="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed"/>
14341498 <function name="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed"/>
14351499 <function name="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed"/>
14361500 <function name="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed"/>
17941858 <function name="The &quot;self-handle-changed&quot; signal" link="telepathy-glib-svc-channel-group.html#TpSvcChannelInterfaceGroup-self-handle-changed"/>
17951859 <function name="TpSvcChannelTypeContactList" link="telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactList-struct"/>
17961860 <function name="TpSvcChannelTypeContactListClass" link="telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactListClass"/>
1861 <function name="TpSvcChannelTypeContactSearch" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-struct"/>
1862 <function name="TpSvcChannelTypeContactSearchClass" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass"/>
1863 <function name="tp_svc_channel_type_contact_search_emit_search_result_received ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-result-received"/>
1864 <function name="tp_svc_channel_type_contact_search_emit_search_state_changed ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-state-changed"/>
1865 <function name="tp_svc_channel_type_contact_search_implement_more ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-more"/>
1866 <function name="tp_svc_channel_type_contact_search_implement_search ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-search"/>
1867 <function name="tp_svc_channel_type_contact_search_implement_stop ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-stop"/>
1868 <function name="tp_svc_channel_type_contact_search_more_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl"/>
1869 <function name="tp_svc_channel_type_contact_search_return_from_more ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-more"/>
1870 <function name="tp_svc_channel_type_contact_search_return_from_search ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-search"/>
1871 <function name="tp_svc_channel_type_contact_search_return_from_stop ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-stop"/>
1872 <function name="tp_svc_channel_type_contact_search_search_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl"/>
1873 <function name="tp_svc_channel_type_contact_search_stop_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl"/>
1874 <function name="The &quot;search-result-received&quot; signal" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-result-received"/>
1875 <function name="The &quot;search-state-changed&quot; signal" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-state-changed"/>
17971876 <function name="TpSvcChannelTypeText" link="telepathy-glib-svc-channel-text.html#TpSvcChannelTypeText-struct"/>
17981877 <function name="TpSvcChannelTypeTextClass" link="telepathy-glib-svc-channel-text.html#TpSvcChannelTypeTextClass"/>
17991878 <function name="tp_svc_channel_type_text_acknowledge_pending_messages_impl ()" link="telepathy-glib-svc-channel-text.html#tp-svc-channel-type-text-acknowledge-pending-messages-impl"/>
23172396 <function name="tp_svc_connection_manager_return_from_request_connection ()" link="telepathy-glib-svc-connection-manager.html#tp-svc-connection-manager-return-from-request-connection"/>
23182397 <function name="tp_svc_connection_manager_emit_new_connection ()" link="telepathy-glib-svc-connection-manager.html#tp-svc-connection-manager-emit-new-connection"/>
23192398 <function name="The &quot;new-connection&quot; signal" link="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager-new-connection"/>
2399 <function name="TpSvcProtocol" link="telepathy-glib-svc-protocol.html#TpSvcProtocol-struct"/>
2400 <function name="TpSvcProtocolClass" link="telepathy-glib-svc-protocol.html#TpSvcProtocolClass"/>
2401 <function name="tp_svc_protocol_identify_account_impl ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl"/>
2402 <function name="tp_svc_protocol_implement_identify_account ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-identify-account"/>
2403 <function name="tp_svc_protocol_implement_normalize_contact ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-normalize-contact"/>
2404 <function name="tp_svc_protocol_normalize_contact_impl ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl"/>
2405 <function name="tp_svc_protocol_return_from_identify_account ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-identify-account"/>
2406 <function name="tp_svc_protocol_return_from_normalize_contact ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-normalize-contact"/>
23202407 <function name="TpSvcAccountManager" link="telepathy-glib-svc-account-manager.html#TpSvcAccountManager-struct"/>
23212408 <function name="TpSvcAccountManagerClass" link="telepathy-glib-svc-account-manager.html#TpSvcAccountManagerClass"/>
23222409 <function name="tp_svc_account_manager_emit_account_removed ()" link="telepathy-glib-svc-account-manager.html#tp-svc-account-manager-emit-account-removed"/>
24262513 <function name="TpBaseConnectionManagerNewConnFunc ()" link="TpBaseConnectionManager.html#TpBaseConnectionManagerNewConnFunc"/>
24272514 <function name="tp_base_connection_manager_get_dbus_daemon ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-get-dbus-daemon"/>
24282515 <function name="tp_base_connection_manager_register ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-register"/>
2516 <function name="tp_base_connection_manager_add_protocol ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-add-protocol"/>
24292517 <function name="The &quot;dbus-daemon&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon"/>
2518 <function name="The &quot;interfaces&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--interfaces"/>
2519 <function name="The &quot;protocols&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--protocols"/>
24302520 <function name="The &quot;no-more-connections&quot; signal" link="TpBaseConnectionManager.html#TpBaseConnectionManager-no-more-connections"/>
2521 <function name="TpBaseProtocol" link="telepathy-glib-base-protocol.html#TpBaseProtocol-struct"/>
2522 <function name="tp_base_protocol_get_name ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-name"/>
2523 <function name="tp_base_protocol_get_immutable_properties ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-immutable-properties"/>
2524 <function name="tp_base_protocol_get_parameters ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-parameters"/>
2525 <function name="tp_base_protocol_new_connection ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-new-connection"/>
2526 <function name="TpBaseProtocolClass" link="telepathy-glib-base-protocol.html#TpBaseProtocolClass"/>
2527 <function name="TpBaseProtocolGetParametersFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetParametersFunc"/>
2528 <function name="TpBaseProtocolNewConnectionFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolNewConnectionFunc"/>
2529 <function name="TpBaseProtocolNormalizeContactFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolNormalizeContactFunc"/>
2530 <function name="TpBaseProtocolIdentifyAccountFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolIdentifyAccountFunc"/>
2531 <function name="TpBaseProtocolGetInterfacesFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetInterfacesFunc"/>
2532 <function name="TpBaseProtocolGetConnectionDetailsFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetConnectionDetailsFunc"/>
2533 <function name="The &quot;immutable-properties&quot; property" link="telepathy-glib-base-protocol.html#TpBaseProtocol--immutable-properties"/>
2534 <function name="The &quot;name&quot; property" link="telepathy-glib-base-protocol.html#TpBaseProtocol--name"/>
24312535 <function name="TP_INTERNAL_CONNECTION_STATUS_NEW" link="TpBaseConnection.html#TP-INTERNAL-CONNECTION-STATUS-NEW:CAPS"/>
24322536 <function name="TpBaseConnection" link="TpBaseConnection.html#TpBaseConnection-struct"/>
24332537 <function name="TpBaseConnectionClass" link="TpBaseConnection.html#TpBaseConnectionClass"/>
24762580 <function name="The &quot;new-channel&quot; signal" link="TpChannelFactoryIface.html#TpChannelFactoryIface-new-channel"/>
24772581 <function name="TpChannelManagerChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerChannelClassFunc"/>
24782582 <function name="TpChannelManagerForeachChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerForeachChannelClassFunc"/>
2583 <function name="TpChannelManagerTypeChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc"/>
2584 <function name="TpChannelManagerTypeForeachChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerTypeForeachChannelClassFunc"/>
24792585 <function name="TpChannelManagerForeachChannelFunc ()" link="TpChannelManager.html#TpChannelManagerForeachChannelFunc"/>
24802586 <function name="TpChannelManagerRequestFunc ()" link="TpChannelManager.html#TpChannelManagerRequestFunc"/>
24812587 <function name="TpChannelManager" link="TpChannelManager.html#TpChannelManager-struct"/>
24922598 <function name="tp_channel_manager_ensure_channel ()" link="TpChannelManager.html#tp-channel-manager-ensure-channel"/>
24932599 <function name="tp_channel_manager_foreach_channel ()" link="TpChannelManager.html#tp-channel-manager-foreach-channel"/>
24942600 <function name="tp_channel_manager_foreach_channel_class ()" link="TpChannelManager.html#tp-channel-manager-foreach-channel-class"/>
2601 <function name="tp_channel_manager_type_foreach_channel_class ()" link="TpChannelManager.html#tp-channel-manager-type-foreach-channel-class"/>
24952602 <function name="tp_channel_manager_request_channel ()" link="TpChannelManager.html#tp-channel-manager-request-channel"/>
24962603 <function name="The &quot;channel-closed&quot; signal" link="TpChannelManager.html#TpChannelManager-channel-closed"/>
24972604 <function name="The &quot;new-channels&quot; signal" link="TpChannelManager.html#TpChannelManager-new-channels"/>
25222629 <function name="tp_dbus_properties_mixin_implement_interface ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-implement-interface"/>
25232630 <function name="tp_dbus_properties_mixin_iface_init ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-iface-init"/>
25242631 <function name="tp_dbus_properties_mixin_get ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-get"/>
2632 <function name="tp_dbus_properties_mixin_fill_properties_hash ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-fill-properties-hash"/>
25252633 <function name="tp_dbus_properties_mixin_make_properties_hash ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-make-properties-hash"/>
25262634 <function name="TpExportableChannelFunc ()" link="TpExportableChannel.html#TpExportableChannelFunc"/>
25272635 <function name="TpExportableChannel" link="TpExportableChannel.html#TpExportableChannel-struct"/>
26952803 <function name="tp_base_client_unregister ()" link="telepathy-glib-base-client.html#tp-base-client-unregister"/>
26962804 <function name="tp_base_client_get_bus_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-bus-name"/>
26972805 <function name="tp_base_client_get_object_path ()" link="telepathy-glib-base-client.html#tp-base-client-get-object-path"/>
2806 <function name="tp_base_client_get_dbus_daemon ()" link="telepathy-glib-base-client.html#tp-base-client-get-dbus-daemon"/>
2807 <function name="tp_base_client_get_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-name"/>
2808 <function name="tp_base_client_get_uniquify_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-uniquify-name"/>
26982809 <function name="The &quot;dbus-daemon&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon"/>
26992810 <function name="The &quot;name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--name"/>
27002811 <function name="The &quot;uniquify-name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--uniquify-name"/>
2020 </sub>
2121 <sub name="Client-side proxies" link="ch-client.html">
2222 <sub name="TpConnectionManager" link="telepathy-glib-connection-manager.html"/>
23 <sub name="TpProtocol" link="telepathy-glib-protocol.html"/>
2324 <sub name="TpConnection" link="telepathy-glib-connection.html"/>
2425 <sub name="TpContact" link="telepathy-glib-contact.html"/>
2526 <sub name="TpCapabilities" link="telepathy-glib-capabilities.html"/>
4243 <sub name="Tubes channels" link="telepathy-glib-channel-tubes.html"/>
4344 <sub name="Tube channels" link="telepathy-glib-channel-tube.html"/>
4445 <sub name="Room List channels" link="telepathy-glib-channel-roomlist.html"/>
46 <sub name="Contact Search channels" link="telepathy-glib-channel-contactsearch.html"/>
4547 <sub name="Connection and Channel Anonymity interfaces" link="telepathy-glib-cli-anonymity.html"/>
4648 <sub name="Connection and Channel ServicePoint interfaces" link="telepathy-glib-cli-service-point.html"/>
4749 <sub name="TpMediaSessionHandler, TpMediaStreamHandler" link="telepathy-glib-media-interfaces.html"/>
5860 <sub name="Service-side Channel base interface" link="telepathy-glib-svc-channel.html"/>
5961 <sub name="Service-side Channel Group interface" link="telepathy-glib-svc-channel-group.html"/>
6062 <sub name="Contact List channels" link="telepathy-glib-svc-channel-contactlist.html"/>
63 <sub name="Contact Search channels" link="telepathy-glib-svc-channel-contactsearch.html"/>
6164 <sub name="Text channels" link="telepathy-glib-svc-channel-text.html"/>
6265 <sub name="Media channels" link="telepathy-glib-svc-channel-media.html"/>
6366 <sub name="File Transfer channels" link="telepathy-glib-svc-channel-file-transfer.html"/>
7073 <sub name="Service-side Connection and Channel ServicePoint interfaces" link="telepathy-glib-svc-service-point.html"/>
7174 <sub name="Service-side media streaming helper interfaces" link="telepathy-glib-svc-media-interfaces.html"/>
7275 <sub name="Service-side Connection Manager interface" link="telepathy-glib-svc-connection-manager.html"/>
76 <sub name="Service-side Protocol interface" link="telepathy-glib-svc-protocol.html"/>
7377 <sub name="Service-side Account Manager interface" link="telepathy-glib-svc-account-manager.html"/>
7478 <sub name="Service-side Account interfaces" link="telepathy-glib-svc-account.html"/>
7579 <sub name="Service-side Channel Dispatcher interface" link="telepathy-glib-svc-channel-dispatcher.html"/>
8084 <sub name="Service-side implementation" link="ch-service-base.html">
8185 <sub name="Connection manager life cycle" link="telepathy-glib-run.html"/>
8286 <sub name="TpBaseConnectionManager" link="TpBaseConnectionManager.html"/>
87 <sub name="TpBaseProtocol" link="telepathy-glib-base-protocol.html"/>
8388 <sub name="TpBaseConnection" link="TpBaseConnection.html"/>
8489 <sub name="TpChannelFactoryIface" link="TpChannelFactoryIface.html"/>
8590 <sub name="TpChannelManager" link="TpChannelManager.html"/>
120125 <keyword type="struct" name="TpProxyFeature" link="telepathy-glib-proxy.html#TpProxyFeature" since="0.11.3"/>
121126 <keyword type="function" name="TpProxyClassFeatureListFunc ()" link="telepathy-glib-proxy.html#TpProxyClassFeatureListFunc" since="0.11.3"/>
122127 <keyword type="struct" name="TpProxyClass" link="telepathy-glib-proxy.html#TpProxyClass" since="0.7.1"/>
123 <keyword type="macro" name="tp_proxy_has_interface()" link="telepathy-glib-proxy.html#tp-proxy-has-interface" since="0.7.1"/>
128 <keyword type="function" name="tp_proxy_has_interface ()" link="telepathy-glib-proxy.html#tp-proxy-has-interface" since="0.7.1"/>
124129 <keyword type="function" name="tp_proxy_has_interface_by_id ()" link="telepathy-glib-proxy.html#tp-proxy-has-interface-by-id" since="0.7.1"/>
125130 <keyword type="function" name="tp_proxy_is_prepared ()" link="telepathy-glib-proxy.html#tp-proxy-is-prepared" since="0.11.3"/>
126131 <keyword type="function" name="tp_proxy_prepare_async ()" link="telepathy-glib-proxy.html#tp-proxy-prepare-async" since="0.11.3"/>
344349 <keyword type="macro" name="TP_IFACE_QUARK_DEBUG" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-DEBUG:CAPS"/>
345350 <keyword type="macro" name="TP_IFACE_CONNECTION_MANAGER" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-MANAGER:CAPS"/>
346351 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_MANAGER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-MANAGER:CAPS"/>
352 <keyword type="macro" name="TP_IFACE_PROTOCOL" link="telepathy-glib-interfaces.html#TP-IFACE-PROTOCOL:CAPS"/>
353 <keyword type="macro" name="TP_IFACE_QUARK_PROTOCOL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-PROTOCOL:CAPS"/>
347354 <keyword type="macro" name="TP_IFACE_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION:CAPS"/>
348355 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS"/>
349356 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS"/>
378385 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS"/>
379386 <keyword type="macro" name="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
380387 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
388 <keyword type="macro" name="TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"/>
389 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-CONTACT-SEARCH:CAPS"/>
381390 <keyword type="macro" name="TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-FILE-TRANSFER:CAPS"/>
382391 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-FILE-TRANSFER:CAPS"/>
383392 <keyword type="macro" name="TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-STREAMED-MEDIA:CAPS"/>
509518 <keyword type="macro" name="TP_PROP_CHANNEL_TARGET_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE:CAPS"/>
510519 <keyword type="macro" name="TP_PROP_CHANNEL_TARGET_HANDLE_TYPE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-HANDLE-TYPE:CAPS"/>
511520 <keyword type="macro" name="TP_PROP_CHANNEL_TARGET_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TARGET-ID:CAPS"/>
521 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-AVAILABLE-SEARCH-KEYS:CAPS"/>
522 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-LIMIT:CAPS"/>
523 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SEARCH-STATE:CAPS"/>
524 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-CONTACT-SEARCH-SERVER:CAPS"/>
512525 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-DBUS-NAMES:CAPS"/>
513526 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SERVICE-NAME:CAPS"/>
514527 <keyword type="macro" name="TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-TYPE-DBUS-TUBE-SUPPORTED-ACCESS-CONTROLS:CAPS"/>
573586 <keyword type="macro" name="TP_PROP_MEDIA_STREAM_HANDLER_NAT_TRAVERSAL" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-NAT-TRAVERSAL:CAPS"/>
574587 <keyword type="macro" name="TP_PROP_MEDIA_STREAM_HANDLER_RELAY_INFO" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-RELAY-INFO:CAPS"/>
575588 <keyword type="macro" name="TP_PROP_MEDIA_STREAM_HANDLER_STUN_SERVERS" link="telepathy-glib-interfaces.html#TP-PROP-MEDIA-STREAM-HANDLER-STUN-SERVERS:CAPS"/>
589 <keyword type="macro" name="TP_PROP_PROTOCOL_CONNECTION_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-CONNECTION-INTERFACES:CAPS"/>
590 <keyword type="macro" name="TP_PROP_PROTOCOL_ENGLISH_NAME" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ENGLISH-NAME:CAPS"/>
591 <keyword type="macro" name="TP_PROP_PROTOCOL_ICON" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-ICON:CAPS"/>
592 <keyword type="macro" name="TP_PROP_PROTOCOL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-INTERFACES:CAPS"/>
593 <keyword type="macro" name="TP_PROP_PROTOCOL_PARAMETERS" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-PARAMETERS:CAPS"/>
594 <keyword type="macro" name="TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-REQUESTABLE-CHANNEL-CLASSES:CAPS"/>
595 <keyword type="macro" name="TP_PROP_PROTOCOL_VCARD_FIELD" link="telepathy-glib-interfaces.html#TP-PROP-PROTOCOL-VCARD-FIELD:CAPS"/>
576596 <keyword type="macro" name="TP_TOKEN_CONNECTION_CONTACT_ID" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-CONTACT-ID:CAPS"/>
577597 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS"/>
578598 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS"/>
805825 <keyword type="macro" name="TP_STRUCT_TYPE_SERVICE_POINT" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS"/>
806826 <keyword type="macro" name="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS"/>
807827 <keyword type="macro" name="TP_STRUCT_TYPE_SERVICE_POINT_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS"/>
828 <keyword type="enum" name="enum TpChannelContactSearchState" link="telepathy-glib-gtypes.html#TpChannelContactSearchState"/>
829 <keyword type="macro" name="NUM_TP_CHANNEL_CONTACT_SEARCH_STATES" link="telepathy-glib-gtypes.html#NUM-TP-CHANNEL-CONTACT-SEARCH-STATES:CAPS"/>
830 <keyword type="macro" name="TP_HASH_TYPE_CONTACT_SEARCH_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-MAP:CAPS"/>
831 <keyword type="macro" name="TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CONTACT-SEARCH-RESULT-MAP:CAPS"/>
808832 <keyword type="macro" name="TP_STRUCT_TYPE_AVATAR" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS"/>
809833 <keyword type="macro" name="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS"/>
810834 <keyword type="macro" name="TP_ARRAY_TYPE_DISPATCH_OPERATION_DETAILS_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS"/>
835859 <keyword type="function" name="tp_connection_manager_dup_protocol_names ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-dup-protocol-names" since="0.7.26"/>
836860 <keyword type="function" name="tp_connection_manager_has_protocol ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-has-protocol" since="0.7.26"/>
837861 <keyword type="function" name="tp_connection_manager_get_protocol ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol" since="0.7.26"/>
862 <keyword type="function" name="tp_connection_manager_get_protocol_object ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-get-protocol-object" since="0.11.UNRELEASED"/>
838863 <keyword type="struct" name="TpConnectionManagerProtocol" link="telepathy-glib-connection-manager.html#TpConnectionManagerProtocol" since="0.7.1"/>
839864 <keyword type="function" name="tp_connection_manager_protocol_can_register ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-protocol-can-register" since="0.7.26"/>
840865 <keyword type="function" name="tp_connection_manager_protocol_dup_param_names ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-protocol-dup-param-names" since="0.7.26"/>
873898 <keyword type="signal" name="The &quot;activated&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-activated"/>
874899 <keyword type="signal" name="The &quot;exited&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-exited"/>
875900 <keyword type="signal" name="The &quot;got-info&quot; signal" link="telepathy-glib-connection-manager.html#TpConnectionManager-got-info"/>
901 <keyword type="struct" name="TpProtocol" link="telepathy-glib-protocol.html#TpProtocol-struct"/>
902 <keyword type="struct" name="TpProtocolClass" link="telepathy-glib-protocol.html#TpProtocolClass" since="0.11.UNRELEASED"/>
903 <keyword type="function" name="tp_protocol_new ()" link="telepathy-glib-protocol.html#tp-protocol-new" since="0.11.UNRELEASED"/>
904 <keyword type="function" name="tp_protocol_get_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-name" since="0.11.UNRELEASED"/>
905 <keyword type="function" name="tp_protocol_init_known_interfaces ()" link="telepathy-glib-protocol.html#tp-protocol-init-known-interfaces" since="0.11.UNRELEASED"/>
906 <keyword type="macro" name="TP_PROTOCOL_FEATURE_PARAMETERS" link="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-PARAMETERS:CAPS" since="0.11.UNRELEASED"/>
907 <keyword type="function" name="tp_protocol_dup_param_names ()" link="telepathy-glib-protocol.html#tp-protocol-dup-param-names" since="0.11.UNRELEASED"/>
908 <keyword type="function" name="tp_protocol_get_param ()" link="telepathy-glib-protocol.html#tp-protocol-get-param" since="0.11.UNRELEASED"/>
909 <keyword type="function" name="tp_protocol_has_param ()" link="telepathy-glib-protocol.html#tp-protocol-has-param" since="0.11.UNRELEASED"/>
910 <keyword type="function" name="tp_protocol_can_register ()" link="telepathy-glib-protocol.html#tp-protocol-can-register" since="0.11.UNRELEASED"/>
911 <keyword type="macro" name="TP_PROTOCOL_FEATURE_CORE" link="telepathy-glib-protocol.html#TP-PROTOCOL-FEATURE-CORE:CAPS" since="0.11.UNRELEASED"/>
912 <keyword type="function" name="tp_protocol_get_capabilities ()" link="telepathy-glib-protocol.html#tp-protocol-get-capabilities" since="0.11.UNRELEASED"/>
913 <keyword type="function" name="tp_protocol_get_english_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-english-name" since="0.11.UNRELEASED"/>
914 <keyword type="function" name="tp_protocol_get_icon_name ()" link="telepathy-glib-protocol.html#tp-protocol-get-icon-name" since="0.11.UNRELEASED"/>
915 <keyword type="function" name="tp_protocol_get_vcard_field ()" link="telepathy-glib-protocol.html#tp-protocol-get-vcard-field" since="0.11.UNRELEASED"/>
916 <keyword type="function" name="tp_cli_protocol_call_identify_account ()" link="telepathy-glib-protocol.html#tp-cli-protocol-call-identify-account"/>
917 <keyword type="function" name="tp_cli_protocol_call_normalize_contact ()" link="telepathy-glib-protocol.html#tp-cli-protocol-call-normalize-contact"/>
918 <keyword type="function" name="tp_cli_protocol_callback_for_identify_account ()" link="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-identify-account"/>
919 <keyword type="function" name="tp_cli_protocol_callback_for_normalize_contact ()" link="telepathy-glib-protocol.html#tp-cli-protocol-callback-for-normalize-contact"/>
920 <keyword type="property" name="The &quot;capabilities&quot; property" link="telepathy-glib-protocol.html#TpProtocol--capabilities"/>
921 <keyword type="property" name="The &quot;english-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--english-name"/>
922 <keyword type="property" name="The &quot;icon-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--icon-name"/>
923 <keyword type="property" name="The &quot;param-names&quot; property" link="telepathy-glib-protocol.html#TpProtocol--param-names"/>
924 <keyword type="property" name="The &quot;protocol-name&quot; property" link="telepathy-glib-protocol.html#TpProtocol--protocol-name"/>
925 <keyword type="property" name="The &quot;protocol-properties&quot; property" link="telepathy-glib-protocol.html#TpProtocol--protocol-properties"/>
926 <keyword type="property" name="The &quot;vcard-field&quot; property" link="telepathy-glib-protocol.html#TpProtocol--vcard-field"/>
876927 <keyword type="function" name="TpConnectionNameListCb ()" link="telepathy-glib-connection.html#TpConnectionNameListCb" since="0.7.1"/>
877928 <keyword type="function" name="tp_list_connection_names ()" link="telepathy-glib-connection.html#tp-list-connection-names" since="0.7.1"/>
878929 <keyword type="struct" name="TpConnection" link="telepathy-glib-connection.html#TpConnection-struct"/>
14311482 <keyword type="function" name="tp_cli_channel_type_room_list_connect_to_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-connect-to-listing-rooms"/>
14321483 <keyword type="function" name="tp_cli_channel_type_room_list_signal_callback_got_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms"/>
14331484 <keyword type="function" name="tp_cli_channel_type_room_list_signal_callback_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms"/>
1485 <keyword type="function" name="tp_cli_channel_type_contact_search_call_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-more"/>
1486 <keyword type="function" name="tp_cli_channel_type_contact_search_call_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-search"/>
1487 <keyword type="function" name="tp_cli_channel_type_contact_search_call_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-call-stop"/>
1488 <keyword type="function" name="tp_cli_channel_type_contact_search_callback_for_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-more"/>
1489 <keyword type="function" name="tp_cli_channel_type_contact_search_callback_for_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-search"/>
1490 <keyword type="function" name="tp_cli_channel_type_contact_search_callback_for_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-callback-for-stop"/>
1491 <keyword type="function" name="tp_cli_channel_type_contact_search_connect_to_search_result_received ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-result-received"/>
1492 <keyword type="function" name="tp_cli_channel_type_contact_search_connect_to_search_state_changed ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-connect-to-search-state-changed"/>
1493 <keyword type="function" name="tp_cli_channel_type_contact_search_run_more ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-more" deprecated=""/>
1494 <keyword type="function" name="tp_cli_channel_type_contact_search_run_search ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-search" deprecated=""/>
1495 <keyword type="function" name="tp_cli_channel_type_contact_search_run_stop ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-run-stop" deprecated=""/>
1496 <keyword type="function" name="tp_cli_channel_type_contact_search_signal_callback_search_result_received ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-result-received"/>
1497 <keyword type="function" name="tp_cli_channel_type_contact_search_signal_callback_search_state_changed ()" link="telepathy-glib-channel-contactsearch.html#tp-cli-channel-type-contact-search-signal-callback-search-state-changed"/>
14341498 <keyword type="function" name="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed"/>
14351499 <keyword type="function" name="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed"/>
14361500 <keyword type="function" name="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed"/>
17941858 <keyword type="signal" name="The &quot;self-handle-changed&quot; signal" link="telepathy-glib-svc-channel-group.html#TpSvcChannelInterfaceGroup-self-handle-changed"/>
17951859 <keyword type="struct" name="TpSvcChannelTypeContactList" link="telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactList-struct"/>
17961860 <keyword type="struct" name="TpSvcChannelTypeContactListClass" link="telepathy-glib-svc-channel-contactlist.html#TpSvcChannelTypeContactListClass"/>
1861 <keyword type="struct" name="TpSvcChannelTypeContactSearch" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-struct"/>
1862 <keyword type="struct" name="TpSvcChannelTypeContactSearchClass" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearchClass"/>
1863 <keyword type="function" name="tp_svc_channel_type_contact_search_emit_search_result_received ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-result-received"/>
1864 <keyword type="function" name="tp_svc_channel_type_contact_search_emit_search_state_changed ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-emit-search-state-changed"/>
1865 <keyword type="function" name="tp_svc_channel_type_contact_search_implement_more ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-more"/>
1866 <keyword type="function" name="tp_svc_channel_type_contact_search_implement_search ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-search"/>
1867 <keyword type="function" name="tp_svc_channel_type_contact_search_implement_stop ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-implement-stop"/>
1868 <keyword type="function" name="tp_svc_channel_type_contact_search_more_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-more-impl"/>
1869 <keyword type="function" name="tp_svc_channel_type_contact_search_return_from_more ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-more"/>
1870 <keyword type="function" name="tp_svc_channel_type_contact_search_return_from_search ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-search"/>
1871 <keyword type="function" name="tp_svc_channel_type_contact_search_return_from_stop ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-return-from-stop"/>
1872 <keyword type="function" name="tp_svc_channel_type_contact_search_search_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-search-impl"/>
1873 <keyword type="function" name="tp_svc_channel_type_contact_search_stop_impl ()" link="telepathy-glib-svc-channel-contactsearch.html#tp-svc-channel-type-contact-search-stop-impl"/>
1874 <keyword type="signal" name="The &quot;search-result-received&quot; signal" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-result-received"/>
1875 <keyword type="signal" name="The &quot;search-state-changed&quot; signal" link="telepathy-glib-svc-channel-contactsearch.html#TpSvcChannelTypeContactSearch-search-state-changed"/>
17971876 <keyword type="struct" name="TpSvcChannelTypeText" link="telepathy-glib-svc-channel-text.html#TpSvcChannelTypeText-struct"/>
17981877 <keyword type="struct" name="TpSvcChannelTypeTextClass" link="telepathy-glib-svc-channel-text.html#TpSvcChannelTypeTextClass"/>
17991878 <keyword type="function" name="tp_svc_channel_type_text_acknowledge_pending_messages_impl ()" link="telepathy-glib-svc-channel-text.html#tp-svc-channel-type-text-acknowledge-pending-messages-impl"/>
23172396 <keyword type="function" name="tp_svc_connection_manager_return_from_request_connection ()" link="telepathy-glib-svc-connection-manager.html#tp-svc-connection-manager-return-from-request-connection"/>
23182397 <keyword type="function" name="tp_svc_connection_manager_emit_new_connection ()" link="telepathy-glib-svc-connection-manager.html#tp-svc-connection-manager-emit-new-connection"/>
23192398 <keyword type="signal" name="The &quot;new-connection&quot; signal" link="telepathy-glib-svc-connection-manager.html#TpSvcConnectionManager-new-connection"/>
2399 <keyword type="struct" name="TpSvcProtocol" link="telepathy-glib-svc-protocol.html#TpSvcProtocol-struct"/>
2400 <keyword type="struct" name="TpSvcProtocolClass" link="telepathy-glib-svc-protocol.html#TpSvcProtocolClass"/>
2401 <keyword type="function" name="tp_svc_protocol_identify_account_impl ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-identify-account-impl"/>
2402 <keyword type="function" name="tp_svc_protocol_implement_identify_account ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-identify-account"/>
2403 <keyword type="function" name="tp_svc_protocol_implement_normalize_contact ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-implement-normalize-contact"/>
2404 <keyword type="function" name="tp_svc_protocol_normalize_contact_impl ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-normalize-contact-impl"/>
2405 <keyword type="function" name="tp_svc_protocol_return_from_identify_account ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-identify-account"/>
2406 <keyword type="function" name="tp_svc_protocol_return_from_normalize_contact ()" link="telepathy-glib-svc-protocol.html#tp-svc-protocol-return-from-normalize-contact"/>
23202407 <keyword type="struct" name="TpSvcAccountManager" link="telepathy-glib-svc-account-manager.html#TpSvcAccountManager-struct"/>
23212408 <keyword type="struct" name="TpSvcAccountManagerClass" link="telepathy-glib-svc-account-manager.html#TpSvcAccountManagerClass"/>
23222409 <keyword type="function" name="tp_svc_account_manager_emit_account_removed ()" link="telepathy-glib-svc-account-manager.html#tp-svc-account-manager-emit-account-removed"/>
24262513 <keyword type="function" name="TpBaseConnectionManagerNewConnFunc ()" link="TpBaseConnectionManager.html#TpBaseConnectionManagerNewConnFunc"/>
24272514 <keyword type="function" name="tp_base_connection_manager_get_dbus_daemon ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-get-dbus-daemon" since="0.11.3"/>
24282515 <keyword type="function" name="tp_base_connection_manager_register ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-register"/>
2516 <keyword type="function" name="tp_base_connection_manager_add_protocol ()" link="TpBaseConnectionManager.html#tp-base-connection-manager-add-protocol"/>
24292517 <keyword type="property" name="The &quot;dbus-daemon&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon"/>
2518 <keyword type="property" name="The &quot;interfaces&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--interfaces"/>
2519 <keyword type="property" name="The &quot;protocols&quot; property" link="TpBaseConnectionManager.html#TpBaseConnectionManager--protocols"/>
24302520 <keyword type="signal" name="The &quot;no-more-connections&quot; signal" link="TpBaseConnectionManager.html#TpBaseConnectionManager-no-more-connections"/>
2521 <keyword type="struct" name="TpBaseProtocol" link="telepathy-glib-base-protocol.html#TpBaseProtocol-struct"/>
2522 <keyword type="function" name="tp_base_protocol_get_name ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-name"/>
2523 <keyword type="function" name="tp_base_protocol_get_immutable_properties ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-immutable-properties"/>
2524 <keyword type="function" name="tp_base_protocol_get_parameters ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-get-parameters"/>
2525 <keyword type="function" name="tp_base_protocol_new_connection ()" link="telepathy-glib-base-protocol.html#tp-base-protocol-new-connection"/>
2526 <keyword type="struct" name="TpBaseProtocolClass" link="telepathy-glib-base-protocol.html#TpBaseProtocolClass" since="0.11.UNRELEASED"/>
2527 <keyword type="function" name="TpBaseProtocolGetParametersFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetParametersFunc"/>
2528 <keyword type="function" name="TpBaseProtocolNewConnectionFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolNewConnectionFunc"/>
2529 <keyword type="function" name="TpBaseProtocolNormalizeContactFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolNormalizeContactFunc"/>
2530 <keyword type="function" name="TpBaseProtocolIdentifyAccountFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolIdentifyAccountFunc"/>
2531 <keyword type="function" name="TpBaseProtocolGetInterfacesFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetInterfacesFunc"/>
2532 <keyword type="function" name="TpBaseProtocolGetConnectionDetailsFunc ()" link="telepathy-glib-base-protocol.html#TpBaseProtocolGetConnectionDetailsFunc"/>
2533 <keyword type="property" name="The &quot;immutable-properties&quot; property" link="telepathy-glib-base-protocol.html#TpBaseProtocol--immutable-properties"/>
2534 <keyword type="property" name="The &quot;name&quot; property" link="telepathy-glib-base-protocol.html#TpBaseProtocol--name"/>
24312535 <keyword type="macro" name="TP_INTERNAL_CONNECTION_STATUS_NEW" link="TpBaseConnection.html#TP-INTERNAL-CONNECTION-STATUS-NEW:CAPS"/>
24322536 <keyword type="struct" name="TpBaseConnection" link="TpBaseConnection.html#TpBaseConnection-struct"/>
24332537 <keyword type="struct" name="TpBaseConnectionClass" link="TpBaseConnection.html#TpBaseConnectionClass"/>
24762580 <keyword type="signal" name="The &quot;new-channel&quot; signal" link="TpChannelFactoryIface.html#TpChannelFactoryIface-new-channel"/>
24772581 <keyword type="function" name="TpChannelManagerChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerChannelClassFunc"/>
24782582 <keyword type="function" name="TpChannelManagerForeachChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerForeachChannelClassFunc"/>
2583 <keyword type="function" name="TpChannelManagerTypeChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerTypeChannelClassFunc"/>
2584 <keyword type="function" name="TpChannelManagerTypeForeachChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerTypeForeachChannelClassFunc"/>
24792585 <keyword type="function" name="TpChannelManagerForeachChannelFunc ()" link="TpChannelManager.html#TpChannelManagerForeachChannelFunc"/>
24802586 <keyword type="function" name="TpChannelManagerRequestFunc ()" link="TpChannelManager.html#TpChannelManagerRequestFunc"/>
24812587 <keyword type="struct" name="TpChannelManager" link="TpChannelManager.html#TpChannelManager-struct"/>
24922598 <keyword type="function" name="tp_channel_manager_ensure_channel ()" link="TpChannelManager.html#tp-channel-manager-ensure-channel" since="0.7.16"/>
24932599 <keyword type="function" name="tp_channel_manager_foreach_channel ()" link="TpChannelManager.html#tp-channel-manager-foreach-channel" since="0.7.15"/>
24942600 <keyword type="function" name="tp_channel_manager_foreach_channel_class ()" link="TpChannelManager.html#tp-channel-manager-foreach-channel-class" since="0.7.15"/>
2601 <keyword type="function" name="tp_channel_manager_type_foreach_channel_class ()" link="TpChannelManager.html#tp-channel-manager-type-foreach-channel-class" since="0.11.UNRELEASED"/>
24952602 <keyword type="function" name="tp_channel_manager_request_channel ()" link="TpChannelManager.html#tp-channel-manager-request-channel" since="0.7.15"/>
24962603 <keyword type="signal" name="The &quot;channel-closed&quot; signal" link="TpChannelManager.html#TpChannelManager-channel-closed"/>
24972604 <keyword type="signal" name="The &quot;new-channels&quot; signal" link="TpChannelManager.html#TpChannelManager-new-channels"/>
25222629 <keyword type="function" name="tp_dbus_properties_mixin_implement_interface ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-implement-interface"/>
25232630 <keyword type="function" name="tp_dbus_properties_mixin_iface_init ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-iface-init"/>
25242631 <keyword type="function" name="tp_dbus_properties_mixin_get ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-get" since="0.7.13"/>
2632 <keyword type="function" name="tp_dbus_properties_mixin_fill_properties_hash ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-fill-properties-hash" since="0.11.UNRELEASED"/>
25252633 <keyword type="function" name="tp_dbus_properties_mixin_make_properties_hash ()" link="telepathy-glib-dbus-properties-mixin.html#tp-dbus-properties-mixin-make-properties-hash"/>
25262634 <keyword type="function" name="TpExportableChannelFunc ()" link="TpExportableChannel.html#TpExportableChannelFunc"/>
25272635 <keyword type="struct" name="TpExportableChannel" link="TpExportableChannel.html#TpExportableChannel-struct"/>
26952803 <keyword type="function" name="tp_base_client_unregister ()" link="telepathy-glib-base-client.html#tp-base-client-unregister" since="0.11.6"/>
26962804 <keyword type="function" name="tp_base_client_get_bus_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-bus-name" since="0.11.5"/>
26972805 <keyword type="function" name="tp_base_client_get_object_path ()" link="telepathy-glib-base-client.html#tp-base-client-get-object-path" since="0.11.5"/>
2806 <keyword type="function" name="tp_base_client_get_dbus_daemon ()" link="telepathy-glib-base-client.html#tp-base-client-get-dbus-daemon" since="0.11.UNRELEASED"/>
2807 <keyword type="function" name="tp_base_client_get_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-name" since="0.11.UNRELEASED"/>
2808 <keyword type="function" name="tp_base_client_get_uniquify_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-uniquify-name" since="0.11.UNRELEASED"/>
26982809 <keyword type="property" name="The &quot;dbus-daemon&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon"/>
26992810 <keyword type="property" name="The &quot;name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--name"/>
27002811 <keyword type="property" name="The &quot;uniquify-name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--uniquify-name"/>
31913302 <keyword type="constant" name="TP_ERROR_SERVICE_BUSY" link="telepathy-glib-errors.html#TP-ERROR-SERVICE-BUSY:CAPS"/>
31923303 <keyword type="constant" name="TP_ERROR_RESOURCE_UNAVAILABLE" link="telepathy-glib-errors.html#TP-ERROR-RESOURCE-UNAVAILABLE:CAPS"/>
31933304 <keyword type="constant" name="TP_ERROR_WOULD_BREAK_ANONYMITY" link="telepathy-glib-errors.html#TP-ERROR-WOULD-BREAK-ANONYMITY:CAPS"/>
3305 <keyword type="constant" name="TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED" link="telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-NOT-STARTED:CAPS"/>
3306 <keyword type="constant" name="TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS" link="telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-IN-PROGRESS:CAPS"/>
3307 <keyword type="constant" name="TP_CHANNEL_CONTACT_SEARCH_STATE_MORE_AVAILABLE" link="telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-MORE-AVAILABLE:CAPS"/>
3308 <keyword type="constant" name="TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED" link="telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-COMPLETED:CAPS"/>
3309 <keyword type="constant" name="TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED" link="telepathy-glib-gtypes.html#TP-CHANNEL-CONTACT-SEARCH-STATE-FAILED:CAPS"/>
31943310 <keyword type="constant" name="TP_CM_INFO_SOURCE_NONE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-NONE:CAPS"/>
31953311 <keyword type="constant" name="TP_CM_INFO_SOURCE_FILE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-FILE:CAPS"/>
31963312 <keyword type="constant" name="TP_CM_INFO_SOURCE_LIVE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-LIVE:CAPS"/>
2727 <chapter id="ch-client">
2828 <title>Client-side proxies</title>
2929 <xi:include href="xml/connection-manager.xml"/>
30 <xi:include href="xml/protocol.xml"/>
3031 <xi:include href="xml/connection.xml"/>
3132 <xi:include href="xml/contact.xml"/>
3233 <xi:include href="xml/capabilities.xml"/>
4950 <xi:include href="xml/channel-tubes.xml"/>
5051 <xi:include href="xml/channel-tube.xml"/>
5152 <xi:include href="xml/channel-roomlist.xml"/>
53 <xi:include href="xml/channel-contactsearch.xml"/>
5254 <xi:include href="xml/cli-anonymity.xml"/>
5355 <xi:include href="xml/cli-service-point.xml"/>
5456 <xi:include href="xml/media-interfaces.xml"/>
6769 <xi:include href="xml/svc-channel.xml"/>
6870 <xi:include href="xml/svc-channel-group.xml"/>
6971 <xi:include href="xml/svc-channel-contactlist.xml"/>
72 <xi:include href="xml/svc-channel-contactsearch.xml"/>
7073 <xi:include href="xml/svc-channel-text.xml"/>
7174 <xi:include href="xml/svc-channel-media.xml"/>
7275 <xi:include href="xml/svc-channel-file-transfer.xml"/>
7982 <xi:include href="xml/svc-service-point.xml"/>
8083 <xi:include href="xml/svc-media-interfaces.xml"/>
8184 <xi:include href="xml/svc-connection-manager.xml"/>
85 <xi:include href="xml/svc-protocol.xml"/>
8286 <xi:include href="xml/svc-account-manager.xml"/>
8387 <xi:include href="xml/svc-account.xml"/>
8488 <xi:include href="xml/svc-channel-dispatcher.xml"/>
9094 <title>Service-side implementation</title>
9195 <xi:include href="xml/run.xml"/>
9296 <xi:include href="xml/base-connection-manager.xml"/>
97 <xi:include href="xml/base-protocol.xml"/>
9398 <xi:include href="xml/base-connection.xml"/>
9499 <xi:include href="xml/channel-factory-iface.xml"/>
95100 <xi:include href="xml/channel-manager.xml"/>
8686 TpBaseConnectionManagerNewConnFunc
8787 tp_base_connection_manager_get_dbus_daemon
8888 tp_base_connection_manager_register
89 tp_base_connection_manager_add_protocol
8990 <SUBSECTION Standard>
9091 TP_BASE_CONNECTION_MANAGER
9192 TP_IS_BASE_CONNECTION_MANAGER
128129 <FILE>channel-manager</FILE>
129130 TpChannelManagerChannelClassFunc
130131 TpChannelManagerForeachChannelClassFunc
132 TpChannelManagerTypeChannelClassFunc
133 TpChannelManagerTypeForeachChannelClassFunc
131134 TpChannelManagerForeachChannelFunc
132135 TpChannelManagerRequestFunc
133136 <TITLE>TpChannelManager</TITLE>
145148 tp_channel_manager_ensure_channel
146149 tp_channel_manager_foreach_channel
147150 tp_channel_manager_foreach_channel_class
151 tp_channel_manager_type_foreach_channel_class
148152 tp_channel_manager_request_channel
149153 <SUBSECTION Standard>
150154 TP_CHANNEL_MANAGER
13581362 TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST
13591363 TP_STRUCT_TYPE_SERVICE_POINT_INFO
13601364 <SUBSECTION>
1365 # Channel - Contact Search
1366 TpChannelContactSearchState
1367 NUM_TP_CHANNEL_CONTACT_SEARCH_STATES
1368 TP_HASH_TYPE_CONTACT_SEARCH_MAP
1369 TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP
1370 <SUBSECTION>
13611371 # Account and AM
13621372 TP_STRUCT_TYPE_AVATAR
13631373 <SUBSECTION>
14021412 tp_type_dbus_array_uv
14031413 tp_type_dbus_hash_s_28ubb_29
14041414 tp_type_dbus_hash_s_28ubba_7bss_7d_29
1415 tp_type_dbus_hash_sa_28sasas_29
14051416 tp_type_dbus_hash_sa_7bsv_7d
14061417 tp_type_dbus_hash_ss
14071418 tp_type_dbus_hash_sv
18761887 tp_dbus_properties_mixin_implement_interface
18771888 tp_dbus_properties_mixin_iface_init
18781889 tp_dbus_properties_mixin_get
1890 tp_dbus_properties_mixin_fill_properties_hash
18791891 tp_dbus_properties_mixin_make_properties_hash
18801892 <SUBSECTION Standard>
18811893 tp_dbus_properties_mixin_flags_get_type
21362148 TP_IFACE_QUARK_DEBUG
21372149 TP_IFACE_CONNECTION_MANAGER
21382150 TP_IFACE_QUARK_CONNECTION_MANAGER
2151 TP_IFACE_PROTOCOL
2152 TP_IFACE_QUARK_PROTOCOL
21392153 TP_IFACE_CONNECTION
21402154 TP_IFACE_QUARK_CONNECTION
21412155 TP_IFACE_CONNECTION_INTERFACE_ALIASING
21702184 TP_IFACE_QUARK_CHANNEL
21712185 TP_IFACE_CHANNEL_TYPE_CONTACT_LIST
21722186 TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_LIST
2187 TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH
2188 TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH
21732189 TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER
21742190 TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER
21752191 TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA
23012317 TP_PROP_CHANNEL_TARGET_HANDLE
23022318 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE
23032319 TP_PROP_CHANNEL_TARGET_ID
2320 TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS
2321 TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT
2322 TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE
2323 TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER
23042324 TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES
23052325 TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME
23062326 TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS
23652385 TP_PROP_MEDIA_STREAM_HANDLER_NAT_TRAVERSAL
23662386 TP_PROP_MEDIA_STREAM_HANDLER_RELAY_INFO
23672387 TP_PROP_MEDIA_STREAM_HANDLER_STUN_SERVERS
2388 TP_PROP_PROTOCOL_CONNECTION_INTERFACES
2389 TP_PROP_PROTOCOL_ENGLISH_NAME
2390 TP_PROP_PROTOCOL_ICON
2391 TP_PROP_PROTOCOL_INTERFACES
2392 TP_PROP_PROTOCOL_PARAMETERS
2393 TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES
2394 TP_PROP_PROTOCOL_VCARD_FIELD
23682395 TP_TOKEN_CONNECTION_CONTACT_ID
23692396 TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS
23702397 TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN
23962423 tp_iface_quark_channel_interface_messages
23972424 tp_iface_quark_channel_interface_password
23982425 tp_iface_quark_channel_type_contact_list
2426 tp_iface_quark_channel_type_contact_search
23992427 tp_iface_quark_channel_type_file_transfer
24002428 tp_iface_quark_channel_type_room_list
24012429 tp_iface_quark_channel_type_streamed_media
24312459 tp_iface_quark_media_session_handler
24322460 tp_iface_quark_media_stream_handler
24332461 tp_iface_quark_properties_interface
2462 tp_iface_quark_protocol
24342463 tp_iface_quark_channel_interface_call_state
24352464 tp_iface_quark_channel_interface_anonymity
24362465 tp_iface_quark_channel_interface_service_point
32603289 tp_connection_manager_dup_protocol_names
32613290 tp_connection_manager_has_protocol
32623291 tp_connection_manager_get_protocol
3292 tp_connection_manager_get_protocol_object
32633293 TpConnectionManagerProtocol
32643294 tp_connection_manager_protocol_can_register
32653295 tp_connection_manager_protocol_dup_param_names
40034033 tp_base_client_unregister
40044034 tp_base_client_get_bus_name
40054035 tp_base_client_get_object_path
4036 tp_base_client_get_dbus_daemon
4037 tp_base_client_get_name
4038 tp_base_client_get_uniquify_name
40064039 <SUBSECTION Standard>
40074040 tp_base_client_get_type
40084041 TP_BASE_CLIENT
41334166 TpSimpleHandlerClass
41344167 TpSimpleHandlerPrivate
41354168 </SECTION>
4169
4170 <SECTION>
4171 <INCLUDE>telepathy-glib/base-protocol.h</INCLUDE>
4172 <FILE>base-protocol</FILE>
4173 <TITLE>base-protocol</TITLE>
4174 TpBaseProtocol
4175 tp_base_protocol_get_name
4176 tp_base_protocol_get_immutable_properties
4177 tp_base_protocol_get_parameters
4178 tp_base_protocol_new_connection
4179 <SUBSECTION>
4180 TpBaseProtocolClass
4181 TpBaseProtocolGetParametersFunc
4182 TpBaseProtocolNewConnectionFunc
4183 TpBaseProtocolNormalizeContactFunc
4184 TpBaseProtocolIdentifyAccountFunc
4185 TpBaseProtocolGetInterfacesFunc
4186 TpBaseProtocolGetConnectionDetailsFunc
4187 <SUBSECTION Standard>
4188 tp_base_protocol_get_type
4189 TP_BASE_PROTOCOL
4190 TP_BASE_PROTOCOL_CLASS
4191 TP_BASE_PROTOCOL_GET_CLASS
4192 TP_IS_BASE_PROTOCOL
4193 TP_IS_BASE_PROTOCOL_CLASS
4194 TP_TYPE_BASE_PROTOCOL
4195 <SUBSECTION Private>
4196 TpBaseProtocolPrivate
4197 TpBaseProtocolClassPrivate
4198 </SECTION>
4199
4200 <SECTION>
4201 <INCLUDE>telepathy-glib/svc-protocol.h</INCLUDE>
4202 <FILE>svc-protocol</FILE>
4203 <TITLE>svc-protocol</TITLE>
4204 TpSvcProtocol
4205 TpSvcProtocolClass
4206 <SUBSECTION>
4207 tp_svc_protocol_identify_account_impl
4208 tp_svc_protocol_implement_identify_account
4209 tp_svc_protocol_implement_normalize_contact
4210 tp_svc_protocol_normalize_contact_impl
4211 tp_svc_protocol_return_from_identify_account
4212 tp_svc_protocol_return_from_normalize_contact
4213 <SUBSECTION Standard>
4214 tp_svc_protocol_get_type
4215 TP_SVC_PROTOCOL
4216 TP_SVC_PROTOCOL_CLASS
4217 TP_SVC_PROTOCOL_GET_CLASS
4218 TP_IS_SVC_PROTOCOL
4219 TP_TYPE_SVC_PROTOCOL
4220 </SECTION>
4221
4222 <SECTION>
4223 <INCLUDE>telepathy-glib/protocol.h</INCLUDE>
4224 <FILE>protocol</FILE>
4225 <TITLE>protocol</TITLE>
4226 TpProtocol
4227 TpProtocolClass
4228 tp_protocol_new
4229 tp_protocol_get_name
4230 tp_protocol_init_known_interfaces
4231 <SUBSECTION>
4232 TP_PROTOCOL_FEATURE_PARAMETERS
4233 tp_protocol_dup_param_names
4234 tp_protocol_get_param
4235 tp_protocol_has_param
4236 tp_protocol_can_register
4237 <SUBSECTION>
4238 TP_PROTOCOL_FEATURE_CORE
4239 tp_protocol_get_capabilities
4240 tp_protocol_get_english_name
4241 tp_protocol_get_icon_name
4242 tp_protocol_get_vcard_field
4243 <SUBSECTION>
4244 tp_cli_protocol_call_identify_account
4245 tp_cli_protocol_call_normalize_contact
4246 tp_cli_protocol_callback_for_identify_account
4247 tp_cli_protocol_callback_for_normalize_contact
4248 <SUBSECTION Standard>
4249 tp_protocol_get_type
4250 TP_PROTOCOL
4251 TP_PROTOCOL_CLASS
4252 TP_PROTOCOL_GET_CLASS
4253 TP_IS_PROTOCOL
4254 TP_IS_PROTOCOL_CLASS
4255 TP_TYPE_PROTOCOL
4256 tp_protocol_get_feature_quark_core
4257 tp_protocol_get_feature_quark_parameters
4258 <SUBSECTION Private>
4259 TpProtocolPrivate
4260 TpProtocolClassPrivate
4261 </SECTION>
4262
4263 <SECTION>
4264 <FILE>channel-contactsearch</FILE>
4265 <TITLE>channel-contactsearch</TITLE>
4266 <INCLUDE>telepathy-glib/channel.h</INCLUDE>
4267 tp_cli_channel_type_contact_search_call_more
4268 tp_cli_channel_type_contact_search_call_search
4269 tp_cli_channel_type_contact_search_call_stop
4270 tp_cli_channel_type_contact_search_callback_for_more
4271 tp_cli_channel_type_contact_search_callback_for_search
4272 tp_cli_channel_type_contact_search_callback_for_stop
4273 tp_cli_channel_type_contact_search_connect_to_search_result_received
4274 tp_cli_channel_type_contact_search_connect_to_search_state_changed
4275 tp_cli_channel_type_contact_search_run_more
4276 tp_cli_channel_type_contact_search_run_search
4277 tp_cli_channel_type_contact_search_run_stop
4278 tp_cli_channel_type_contact_search_signal_callback_search_result_received
4279 tp_cli_channel_type_contact_search_signal_callback_search_state_changed
4280 </SECTION>
4281
4282 <SECTION>
4283 <FILE>svc-channel-contactsearch</FILE>
4284 <TITLE>svc-channel-contactsearch</TITLE>
4285 <INCLUDE>telepathy-glib/svc-channel.h</INCLUDE>
4286 TpSvcChannelTypeContactSearch
4287 TpSvcChannelTypeContactSearchClass
4288 tp_svc_channel_type_contact_search_emit_search_result_received
4289 tp_svc_channel_type_contact_search_emit_search_state_changed
4290 tp_svc_channel_type_contact_search_implement_more
4291 tp_svc_channel_type_contact_search_implement_search
4292 tp_svc_channel_type_contact_search_implement_stop
4293 tp_svc_channel_type_contact_search_more_impl
4294 tp_svc_channel_type_contact_search_return_from_more
4295 tp_svc_channel_type_contact_search_return_from_search
4296 tp_svc_channel_type_contact_search_return_from_stop
4297 tp_svc_channel_type_contact_search_search_impl
4298 tp_svc_channel_type_contact_search_stop_impl
4299 <SUBSECTION Standard>
4300 TP_IS_SVC_CHANNEL_TYPE_CONTACT_SEARCH
4301 TP_SVC_CHANNEL_TYPE_CONTACT_SEARCH
4302 TP_SVC_CHANNEL_TYPE_CONTACT_SEARCH_GET_CLASS
4303 TP_TYPE_SVC_CHANNEL_TYPE_CONTACT_SEARCH
4304 tp_svc_channel_type_contact_search_get_type
4305 </SECTION>
44 tp_base_client_get_type
55 tp_base_connection_get_type
66 tp_base_connection_manager_get_type
7 tp_base_protocol_get_type
78 tp_capabilities_get_type
89 tp_channel_dispatch_operation_get_type
910 tp_channel_dispatcher_get_type
3940 tp_media_session_handler_get_type
4041 tp_media_stream_handler_get_type
4142 tp_observe_channels_context_get_type
43 tp_protocol_get_type
4244 tp_proxy_get_type
4345 tp_simple_approver_get_type
4446 tp_simple_handler_get_type
6668 tp_svc_channel_interface_tube_get_type
6769 tp_svc_channel_request_get_type
6870 tp_svc_channel_type_contact_list_get_type
71 tp_svc_channel_type_contact_search_get_type
6972 tp_svc_channel_type_dbus_tube_get_type
7073 tp_svc_channel_type_file_transfer_get_type
7174 tp_svc_channel_type_room_list_get_type
100103 tp_svc_media_session_handler_get_type
101104 tp_svc_media_stream_handler_get_type
102105 tp_svc_properties_interface_get_type
106 tp_svc_protocol_get_type
297297 @Returns:
298298
299299
300 <!-- ##### FUNCTION tp_base_client_get_dbus_daemon ##### -->
301 <para>
302
303 </para>
304
305 @self:
306 @Returns:
307
308
309 <!-- ##### FUNCTION tp_base_client_get_name ##### -->
310 <para>
311
312 </para>
313
314 @self:
315 @Returns:
316
317
318 <!-- ##### FUNCTION tp_base_client_get_uniquify_name ##### -->
319 <para>
320
321 </para>
322
323 @self:
324 @Returns:
325
326
116116
117117 </para>
118118
119 <!-- ##### ARG TpBaseConnectionManager:interfaces ##### -->
120 <para>
121
122 </para>
123
124 <!-- ##### ARG TpBaseConnectionManager:protocols ##### -->
125 <para>
126
127 </para>
128
119129 <!-- ##### STRUCT TpBaseConnectionManagerClass ##### -->
120130 <para>
121131
125135 @cm_dbus_name:
126136 @protocol_params:
127137 @new_connection:
138 @interfaces:
128139
129140 <!-- ##### USER_FUNCTION TpBaseConnectionManagerNewConnFunc ##### -->
130141 <para>
157168 @Returns:
158169
159170
171 <!-- ##### FUNCTION tp_base_connection_manager_add_protocol ##### -->
172 <para>
173
174 </para>
175
176 @self:
177 @protocol:
178
179
0 <!-- ##### SECTION Title ##### -->
1 base-contact-list
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### STRUCT TpBaseContactList ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpBaseContactList:connection ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### STRUCT TpBaseContactListClass ##### -->
34 <para>
35
36 </para>
37
38 @parent_class:
39 @get_contacts:
40 @get_states:
41 @get_contact_list_persists:
42
43 <!-- ##### FUNCTION tp_base_contact_list_mixin_class_init ##### -->
44 <para>
45
46 </para>
47
48 @cls:
49
50
51 <!-- ##### FUNCTION tp_base_contact_list_mixin_register_with_contacts_mixin ##### -->
52 <para>
53
54 </para>
55
56 @conn:
57
58
59 <!-- ##### FUNCTION tp_base_contact_list_mixin_list_iface_init ##### -->
60 <para>
61
62 </para>
63
64 @klass:
65
66
67 <!-- ##### FUNCTION tp_base_contact_list_mixin_groups_iface_init ##### -->
68 <para>
69
70 </para>
71
72 @klass:
73
74
75 <!-- ##### FUNCTION tp_base_contact_list_get_state ##### -->
76 <para>
77
78 </para>
79
80 @self:
81 @error:
82 @Returns:
83
84
85 <!-- ##### FUNCTION tp_base_contact_list_get_connection ##### -->
86 <para>
87
88 </para>
89
90 @self:
91 @error:
92 @Returns:
93
94
95 <!-- ##### FUNCTION tp_base_contact_list_check_still_usable ##### -->
96 <para>
97
98 </para>
99
100 @self:
101 @error:
102 @Returns:
103
104
105 <!-- ##### FUNCTION tp_base_contact_list_set_list_pending ##### -->
106 <para>
107
108 </para>
109
110 @self:
111
112
113 <!-- ##### FUNCTION tp_base_contact_list_set_list_failed ##### -->
114 <para>
115
116 </para>
117
118 @self:
119 @domain:
120 @code:
121 @message:
122
123
124 <!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
125 <para>
126
127 </para>
128
129 @self:
130
131
132 <!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
133 <para>
134
135 </para>
136
137 @self:
138 @changed:
139 @removed:
140
141
142 <!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
143 <para>
144
145 </para>
146
147 @self:
148 @Returns:
149
150
151 <!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
152 <para>
153
154 </para>
155
156 @self:
157 @Returns:
158
159
160 <!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
161 <para>
162
163 </para>
164
165 @self:
166 @Returns:
167
168
169 <!-- ##### FUNCTION tp_base_contact_list_get_contact_list_persists ##### -->
170 <para>
171
172 </para>
173
174 @self:
175 @Returns:
176
177
178 <!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
179 <para>
180
181 </para>
182
183 @self:
184 @Returns:
185
186
187 <!-- ##### FUNCTION tp_base_contact_list_get_contacts ##### -->
188 <para>
189
190 </para>
191
192 @self:
193 @Returns:
194
195
196 <!-- ##### USER_FUNCTION TpBaseContactListGetStatesFunc ##### -->
197 <para>
198
199 </para>
200
201 @self:
202 @contact:
203 @subscribe:
204 @publish:
205 @publish_request:
206
207
208 <!-- ##### FUNCTION tp_base_contact_list_get_states ##### -->
209 <para>
210
211 </para>
212
213 @self:
214 @contact:
215 @subscribe:
216 @publish:
217 @publish_request:
218
219
220 <!-- ##### USER_FUNCTION TpBaseContactListUIntFunc ##### -->
221 <para>
222
223 </para>
224
225 @self:
226 @Returns:
227
228
229 <!-- ##### USER_FUNCTION TpBaseContactListAsyncFinishFunc ##### -->
230 <para>
231
232 </para>
233
234 @self:
235 @result:
236 @error:
237 @Returns:
238
239
240 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_LIST ##### -->
241 <para>
242
243 </para>
244
245
246
247 <!-- ##### STRUCT TpMutableContactListInterface ##### -->
248 <para>
249
250 </para>
251
252 @parent:
253 @request_subscription_async:
254 @request_subscription_finish:
255 @authorize_publication_async:
256 @authorize_publication_finish:
257 @remove_contacts_async:
258 @remove_contacts_finish:
259 @unsubscribe_async:
260 @unsubscribe_finish:
261 @unpublish_async:
262 @unpublish_finish:
263 @store_contacts_async:
264 @store_contacts_finish:
265 @can_change_contact_list:
266 @get_request_uses_message:
267
268 <!-- ##### FUNCTION tp_base_contact_list_can_change_contact_list ##### -->
269 <para>
270
271 </para>
272
273 @self:
274 @Returns:
275
276
277 <!-- ##### FUNCTION tp_base_contact_list_get_request_uses_message ##### -->
278 <para>
279
280 </para>
281
282 @self:
283 @Returns:
284
285
286 <!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
287 <para>
288
289 </para>
290
291 @self:
292 @contacts:
293 @message:
294 @callback:
295 @user_data:
296
297
298 <!-- ##### FUNCTION tp_base_contact_list_request_subscription_async ##### -->
299 <para>
300
301 </para>
302
303 @self:
304 @contacts:
305 @message:
306 @callback:
307 @user_data:
308
309
310 <!-- ##### FUNCTION tp_base_contact_list_request_subscription_finish ##### -->
311 <para>
312
313 </para>
314
315 @self:
316 @result:
317 @error:
318 @Returns:
319
320
321 <!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
322 <para>
323
324 </para>
325
326 @self:
327 @contacts:
328 @callback:
329 @user_data:
330
331
332 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication_async ##### -->
333 <para>
334
335 </para>
336
337 @self:
338 @contacts:
339 @callback:
340 @user_data:
341
342
343 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication_finish ##### -->
344 <para>
345
346 </para>
347
348 @self:
349 @result:
350 @error:
351 @Returns:
352
353
354 <!-- ##### FUNCTION tp_base_contact_list_store_contacts_async ##### -->
355 <para>
356
357 </para>
358
359 @self:
360 @contacts:
361 @callback:
362 @user_data:
363
364
365 <!-- ##### FUNCTION tp_base_contact_list_store_contacts_finish ##### -->
366 <para>
367
368 </para>
369
370 @self:
371 @result:
372 @error:
373 @Returns:
374
375
376 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts_async ##### -->
377 <para>
378
379 </para>
380
381 @self:
382 @contacts:
383 @callback:
384 @user_data:
385
386
387 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts_finish ##### -->
388 <para>
389
390 </para>
391
392 @self:
393 @result:
394 @error:
395 @Returns:
396
397
398 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe_async ##### -->
399 <para>
400
401 </para>
402
403 @self:
404 @contacts:
405 @callback:
406 @user_data:
407
408
409 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe_finish ##### -->
410 <para>
411
412 </para>
413
414 @self:
415 @result:
416 @error:
417 @Returns:
418
419
420 <!-- ##### FUNCTION tp_base_contact_list_unpublish_async ##### -->
421 <para>
422
423 </para>
424
425 @self:
426 @contacts:
427 @callback:
428 @user_data:
429
430
431 <!-- ##### FUNCTION tp_base_contact_list_unpublish_finish ##### -->
432 <para>
433
434 </para>
435
436 @self:
437 @result:
438 @error:
439 @Returns:
440
441
442 <!-- ##### MACRO TP_TYPE_CONTACT_GROUP_LIST ##### -->
443 <para>
444
445 </para>
446
447
448
449 <!-- ##### STRUCT TpContactGroupListInterface ##### -->
450 <para>
451
452 </para>
453
454 @parent:
455 @get_groups:
456 @get_group_members:
457 @get_contact_groups:
458 @has_disjoint_groups:
459 @normalize_group:
460
461 <!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
462 <para>
463
464 </para>
465
466 @self:
467 @s:
468 @Returns:
469
470
471 <!-- ##### FUNCTION tp_base_contact_list_normalize_group ##### -->
472 <para>
473
474 </para>
475
476 @self:
477 @s:
478 @Returns:
479
480
481 <!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
482 <para>
483
484 </para>
485
486 @self:
487 @contact:
488 @Returns:
489
490
491 <!-- ##### FUNCTION tp_base_contact_list_get_contact_groups ##### -->
492 <para>
493
494 </para>
495
496 @self:
497 @contact:
498 @Returns:
499
500
501 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
502 <para>
503
504 </para>
505
506 @self:
507 @Returns:
508
509
510 <!-- ##### FUNCTION tp_base_contact_list_get_groups ##### -->
511 <para>
512
513 </para>
514
515 @self:
516 @Returns:
517
518
519 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupMembersFunc ##### -->
520 <para>
521
522 </para>
523
524 @self:
525 @group:
526 @Returns:
527
528
529 <!-- ##### FUNCTION tp_base_contact_list_get_group_members ##### -->
530 <para>
531
532 </para>
533
534 @self:
535 @group:
536 @Returns:
537
538
539 <!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
540 <para>
541
542 </para>
543
544 @self:
545 @old_name:
546 @new_name:
547
548
549 <!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
550 <para>
551
552 </para>
553
554 @self:
555 @contacts:
556 @added:
557 @n_added:
558 @removed:
559 @n_removed:
560
561
562 <!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
563 <para>
564
565 </para>
566
567 @self:
568 @created:
569 @n_created:
570
571
572 <!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
573 <para>
574
575 </para>
576
577 @self:
578 @removed:
579 @n_removed:
580
581
582 <!-- ##### FUNCTION tp_base_contact_list_has_disjoint_groups ##### -->
583 <para>
584
585 </para>
586
587 @self:
588 @Returns:
589
590
591 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_GROUP_LIST ##### -->
592 <para>
593
594 </para>
595
596
597
598 <!-- ##### STRUCT TpMutableContactGroupListInterface ##### -->
599 <para>
600
601 </para>
602
603 @parent:
604 @set_contact_groups_async:
605 @set_contact_groups_finish:
606 @set_group_members_async:
607 @set_group_members_finish:
608 @add_to_group_async:
609 @add_to_group_finish:
610 @remove_from_group_async:
611 @remove_from_group_finish:
612 @remove_group_async:
613 @remove_group_finish:
614 @rename_group_async:
615 @rename_group_finish:
616 @get_group_storage:
617
618 <!-- ##### USER_FUNCTION TpBaseContactListSetContactGroupsFunc ##### -->
619 <para>
620
621 </para>
622
623 @self:
624 @contact:
625 @normalized_names:
626 @n_names:
627 @callback:
628 @user_data:
629
630
631 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_async ##### -->
632 <para>
633
634 </para>
635
636 @self:
637 @contact:
638 @normalized_names:
639 @n_names:
640 @callback:
641 @user_data:
642
643
644 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_finish ##### -->
645 <para>
646
647 </para>
648
649 @self:
650 @result:
651 @error:
652 @Returns:
653
654
655 <!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
656 <para>
657
658 </para>
659
660 @self:
661 @group:
662 @contacts:
663 @callback:
664 @user_data:
665
666
667 <!-- ##### FUNCTION tp_base_contact_list_add_to_group_async ##### -->
668 <para>
669
670 </para>
671
672 @self:
673 @group:
674 @contacts:
675 @callback:
676 @user_data:
677
678
679 <!-- ##### FUNCTION tp_base_contact_list_add_to_group_finish ##### -->
680 <para>
681
682 </para>
683
684 @self:
685 @result:
686 @error:
687 @Returns:
688
689
690 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group_async ##### -->
691 <para>
692
693 </para>
694
695 @self:
696 @group:
697 @contacts:
698 @callback:
699 @user_data:
700
701
702 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group_finish ##### -->
703 <para>
704
705 </para>
706
707 @self:
708 @result:
709 @error:
710 @Returns:
711
712
713 <!-- ##### FUNCTION tp_base_contact_list_set_group_members_async ##### -->
714 <para>
715
716 </para>
717
718 @self:
719 @normalized_group:
720 @contacts:
721 @callback:
722 @user_data:
723
724
725 <!-- ##### FUNCTION tp_base_contact_list_set_group_members_finish ##### -->
726 <para>
727
728 </para>
729
730 @self:
731 @result:
732 @error:
733 @Returns:
734
735
736 <!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
737 <para>
738
739 </para>
740
741 @self:
742 @group:
743 @callback:
744 @user_data:
745
746
747 <!-- ##### FUNCTION tp_base_contact_list_remove_group_async ##### -->
748 <para>
749
750 </para>
751
752 @self:
753 @group:
754 @callback:
755 @user_data:
756
757
758 <!-- ##### FUNCTION tp_base_contact_list_remove_group_finish ##### -->
759 <para>
760
761 </para>
762
763 @self:
764 @result:
765 @error:
766 @Returns:
767
768
769 <!-- ##### USER_FUNCTION TpBaseContactListRenameGroupFunc ##### -->
770 <para>
771
772 </para>
773
774 @self:
775 @old_name:
776 @new_name:
777 @callback:
778 @user_data:
779
780
781 <!-- ##### FUNCTION tp_base_contact_list_rename_group_async ##### -->
782 <para>
783
784 </para>
785
786 @self:
787 @old_name:
788 @new_name:
789 @callback:
790 @user_data:
791
792
793 <!-- ##### FUNCTION tp_base_contact_list_rename_group_finish ##### -->
794 <para>
795
796 </para>
797
798 @self:
799 @result:
800 @error:
801 @Returns:
802
803
804 <!-- ##### FUNCTION tp_base_contact_list_get_group_storage ##### -->
805 <para>
806
807 </para>
808
809 @self:
810 @Returns:
811
812
813 <!-- ##### MACRO TP_TYPE_BLOCKABLE_CONTACT_LIST ##### -->
814 <para>
815
816 </para>
817
818
819
820 <!-- ##### STRUCT TpBlockableContactListInterface ##### -->
821 <para>
822
823 </para>
824
825 @parent:
826 @get_blocked_contacts:
827 @block_contacts_async:
828 @block_contacts_finish:
829 @unblock_contacts_async:
830 @unblock_contacts_finish:
831 @can_block:
832
833 <!-- ##### FUNCTION tp_base_contact_list_can_block ##### -->
834 <para>
835
836 </para>
837
838 @self:
839 @Returns:
840
841
842 <!-- ##### FUNCTION tp_base_contact_list_get_blocked_contacts ##### -->
843 <para>
844
845 </para>
846
847 @self:
848 @Returns:
849
850
851 <!-- ##### FUNCTION tp_base_contact_list_block_contacts_async ##### -->
852 <para>
853
854 </para>
855
856 @self:
857 @contacts:
858 @callback:
859 @user_data:
860
861
862 <!-- ##### FUNCTION tp_base_contact_list_block_contacts_finish ##### -->
863 <para>
864
865 </para>
866
867 @self:
868 @result:
869 @error:
870 @Returns:
871
872
873 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_async ##### -->
874 <para>
875
876 </para>
877
878 @self:
879 @contacts:
880 @callback:
881 @user_data:
882
883
884 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_finish ##### -->
885 <para>
886
887 </para>
888
889 @self:
890 @result:
891 @error:
892 @Returns:
893
894
895 <!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
896 <para>
897
898 </para>
899
900 @self:
901 @changed:
902
903
3535
3636 </para>
3737
38 <!-- ##### STRUCT TpBaseProtocolClass ##### -->
38 <!-- ##### FUNCTION tp_base_protocol_get_name ##### -->
3939 <para>
4040
4141 </para>
4242
43 @parent_class:
44 @dbus_properties_class:
45 @is_stub:
46 @get_parameters:
47 @new_connection:
48 @normalize_contact:
49 @identify_account:
50 @get_interfaces:
51 @get_connection_details:
43 @self:
44 @Returns:
45
5246
5347 <!-- ##### FUNCTION tp_base_protocol_get_immutable_properties ##### -->
5448 <para>
7973 @Returns:
8074
8175
76 <!-- ##### STRUCT TpBaseProtocolClass ##### -->
77 <para>
78
79 </para>
80
81 @parent_class:
82 @dbus_properties_class:
83 @is_stub:
84 @get_parameters:
85 @new_connection:
86 @normalize_contact:
87 @identify_account:
88 @get_interfaces:
89 @get_connection_details:
90
91 <!-- ##### USER_FUNCTION TpBaseProtocolGetParametersFunc ##### -->
92 <para>
93
94 </para>
95
96 @self:
97 @Returns:
98
99
100 <!-- ##### USER_FUNCTION TpBaseProtocolNewConnectionFunc ##### -->
101 <para>
102
103 </para>
104
105 @self:
106 @asv:
107 @error:
108 @Returns:
109
110
111 <!-- ##### USER_FUNCTION TpBaseProtocolNormalizeContactFunc ##### -->
112 <para>
113
114 </para>
115
116 @self:
117 @contact:
118 @error:
119 @Returns:
120
121
122 <!-- ##### USER_FUNCTION TpBaseProtocolIdentifyAccountFunc ##### -->
123 <para>
124
125 </para>
126
127 @self:
128 @asv:
129 @error:
130 @Returns:
131
132
133 <!-- ##### USER_FUNCTION TpBaseProtocolGetInterfacesFunc ##### -->
134 <para>
135
136 </para>
137
138 @self:
139 @Returns:
140
141
142 <!-- ##### USER_FUNCTION TpBaseProtocolGetConnectionDetailsFunc ##### -->
143 <para>
144
145 </para>
146
147 @self:
148 @connection_interfaces:
149 @channel_manager_types:
150 @icon_name:
151 @english_name:
152 @vcard_field:
153
154
0 <!-- ##### SECTION Title ##### -->
1 channel-contactsearch
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_call_more ##### -->
23 <para>
24
25 </para>
26
27 @proxy:
28 @timeout_ms:
29 @callback:
30 @user_data:
31 @destroy:
32 @weak_object:
33 @Returns:
34
35
36 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_call_search ##### -->
37 <para>
38
39 </para>
40
41 @proxy:
42 @timeout_ms:
43 @in_Terms:
44 @callback:
45 @user_data:
46 @destroy:
47 @weak_object:
48 @Returns:
49
50
51 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_call_stop ##### -->
52 <para>
53
54 </para>
55
56 @proxy:
57 @timeout_ms:
58 @callback:
59 @user_data:
60 @destroy:
61 @weak_object:
62 @Returns:
63
64
65 <!-- ##### USER_FUNCTION tp_cli_channel_type_contact_search_callback_for_more ##### -->
66 <para>
67
68 </para>
69
70 @proxy:
71 @error:
72 @user_data:
73 @weak_object:
74
75
76 <!-- ##### USER_FUNCTION tp_cli_channel_type_contact_search_callback_for_search ##### -->
77 <para>
78
79 </para>
80
81 @proxy:
82 @error:
83 @user_data:
84 @weak_object:
85
86
87 <!-- ##### USER_FUNCTION tp_cli_channel_type_contact_search_callback_for_stop ##### -->
88 <para>
89
90 </para>
91
92 @proxy:
93 @error:
94 @user_data:
95 @weak_object:
96
97
98 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_connect_to_search_result_received ##### -->
99 <para>
100
101 </para>
102
103 @proxy:
104 @callback:
105 @user_data:
106 @destroy:
107 @weak_object:
108 @error:
109 @Returns:
110
111
112 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_connect_to_search_state_changed ##### -->
113 <para>
114
115 </para>
116
117 @proxy:
118 @callback:
119 @user_data:
120 @destroy:
121 @weak_object:
122 @error:
123 @Returns:
124
125
126 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_run_more ##### -->
127 <para>
128
129 </para>
130
131 @proxy:
132 @timeout_ms:
133 @error:
134 @loop:
135 @Returns:
136
137
138 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_run_search ##### -->
139 <para>
140
141 </para>
142
143 @proxy:
144 @timeout_ms:
145 @in_Terms:
146 @error:
147 @loop:
148 @Returns:
149
150
151 <!-- ##### FUNCTION tp_cli_channel_type_contact_search_run_stop ##### -->
152 <para>
153
154 </para>
155
156 @proxy:
157 @timeout_ms:
158 @error:
159 @loop:
160 @Returns:
161
162
163 <!-- ##### USER_FUNCTION tp_cli_channel_type_contact_search_signal_callback_search_result_received ##### -->
164 <para>
165
166 </para>
167
168 @proxy:
169 @arg_Result:
170 @user_data:
171 @weak_object:
172
173
174 <!-- ##### USER_FUNCTION tp_cli_channel_type_contact_search_signal_callback_search_state_changed ##### -->
175 <para>
176
177 </para>
178
179 @proxy:
180 @arg_State:
181 @arg_Error:
182 @arg_Details:
183 @user_data:
184 @weak_object:
185
186
3636 </para>
3737
3838 @manager:
39 @func:
40 @user_data:
41
42
43 <!-- ##### USER_FUNCTION TpChannelManagerTypeChannelClassFunc ##### -->
44 <para>
45
46 </para>
47
48 @type:
49 @fixed_properties:
50 @allowed_properties:
51 @user_data:
52
53
54 <!-- ##### USER_FUNCTION TpChannelManagerTypeForeachChannelClassFunc ##### -->
55 <para>
56
57 </para>
58
59 @type:
3960 @func:
4061 @user_data:
4162
114135 @create_channel:
115136 @request_channel:
116137 @ensure_channel:
138 @type_foreach_channel_class:
117139
118140 <!-- ##### FUNCTION tp_channel_manager_asv_has_unknown_properties ##### -->
119141 <para>
241263 @user_data:
242264
243265
266 <!-- ##### FUNCTION tp_channel_manager_type_foreach_channel_class ##### -->
267 <para>
268
269 </para>
270
271 @type:
272 @func:
273 @user_data:
274
275
244276 <!-- ##### FUNCTION tp_channel_manager_request_channel ##### -->
245277 <para>
246278
0 <!-- ##### SECTION Title ##### -->
1 connection-contact-list
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_add_to_group ##### -->
23 <para>
24
25 </para>
26
27 @proxy:
28 @timeout_ms:
29 @in_Group:
30 @in_Members:
31 @callback:
32 @user_data:
33 @destroy:
34 @weak_object:
35 @Returns:
36
37
38 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_from_group ##### -->
39 <para>
40
41 </para>
42
43 @proxy:
44 @timeout_ms:
45 @in_Group:
46 @in_Members:
47 @callback:
48 @user_data:
49 @destroy:
50 @weak_object:
51 @Returns:
52
53
54 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_group ##### -->
55 <para>
56
57 </para>
58
59 @proxy:
60 @timeout_ms:
61 @in_Group:
62 @callback:
63 @user_data:
64 @destroy:
65 @weak_object:
66 @Returns:
67
68
69 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_rename_group ##### -->
70 <para>
71
72 </para>
73
74 @proxy:
75 @timeout_ms:
76 @in_Old_Name:
77 @in_New_Name:
78 @callback:
79 @user_data:
80 @destroy:
81 @weak_object:
82 @Returns:
83
84
85 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_contact_groups ##### -->
86 <para>
87
88 </para>
89
90 @proxy:
91 @timeout_ms:
92 @in_Contact:
93 @in_Groups:
94 @callback:
95 @user_data:
96 @destroy:
97 @weak_object:
98 @Returns:
99
100
101 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_group_members ##### -->
102 <para>
103
104 </para>
105
106 @proxy:
107 @timeout_ms:
108 @in_Group:
109 @in_Members:
110 @callback:
111 @user_data:
112 @destroy:
113 @weak_object:
114 @Returns:
115
116
117 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_add_to_group ##### -->
118 <para>
119
120 </para>
121
122 @proxy:
123 @error:
124 @user_data:
125 @weak_object:
126
127
128 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_from_group ##### -->
129 <para>
130
131 </para>
132
133 @proxy:
134 @error:
135 @user_data:
136 @weak_object:
137
138
139 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_group ##### -->
140 <para>
141
142 </para>
143
144 @proxy:
145 @error:
146 @user_data:
147 @weak_object:
148
149
150 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_rename_group ##### -->
151 <para>
152
153 </para>
154
155 @proxy:
156 @error:
157 @user_data:
158 @weak_object:
159
160
161 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_contact_groups ##### -->
162 <para>
163
164 </para>
165
166 @proxy:
167 @error:
168 @user_data:
169 @weak_object:
170
171
172 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_group_members ##### -->
173 <para>
174
175 </para>
176
177 @proxy:
178 @error:
179 @user_data:
180 @weak_object:
181
182
183 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_group_renamed ##### -->
184 <para>
185
186 </para>
187
188 @proxy:
189 @callback:
190 @user_data:
191 @destroy:
192 @weak_object:
193 @error:
194 @Returns:
195
196
197 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_changed ##### -->
198 <para>
199
200 </para>
201
202 @proxy:
203 @callback:
204 @user_data:
205 @destroy:
206 @weak_object:
207 @error:
208 @Returns:
209
210
211 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_created ##### -->
212 <para>
213
214 </para>
215
216 @proxy:
217 @callback:
218 @user_data:
219 @destroy:
220 @weak_object:
221 @error:
222 @Returns:
223
224
225 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_removed ##### -->
226 <para>
227
228 </para>
229
230 @proxy:
231 @callback:
232 @user_data:
233 @destroy:
234 @weak_object:
235 @error:
236 @Returns:
237
238
239 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_group_renamed ##### -->
240 <para>
241
242 </para>
243
244 @proxy:
245 @arg_Old_Name:
246 @arg_New_Name:
247 @user_data:
248 @weak_object:
249
250
251 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_changed ##### -->
252 <para>
253
254 </para>
255
256 @proxy:
257 @arg_Contact:
258 @arg_Added:
259 @arg_Removed:
260 @user_data:
261 @weak_object:
262
263
264 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_created ##### -->
265 <para>
266
267 </para>
268
269 @proxy:
270 @arg_Names:
271 @user_data:
272 @weak_object:
273
274
275 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_removed ##### -->
276 <para>
277
278 </para>
279
280 @proxy:
281 @arg_Names:
282 @user_data:
283 @weak_object:
284
285
286 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_authorize_publication ##### -->
287 <para>
288
289 </para>
290
291 @proxy:
292 @timeout_ms:
293 @in_Contacts:
294 @callback:
295 @user_data:
296 @destroy:
297 @weak_object:
298 @Returns:
299
300
301 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_remove_contacts ##### -->
302 <para>
303
304 </para>
305
306 @proxy:
307 @timeout_ms:
308 @in_Contacts:
309 @callback:
310 @user_data:
311 @destroy:
312 @weak_object:
313 @Returns:
314
315
316 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_request_subscription ##### -->
317 <para>
318
319 </para>
320
321 @proxy:
322 @timeout_ms:
323 @in_Contacts:
324 @in_Message:
325 @callback:
326 @user_data:
327 @destroy:
328 @weak_object:
329 @Returns:
330
331
332 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unpublish ##### -->
333 <para>
334
335 </para>
336
337 @proxy:
338 @timeout_ms:
339 @in_Contacts:
340 @callback:
341 @user_data:
342 @destroy:
343 @weak_object:
344 @Returns:
345
346
347 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unsubscribe ##### -->
348 <para>
349
350 </para>
351
352 @proxy:
353 @timeout_ms:
354 @in_Contacts:
355 @callback:
356 @user_data:
357 @destroy:
358 @weak_object:
359 @Returns:
360
361
362 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_authorize_publication ##### -->
363 <para>
364
365 </para>
366
367 @proxy:
368 @error:
369 @user_data:
370 @weak_object:
371
372
373 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_remove_contacts ##### -->
374 <para>
375
376 </para>
377
378 @proxy:
379 @error:
380 @user_data:
381 @weak_object:
382
383
384 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_request_subscription ##### -->
385 <para>
386
387 </para>
388
389 @proxy:
390 @error:
391 @user_data:
392 @weak_object:
393
394
395 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unpublish ##### -->
396 <para>
397
398 </para>
399
400 @proxy:
401 @error:
402 @user_data:
403 @weak_object:
404
405
406 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unsubscribe ##### -->
407 <para>
408
409 </para>
410
411 @proxy:
412 @error:
413 @user_data:
414 @weak_object:
415
416
417 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contacts_changed ##### -->
418 <para>
419
420 </para>
421
422 @proxy:
423 @callback:
424 @user_data:
425 @destroy:
426 @weak_object:
427 @error:
428 @Returns:
429
430
431 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contacts_changed ##### -->
432 <para>
433
434 </para>
435
436 @proxy:
437 @arg_Changes:
438 @arg_Removals:
439 @user_data:
440 @weak_object:
441
442
443 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contact_list_state_changed ##### -->
444 <para>
445
446 </para>
447
448 @proxy:
449 @callback:
450 @user_data:
451 @destroy:
452 @weak_object:
453 @error:
454 @Returns:
455
456
457 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contact_list_state_changed ##### -->
458 <para>
459
460 </para>
461
462 @proxy:
463 @arg_Contact_List_State:
464 @user_data:
465 @weak_object:
466
467
237237 @Returns:
238238
239239
240 <!-- ##### FUNCTION tp_connection_manager_get_protocol_object ##### -->
241 <para>
242
243 </para>
244
245 @self:
246 @protocol:
247 @Returns:
248
249
240250 <!-- ##### STRUCT TpConnectionManagerProtocol ##### -->
241251 <para>
242252
182182 @Returns:
183183
184184
185 <!-- ##### FUNCTION tp_dbus_properties_mixin_make_properties_hash ##### -->
186 <para>
187
188 </para>
189
190 @object:
185 <!-- ##### FUNCTION tp_dbus_properties_mixin_fill_properties_hash ##### -->
186 <para>
187
188 </para>
189
190 @object:
191 @table:
191192 @first_interface:
192193 @first_property:
193194 @Varargs:
194 @Returns:
195
196
195
196
197 <!-- ##### FUNCTION tp_dbus_properties_mixin_make_properties_hash ##### -->
198 <para>
199
200 </para>
201
202 @object:
203 @first_interface:
204 @first_property:
205 @Varargs:
206 @Returns:
207
208
707707
708708
709709
710 <!-- ##### ENUM TpChannelContactSearchState ##### -->
711 <para>
712
713 </para>
714
715 @TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED:
716 @TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS:
717 @TP_CHANNEL_CONTACT_SEARCH_STATE_MORE_AVAILABLE:
718 @TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED:
719 @TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED:
720
721 <!-- ##### MACRO NUM_TP_CHANNEL_CONTACT_SEARCH_STATES ##### -->
722 <para>
723
724 </para>
725
726
727
728 <!-- ##### MACRO TP_HASH_TYPE_CONTACT_SEARCH_MAP ##### -->
729 <para>
730
731 </para>
732
733
734
735 <!-- ##### MACRO TP_HASH_TYPE_CONTACT_SEARCH_RESULT_MAP ##### -->
736 <para>
737
738 </para>
739
740
741
710742 <!-- ##### MACRO TP_STRUCT_TYPE_AVATAR ##### -->
711743 <para>
712744
159159
160160
161161
162 <!-- ##### MACRO TP_IFACE_PROTOCOL ##### -->
163 <para>
164
165 </para>
166
167
168
169 <!-- ##### MACRO TP_IFACE_QUARK_PROTOCOL ##### -->
170 <para>
171
172 </para>
173
174
175
162176 <!-- ##### MACRO TP_IFACE_CONNECTION ##### -->
163177 <para>
164178
397411
398412
399413
414 <!-- ##### MACRO TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH ##### -->
415 <para>
416
417 </para>
418
419
420
421 <!-- ##### MACRO TP_IFACE_QUARK_CHANNEL_TYPE_CONTACT_SEARCH ##### -->
422 <para>
423
424 </para>
425
426
427
400428 <!-- ##### MACRO TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER ##### -->
401429 <para>
402430
13141342
13151343
13161344
1345 <!-- ##### MACRO TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS ##### -->
1346 <para>
1347
1348 </para>
1349
1350
1351
1352 <!-- ##### MACRO TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_LIMIT ##### -->
1353 <para>
1354
1355 </para>
1356
1357
1358
1359 <!-- ##### MACRO TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SEARCH_STATE ##### -->
1360 <para>
1361
1362 </para>
1363
1364
1365
1366 <!-- ##### MACRO TP_PROP_CHANNEL_TYPE_CONTACT_SEARCH_SERVER ##### -->
1367 <para>
1368
1369 </para>
1370
1371
1372
13171373 <!-- ##### MACRO TP_PROP_CHANNEL_TYPE_DBUS_TUBE_DBUS_NAMES ##### -->
13181374 <para>
13191375
17621818
17631819
17641820
1821 <!-- ##### MACRO TP_PROP_PROTOCOL_CONNECTION_INTERFACES ##### -->
1822 <para>
1823
1824 </para>
1825
1826
1827
1828 <!-- ##### MACRO TP_PROP_PROTOCOL_ENGLISH_NAME ##### -->
1829 <para>
1830
1831 </para>
1832
1833
1834
1835 <!-- ##### MACRO TP_PROP_PROTOCOL_ICON ##### -->
1836 <para>
1837
1838 </para>
1839
1840
1841
1842 <!-- ##### MACRO TP_PROP_PROTOCOL_INTERFACES ##### -->
1843 <para>
1844
1845 </para>
1846
1847
1848
1849 <!-- ##### MACRO TP_PROP_PROTOCOL_PARAMETERS ##### -->
1850 <para>
1851
1852 </para>
1853
1854
1855
1856 <!-- ##### MACRO TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES ##### -->
1857 <para>
1858
1859 </para>
1860
1861
1862
1863 <!-- ##### MACRO TP_PROP_PROTOCOL_VCARD_FIELD ##### -->
1864 <para>
1865
1866 </para>
1867
1868
1869
17651870 <!-- ##### MACRO TP_TOKEN_CONNECTION_CONTACT_ID ##### -->
17661871 <para>
17671872
9393 @interface:
9494 @must_have_unique_name:
9595
96 <!-- ##### MACRO tp_proxy_has_interface ##### -->
96 <!-- ##### FUNCTION tp_proxy_has_interface ##### -->
9797 <para>
9898
9999 </para>
100100
101101 @self:
102102 @iface:
103 @Returns:
103104
104105
105106 <!-- ##### FUNCTION tp_proxy_has_interface_by_id ##### -->
0 <!-- ##### SECTION Title ##### -->
1 svc-channel-contactsearch
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### STRUCT TpSvcChannelTypeContactSearch ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### SIGNAL TpSvcChannelTypeContactSearch::search-result-received ##### -->
29 <para>
30
31 </para>
32
33 @tpsvcchanneltypecontactsearch: the object which received the signal.
34
35 <!-- ##### SIGNAL TpSvcChannelTypeContactSearch::search-state-changed ##### -->
36 <para>
37
38 </para>
39
40 @tpsvcchanneltypecontactsearch: the object which received the signal.
41 @arg1:
42 @arg2:
43
44 <!-- ##### STRUCT TpSvcChannelTypeContactSearchClass ##### -->
45 <para>
46
47 </para>
48
49
50 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_emit_search_result_received ##### -->
51 <para>
52
53 </para>
54
55 @instance:
56 @arg_Result:
57
58
59 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_emit_search_state_changed ##### -->
60 <para>
61
62 </para>
63
64 @instance:
65 @arg_State:
66 @arg_Error:
67 @arg_Details:
68
69
70 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_implement_more ##### -->
71 <para>
72
73 </para>
74
75 @klass:
76 @impl:
77
78
79 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_implement_search ##### -->
80 <para>
81
82 </para>
83
84 @klass:
85 @impl:
86
87
88 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_implement_stop ##### -->
89 <para>
90
91 </para>
92
93 @klass:
94 @impl:
95
96
97 <!-- ##### USER_FUNCTION tp_svc_channel_type_contact_search_more_impl ##### -->
98 <para>
99
100 </para>
101
102 @self:
103 @context:
104
105
106 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_return_from_more ##### -->
107 <para>
108
109 </para>
110
111 @context:
112
113
114 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_return_from_search ##### -->
115 <para>
116
117 </para>
118
119 @context:
120
121
122 <!-- ##### FUNCTION tp_svc_channel_type_contact_search_return_from_stop ##### -->
123 <para>
124
125 </para>
126
127 @context:
128
129
130 <!-- ##### USER_FUNCTION tp_svc_channel_type_contact_search_search_impl ##### -->
131 <para>
132
133 </para>
134
135 @self:
136 @in_Terms:
137 @context:
138
139
140 <!-- ##### USER_FUNCTION tp_svc_channel_type_contact_search_stop_impl ##### -->
141 <para>
142
143 </para>
144
145 @self:
146 @context:
147
148
0 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Image ##### -->
1
2
3
4 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Long_Description ##### -->
5 <para>
6
7 </para>
8
9
10 <!-- ##### SECTION ./tmpl/base-protocol.sgml:See_Also ##### -->
11 <para>
12
13 </para>
14
15
16 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Short_Description ##### -->
17
18
19
20 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Stability_Level ##### -->
21
22
23
24 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Title ##### -->
25 base-protocol
26
27
28 <!-- ##### SECTION ./tmpl/protocol.sgml:Image ##### -->
29
30
31
32 <!-- ##### SECTION ./tmpl/protocol.sgml:Long_Description ##### -->
33 <para>
34
35 </para>
36
37
38 <!-- ##### SECTION ./tmpl/protocol.sgml:See_Also ##### -->
39 <para>
40
41 </para>
42
43
44 <!-- ##### SECTION ./tmpl/protocol.sgml:Short_Description ##### -->
45
46
47
48 <!-- ##### SECTION ./tmpl/protocol.sgml:Stability_Level ##### -->
49
50
51
52 <!-- ##### SECTION ./tmpl/protocol.sgml:Title ##### -->
53 protocol
54
55
56 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:Image ##### -->
57
58
59
60 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:Long_Description ##### -->
61 <para>
62
63 </para>
64
65
66 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:See_Also ##### -->
67 <para>
68
69 </para>
70
71
72 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:Short_Description ##### -->
73
74
75
76 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:Stability_Level ##### -->
77
78
79
80 <!-- ##### SECTION ./tmpl/svc-protocol.sgml:Title ##### -->
81 svc-protocol
82
83
84 <!-- ##### MACRO TP_IFACE_PROTOCOL ##### -->
85 <para>
86
87 </para>
88
89
90 <!-- ##### MACRO TP_IFACE_QUARK_PROTOCOL ##### -->
91 <para>
92
93 </para>
94
95
96 <!-- ##### MACRO TP_PROP_PROTOCOL_CONNECTION_INTERFACES ##### -->
97 <para>
98
99 </para>
100
101
102 <!-- ##### MACRO TP_PROP_PROTOCOL_ENGLISH_NAME ##### -->
103 <para>
104
105 </para>
106
107
108 <!-- ##### MACRO TP_PROP_PROTOCOL_ICON ##### -->
109 <para>
110
111 </para>
112
113
114 <!-- ##### MACRO TP_PROP_PROTOCOL_INTERFACES ##### -->
115 <para>
116
117 </para>
118
119
120 <!-- ##### MACRO TP_PROP_PROTOCOL_PARAMETERS ##### -->
121 <para>
122
123 </para>
124
125
126 <!-- ##### MACRO TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES ##### -->
127 <para>
128
129 </para>
130
131
132 <!-- ##### MACRO TP_PROP_PROTOCOL_VCARD_FIELD ##### -->
133 <para>
134
135 </para>
136
137
138 <!-- ##### MACRO TP_PROTOCOL_FEATURE_CORE ##### -->
139 <para>
140
141 </para>
142
143
144 <!-- ##### MACRO TP_PROTOCOL_FEATURE_PARAMETERS ##### -->
145 <para>
146
147 </para>
148
149
150 <!-- ##### ARG TpBaseConnectionManager:interfaces ##### -->
151 <para>
152
153 </para>
154
155
156 <!-- ##### ARG TpBaseConnectionManager:protocols ##### -->
157 <para>
158
159 </para>
160
161
162 <!-- ##### STRUCT TpBaseProtocol ##### -->
163 <para>
164
165 </para>
166
167
168 <!-- ##### ARG TpBaseProtocol:immutable-properties ##### -->
169 <para>
170
171 </para>
172
173
174 <!-- ##### ARG TpBaseProtocol:name ##### -->
175 <para>
176
177 </para>
178
179
180 <!-- ##### STRUCT TpBaseProtocolClass ##### -->
0 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Image ##### -->
1
2
3
4 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Long_Description ##### -->
5 <para>
6
7 </para>
8
9
10 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:See_Also ##### -->
11 <para>
12
13 </para>
14
15
16 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Short_Description ##### -->
17
18
19
20 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Stability_Level ##### -->
21
22
23
24 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Title ##### -->
25 base-contact-list
26
27
28 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Image ##### -->
29
30
31
32 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Long_Description ##### -->
33 <para>
34
35 </para>
36
37
38 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:See_Also ##### -->
39 <para>
40
41 </para>
42
43
44 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Short_Description ##### -->
45
46
47
48 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Stability_Level ##### -->
49
50
51
52 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Title ##### -->
53 connection-contact-list
54
55
56 <!-- ##### MACRO NUM_TP_CONTACT_LIST_STATES ##### -->
57 <para>
58
59 </para>
60
61
62 <!-- ##### MACRO NUM_TP_CONTACT_METADATA_STORAGE_TYPES ##### -->
63 <para>
64
65 </para>
66
67
68 <!-- ##### MACRO NUM_TP_PRESENCE_STATES ##### -->
69 <para>
70
71 </para>
72
73
74 <!-- ##### MACRO NUM_TP_SUBSCRIPTION_STATES ##### -->
75 <para>
76
77 </para>
78
79
80 <!-- ##### MACRO TP_ERROR_STR_NOT_YET ##### -->
81 <para>
82
83 </para>
84
85
86 <!-- ##### MACRO TP_HASH_TYPE_CONTACT_SUBSCRIPTION_MAP ##### -->
87 <para>
88
89 </para>
90
91
92 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS ##### -->
93 <para>
94
95 </para>
96
97
98 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_CONTACT_LIST ##### -->
99 <para>
100
101 </para>
102
103
104 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_GROUPS ##### -->
105 <para>
106
107 </para>
108
109
110 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_LIST ##### -->
111 <para>
112
113 </para>
114
115
116 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_DISJOINT_GROUPS ##### -->
117 <para>
118
119 </para>
120
121
122 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUPS ##### -->
123 <para>
124
125 </para>
126
127
128 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUP_STORAGE ##### -->
129 <para>
130
131 </para>
132
133
134 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_CAN_CHANGE_CONTACT_LIST ##### -->
135 <para>
136
137 </para>
138
139
140 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_CAN_CHANGE_SUBSCRIPTIONS ##### -->
141 <para>
142
143 </para>
144
145
146 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_CONTACT_LIST_PERSISTS ##### -->
147 <para>
148
149 </para>
150
151
152 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_CONTACT_LIST_STATE ##### -->
153 <para>
154
155 </para>
156
157
158 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_REQUEST_USES_MESSAGE ##### -->
159 <para>
160
161 </para>
162
163
164 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_SUBSCRIPTIONS_PERSIST ##### -->
165 <para>
166
167 </para>
168
169
170 <!-- ##### MACRO TP_STRUCT_TYPE_CONTACT_SUBSCRIPTIONS ##### -->
171 <para>
172
173 </para>
174
175
176 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUPS ##### -->
177 <para>
178
179 </para>
180
181
182 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_PUBLISH ##### -->
183 <para>
184
185 </para>
186
187
188 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_PUBLISH_REQUEST ##### -->
189 <para>
190
191 </para>
192
193
194 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_SUBSCRIBE ##### -->
195 <para>
196
197 </para>
198
199
200 <!-- ##### MACRO TP_TYPE_BLOCKABLE_CONTACT_LIST ##### -->
201 <para>
202
203 </para>
204
205
206 <!-- ##### MACRO TP_TYPE_CONTACT_GROUP_LIST ##### -->
207 <para>
208
209 </para>
210
211
212 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_GROUP_LIST ##### -->
213 <para>
214
215 </para>
216
217
218 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_LIST ##### -->
219 <para>
220
221 </para>
222
223
224 <!-- ##### SIGNAL TpBaseConnection::clients-interested ##### -->
225 <para>
226
227 </para>
228
229 @tpbaseconnection: the object which received the signal.
230 @arg1:
231
232 <!-- ##### SIGNAL TpBaseConnection::clients-uninterested ##### -->
233 <para>
234
235 </para>
236
237 @tpbaseconnection: the object which received the signal.
238 @arg1:
239
240 <!-- ##### STRUCT TpBaseContactList ##### -->
241 <para>
242
243 </para>
244
245
246 <!-- ##### ARG TpBaseContactList:connection ##### -->
247 <para>
248
249 </para>
250
251
252 <!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
253 <para>
254
255 </para>
256
257 @self:
258 @contacts:
259 @callback:
260 @user_data:
261
262 <!-- ##### USER_FUNCTION TpBaseContactListAsyncFinishFunc ##### -->
263 <para>
264
265 </para>
266
267 @self:
268 @result:
269 @error:
270 @Returns:
271
272 <!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
273 <para>
274
275 </para>
276
277 @self:
278 @Returns:
279
280 <!-- ##### STRUCT TpBaseContactListClass ##### -->
181281 <para>
182282
183283 </para>
184284
185285 @parent_class:
186 @dbus_properties_class:
187 @is_stub:
188 @get_parameters:
189 @new_connection:
190 @normalize_contact:
191 @identify_account:
192 @get_interfaces:
193 @get_connection_details:
194
195 <!-- ##### STRUCT TpProtocol ##### -->
196 <para>
197
198 </para>
199
200
201 <!-- ##### ARG TpProtocol:capabilities ##### -->
202 <para>
203
204 </para>
205
206
207 <!-- ##### ARG TpProtocol:english-name ##### -->
208 <para>
209
210 </para>
211
212
213 <!-- ##### ARG TpProtocol:icon-name ##### -->
214 <para>
215
216 </para>
217
218
219 <!-- ##### ARG TpProtocol:param-names ##### -->
220 <para>
221
222 </para>
223
224
225 <!-- ##### ARG TpProtocol:protocol-name ##### -->
226 <para>
227
228 </para>
229
230
231 <!-- ##### ARG TpProtocol:protocol-properties ##### -->
232 <para>
233
234 </para>
235
236
237 <!-- ##### ARG TpProtocol:vcard-field ##### -->
238 <para>
239
240 </para>
241
242
243 <!-- ##### STRUCT TpProtocolClass ##### -->
244 <para>
245
246 </para>
247
248
249 <!-- ##### STRUCT TpSvcProtocol ##### -->
250 <para>
251
252 </para>
253
254
255 <!-- ##### STRUCT TpSvcProtocolClass ##### -->
256 <para>
257
258 </para>
259
260
261 <!-- ##### FUNCTION tp_base_connection_manager_add_protocol ##### -->
262 <para>
263
264 </para>
265
266 @self:
267 @protocol:
268
269 <!-- ##### FUNCTION tp_base_protocol_get_immutable_properties ##### -->
270 <para>
271
272 </para>
273
274 @self:
275 @Returns:
276
277 <!-- ##### FUNCTION tp_base_protocol_get_parameters ##### -->
278 <para>
279
280 </para>
281
282 @self:
283 @Returns:
284
285 <!-- ##### FUNCTION tp_base_protocol_new_connection ##### -->
286 <para>
287
288 </para>
289
290 @self:
291 @asv:
292 @error:
293 @Returns:
294
295 <!-- ##### FUNCTION tp_cli_protocol_call_identify_account ##### -->
286 @get_contacts:
287 @get_states:
288 @get_contact_list_persists:
289
290 <!-- ##### USER_FUNCTION TpBaseContactListCreateGroupsFunc ##### -->
291 <para>
292
293 </para>
294
295 @self:
296 @normalized_names:
297 @n_names:
298 @callback:
299 @user_data:
300
301 <!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
302 <para>
303
304 </para>
305
306 @self:
307 @contact:
308 @Returns:
309
310 <!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
311 <para>
312
313 </para>
314
315 @self:
316 @Returns:
317
318 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupMembersFunc ##### -->
319 <para>
320
321 </para>
322
323 @self:
324 @group:
325 @Returns:
326
327 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
328 <para>
329
330 </para>
331
332 @self:
333 @Returns:
334
335 <!-- ##### USER_FUNCTION TpBaseContactListGetStatesFunc ##### -->
336 <para>
337
338 </para>
339
340 @self:
341 @contact:
342 @subscribe:
343 @publish:
344 @publish_request:
345
346 <!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
347 <para>
348
349 </para>
350
351 @self:
352 @group:
353 @contacts:
354 @callback:
355 @user_data:
356
357 <!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
358 <para>
359
360 </para>
361
362 @self:
363 @s:
364 @Returns:
365
366 <!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
367 <para>
368
369 </para>
370
371 @self:
372 @group:
373 @callback:
374 @user_data:
375
376 <!-- ##### USER_FUNCTION TpBaseContactListRenameGroupFunc ##### -->
377 <para>
378
379 </para>
380
381 @self:
382 @old_name:
383 @new_name:
384 @callback:
385 @user_data:
386
387 <!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
388 <para>
389
390 </para>
391
392 @self:
393 @contacts:
394 @message:
395 @callback:
396 @user_data:
397
398 <!-- ##### USER_FUNCTION TpBaseContactListSetContactGroupsFunc ##### -->
399 <para>
400
401 </para>
402
403 @self:
404 @contact:
405 @normalized_names:
406 @n_names:
407 @callback:
408 @user_data:
409
410 <!-- ##### USER_FUNCTION TpBaseContactListUIntFunc ##### -->
411 <para>
412
413 </para>
414
415 @self:
416 @Returns:
417
418 <!-- ##### STRUCT TpBlockableContactListInterface ##### -->
419 <para>
420
421 </para>
422
423 @parent:
424 @get_blocked_contacts:
425 @block_contacts_async:
426 @block_contacts_finish:
427 @unblock_contacts_async:
428 @unblock_contacts_finish:
429 @can_block:
430
431 <!-- ##### STRUCT TpContactGroupListInterface ##### -->
432 <para>
433
434 </para>
435
436 @parent:
437 @get_groups:
438 @get_group_members:
439 @get_contact_groups:
440 @has_disjoint_groups:
441 @normalize_group:
442
443 <!-- ##### ENUM TpContactListState ##### -->
444 <para>
445
446 </para>
447
448 @TP_CONTACT_LIST_STATE_NONE:
449 @TP_CONTACT_LIST_STATE_WAITING:
450 @TP_CONTACT_LIST_STATE_SUCCESS:
451 @TP_CONTACT_LIST_STATE_FAILURE:
452
453 <!-- ##### ENUM TpContactMetadataStorageType ##### -->
454 <para>
455
456 </para>
457
458 @TP_CONTACT_METADATA_STORAGE_TYPE_NONE:
459 @TP_CONTACT_METADATA_STORAGE_TYPE_SUBSCRIBED_OR_PENDING:
460 @TP_CONTACT_METADATA_STORAGE_TYPE_SUBSCRIBED:
461 @TP_CONTACT_METADATA_STORAGE_TYPE_ANYONE:
462
463 <!-- ##### STRUCT TpMutableContactGroupListInterface ##### -->
464 <para>
465
466 </para>
467
468 @parent:
469 @set_contact_groups_async:
470 @set_contact_groups_finish:
471 @set_group_members_async:
472 @set_group_members_finish:
473 @add_to_group_async:
474 @add_to_group_finish:
475 @remove_from_group_async:
476 @remove_from_group_finish:
477 @remove_group_async:
478 @remove_group_finish:
479 @rename_group_async:
480 @rename_group_finish:
481 @get_group_storage:
482
483 <!-- ##### STRUCT TpMutableContactListInterface ##### -->
484 <para>
485
486 </para>
487
488 @parent:
489 @request_subscription_async:
490 @request_subscription_finish:
491 @authorize_publication_async:
492 @authorize_publication_finish:
493 @remove_contacts_async:
494 @remove_contacts_finish:
495 @unsubscribe_async:
496 @unsubscribe_finish:
497 @unpublish_async:
498 @unpublish_finish:
499 @store_contacts_async:
500 @store_contacts_finish:
501 @can_change_contact_list:
502 @get_request_uses_message:
503
504 <!-- ##### ENUM TpPresenceState ##### -->
505 <para>
506
507 </para>
508
509 @TP_PRESENCE_STATE_NO:
510 @TP_PRESENCE_STATE_ASK:
511 @TP_PRESENCE_STATE_YES:
512
513 <!-- ##### ENUM TpSubscriptionState ##### -->
514 <para>
515
516 </para>
517
518 @TP_SUBSCRIPTION_STATE_UNKNOWN:
519 @TP_SUBSCRIPTION_STATE_NO:
520 @TP_SUBSCRIPTION_STATE_REJECTED:
521 @TP_SUBSCRIPTION_STATE_ASK:
522 @TP_SUBSCRIPTION_STATE_YES:
523
524 <!-- ##### STRUCT TpSvcConnectionInterfaceContactGroups ##### -->
525 <para>
526
527 </para>
528
529
530 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::group-renamed ##### -->
531 <para>
532
533 </para>
534
535 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
536 @arg1:
537 @arg2:
538
539 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-changed ##### -->
540 <para>
541
542 </para>
543
544 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
545 @arg1:
546 @arg2:
547 @arg3:
548
549 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-created ##### -->
550 <para>
551
552 </para>
553
554 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
555 @arg1:
556
557 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-removed ##### -->
558 <para>
559
560 </para>
561
562 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
563 @arg1:
564
565 <!-- ##### STRUCT TpSvcConnectionInterfaceContactGroupsClass ##### -->
566 <para>
567
568 </para>
569
570
571 <!-- ##### STRUCT TpSvcConnectionInterfaceContactList ##### -->
572 <para>
573
574 </para>
575
576
577 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactList::contact-list-state-changed ##### -->
578 <para>
579
580 </para>
581
582 @tpsvcconnectioninterfacecontactlist: the object which received the signal.
583 @arg1:
584
585 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactList::contacts-changed ##### -->
586 <para>
587
588 </para>
589
590 @tpsvcconnectioninterfacecontactlist: the object which received the signal.
591 @Param3:
592
593 <!-- ##### STRUCT TpSvcConnectionInterfaceContactListClass ##### -->
594 <para>
595
596 </para>
597
598
599 <!-- ##### FUNCTION tp_base_connection_add_client_interest ##### -->
600 <para>
601
602 </para>
603
604 @self:
605 @unique_name:
606 @token:
607 @only_if_uninterested:
608
609 <!-- ##### FUNCTION tp_base_connection_add_possible_client_interest ##### -->
610 <para>
611
612 </para>
613
614 @self:
615 @token:
616
617 <!-- ##### FUNCTION tp_base_contact_list_add_to_group_async ##### -->
618 <para>
619
620 </para>
621
622 @self:
623 @group:
624 @contacts:
625 @callback:
626 @user_data:
627
628 <!-- ##### FUNCTION tp_base_contact_list_add_to_group_finish ##### -->
629 <para>
630
631 </para>
632
633 @self:
634 @result:
635 @error:
636 @Returns:
637
638 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication_async ##### -->
639 <para>
640
641 </para>
642
643 @self:
644 @contacts:
645 @callback:
646 @user_data:
647
648 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication_finish ##### -->
649 <para>
650
651 </para>
652
653 @self:
654 @result:
655 @error:
656 @Returns:
657
658 <!-- ##### FUNCTION tp_base_contact_list_block_contacts_async ##### -->
659 <para>
660
661 </para>
662
663 @self:
664 @contacts:
665 @callback:
666 @user_data:
667
668 <!-- ##### FUNCTION tp_base_contact_list_block_contacts_finish ##### -->
669 <para>
670
671 </para>
672
673 @self:
674 @result:
675 @error:
676 @Returns:
677
678 <!-- ##### FUNCTION tp_base_contact_list_can_block ##### -->
679 <para>
680
681 </para>
682
683 @self:
684 @Returns:
685
686 <!-- ##### FUNCTION tp_base_contact_list_can_change_contact_list ##### -->
687 <para>
688
689 </para>
690
691 @self:
692 @Returns:
693
694 <!-- ##### FUNCTION tp_base_contact_list_can_change_subscriptions ##### -->
695 <para>
696
697 </para>
698
699 @self:
700 @Returns:
701
702 <!-- ##### FUNCTION tp_base_contact_list_check_still_usable ##### -->
703 <para>
704
705 </para>
706
707 @self:
708 @error:
709 @Returns:
710
711 <!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
712 <para>
713
714 </para>
715
716 @self:
717 @changed:
718
719 <!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
720 <para>
721
722 </para>
723
724 @self:
725 @changed:
726 @removed:
727
728 <!-- ##### FUNCTION tp_base_contact_list_create_groups_async ##### -->
729 <para>
730
731 </para>
732
733 @self:
734 @normalized_names:
735 @n_names:
736 @callback:
737 @user_data:
738
739 <!-- ##### FUNCTION tp_base_contact_list_create_groups_finish ##### -->
740 <para>
741
742 </para>
743
744 @self:
745 @result:
746 @error:
747 @Returns:
748
749 <!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
750 <para>
751
752 </para>
753
754 @self:
755 @Returns:
756
757 <!-- ##### FUNCTION tp_base_contact_list_get_blocked_contacts ##### -->
758 <para>
759
760 </para>
761
762 @self:
763 @Returns:
764
765 <!-- ##### FUNCTION tp_base_contact_list_get_connection ##### -->
766 <para>
767
768 </para>
769
770 @self:
771 @error:
772 @Returns:
773
774 <!-- ##### FUNCTION tp_base_contact_list_get_contact_groups ##### -->
775 <para>
776
777 </para>
778
779 @self:
780 @contact:
781 @Returns:
782
783 <!-- ##### FUNCTION tp_base_contact_list_get_contact_list_persists ##### -->
784 <para>
785
786 </para>
787
788 @self:
789 @Returns:
790
791 <!-- ##### FUNCTION tp_base_contact_list_get_contacts ##### -->
792 <para>
793
794 </para>
795
796 @self:
797 @Returns:
798
799 <!-- ##### FUNCTION tp_base_contact_list_get_group_members ##### -->
800 <para>
801
802 </para>
803
804 @self:
805 @group:
806 @Returns:
807
808 <!-- ##### FUNCTION tp_base_contact_list_get_group_storage ##### -->
809 <para>
810
811 </para>
812
813 @self:
814 @Returns:
815
816 <!-- ##### FUNCTION tp_base_contact_list_get_groups ##### -->
817 <para>
818
819 </para>
820
821 @self:
822 @Returns:
823
824 <!-- ##### FUNCTION tp_base_contact_list_get_request_uses_message ##### -->
825 <para>
826
827 </para>
828
829 @self:
830 @Returns:
831
832 <!-- ##### FUNCTION tp_base_contact_list_get_state ##### -->
833 <para>
834
835 </para>
836
837 @self:
838 @error:
839 @Returns:
840
841 <!-- ##### FUNCTION tp_base_contact_list_get_states ##### -->
842 <para>
843
844 </para>
845
846 @self:
847 @contact:
848 @subscribe:
849 @publish:
850 @publish_request:
851
852 <!-- ##### FUNCTION tp_base_contact_list_get_subscriptions_persist ##### -->
853 <para>
854
855 </para>
856
857 @self:
858 @Returns:
859
860 <!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
861 <para>
862
863 </para>
864
865 @self:
866 @old_name:
867 @new_name:
868
869 <!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
870 <para>
871
872 </para>
873
874 @self:
875 @contacts:
876 @added:
877 @n_added:
878 @removed:
879 @n_removed:
880
881 <!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
882 <para>
883
884 </para>
885
886 @self:
887 @created:
888 @n_created:
889
890 <!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
891 <para>
892
893 </para>
894
895 @self:
896 @removed:
897 @n_removed:
898
899 <!-- ##### FUNCTION tp_base_contact_list_has_disjoint_groups ##### -->
900 <para>
901
902 </para>
903
904 @self:
905 @Returns:
906
907 <!-- ##### FUNCTION tp_base_contact_list_mixin_class_init ##### -->
908 <para>
909
910 </para>
911
912 @cls:
913
914 <!-- ##### FUNCTION tp_base_contact_list_mixin_groups_iface_init ##### -->
915 <para>
916
917 </para>
918
919 @klass:
920
921 <!-- ##### FUNCTION tp_base_contact_list_mixin_list_iface_init ##### -->
922 <para>
923
924 </para>
925
926 @klass:
927
928 <!-- ##### FUNCTION tp_base_contact_list_mixin_register_with_contacts_mixin ##### -->
929 <para>
930
931 </para>
932
933 @conn:
934
935 <!-- ##### FUNCTION tp_base_contact_list_normalize_group ##### -->
936 <para>
937
938 </para>
939
940 @self:
941 @s:
942 @Returns:
943
944 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts_async ##### -->
945 <para>
946
947 </para>
948
949 @self:
950 @contacts:
951 @callback:
952 @user_data:
953
954 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts_finish ##### -->
955 <para>
956
957 </para>
958
959 @self:
960 @result:
961 @error:
962 @Returns:
963
964 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group_async ##### -->
965 <para>
966
967 </para>
968
969 @self:
970 @group:
971 @contacts:
972 @callback:
973 @user_data:
974
975 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group_finish ##### -->
976 <para>
977
978 </para>
979
980 @self:
981 @result:
982 @error:
983 @Returns:
984
985 <!-- ##### FUNCTION tp_base_contact_list_remove_group_async ##### -->
986 <para>
987
988 </para>
989
990 @self:
991 @group:
992 @callback:
993 @user_data:
994
995 <!-- ##### FUNCTION tp_base_contact_list_remove_group_finish ##### -->
996 <para>
997
998 </para>
999
1000 @self:
1001 @result:
1002 @error:
1003 @Returns:
1004
1005 <!-- ##### FUNCTION tp_base_contact_list_rename_group_async ##### -->
1006 <para>
1007
1008 </para>
1009
1010 @self:
1011 @old_name:
1012 @new_name:
1013 @callback:
1014 @user_data:
1015
1016 <!-- ##### FUNCTION tp_base_contact_list_rename_group_finish ##### -->
1017 <para>
1018
1019 </para>
1020
1021 @self:
1022 @result:
1023 @error:
1024 @Returns:
1025
1026 <!-- ##### FUNCTION tp_base_contact_list_request_subscription_async ##### -->
1027 <para>
1028
1029 </para>
1030
1031 @self:
1032 @contacts:
1033 @message:
1034 @callback:
1035 @user_data:
1036
1037 <!-- ##### FUNCTION tp_base_contact_list_request_subscription_finish ##### -->
1038 <para>
1039
1040 </para>
1041
1042 @self:
1043 @result:
1044 @error:
1045 @Returns:
1046
1047 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_async ##### -->
1048 <para>
1049
1050 </para>
1051
1052 @self:
1053 @contact:
1054 @normalized_names:
1055 @n_names:
1056 @callback:
1057 @user_data:
1058
1059 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups_finish ##### -->
1060 <para>
1061
1062 </para>
1063
1064 @self:
1065 @result:
1066 @error:
1067 @Returns:
1068
1069 <!-- ##### FUNCTION tp_base_contact_list_set_group_members_async ##### -->
1070 <para>
1071
1072 </para>
1073
1074 @self:
1075 @normalized_group:
1076 @contacts:
1077 @callback:
1078 @user_data:
1079
1080 <!-- ##### FUNCTION tp_base_contact_list_set_group_members_finish ##### -->
1081 <para>
1082
1083 </para>
1084
1085 @self:
1086 @result:
1087 @error:
1088 @Returns:
1089
1090 <!-- ##### FUNCTION tp_base_contact_list_set_list_failed ##### -->
1091 <para>
1092
1093 </para>
1094
1095 @self:
1096 @domain:
1097 @code:
1098 @message:
1099
1100 <!-- ##### FUNCTION tp_base_contact_list_set_list_pending ##### -->
1101 <para>
1102
1103 </para>
1104
1105 @self:
1106
1107 <!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
1108 <para>
1109
1110 </para>
1111
1112 @self:
1113
1114 <!-- ##### FUNCTION tp_base_contact_list_store_contacts_async ##### -->
1115 <para>
1116
1117 </para>
1118
1119 @self:
1120 @contacts:
1121 @callback:
1122 @user_data:
1123
1124 <!-- ##### FUNCTION tp_base_contact_list_store_contacts_finish ##### -->
1125 <para>
1126
1127 </para>
1128
1129 @self:
1130 @result:
1131 @error:
1132 @Returns:
1133
1134 <!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
1135 <para>
1136
1137 </para>
1138
1139 @self:
1140 @Returns:
1141
1142 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_async ##### -->
1143 <para>
1144
1145 </para>
1146
1147 @self:
1148 @contacts:
1149 @callback:
1150 @user_data:
1151
1152 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts_finish ##### -->
1153 <para>
1154
1155 </para>
1156
1157 @self:
1158 @result:
1159 @error:
1160 @Returns:
1161
1162 <!-- ##### FUNCTION tp_base_contact_list_unpublish_async ##### -->
1163 <para>
1164
1165 </para>
1166
1167 @self:
1168 @contacts:
1169 @callback:
1170 @user_data:
1171
1172 <!-- ##### FUNCTION tp_base_contact_list_unpublish_finish ##### -->
1173 <para>
1174
1175 </para>
1176
1177 @self:
1178 @result:
1179 @error:
1180 @Returns:
1181
1182 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe_async ##### -->
1183 <para>
1184
1185 </para>
1186
1187 @self:
1188 @contacts:
1189 @callback:
1190 @user_data:
1191
1192 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe_finish ##### -->
1193 <para>
1194
1195 </para>
1196
1197 @self:
1198 @result:
1199 @error:
1200 @Returns:
1201
1202 <!-- ##### FUNCTION tp_cli_connection_call_add_client_interest ##### -->
2961203 <para>
2971204
2981205 </para>
2991206
3001207 @proxy:
3011208 @timeout_ms:
302 @in_Parameters:
1209 @in_Tokens:
3031210 @callback:
3041211 @user_data:
3051212 @destroy:
3061213 @weak_object:
3071214 @Returns:
3081215
309 <!-- ##### FUNCTION tp_cli_protocol_call_normalize_contact ##### -->
1216 <!-- ##### FUNCTION tp_cli_connection_call_remove_client_interest ##### -->
3101217 <para>
3111218
3121219 </para>
3131220
3141221 @proxy:
3151222 @timeout_ms:
316 @in_Contact_ID:
1223 @in_Tokens:
3171224 @callback:
3181225 @user_data:
3191226 @destroy:
3201227 @weak_object:
3211228 @Returns:
3221229
323 <!-- ##### USER_FUNCTION tp_cli_protocol_callback_for_identify_account ##### -->
324 <para>
325
326 </para>
327
328 @proxy:
329 @out_Account_ID:
330 @error:
331 @user_data:
332 @weak_object:
333
334 <!-- ##### USER_FUNCTION tp_cli_protocol_callback_for_normalize_contact ##### -->
335 <para>
336
337 </para>
338
339 @proxy:
340 @out_Normalized_Contact_ID:
341 @error:
342 @user_data:
343 @weak_object:
344
345 <!-- ##### FUNCTION tp_connection_manager_get_protocol_object ##### -->
346 <para>
347
348 </para>
349
350 @self:
351 @protocol:
352 @Returns:
353
354 <!-- ##### FUNCTION tp_dbus_properties_mixin_fill_properties_hash ##### -->
355 <para>
356
357 </para>
358
359 @object:
360 @table:
361 @first_interface:
362 @first_property:
363 @Varargs:
364
365 <!-- ##### FUNCTION tp_protocol_can_register ##### -->
366 <para>
367
368 </para>
369
370 @self:
371 @Returns:
372
373 <!-- ##### FUNCTION tp_protocol_dup_param_names ##### -->
374 <para>
375
376 </para>
377
378 @self:
379 @Returns:
380
381 <!-- ##### FUNCTION tp_protocol_get_capabilities ##### -->
382 <para>
383
384 </para>
385
386 @self:
387 @Returns:
388
389 <!-- ##### FUNCTION tp_protocol_get_english_name ##### -->
390 <para>
391
392 </para>
393
394 @self:
395 @Returns:
396
397 <!-- ##### FUNCTION tp_protocol_get_icon_name ##### -->
398 <para>
399
400 </para>
401
402 @self:
403 @Returns:
404
405 <!-- ##### FUNCTION tp_protocol_get_name ##### -->
406 <para>
407
408 </para>
409
410 @self:
411 @Returns:
412
413 <!-- ##### FUNCTION tp_protocol_get_param ##### -->
414 <para>
415
416 </para>
417
418 @self:
419 @param:
420 @Returns:
421
422 <!-- ##### FUNCTION tp_protocol_get_vcard_field ##### -->
423 <para>
424
425 </para>
426
427 @self:
428 @Returns:
429
430 <!-- ##### FUNCTION tp_protocol_has_param ##### -->
431 <para>
432
433 </para>
434
435 @self:
436 @param:
437 @Returns:
438
439 <!-- ##### FUNCTION tp_protocol_init_known_interfaces ##### -->
440 <para>
441
442 </para>
443
444 @void:
445
446 <!-- ##### FUNCTION tp_protocol_new ##### -->
447 <para>
448
449 </para>
450
451 @dbus:
452 @cm_name:
453 @protocol_name:
454 @immutable_properties:
455 @error:
456 @Returns:
457
458 <!-- ##### USER_FUNCTION tp_svc_protocol_identify_account_impl ##### -->
459 <para>
460
461 </para>
462
463 @self:
464 @in_Parameters:
465 @context:
466
467 <!-- ##### FUNCTION tp_svc_protocol_implement_identify_account ##### -->
1230 <!-- ##### USER_FUNCTION tp_cli_connection_callback_for_add_client_interest ##### -->
1231 <para>
1232
1233 </para>
1234
1235 @proxy:
1236 @error:
1237 @user_data:
1238 @weak_object:
1239
1240 <!-- ##### USER_FUNCTION tp_cli_connection_callback_for_remove_client_interest ##### -->
1241 <para>
1242
1243 </para>
1244
1245 @proxy:
1246 @error:
1247 @user_data:
1248 @weak_object:
1249
1250 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_add_to_group ##### -->
1251 <para>
1252
1253 </para>
1254
1255 @proxy:
1256 @timeout_ms:
1257 @in_Group:
1258 @in_Members:
1259 @callback:
1260 @user_data:
1261 @destroy:
1262 @weak_object:
1263 @Returns:
1264
1265 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_from_group ##### -->
1266 <para>
1267
1268 </para>
1269
1270 @proxy:
1271 @timeout_ms:
1272 @in_Group:
1273 @in_Members:
1274 @callback:
1275 @user_data:
1276 @destroy:
1277 @weak_object:
1278 @Returns:
1279
1280 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_group ##### -->
1281 <para>
1282
1283 </para>
1284
1285 @proxy:
1286 @timeout_ms:
1287 @in_Group:
1288 @callback:
1289 @user_data:
1290 @destroy:
1291 @weak_object:
1292 @Returns:
1293
1294 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_rename_group ##### -->
1295 <para>
1296
1297 </para>
1298
1299 @proxy:
1300 @timeout_ms:
1301 @in_Old_Name:
1302 @in_New_Name:
1303 @callback:
1304 @user_data:
1305 @destroy:
1306 @weak_object:
1307 @Returns:
1308
1309 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_contact_groups ##### -->
1310 <para>
1311
1312 </para>
1313
1314 @proxy:
1315 @timeout_ms:
1316 @in_Contact:
1317 @in_Groups:
1318 @callback:
1319 @user_data:
1320 @destroy:
1321 @weak_object:
1322 @Returns:
1323
1324 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_group_members ##### -->
1325 <para>
1326
1327 </para>
1328
1329 @proxy:
1330 @timeout_ms:
1331 @in_Group:
1332 @in_Members:
1333 @callback:
1334 @user_data:
1335 @destroy:
1336 @weak_object:
1337 @Returns:
1338
1339 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_add_to_group ##### -->
1340 <para>
1341
1342 </para>
1343
1344 @proxy:
1345 @error:
1346 @user_data:
1347 @weak_object:
1348
1349 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_from_group ##### -->
1350 <para>
1351
1352 </para>
1353
1354 @proxy:
1355 @error:
1356 @user_data:
1357 @weak_object:
1358
1359 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_group ##### -->
1360 <para>
1361
1362 </para>
1363
1364 @proxy:
1365 @error:
1366 @user_data:
1367 @weak_object:
1368
1369 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_rename_group ##### -->
1370 <para>
1371
1372 </para>
1373
1374 @proxy:
1375 @error:
1376 @user_data:
1377 @weak_object:
1378
1379 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_contact_groups ##### -->
1380 <para>
1381
1382 </para>
1383
1384 @proxy:
1385 @error:
1386 @user_data:
1387 @weak_object:
1388
1389 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_group_members ##### -->
1390 <para>
1391
1392 </para>
1393
1394 @proxy:
1395 @error:
1396 @user_data:
1397 @weak_object:
1398
1399 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_group_renamed ##### -->
1400 <para>
1401
1402 </para>
1403
1404 @proxy:
1405 @callback:
1406 @user_data:
1407 @destroy:
1408 @weak_object:
1409 @error:
1410 @Returns:
1411
1412 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_changed ##### -->
1413 <para>
1414
1415 </para>
1416
1417 @proxy:
1418 @callback:
1419 @user_data:
1420 @destroy:
1421 @weak_object:
1422 @error:
1423 @Returns:
1424
1425 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_created ##### -->
1426 <para>
1427
1428 </para>
1429
1430 @proxy:
1431 @callback:
1432 @user_data:
1433 @destroy:
1434 @weak_object:
1435 @error:
1436 @Returns:
1437
1438 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_removed ##### -->
1439 <para>
1440
1441 </para>
1442
1443 @proxy:
1444 @callback:
1445 @user_data:
1446 @destroy:
1447 @weak_object:
1448 @error:
1449 @Returns:
1450
1451 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_group_renamed ##### -->
1452 <para>
1453
1454 </para>
1455
1456 @proxy:
1457 @arg_Old_Name:
1458 @arg_New_Name:
1459 @user_data:
1460 @weak_object:
1461
1462 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_changed ##### -->
1463 <para>
1464
1465 </para>
1466
1467 @proxy:
1468 @arg_Contact:
1469 @arg_Added:
1470 @arg_Removed:
1471 @user_data:
1472 @weak_object:
1473
1474 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_created ##### -->
1475 <para>
1476
1477 </para>
1478
1479 @proxy:
1480 @arg_Names:
1481 @user_data:
1482 @weak_object:
1483
1484 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_removed ##### -->
1485 <para>
1486
1487 </para>
1488
1489 @proxy:
1490 @arg_Names:
1491 @user_data:
1492 @weak_object:
1493
1494 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_authorize_publication ##### -->
1495 <para>
1496
1497 </para>
1498
1499 @proxy:
1500 @timeout_ms:
1501 @in_Contacts:
1502 @callback:
1503 @user_data:
1504 @destroy:
1505 @weak_object:
1506 @Returns:
1507
1508 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_remove_contacts ##### -->
1509 <para>
1510
1511 </para>
1512
1513 @proxy:
1514 @timeout_ms:
1515 @in_Contacts:
1516 @callback:
1517 @user_data:
1518 @destroy:
1519 @weak_object:
1520 @Returns:
1521
1522 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_request_subscription ##### -->
1523 <para>
1524
1525 </para>
1526
1527 @proxy:
1528 @timeout_ms:
1529 @in_Contacts:
1530 @in_Message:
1531 @callback:
1532 @user_data:
1533 @destroy:
1534 @weak_object:
1535 @Returns:
1536
1537 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unpublish ##### -->
1538 <para>
1539
1540 </para>
1541
1542 @proxy:
1543 @timeout_ms:
1544 @in_Contacts:
1545 @callback:
1546 @user_data:
1547 @destroy:
1548 @weak_object:
1549 @Returns:
1550
1551 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unsubscribe ##### -->
1552 <para>
1553
1554 </para>
1555
1556 @proxy:
1557 @timeout_ms:
1558 @in_Contacts:
1559 @callback:
1560 @user_data:
1561 @destroy:
1562 @weak_object:
1563 @Returns:
1564
1565 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_authorize_publication ##### -->
1566 <para>
1567
1568 </para>
1569
1570 @proxy:
1571 @error:
1572 @user_data:
1573 @weak_object:
1574
1575 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_remove_contacts ##### -->
1576 <para>
1577
1578 </para>
1579
1580 @proxy:
1581 @error:
1582 @user_data:
1583 @weak_object:
1584
1585 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_request_subscription ##### -->
1586 <para>
1587
1588 </para>
1589
1590 @proxy:
1591 @error:
1592 @user_data:
1593 @weak_object:
1594
1595 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unpublish ##### -->
1596 <para>
1597
1598 </para>
1599
1600 @proxy:
1601 @error:
1602 @user_data:
1603 @weak_object:
1604
1605 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unsubscribe ##### -->
1606 <para>
1607
1608 </para>
1609
1610 @proxy:
1611 @error:
1612 @user_data:
1613 @weak_object:
1614
1615 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contact_list_state_changed ##### -->
1616 <para>
1617
1618 </para>
1619
1620 @proxy:
1621 @callback:
1622 @user_data:
1623 @destroy:
1624 @weak_object:
1625 @error:
1626 @Returns:
1627
1628 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contacts_changed ##### -->
1629 <para>
1630
1631 </para>
1632
1633 @proxy:
1634 @callback:
1635 @user_data:
1636 @destroy:
1637 @weak_object:
1638 @error:
1639 @Returns:
1640
1641 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contact_list_state_changed ##### -->
1642 <para>
1643
1644 </para>
1645
1646 @proxy:
1647 @arg_Contact_List_State:
1648 @user_data:
1649 @weak_object:
1650
1651 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contacts_changed ##### -->
1652 <para>
1653
1654 </para>
1655
1656 @proxy:
1657 @arg_Changes:
1658 @arg_Removals:
1659 @user_data:
1660 @weak_object:
1661
1662 <!-- ##### FUNCTION tp_connection_add_client_interest ##### -->
1663 <para>
1664
1665 </para>
1666
1667 @self:
1668 @interested_in:
1669
1670 <!-- ##### FUNCTION tp_connection_add_client_interest_by_id ##### -->
1671 <para>
1672
1673 </para>
1674
1675 @self:
1676 @interested_in:
1677
1678 <!-- ##### FUNCTION tp_connection_get_contact_list_attributes ##### -->
1679 <para>
1680
1681 </para>
1682
1683 @self:
1684 @timeout_ms:
1685 @interfaces:
1686 @hold:
1687 @callback:
1688 @user_data:
1689 @destroy:
1690 @weak_object:
1691
1692 <!-- ##### FUNCTION tp_connection_request_contact_list_attributes ##### -->
1693 <para>
1694
1695 </para>
1696
1697 @self:
1698 @timeout_ms:
1699 @interfaces:
1700 @hold:
1701 @callback:
1702 @user_data:
1703 @destroy:
1704 @weak_object:
1705
1706 <!-- ##### USER_FUNCTION tp_svc_connection_add_client_interest_impl ##### -->
1707 <para>
1708
1709 </para>
1710
1711 @self:
1712 @in_Tokens:
1713 @context:
1714
1715 <!-- ##### FUNCTION tp_svc_connection_implement_add_client_interest ##### -->
4681716 <para>
4691717
4701718 </para>
4721720 @klass:
4731721 @impl:
4741722
475 <!-- ##### FUNCTION tp_svc_protocol_implement_normalize_contact ##### -->
1723 <!-- ##### FUNCTION tp_svc_connection_implement_remove_client_interest ##### -->
4761724 <para>
4771725
4781726 </para>
4801728 @klass:
4811729 @impl:
4821730
483 <!-- ##### USER_FUNCTION tp_svc_protocol_normalize_contact_impl ##### -->
484 <para>
485
486 </para>
487
488 @self:
489 @in_Contact_ID:
490 @context:
491
492 <!-- ##### FUNCTION tp_svc_protocol_return_from_identify_account ##### -->
493 <para>
494
495 </para>
496
497 @context:
498 @out_Account_ID:
499
500 <!-- ##### FUNCTION tp_svc_protocol_return_from_normalize_contact ##### -->
501 <para>
502
503 </para>
504
505 @context:
506 @out_Normalized_Contact_ID:
507
1731 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_add_to_group_impl ##### -->
1732 <para>
1733
1734 </para>
1735
1736 @self:
1737 @in_Group:
1738 @in_Members:
1739 @context:
1740
1741 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_group_renamed ##### -->
1742 <para>
1743
1744 </para>
1745
1746 @instance:
1747 @arg_Old_Name:
1748 @arg_New_Name:
1749
1750 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_changed ##### -->
1751 <para>
1752
1753 </para>
1754
1755 @instance:
1756 @arg_Contact:
1757 @arg_Added:
1758 @arg_Removed:
1759
1760 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_created ##### -->
1761 <para>
1762
1763 </para>
1764
1765 @instance:
1766 @arg_Names:
1767
1768 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_removed ##### -->
1769 <para>
1770
1771 </para>
1772
1773 @instance:
1774 @arg_Names:
1775
1776 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_add_to_group ##### -->
1777 <para>
1778
1779 </para>
1780
1781 @klass:
1782 @impl:
1783
1784 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_remove_from_group ##### -->
1785 <para>
1786
1787 </para>
1788
1789 @klass:
1790 @impl:
1791
1792 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_remove_group ##### -->
1793 <para>
1794
1795 </para>
1796
1797 @klass:
1798 @impl:
1799
1800 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_rename_group ##### -->
1801 <para>
1802
1803 </para>
1804
1805 @klass:
1806 @impl:
1807
1808 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_set_contact_groups ##### -->
1809 <para>
1810
1811 </para>
1812
1813 @klass:
1814 @impl:
1815
1816 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_set_group_members ##### -->
1817 <para>
1818
1819 </para>
1820
1821 @klass:
1822 @impl:
1823
1824 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_remove_from_group_impl ##### -->
1825 <para>
1826
1827 </para>
1828
1829 @self:
1830 @in_Group:
1831 @in_Members:
1832 @context:
1833
1834 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_remove_group_impl ##### -->
1835 <para>
1836
1837 </para>
1838
1839 @self:
1840 @in_Group:
1841 @context:
1842
1843 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_rename_group_impl ##### -->
1844 <para>
1845
1846 </para>
1847
1848 @self:
1849 @in_Old_Name:
1850 @in_New_Name:
1851 @context:
1852
1853 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_add_to_group ##### -->
1854 <para>
1855
1856 </para>
1857
1858 @context:
1859
1860 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_remove_from_group ##### -->
1861 <para>
1862
1863 </para>
1864
1865 @context:
1866
1867 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_remove_group ##### -->
1868 <para>
1869
1870 </para>
1871
1872 @context:
1873
1874 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_rename_group ##### -->
1875 <para>
1876
1877 </para>
1878
1879 @context:
1880
1881 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_set_contact_groups ##### -->
1882 <para>
1883
1884 </para>
1885
1886 @context:
1887
1888 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_set_group_members ##### -->
1889 <para>
1890
1891 </para>
1892
1893 @context:
1894
1895 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_set_contact_groups_impl ##### -->
1896 <para>
1897
1898 </para>
1899
1900 @self:
1901 @in_Contact:
1902 @in_Groups:
1903 @context:
1904
1905 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_set_group_members_impl ##### -->
1906 <para>
1907
1908 </para>
1909
1910 @self:
1911 @in_Group:
1912 @in_Members:
1913 @context:
1914
1915 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_authorize_publication_impl ##### -->
1916 <para>
1917
1918 </para>
1919
1920 @self:
1921 @in_Contacts:
1922 @context:
1923
1924 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_emit_contact_list_state_changed ##### -->
1925 <para>
1926
1927 </para>
1928
1929 @instance:
1930 @arg_Contact_List_State:
1931
1932 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_emit_contacts_changed ##### -->
1933 <para>
1934
1935 </para>
1936
1937 @instance:
1938 @arg_Changes:
1939 @arg_Removals:
1940
1941 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_get_contact_list_attributes_impl ##### -->
1942 <para>
1943
1944 </para>
1945
1946 @self:
1947 @in_Interfaces:
1948 @in_Hold:
1949 @context:
1950
1951 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_authorize_publication ##### -->
1952 <para>
1953
1954 </para>
1955
1956 @klass:
1957 @impl:
1958
1959 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_get_contact_list_attributes ##### -->
1960 <para>
1961
1962 </para>
1963
1964 @klass:
1965 @impl:
1966
1967 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_remove_contacts ##### -->
1968 <para>
1969
1970 </para>
1971
1972 @klass:
1973 @impl:
1974
1975 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_request_contact_list ##### -->
1976 <para>
1977
1978 </para>
1979
1980 @klass:
1981 @impl:
1982
1983 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_request_subscription ##### -->
1984 <para>
1985
1986 </para>
1987
1988 @klass:
1989 @impl:
1990
1991 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_unpublish ##### -->
1992 <para>
1993
1994 </para>
1995
1996 @klass:
1997 @impl:
1998
1999 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_unsubscribe ##### -->
2000 <para>
2001
2002 </para>
2003
2004 @klass:
2005 @impl:
2006
2007 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_remove_contacts_impl ##### -->
2008 <para>
2009
2010 </para>
2011
2012 @self:
2013 @in_Contacts:
2014 @context:
2015
2016 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_request_contact_list_impl ##### -->
2017 <para>
2018
2019 </para>
2020
2021 @self:
2022 @in_Interfaces:
2023 @in_Hold:
2024 @context:
2025
2026 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_request_subscription_impl ##### -->
2027 <para>
2028
2029 </para>
2030
2031 @self:
2032 @in_Contacts:
2033 @in_Message:
2034 @context:
2035
2036 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_authorize_publication ##### -->
2037 <para>
2038
2039 </para>
2040
2041 @context:
2042
2043 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_get_contact_list_attributes ##### -->
2044 <para>
2045
2046 </para>
2047
2048 @context:
2049 @out_Attributes:
2050
2051 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_remove_contacts ##### -->
2052 <para>
2053
2054 </para>
2055
2056 @context:
2057
2058 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_request_contact_list ##### -->
2059 <para>
2060
2061 </para>
2062
2063 @context:
2064 @out_Attributes:
2065
2066 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_request_subscription ##### -->
2067 <para>
2068
2069 </para>
2070
2071 @context:
2072
2073 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_unpublish ##### -->
2074 <para>
2075
2076 </para>
2077
2078 @context:
2079
2080 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_unsubscribe ##### -->
2081 <para>
2082
2083 </para>
2084
2085 @context:
2086
2087 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_unpublish_impl ##### -->
2088 <para>
2089
2090 </para>
2091
2092 @self:
2093 @in_Contacts:
2094 @context:
2095
2096 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_unsubscribe_impl ##### -->
2097 <para>
2098
2099 </para>
2100
2101 @self:
2102 @in_Contacts:
2103 @context:
2104
2105 <!-- ##### USER_FUNCTION tp_svc_connection_remove_client_interest_impl ##### -->
2106 <para>
2107
2108 </para>
2109
2110 @self:
2111 @in_Tokens:
2112 @context:
2113
2114 <!-- ##### FUNCTION tp_svc_connection_return_from_add_client_interest ##### -->
2115 <para>
2116
2117 </para>
2118
2119 @context:
2120
2121 <!-- ##### FUNCTION tp_svc_connection_return_from_remove_client_interest ##### -->
2122 <para>
2123
2124 </para>
2125
2126 @context:
2127
1111 chan.h \
1212 conn.c \
1313 conn.h \
14 protocol.c \
15 protocol.h \
1416 connection-manager.c \
1517 connection-manager.h \
1618 im-manager.c \
3537 $(GLIB_CFLAGS) \
3638 $(TP_GLIB_CFLAGS)
3739
38 EXTRA_DIST = manager-file.py
39
4040 if INSTALL_EXAMPLES
4141 servicedir = ${datadir}/dbus-1/services
4242 service_DATA = _gen/org.freedesktop.Telepathy.ConnectionManager.example_echo_2.service
4747 echo "Exec=${libexecdir}/telepathy-example-cm-echo-2"; } > $@
4848
4949 managerdir = ${datadir}/telepathy/managers
50 manager_DATA = _gen/example_echo_2.manager
50 dist_manager_DATA = example_echo_2.manager
5151 endif
52
53 _gen/example_echo_2.manager _gen/param-spec-struct.h: \
54 manager-file.py $(top_srcdir)/tools/manager-file.py
55 $(mkdir_p) _gen
56 $(PYTHON) $(top_srcdir)/tools/manager-file.py $(srcdir)/manager-file.py _gen
57
58 BUILT_SOURCES = _gen/param-spec-struct.h
59 CLEANFILES = $(BUILT_SOURCES)
6052
6153 clean-local:
6254 rm -rf _gen
3838 @INSTALL_EXAMPLES_TRUE@libexec_PROGRAMS = $(am__EXEEXT_1)
3939 @INSTALL_EXAMPLES_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1)
4040 subdir = examples/cm/echo-message-parts
41 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
41 DIST_COMMON = $(am__dist_manager_DATA_DIST) $(srcdir)/Makefile.am \
42 $(srcdir)/Makefile.in
4243 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4344 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler.m4 \
4445 $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/introspection.m4 \
5960 libexample_cm_echo_2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
6061 $(am__DEPENDENCIES_1) \
6162 $(top_builddir)/telepathy-glib/libtelepathy-glib.la
62 am_libexample_cm_echo_2_la_OBJECTS = chan.lo conn.lo \
63 am_libexample_cm_echo_2_la_OBJECTS = chan.lo conn.lo protocol.lo \
6364 connection-manager.lo im-manager.lo
6465 libexample_cm_echo_2_la_OBJECTS = \
6566 $(am_libexample_cm_echo_2_la_OBJECTS)
104105 $(telepathy_example_cm_echo_2_SOURCES)
105106 DIST_SOURCES = $(libexample_cm_echo_2_la_SOURCES) \
106107 $(telepathy_example_cm_echo_2_SOURCES)
108 am__dist_manager_DATA_DIST = example_echo_2.manager
107109 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
108110 am__vpath_adj = case $$p in \
109111 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
125127 am__base_list = \
126128 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
127129 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
128 DATA = $(manager_DATA) $(service_DATA)
130 DATA = $(dist_manager_DATA) $(service_DATA)
129131 ETAGS = etags
130132 CTAGS = ctags
131133 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
299301 chan.h \
300302 conn.c \
301303 conn.h \
304 protocol.c \
305 protocol.h \
302306 connection-manager.c \
303307 connection-manager.h \
304308 im-manager.c \
324328 $(GLIB_CFLAGS) \
325329 $(TP_GLIB_CFLAGS)
326330
327 EXTRA_DIST = manager-file.py
328331 @INSTALL_EXAMPLES_TRUE@servicedir = ${datadir}/dbus-1/services
329332 @INSTALL_EXAMPLES_TRUE@service_DATA = _gen/org.freedesktop.Telepathy.ConnectionManager.example_echo_2.service
330333 @INSTALL_EXAMPLES_TRUE@managerdir = ${datadir}/telepathy/managers
331 @INSTALL_EXAMPLES_TRUE@manager_DATA = _gen/example_echo_2.manager
332 BUILT_SOURCES = _gen/param-spec-struct.h
333 CLEANFILES = $(BUILT_SOURCES)
334 all: $(BUILT_SOURCES)
335 $(MAKE) $(AM_MAKEFLAGS) all-am
334 @INSTALL_EXAMPLES_TRUE@dist_manager_DATA = example_echo_2.manager
335 all: all-am
336336
337337 .SUFFIXES:
338338 .SUFFIXES: .c .lo .o .obj
444444 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-manager.Plo@am__quote@
445445 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/im-manager.Plo@am__quote@
446446 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
447 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protocol.Plo@am__quote@
447448
448449 .c.o:
449450 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
474475
475476 clean-libtool:
476477 -rm -rf .libs _libs
477 install-managerDATA: $(manager_DATA)
478 install-dist_managerDATA: $(dist_manager_DATA)
478479 @$(NORMAL_INSTALL)
479480 test -z "$(managerdir)" || $(MKDIR_P) "$(DESTDIR)$(managerdir)"
480 @list='$(manager_DATA)'; test -n "$(managerdir)" || list=; \
481 @list='$(dist_manager_DATA)'; test -n "$(managerdir)" || list=; \
481482 for p in $$list; do \
482483 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
483484 echo "$$d$$p"; \
487488 $(INSTALL_DATA) $$files "$(DESTDIR)$(managerdir)" || exit $$?; \
488489 done
489490
490 uninstall-managerDATA:
491 uninstall-dist_managerDATA:
491492 @$(NORMAL_UNINSTALL)
492 @list='$(manager_DATA)'; test -n "$(managerdir)" || list=; \
493 @list='$(dist_manager_DATA)'; test -n "$(managerdir)" || list=; \
493494 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
494495 test -n "$$files" || exit 0; \
495496 echo " ( cd '$(DESTDIR)$(managerdir)' && rm -f" $$files ")"; \
598599 fi; \
599600 done
600601 check-am: all-am
601 check: $(BUILT_SOURCES)
602 $(MAKE) $(AM_MAKEFLAGS) check-am
602 check: check-am
603603 all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
604604 installdirs:
605605 for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(managerdir)" "$(DESTDIR)$(servicedir)"; do \
606606 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
607607 done
608 install: $(BUILT_SOURCES)
609 $(MAKE) $(AM_MAKEFLAGS) install-am
608 install: install-am
610609 install-exec: install-exec-am
611610 install-data: install-data-am
612611 uninstall: uninstall-am
623622 mostlyclean-generic:
624623
625624 clean-generic:
626 -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
627625
628626 distclean-generic:
629627 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
632630 maintainer-clean-generic:
633631 @echo "This command is intended for maintainers to use"
634632 @echo "it deletes files that may require special tools to rebuild."
635 -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
636633 clean: clean-am
637634
638635 clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
657654
658655 info-am:
659656
660 install-data-am: install-managerDATA install-serviceDATA
657 install-data-am: install-dist_managerDATA install-serviceDATA
661658
662659 install-dvi: install-dvi-am
663660
703700
704701 ps-am:
705702
706 uninstall-am: uninstall-libexecPROGRAMS uninstall-managerDATA \
703 uninstall-am: uninstall-dist_managerDATA uninstall-libexecPROGRAMS \
707704 uninstall-serviceDATA
708705
709 .MAKE: all check install install-am install-strip
706 .MAKE: install-am install-strip
710707
711708 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
712709 clean-libexecPROGRAMS clean-libtool clean-local \
713710 clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags distclean \
714711 distclean-compile distclean-generic distclean-libtool \
715712 distclean-tags distdir dvi dvi-am html html-am info info-am \
716 install install-am install-data install-data-am install-dvi \
717 install-dvi-am install-exec install-exec-am install-html \
718 install-html-am install-info install-info-am \
719 install-libexecPROGRAMS install-man install-managerDATA \
720 install-pdf install-pdf-am install-ps install-ps-am \
721 install-serviceDATA install-strip installcheck installcheck-am \
722 installdirs maintainer-clean maintainer-clean-generic \
723 mostlyclean mostlyclean-compile mostlyclean-generic \
724 mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
725 uninstall-am uninstall-libexecPROGRAMS uninstall-managerDATA \
726 uninstall-serviceDATA
713 install install-am install-data install-data-am \
714 install-dist_managerDATA install-dvi install-dvi-am \
715 install-exec install-exec-am install-html install-html-am \
716 install-info install-info-am install-libexecPROGRAMS \
717 install-man install-pdf install-pdf-am install-ps \
718 install-ps-am install-serviceDATA install-strip installcheck \
719 installcheck-am installdirs maintainer-clean \
720 maintainer-clean-generic mostlyclean mostlyclean-compile \
721 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
722 tags uninstall uninstall-am uninstall-dist_managerDATA \
723 uninstall-libexecPROGRAMS uninstall-serviceDATA
727724
728725 @INSTALL_EXAMPLES_TRUE@$(service_DATA): %: Makefile
729726 @INSTALL_EXAMPLES_TRUE@ $(mkdir_p) _gen
731728 @INSTALL_EXAMPLES_TRUE@ echo "Name=org.freedesktop.Telepathy.ConnectionManager.example_echo_2" && \
732729 @INSTALL_EXAMPLES_TRUE@ echo "Exec=${libexecdir}/telepathy-example-cm-echo-2"; } > $@
733730
734 _gen/example_echo_2.manager _gen/param-spec-struct.h: \
735 manager-file.py $(top_srcdir)/tools/manager-file.py
736 $(mkdir_p) _gen
737 $(PYTHON) $(top_srcdir)/tools/manager-file.py $(srcdir)/manager-file.py _gen
738
739731 clean-local:
740732 rm -rf _gen
741733
1616 #include <telepathy-glib/handle-repo-dynamic.h>
1717
1818 #include "im-manager.h"
19 #include "protocol.h"
1920
2021 G_DEFINE_TYPE (ExampleEcho2Connection,
2122 example_echo_2_connection,
9495 }
9596
9697 static gchar *
97 example_normalize_contact (TpHandleRepoIface *repo,
98 example_normalize_contact (TpHandleRepoIface *repo G_GNUC_UNUSED,
9899 const gchar *id,
99 gpointer context,
100 gpointer context G_GNUC_UNUSED,
100101 GError **error)
101102 {
102 if (id[0] == '\0')
103 {
104 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_HANDLE,
105 "ID must not be empty");
106 return NULL;
107 }
108
109 return g_utf8_strdown (id, -1);
103 return example_echo_2_protocol_normalize_contact (id, error);
110104 }
111105
112106 static void
159153 tp_base_connection_finish_shutdown (conn);
160154 }
161155
156 static const gchar *interfaces_always_present[] = {
157 TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
158 NULL };
159
160 const gchar * const *
161 example_echo_2_connection_get_possible_interfaces (void)
162 {
163 /* in this example CM we don't have any extra interfaces that are sometimes,
164 * but not always, present */
165 return interfaces_always_present;
166 }
167
162168 static void
163169 example_echo_2_connection_class_init (ExampleEcho2ConnectionClass *klass)
164170 {
165 static const gchar *interfaces_always_present[] = {
166 TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
167 NULL };
168171 TpBaseConnectionClass *base_class =
169172 (TpBaseConnectionClass *) klass;
170173 GObjectClass *object_class = (GObjectClass *) klass;
4848 (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_2_CONNECTION, \
4949 ExampleEcho2ConnectionClass))
5050
51 const gchar * const *example_echo_2_connection_get_guaranteed_interfaces (
52 void);
53 const gchar * const *example_echo_2_connection_get_possible_interfaces (
54 void);
55
5156 G_END_DECLS
5257
5358 #endif
00 /*
11 * manager.c - an example connection manager
22 *
3 * Copyright (C) 2007 Collabora Ltd.
3 * Copyright © 2007-2010 Collabora Ltd.
44 *
55 * Copying and distribution of this file, with or without modification,
66 * are permitted in any medium without royalty provided the copyright
1414
1515 #include <telepathy-glib/telepathy-glib.h>
1616
17 #include "conn.h"
17 #include "protocol.h"
1818
1919 G_DEFINE_TYPE (ExampleEcho2ConnectionManager,
2020 example_echo_2_connection_manager,
2828 {
2929 }
3030
31 /* private data */
31 static void
32 example_echo_2_connection_manager_constructed (GObject *object)
33 {
34 ExampleEcho2ConnectionManager *self =
35 EXAMPLE_ECHO_2_CONNECTION_MANAGER (object);
36 TpBaseConnectionManager *base = (TpBaseConnectionManager *) self;
37 void (*constructed) (GObject *) =
38 ((GObjectClass *) example_echo_2_connection_manager_parent_class)->constructed;
39 TpBaseProtocol *protocol;
3240
33 typedef struct {
34 gchar *account;
35 } ExampleParams;
41 if (constructed != NULL)
42 constructed (object);
3643
37 #include "_gen/param-spec-struct.h"
38
39 static gpointer
40 alloc_params (void)
41 {
42 return g_slice_new0 (ExampleParams);
44 protocol = g_object_new (EXAMPLE_TYPE_ECHO_2_PROTOCOL,
45 "name", "example",
46 NULL);
47 tp_base_connection_manager_add_protocol (base, protocol);
48 g_object_unref (protocol);
4349 }
4450
45 static void
46 free_params (gpointer p)
47 {
48 ExampleParams *params = p;
49
50 g_free (params->account);
51
52 g_slice_free (ExampleParams, params);
53 }
54
55 static const TpCMProtocolSpec example_protocols[] = {
56 { "example", example_echo_2_example_params, alloc_params, free_params },
51 static const TpCMProtocolSpec no_protocols[] = {
5752 { NULL, NULL }
5853 };
5954
6459 gpointer parsed_params,
6560 GError **error)
6661 {
67 ExampleParams *params = parsed_params;
68 ExampleEcho2Connection *conn =
69 EXAMPLE_ECHO_2_CONNECTION (g_object_new (EXAMPLE_TYPE_ECHO_2_CONNECTION,
70 "account", params->account,
71 "protocol", proto,
72 NULL));
73
74 return (TpBaseConnection *) conn;
62 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
63 "Protocol's new_connection() should be called instead");
64 return NULL;
7565 }
7666
7767 static void
7868 example_echo_2_connection_manager_class_init (
7969 ExampleEcho2ConnectionManagerClass *klass)
8070 {
71 GObjectClass *object_class = G_OBJECT_CLASS (klass);
8172 TpBaseConnectionManagerClass *base_class =
8273 (TpBaseConnectionManagerClass *) klass;
8374
75 object_class->constructed = example_echo_2_connection_manager_constructed;
76
8477 base_class->new_connection = new_connection;
8578 base_class->cm_dbus_name = "example_echo_2";
86 base_class->protocol_params = example_protocols;
79 base_class->protocol_params = no_protocols;
8780 }
0 [ConnectionManager]
1 Interfaces=
2
3 [Protocol example]
4 Interfaces=
5 ConnectionInterfaces=org.freedesktop.Telepathy.Connection.Interface.Requests;
6 param-account=s required register
7 RequestableChannelClasses=1-1-text;
8 VCardField=x-telepathy-example
9 EnglishName=Echo II example
10 Icon=im-icq
11
12 [1-1-text]
13 org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
14 org.freedesktop.Telepathy.Channel.TargetHandleType u=1
15 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;
267267 };
268268
269269 static void
270 example_echo_2_im_manager_foreach_channel_class (TpChannelManager *manager,
271 TpChannelManagerChannelClassFunc func,
270 example_echo_2_im_manager_type_foreach_channel_class (GType type,
271 TpChannelManagerTypeChannelClassFunc func,
272272 gpointer user_data)
273273 {
274274 GHashTable *table = tp_asv_new (
277277 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
278278 NULL);
279279
280 func (manager, table, allowed_properties, user_data);
280 func (type, table, allowed_properties, user_data);
281281
282282 g_hash_table_destroy (table);
283283 }
368368 TpChannelManagerIface *iface = g_iface;
369369
370370 iface->foreach_channel = example_echo_2_im_manager_foreach_channel;
371 iface->foreach_channel_class = example_echo_2_im_manager_foreach_channel_class;
371 iface->type_foreach_channel_class = example_echo_2_im_manager_type_foreach_channel_class;
372372 iface->create_channel = example_echo_2_im_manager_create_channel;
373373 iface->ensure_channel = example_echo_2_im_manager_ensure_channel;
374374 /* In this channel manager, Request has the same semantics as Ensure */
+0
-19
examples/cm/echo-message-parts/manager-file.py less more
0 # Input for tools/manager-file.py
1
2 MANAGER = 'example_echo_2'
3 PARAMS = {
4 'example' : {
5 'account': {
6 'dtype': 's',
7 'flags': 'required register',
8 'filter': 'tp_cm_param_filter_string_nonempty',
9 # 'filter_data': 'NULL',
10 # 'default': ...,
11 # 'struct_field': '...',
12 # 'setter_data': 'NULL',
13 },
14 },
15 }
16 STRUCTS = {
17 'example': 'ExampleParams'
18 }
0 /*
1 * protocol.c - an example Protocol
2 *
3 * Copyright © 2007-2010 Collabora Ltd.
4 *
5 * Copying and distribution of this file, with or without modification,
6 * are permitted in any medium without royalty provided the copyright
7 * notice and this notice are preserved.
8 */
9
10 #include "protocol.h"
11
12 #include <telepathy-glib/telepathy-glib.h>
13
14 #include "conn.h"
15 #include "im-manager.h"
16
17 G_DEFINE_TYPE (ExampleEcho2Protocol,
18 example_echo_2_protocol,
19 TP_TYPE_BASE_PROTOCOL)
20
21 static void
22 example_echo_2_protocol_init (
23 ExampleEcho2Protocol *self)
24 {
25 }
26
27 static const TpCMParamSpec example_echo_2_example_params[] = {
28 { "account", "s", G_TYPE_STRING,
29 TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER,
30 NULL, /* no default */
31 0, /* formerly struct offset, now unused */
32 tp_cm_param_filter_string_nonempty, /* filter - empty strings disallowed */
33 NULL, /* filter data, unused for our filter */
34 NULL /* setter data, now unused */ },
35 { NULL }
36 };
37
38 static const TpCMParamSpec *
39 get_parameters (TpBaseProtocol *self)
40 {
41 return example_echo_2_example_params;
42 }
43
44 static TpBaseConnection *
45 new_connection (TpBaseProtocol *protocol,
46 GHashTable *asv,
47 GError **error)
48 {
49 ExampleEcho2Connection *conn;
50 const gchar *account;
51 gchar *protocol_name;
52
53 account = tp_asv_get_string (asv, "account");
54
55 if (account == NULL || account[0] == '\0')
56 {
57 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
58 "The 'account' parameter is required");
59 return NULL;
60 }
61
62 g_object_get (protocol,
63 "name", &protocol_name,
64 NULL);
65
66 conn = EXAMPLE_ECHO_2_CONNECTION (
67 g_object_new (EXAMPLE_TYPE_ECHO_2_CONNECTION,
68 "account", account,
69 "protocol", protocol_name,
70 NULL));
71 g_free (protocol_name);
72
73 return (TpBaseConnection *) conn;
74 }
75
76 gchar *
77 example_echo_2_protocol_normalize_contact (const gchar *id, GError **error)
78 {
79 if (id[0] == '\0')
80 {
81 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_HANDLE,
82 "ID must not be empty");
83 return NULL;
84 }
85
86 return g_utf8_strdown (id, -1);
87 }
88
89 static gchar *
90 normalize_contact (TpBaseProtocol *self G_GNUC_UNUSED,
91 const gchar *contact,
92 GError **error)
93 {
94 return example_echo_2_protocol_normalize_contact (contact, error);
95 }
96
97 static gchar *
98 identify_account (TpBaseProtocol *self G_GNUC_UNUSED,
99 GHashTable *asv,
100 GError **error)
101 {
102 const gchar *account = tp_asv_get_string (asv, "account");
103
104 if (account != NULL)
105 return g_strdup (account);
106
107 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
108 "'account' parameter not given");
109 return NULL;
110 }
111
112 static GStrv
113 get_interfaces (TpBaseProtocol *self)
114 {
115 return NULL;
116 }
117
118 static void
119 get_connection_details (TpBaseProtocol *self G_GNUC_UNUSED,
120 GStrv *connection_interfaces,
121 GType **channel_managers,
122 gchar **icon_name,
123 gchar **english_name,
124 gchar **vcard_field)
125 {
126 if (connection_interfaces != NULL)
127 {
128 *connection_interfaces = g_strdupv (
129 (GStrv) example_echo_2_connection_get_possible_interfaces ());
130 }
131
132 if (channel_managers != NULL)
133 {
134 GType types[] = { EXAMPLE_TYPE_ECHO_2_IM_MANAGER, G_TYPE_INVALID };
135
136 *channel_managers = g_memdup (types, sizeof (types));
137 }
138
139 if (icon_name != NULL)
140 {
141 /* a real protocol would use its own icon name - for this example we
142 * borrow the one from ICQ */
143 *icon_name = g_strdup ("im-icq");
144 }
145
146 if (english_name != NULL)
147 {
148 /* in a real protocol this would be "ICQ" or
149 * "Windows Live Messenger (MSN)" or something */
150 *english_name = g_strdup ("Echo II example");
151 }
152
153 if (vcard_field != NULL)
154 {
155 /* in a real protocol this would be "tel" or "x-jabber" or something */
156 *vcard_field = g_strdup ("x-telepathy-example");
157 }
158 }
159
160 static void
161 example_echo_2_protocol_class_init (
162 ExampleEcho2ProtocolClass *klass)
163 {
164 TpBaseProtocolClass *base_class =
165 (TpBaseProtocolClass *) klass;
166
167 base_class->get_parameters = get_parameters;
168 base_class->new_connection = new_connection;
169
170 base_class->normalize_contact = normalize_contact;
171 base_class->identify_account = identify_account;
172 base_class->get_interfaces = get_interfaces;
173 base_class->get_connection_details = get_connection_details;
174 }
0 /*
1 * protocol.h - header for an example Protocol
2 * Copyright (C) 2007-2010 Collabora Ltd.
3 *
4 * Copying and distribution of this file, with or without modification,
5 * are permitted in any medium without royalty provided the copyright
6 * notice and this notice are preserved.
7 */
8
9 #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_PROTOCOL_H
10 #define EXAMPLE_ECHO_MESSAGE_PARTS_PROTOCOL_H
11
12 #include <glib-object.h>
13 #include <telepathy-glib/base-protocol.h>
14
15 G_BEGIN_DECLS
16
17 typedef struct _ExampleEcho2Protocol
18 ExampleEcho2Protocol;
19 typedef struct _ExampleEcho2ProtocolPrivate
20 ExampleEcho2ProtocolPrivate;
21 typedef struct _ExampleEcho2ProtocolClass
22 ExampleEcho2ProtocolClass;
23 typedef struct _ExampleEcho2ProtocolClassPrivate
24 ExampleEcho2ProtocolClassPrivate;
25
26 struct _ExampleEcho2ProtocolClass {
27 TpBaseProtocolClass parent_class;
28
29 ExampleEcho2ProtocolClassPrivate *priv;
30 };
31
32 struct _ExampleEcho2Protocol {
33 TpBaseProtocol parent;
34
35 ExampleEcho2ProtocolPrivate *priv;
36 };
37
38 GType example_echo_2_protocol_get_type (void);
39
40 #define EXAMPLE_TYPE_ECHO_2_PROTOCOL \
41 (example_echo_2_protocol_get_type ())
42 #define EXAMPLE_ECHO_2_PROTOCOL(obj) \
43 (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
44 EXAMPLE_TYPE_ECHO_2_PROTOCOL, \
45 ExampleEcho2Protocol))
46 #define EXAMPLE_ECHO_2_PROTOCOL_CLASS(klass) \
47 (G_TYPE_CHECK_CLASS_CAST ((klass), \
48 EXAMPLE_TYPE_ECHO_2_PROTOCOL, \
49 ExampleEcho2ProtocolClass))
50 #define EXAMPLE_IS_ECHO_2_PROTOCOL(obj) \
51 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
52 EXAMPLE_TYPE_ECHO_2_PROTOCOL))
53 #define EXAMPLE_IS_ECHO_2_PROTOCOL_CLASS(klass) \
54 (G_TYPE_CHECK_CLASS_TYPE ((klass), \
55 EXAMPLE_TYPE_ECHO_2_PROTOCOL))
56 #define EXAMPLE_ECHO_2_PROTOCOL_GET_CLASS(obj) \
57 (G_TYPE_INSTANCE_GET_CLASS ((obj), \
58 EXAMPLE_TYPE_ECHO_2_PROTOCOL, \
59 ExampleEcho2ProtocolClass))
60
61 gchar *example_echo_2_protocol_normalize_contact (const gchar *id,
62 GError **error);
63
64 G_END_DECLS
65
66 #endif
329329
330330 <p>If any of the changed parameters'
331331 <tp:type>Conn_Mgr_Param_Flags</tp:type> include
332 <code>DBus_Property</code>, the change will be applied to the
332 <code>DBus_Property</code>, the change will be applied immediately to
333 the
333334 corresponding D-Bus Property on the active
334335 <tp:member-ref>Connection</tp:member-ref>, if there is one. Changes to
335336 other parameters will not take effect until the next time the account
371372 </arg>
372373
373374 <arg name="Reconnect_Required" type="as" direction="out">
374 <tp:docstring>
375 A list of the names of parameters with changes that will not take
376 effect until the account is reconnected (this may be empty, e.g. if
377 all the parameters are D-Bus properties or parameters for which the
378 account manager has specific support). User interfaces that
379 require "instant apply" semantics MAY call
380 <tp:member-ref>Reconnect</tp:member-ref> in response to receiving
381 a non-empty list.
375 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
376 <p>If all of the parameters had the <code>DBus_Property</code> flag,
377 the empty list, signifying that no reconnection is required for the
378 new parameters to take effect. For example, if the only parameter
379 updated is <tt>...Cellular.<tp:dbus-ref
380 namespace="org.freedesktop.Telepathy.Connection.Interface.Cellular">MessageValidityPeriod</tp:dbus-ref></tt>,
381 the new value can be applied immediately to the connection.</p>
382
383 <p>Otherwise, a list of the names of parameters with changes that
384 will not take effect until the account is reconnected. User
385 interfaces that require "instant apply" semantics MAY call
386 <tp:member-ref>Reconnect</tp:member-ref> in response to receiving a
387 non-empty list. For example, if the caller updates both
388 <tt>...Anonymity.<tp:dbus-ref
389 namespace="org.freedesktop.Telepathy.Connection.Interface.Anonymity">AnonymityMandatory</tp:dbus-ref></tt>
390 and <tt>require-encryption</tt>, the former can be applied to the
391 current connection, but the latter needs a reconnect to take
392 effect, so this method should return
393 <code>["require-encryption"]</code>.</p>
382394 </tp:docstring>
383395 </arg>
384396
450450 be implemented by all channel objects, along with one single channel type,
451451 such as <tp:dbus-ref
452452 namespace="org.freedesktop.Telepathy">Channel.Type.ContactList</tp:dbus-ref>
453 which represents a list of people (such as a buddy list) or a <tp:dbus-ref
453 which represents a list of people (such as a buddy list) or <tp:dbus-ref
454454 namespace="org.freedesktop.Telepathy">Channel.Type.Text</tp:dbus-ref> which
455455 represents a channel over which textual messages are sent and received.</p>
456456
471471 information, by taking the first 7 components.</p>
472472 </tp:rationale>
473473
474 <p>Each channel may have an immutable handle associated with it, which
475 may be any handle type, such as a contact, room or list handle,
476 indicating that the channel is for communicating with that handle.</p>
477
478 <p>If a channel does not have a handle (an "anonymous channel" with
479 Target_Handle = 0 and Target_Handle_Type = Handle_Type_None), it
480 means that the channel is defined by some other terms, such as it
481 may be a transient group defined only by its members as visible
482 through the <tp:dbus-ref
483 namespace="org.freedesktop.Telepathy">Channel.Interface.Group</tp:dbus-ref>
484 interface.</p>
485
486 <p>Other optional interfaces can be implemented to indicate other available
474 <p>Each channel has a number of immutable properties (which cannot vary
475 after the channel has been announced with <tp:dbus-ref
476 namespace='ofdT.Connection.Interface.Requests'>NewChannels</tp:dbus-ref>),
477 provided to clients in the
478 <tp:dbus-ref namespace='ofdT.Client.Observer'>ObserveChannels</tp:dbus-ref>,
479 <tp:dbus-ref namespace='ofdT.Client.Approver'>AddDispatchOperation</tp:dbus-ref> and
480 <tp:dbus-ref namespace='ofdT.Client.Handler'>HandleChannels</tp:dbus-ref>
481 methods to permit immediate identification of the channel. This interface
482 contains immutable properties common to all channels. In brief:</p>
483
484 <ul>
485 <li><tp:member-ref>ChannelType</tp:member-ref> specifies the kind of
486 communication carried out on this channel;</li>
487 <li><tp:member-ref>TargetHandleType</tp:member-ref>,
488 <tp:member-ref>TargetHandle</tp:member-ref> and
489 <tp:member-ref>TargetID</tp:member-ref> specify the entity with which
490 this channel communicates, such as the other party in a 1-1 call, or
491 the name of a multi-user chat room;</li>
492 <li><tp:member-ref>InitiatorHandle</tp:member-ref> and
493 <tp:member-ref>InitiatorID</tp:member-ref> specify who created this
494 channel;</li>
495 <li><tp:member-ref>Requested</tp:member-ref> indicates whether the local
496 user requested this channel, or whether it is an incoming call, a text
497 conversation started by a remote contact, a chatroom invitation,
498 etc.</li>
499 </ul>
500
501 <p>Other optional <tp:member-ref>Interfaces</tp:member-ref> can be
502 implemented to indicate other available
487503 functionality, such as <tp:dbus-ref
488504 namespace="org.freedesktop.Telepathy">Channel.Interface.Group</tp:dbus-ref>
489505 if the channel contains a number of contacts, <tp:dbus-ref
490506 namespace="org.freedesktop.Telepathy">Channel.Interface.Password</tp:dbus-ref>
491507 to indicate that a channel may have a password set to require entry, and
492508 <tp:dbus-ref
493 namespace="org.freedesktop.Telepathy">Properties</tp:dbus-ref> for
494 extra data about channels which represent chat rooms or voice calls. The
495 interfaces implemented may not vary after the channel's creation has been
496 signalled to the bus (with the connection's <tp:dbus-ref
497 namespace="org.freedesktop.Telepathy.Connection">NewChannel</tp:dbus-ref>
498 signal).</p>
509 namespace="org.freedesktop.Telepathy">Channel.Interface.ChatState</tp:dbus-ref>
510 for typing notifications. The interfaces implemented may not vary after
511 the channel has been created. These other interfaces (along with the
512 interface named by <tp:member-ref>ChannelType</tp:member-ref>) may
513 themselves specify immutable properties to be announced up-front along
514 with the properties on this interface.</p>
515
516 <p>Some channels are “anonymous”, with
517 <tp:member-ref>TargetHandleType</tp:member-ref> set to <code>None</code>,
518 which indicates that the channel is defined by some other properties. For
519 instance, transient ad-hoc chat rooms may be defined only by their members (as visible
520 through the <tp:dbus-ref
521 namespace="ofdT.Channel.Interface">Group</tp:dbus-ref>
522 interface), and <tp:dbus-ref
523 namespace='ofdT.Channel.Type'>ContactSearch</tp:dbus-ref>
524 channels represent a single search attempt for a particular <tp:dbus-ref
525 namespace='ofdT.Channel.Type.ContactSearch'>Server</tp:dbus-ref>.</p>
499526
500527 <p>Specific connection manager implementations may implement channel types and
501528 interfaces which are not contained within this specification in order to
579579 </signal>
580580
581581 <tp:enum name="Channel_Group_Change_Reason" type="u">
582 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
583 <p>The reason for a set of handles to move to one of
584 <tp:member-ref>Members</tp:member-ref>,
585 <tp:member-ref>LocalPendingMembers</tp:member-ref> or
586 <tp:member-ref>RemotePendingMembers</tp:member-ref>, or to be removed
587 from the group. A client may supply a reason when attempting to
588 remove members from a group with
589 <tp:member-ref>RemoveMembersWithReason</tp:member-ref>, and reasons
590 are supplied by the CM when emitting
591 <tp:member-ref>MembersChanged</tp:member-ref> and
592 <tp:member-ref>MembersChangedDetailed</tp:member-ref>. Some reason
593 codes have different meanings depending on the <var>Actor</var> in a
594 MembersChanged signal.</p>
595 </tp:docstring>
596
582597 <tp:enumvalue suffix="None" value="0">
583598 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
584599 <p>No reason was provided for this change.</p>
711726
712727 <p>If a one-to-one <tp:dbus-ref
713728 namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>
714 call fails because the contact being called did not respond, the
729 call fails because the contact being called did not respond, or the
730 local user did not respond to an incoming call, the
715731 connection manager SHOULD indicate this by removing both the
716732 <tp:member-ref>SelfHandle</tp:member-ref> and the other contact's
717733 handle from the Group interface with reason No_Answer.</p>
835851 channel-specific handles are added, but that it is emitted
836852 <em>after</em> emitting a MembersChanged signal in which
837853 channel-specific handles are removed.</p>
854
855 <p>See <tp:dbus-ref
856 namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>
857 for an overview of how group state changes are used to indicate the
858 progress of a call.</p>
838859 </tp:docstring>
839860 </signal>
840861
962983 channel-specific handles are added, but that it is emitted
963984 <em>after</em> emitting a MembersChangedDetailed signal in which
964985 channel-specific handles are removed.</p>
986
987 <p>See <tp:dbus-ref
988 namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>
989 for an overview of how group state changes are used to indicate the
990 progress of a call.</p>
965991 </tp:docstring>
966992 <tp:added version="0.17.16"/>
967993 </signal>
556556 Channel_Text_Message_Type_Normal MUST be assumed. MAY
557557 be omitted for normal chat messages.</dd>
558558
559 <dt>supersedes (s – <tp:type>Protocol_Message_Token</tp:type>)</dt>
560 <dd>If present, this message supersedes a previous message,
561 identified by its <tt>protocol-token</tt> or
562 <tt>message-token</tt> header. The user interface MAY, for
563 example, choose to replace the superseded message with this
564 message, or grey out the superseded message.
565
566 <tp:rationale>Skype, for example, allows the user to amend
567 messages they have already sent (to correct typos,
568 etc.).</tp:rationale>
569 </dd>
570
559571 <dt>pending-message-id (u - <tp:type>Message_ID</tp:type>)</dt>
560572 <dd>The incoming message ID. This MUST NOT be present on outgoing
561573 messages. Clients SHOULD NOT store this key - it is only valid
1717 License along with this library; if not, write to the Free Software
1818 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
1919 </tp:license>
20 <interface name="org.freedesktop.Telepathy.Channel.Type.ContactSearch.DRAFT2"
21 tp:causes-havoc='experimental'>
20 <interface name="org.freedesktop.Telepathy.Channel.Type.ContactSearch">
2221 <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
23 <tp:changed version="0.17.27">(draft 2)</tp:changed>
22 <tp:added version="0.19.10">
23 as stable API. Changes from draft 2:
24 <tp:type>Contact_Search_Result_Map</tp:type> keys are now identifiers
25 rather than handles; consequently, the values need not include
26 <tt>x-telepathy-identifier</tt>.
27 </tp:added>
2428
2529 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2630 <p>A channel type for searching server-stored user directories. A new
2731 channel should be requested by a client for each search attempt, and
2832 closed when the search is completed or the required result has been
29 found in order to free unused handles.</p>
33 found.</p>
3034
3135 <p>Before searching, the
3236 <tp:member-ref>AvailableSearchKeys</tp:member-ref> property should be
5660
5761 <p>The client should call the channel's <tp:dbus-ref
5862 namespace="org.freedesktop.Telepathy.Channel">Close</tp:dbus-ref>
59 method when it is finished with the channel, so that any handles held
60 only by the channel can be released.</p>
63 method when it is finished with the channel.</p>
6164
6265 <p>Each channel can only be used for a single search; a new channel
6366 should be requested for each subsequent search. Connection managers
376379 </method>
377380
378381 <tp:mapping name="Contact_Search_Result_Map">
379 <tp:docstring>A map from contact handle to search result.</tp:docstring>
380 <tp:member name="Contact" type="u" tp:type="Contact_Handle">
381 <tp:docstring>
382 An integer handle for the contact.
382 <tp:docstring>A map from contact identifier to search result, emitted in
383 the <tp:member-ref>SearchResultReceived</tp:member-ref>
384 signal.</tp:docstring>
385
386 <tp:member name="Contact_Identifier" type="s">
387 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
388 The identifier of a contact matching the search terms.
389
390 <tp:rationale>
391 This is an identifier rather than a handle in case we make handles
392 immortal; see <a
393 href="https://bugs.freedesktop.org/show_bug.cgi?id=23155">fd.o#23155</a>
394 and <a
395 href="https://bugs.freedesktop.org/show_bug.cgi?id=13347#c5">fd.o#13347
396 comment 5</a>.
397 </tp:rationale>
383398 </tp:docstring>
384399 </tp:member>
385400
391406 interface. It is possible that a separate call to <tp:dbus-ref
392407 namespace="org.freedesktop.Telepathy.Connection.Interface.ContactInfo">RequestContactInfo</tp:dbus-ref>
393408 would return more information than this signal provides.</p>
394
395 <p>This array SHOULD include the <code>x-telepathy-identifier</code>
396 field, whose values matches the result of calling <tp:dbus-ref
397 namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>
398 on the Contact handle.</p>
399
400 <tp:rationale>
401 <p>UIs will most likely want to show the identifier to the user;
402 while they could do this by inspecting the signalled handle,
403 including it in this signal is cheap and removes a roundtrip to
404 look it up.</p>
405 </tp:rationale>
406409 </tp:docstring>
407410 </tp:member>
408411 </tp:mapping>
409412
410413 <signal name="SearchResultReceived"
411414 tp:name-for-bindings="Search_Result_Received">
412 <arg name="Result" type="a{ua(sasas)}" tp:type="Contact_Search_Result_Map">
413 <tp:docstring>A mapping from contact handle to an array of fields
414 representing information about this contact. Handles in this mapping
415 MUST remain valid until the Channel closes.</tp:docstring>
415 <arg name="Result" type="a{sa(sasas)}" tp:type="Contact_Search_Result_Map">
416 <tp:docstring>A mapping from contact identifier to an array of fields
417 representing information about this contact.</tp:docstring>
416418 </arg>
419
417420 <tp:docstring>
418421 Emitted when a some search results are received from the server.
419422 This signal can be fired arbitrarily many times so clients MUST NOT
597597 </property>
598598
599599 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
600 <p>A channel that can send and receive streamed media such as audio or video.
601 Provides a number of methods for listing and requesting new streams, and
602 signals to indicate when streams have been added, removed and changed
603 status.</p>
604
605 <p>To make a media call to a contact, clients should call <tp:dbus-ref
606 namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">CreateChannel</tp:dbus-ref>
607 with <tp:dbus-ref
608 namespace="org.freedesktop.Telepathy.Channel">ChannelType</tp:dbus-ref>
609 = <tp:dbus-ref
610 namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>,
600 <p>A channel that can send and receive streamed media such as audio or
601 video. Provides a number of methods for listing and requesting new
602 streams, and signals to indicate when streams have been added, removed
603 and changed status. The state of the call (ringing remotely, ringing
604 locally, answered, missed, etc.) are represented using the properties
605 and signals of the Group interface.</p>
606
607 <p>In general this should be used in conjunction with the <tp:dbus-ref
608 namespace="org.freedesktop.Telepathy.Channel.Interface">MediaSignalling</tp:dbus-ref>
609 interface to exchange connection candidates and codec choices with
610 whichever component is responsible for the streams. However, in certain
611 applications where no candidate exchange is necessary (eg the streams
612 are handled by specialised hardware which is controlled directly by the
613 connection manager), the signalling interface can be omitted and this
614 channel type used simply to control the streams.</p>
615
616 <h4>Outgoing calls</h4>
617
618 <p>To make an audio-only call to a contact <tt>foo@example.com</tt>,
619 clients should call:</p>
620
621 <blockquote>
622 <pre>
623 <tp:dbus-ref
624 namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">CreateChannel</tp:dbus-ref>({
625 <tp:dbus-ref
626 namespace="org.freedesktop.Telepathy.Channel">ChannelType</tp:dbus-ref>: <tp:dbus-ref
627 namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>,
628 <tp:dbus-ref
629 namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref>: Contact,
630 <tp:dbus-ref
631 namespace="org.freedesktop.Telepathy.Channel">TargetID</tp:dbus-ref>: 'foo@example.com',
632 <tp:member-ref>InitialAudio</tp:member-ref>: True,
633 )</pre></blockquote>
634
635 <p>As always, <tp:dbus-ref
636 namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
637 may be used in place of TargetID if the contact's handle is already
638 known. To make an audio-and-video call, the client should also specify
639 <tp:member-ref>InitialVideo</tp:member-ref>. The connection manager
640 SHOULD return a channel whose immutable properties contain the local
641 user as the <tp:dbus-ref namespace='ofdT.Channel'>InitiatorHandle</tp:dbus-ref>,
642 the remote contact as the <tp:dbus-ref namespace='ofdT.Channel'>TargetHandle</tp:dbus-ref>,
643 <tp:dbus-ref namespace='ofdT.Channel'>Requested</tp:dbus-ref> = <code>True</code>
644 (indicating that the call is outgoing); the <tp:dbus-ref
645 namespace='ofdT.Channel.Interface'>Group</tp:dbus-ref> interface should
646 initially have the local user in <tp:dbus-ref
647 namespace='ofdT.Channel.Interface.Group'>Members</tp:dbus-ref> and the remote
648 contact in <tp:dbus-ref
649 namespace='ofdT.Channel.Interface.Group'>RemotePendingMembers</tp:dbus-ref>, to
650 indicate that we are awaiting their response.</p>
651
652 <p>The contact answering the call is represented by the CM signalling
611653 <tp:dbus-ref
612 namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref>
613 = Contact, and one of <tp:dbus-ref
614 namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
615 or <tp:dbus-ref
616 namespace="org.freedesktop.Telepathy.Channel">TargetID</tp:dbus-ref>
617 (which should yield a channel with the local user in <tp:dbus-ref
618 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">Members</tp:dbus-ref>,
619 and the remote contact as <tp:dbus-ref
620 namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
621 but not in any group members list), then call
622 <tp:member-ref>RequestStreams</tp:member-ref> to initiate the call (at
623 which point the contact should appear in the channel's <tp:dbus-ref
624 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemotePendingMembers</tp:dbus-ref>).</p>
625
626 <p>In the past, several other patterns have been used to place outgoing
654 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>,
655 moving the remote contact to Members, with the remote contact as the
656 <var>Actor</var> and <var>Reason</var> <code>None</code>. The contact
657 rejecting the call is represented by both contacts being removed from
658 the group, with the remote contact as the <var>Actor</var> and
659 <var>Reason</var> set appropriately. The local user may hang up at any
660 time by calling
661 <tp:dbus-ref
662 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref>
663 to remove themself, with an appropriate reason; the CM SHOULD relay the
664 reason to the remote contact, and emit MembersChanged removing both
665 contacts from the group with the self handle as the <var>Actor</var>.</p>
666
667 <p>(In the past, several other patterns have been used to place outgoing
627668 calls; see
628669 <a href="http://telepathy.freedesktop.org/wiki/Requesting%20StreamedMedia%20channels">'Requesting StreamedMedia Channels' on the Telepathy wiki</a>
629 for the details.</p>
630
631 <p>Incoming calls should be signalled as <tp:dbus-ref
670 for the details.)</p>
671
672 <h4>Incoming calls</h4>
673
674 <p>Incoming calls' immutable properties should contain <tp:dbus-ref
632675 namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref>
633 = Contact, <tp:dbus-ref
634 namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
635 set to the remote contact, with the local user in <tp:dbus-ref
636 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">LocalPendingMembers</tp:dbus-ref>;
637 to accept the call, <tp:dbus-ref
676 = Contact, both <tp:dbus-ref
677 namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref> and
678 <tp:dbus-ref
679 namespace="org.freedesktop.Telepathy.Channel">InitiatorHandle</tp:dbus-ref>
680 set to the remote contact, <tp:dbus-ref
681 namespace='ofdT.Channel'>Requested</tp:dbus-ref> = <code>False</code>
682 (indicating that this is an incoming call), and appropriate values of
683 <tp:member-ref>InitialAudio</tp:member-ref> and
684 <tp:member-ref>InitialVideo</tp:member-ref>; the Group interface should
685 initially have the local user in <tp:dbus-ref
686 namespace="ofdT.Channel.Interface.Group">LocalPendingMembers</tp:dbus-ref>
687 and the remote contact in <tp:dbus-ref
688 namespace="ofdT.Channel.Interface.Group">Members</tp:dbus-ref>,
689 indicating that the contact is awaiting our response.</p>
690
691 <p>To accept the call, use <tp:dbus-ref
638692 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">AddMembers</tp:dbus-ref>
639 can be used to move the local user to the group's members.</p>
693 to move the local user to the group's members. To reject the call, use
694 <tp:dbus-ref
695 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref>
696 to remove the local member from the group, with an appropriate reason.
697 If the remote user ends the call before it is answered, this is
698 represented by <tp:dbus-ref
699 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>
700 removing both parties from the group with the remote contact as the
701 <var>Actor</var>, and <var>Reason</var> set appropriately.</p>
702
703 <p>Note that the call may end with the self handle as the
704 <var>Actor</var> without the user having chosen to reject the call, as
705 indicated by the nature of the <var>Reason</var>. Specifically, some
706 local component may time out the call (indicating this with reason
707 <code>No_Answer</code>; for example, the CM may have forwarded the call
708 to another number, as configured using <tp:dbus-ref
709 namespace='ofdT.Connection.Interface'>Forwarding.DRAFT</tp:dbus-ref>),
710 or something may have gone wrong with the call
711 (indicated by reason <code>Error</code>). Such calls SHOULD be
712 considered missed, just as if the remote contact had hung up before the
713 local user answered the call.</p>
714
715 <tp:rationale>
716 <p>This is a bit awkward, but these are the best ways we can represent
717 these situations. It's important to document which calls should be
718 considered missed, to ensure that the user can be notified.</p>
719 </tp:rationale>
640720
641721 <p>When the local user accepts an incoming call, the connection manager
642722 SHOULD change the direction of any streams with pending local send
657737 should be removed when this specification is revised.</p>
658738 </tp:rationale>
659739
660 <p>In general this should be used in conjunction with the <tp:dbus-ref
661 namespace="org.freedesktop.Telepathy.Channel.Interface">MediaSignalling</tp:dbus-ref>
662 interface to exchange connection candidates and codec choices with
663 whichever component is responsible for the streams. However, in certain
664 applications where no candidate exchange is necessary (eg the streams are
665 handled by specialised hardware which is controlled directly by the
666 connection manager), the signalling interface can be omitted and this
667 channel type used simply to control the streams.</p>
740 <h4>During a call</h4>
741
742 <p>If <tp:member-ref>ImmutableStreams</tp:member-ref> is
743 <code>False</code>, new streams may be requested using
744 <tp:member-ref>RequestStreams</tp:member-ref> (to add video to an
745 audio-only call, for instance), and existing streams may be removed using
746 <tp:member-ref>RemoveStreams</tp:member-ref> (for example, to downgrade
747 an audio-video call to audio-only). The call may be ended by calling
748 <tp:dbus-ref
749 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembers</tp:dbus-ref>
750 or <tp:dbus-ref
751 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref>; the call ending is signalled by the CM emitting <tp:dbus-ref
752 namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>,
753 removing both parties from the group.</p>
668754
669755 <h4>Handler filters</h4>
670756
122122 SHOULD also set this property first (rather than accepting the CM's
123123 default value).</p>
124124
125 <p>This property SHOULD also be made available as a parameter to
126 <tp:dbus-ref
125 <p>This property SHOULD also be made available as a parameter of the
126 same (fully-qualified) name to <tp:dbus-ref
127127 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
128128 with the DBus_Property flag in its
129129 <tp:type>Conn_Mgr_Param_Flags</tp:type>. For connections managed
130130 by the <tp:dbus-ref
131131 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
132 clients (other than the account manager itself) SHOULD set this
133 property via the Account's <tp:dbus-ref
134 namespace="org.freedesktop.Telepathy.Account">UpdateParameters</tp:dbus-ref>
135 method.</p>
132 this property SHOULD be set via the Account Manager as follows:</p>
133
134 <blockquote>
135 <code><tp:dbus-ref namespace="org.freedesktop.Telepathy.Account"
136 >UpdateParameters</tp:dbus-ref>({
137 "org.freedesktop.Telepathy.Connection.Interface.Anonymity.AnonymityMandatory": <var>new_value</var>
138 }, [])</code>
139 </blockquote>
136140 </tp:docstring>
137141 </property>
138142
145149 the modes will result in emission of
146150 <tp:member-ref>AnonymityModesChanged</tp:member-ref> signal.</p>
147151
148 <p>This property SHOULD also be made available as a parameter to
149 <tp:dbus-ref
152 <p>This property SHOULD also be made available as a parameter of the
153 same (fully-qualified) name to <tp:dbus-ref
150154 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
151155 with the DBus_Property flag in its
152156 <tp:type>Conn_Mgr_Param_Flags</tp:type>. For connections managed
153157 by the <tp:dbus-ref
154158 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
155 clients (other than the account manager itself) SHOULD set this
156 property via the Account's <tp:dbus-ref
157 namespace="org.freedesktop.Telepathy.Account">UpdateParameters</tp:dbus-ref>
158 method.</p>
159 this property SHOULD be set via the Account Manager as follows:</p>
160
161 <blockquote>
162 <code><tp:dbus-ref namespace="org.freedesktop.Telepathy.Account"
163 >UpdateParameters</tp:dbus-ref>({
164 "org.freedesktop.Telepathy.Connection.Interface.Anonymity.AnonymityModes": <var>new_value</var>
165 }, [])</code>
166 </blockquote>
159167 </tp:docstring>
160168 <tp:possible-errors>
161169 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
4141 protocol or provider.</p>
4242
4343 <p>Connections with this interface SHOULD provide this property as a
44 parameter for <tp:dbus-ref namespace="org.freedesktop.Telepathy"
44 parameter of the same (fully-qualified) name to <tp:dbus-ref
45 namespace="org.freedesktop.Telepathy"
4546 >ConnectionManager.RequestConnection</tp:dbus-ref>, with the
46 <code>DBus_Property</code> flag.</p>
47 <code>DBus_Property</code> flag. For connections managed by the
48 <tp:dbus-ref
49 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
50 this property SHOULD be set via the Account Manager as follows:</p>
4751
48 <p>For connections managed by the <tp:dbus-ref
49 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
50 this property SHOULD be set via the Account Manager, by calling
51 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
52 >Account.UpdateParameters</tp:dbus-ref>; the AccountManager
53 provides change-notification, as long as all other clients cooperate
54 by using it instead of setting this property directly.</p>
52 <blockquote>
53 <code><tp:dbus-ref namespace="org.freedesktop.Telepathy.Account"
54 >UpdateParameters</tp:dbus-ref>({
55 "org.freedesktop.Telepathy.Connection.Interface.Cellular.MessageValidityPeriod": <var>new_validity_period</var>
56 }, [])</code>
57 </blockquote>
58
59 <p>The AccountManager provides change-notification, as long as all
60 other clients cooperate by using it instead of setting this property
61 directly.</p>
5562 </tp:docstring>
5663 </property>
5764
6370 number).</p>
6471
6572 <p>Connections with this interface SHOULD provide this property as a
66 parameter for <tp:dbus-ref namespace="org.freedesktop.Telepathy"
73 parameter of the same (fully-qualified) name to <tp:dbus-ref
74 namespace="org.freedesktop.Telepathy"
6775 >ConnectionManager.RequestConnection</tp:dbus-ref>, with the
68 <code>DBus_Property</code> flag.</p>
76 <code>DBus_Property</code> flag. For connections managed by the
77 <tp:dbus-ref
78 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
79 this property SHOULD be set via the Account Manager as follows:</p>
6980
70 <p>For connections managed by the <tp:dbus-ref
71 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
72 this property SHOULD be set via the Account Manager, by calling
73 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
74 >Account.UpdateParameters</tp:dbus-ref>; the AccountManager
75 provides change-notification, as long as all other clients cooperate
76 by using it instead of setting this property directly.</p>
81 <blockquote>
82 <code><tp:dbus-ref namespace="org.freedesktop.Telepathy.Account"
83 >UpdateParameters</tp:dbus-ref>({
84 "org.freedesktop.Telepathy.Connection.Interface.Cellular.MessageServiceCentre": <var>new_smsc_address</var>
85 }, [])</code>
86 </blockquote>
87
88 <p>The AccountManager provides change-notification, as long as all
89 other clients cooperate by using it instead of setting this property
90 directly.</p>
7791 </tp:docstring>
7892 </property>
7993
116130 into a country‐specific GSM reduced character set.</p>
117131
118132 <p>Connections with this interface SHOULD provide this property as a
119 parameter for <tp:dbus-ref namespace="org.freedesktop.Telepathy"
133 parameter of the same (fully-qualified) name to <tp:dbus-ref
134 namespace="org.freedesktop.Telepathy"
120135 >ConnectionManager.RequestConnection</tp:dbus-ref>, with the
121 <code>DBus_Property</code> flag.</p>
136 <code>DBus_Property</code> flag. For connections managed by the
137 <tp:dbus-ref
138 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
139 this property SHOULD be set via the Account Manager as follows:</p>
122140
123 <p>For connections managed by the <tp:dbus-ref
124 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
125 this property SHOULD be set via the Account Manager, by calling
126 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
127 >Account.UpdateParameters</tp:dbus-ref>; the AccountManager
128 provides change‐notification, as long as all other clients cooperate
129 by using it instead of setting this property directly.</p>
141 <blockquote>
142 <code><tp:dbus-ref namespace="org.freedesktop.Telepathy.Account"
143 >UpdateParameters</tp:dbus-ref>({
144 "org.freedesktop.Telepathy.Connection.Interface.Cellular.MessageReducedCharacterSet": <var>new_value</var>
145 }, [])</code>
146 </blockquote>
147
148 <p>The AccountManager provides change-notification, as long as all
149 other clients cooperate by using it instead of setting this property
150 directly.</p>
130151 </tp:docstring>
131152 </property>
132153 </interface>
8484 CM then waits 30s for Handle #5 to accept the channel. If after 30s it does
8585 not, the CM forwards the incoming channel to Handle #3, which will have
8686 20s to accept the channel.</p>
87
88 <p>When an unanswered <tp:dbus-ref
89 namespace='ofdT.Channel.Type'>StreamedMedia</tp:dbus-ref> call is
90 forwarded, both the contact and the self handle should be removed from
91 the group with the self handle as the actor, and
92 <tp:type>Channel_Group_Change_Reason</tp:type> <code>No_Answer</code> or
93 <code>Busy</code>, as appropriate. For <tp:dbus-ref
94 namespace='ofdT.Channel.Type'>Call.DRAFT</tp:dbus-ref> channels, the
95 <tp:type>Call_State_Change_Reason</tp:type> <code>Forwarded</code>
96 should be used.</p>
8797 </tp:docstring>
8898
8999 <tp:enum name="Forwarding_Condition" type="u">
191191 <p>A map from protocol identifiers supported by a connection
192192 manager to the immutable properties of the corresponding
193193 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
194 >Protocol.DRAFT</tp:dbus-ref> objects.</p>
194 >Protocol</tp:dbus-ref> objects.</p>
195195 </tp:docstring>
196196
197197 <tp:member name="Protocol" type="s" tp:type="Protocol">
211211 <p>A map from protocol identifiers supported by this connection
212212 manager to the immutable properties of the corresponding
213213 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
214 >Protocol.DRAFT</tp:dbus-ref> objects.</p>
214 >Protocol</tp:dbus-ref> objects.</p>
215215
216216 <tp:rationale>
217217 <p>Providing the immutable properties here means that
1919 02110-1301, USA.</p>
2020 </tp:license>
2121
22 <interface name="org.freedesktop.Telepathy.Protocol.DRAFT"
23 tp:causes-havoc="experimental">
24 <tp:added version="0.19.8">(draft 1)</tp:added>
22 <interface name="org.freedesktop.Telepathy.Protocol">
23 <tp:added version="0.19.10">(as stable API)</tp:added>
2524
2625 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2726 <p>An object representing a protocol for which this <tp:dbus-ref
2222 <interface name="org.freedesktop.Telepathy.Protocol.Interface.Avatars.DRAFT"
2323 tp:causes-havoc="experimental">
2424 <tp:added version="0.19.8">(draft 1)</tp:added>
25 <tp:requires interface="org.freedesktop.Telepathy.Protocol.DRAFT"/>
25 <tp:requires interface="org.freedesktop.Telepathy.Protocol"/>
2626
2727 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2828 <p>An interface for protocols where it might be possible to set the
2222 <interface name="org.freedesktop.Telepathy.Protocol.Interface.Presence.DRAFT"
2323 tp:causes-havoc="experimental">
2424 <tp:added version="0.19.8">(draft 1)</tp:added>
25 <tp:requires interface="org.freedesktop.Telepathy.Protocol.DRAFT"/>
25 <tp:requires interface="org.freedesktop.Telepathy.Protocol"/>
2626
2727 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2828 <p>An interface for protocols where it might be possible to set the
22 xmlns:xi="http://www.w3.org/2001/XInclude">
33
44 <tp:title>Telepathy D-Bus Interface Specification</tp:title>
5 <tp:version>0.19.9</tp:version>
5 <tp:version>0.19.10</tp:version>
66
77 <tp:copyright>Copyright © 2005-2010 Collabora Limited</tp:copyright>
88 <tp:copyright>Copyright © 2005-2010 Nokia Corporation</tp:copyright>
2828 base-client.h \
2929 base-connection.h \
3030 base-connection-manager.h \
31 base-protocol.h \
3132 channel.h \
3233 channel-iface.h \
3334 channel-dispatcher.h \
6768 observe-channels-context.h \
6869 presence-mixin.h \
6970 properties-mixin.h \
71 protocol.h \
7072 proxy.h \
7173 proxy-subclass.h \
7274 run.h \
8688 svc-generic.h \
8789 svc-media-interfaces.h \
8890 svc-properties-interface.h \
91 svc-protocol.h \
8992 telepathy-glib.h \
9093 text-mixin.h \
9194 util.h
120123 base-client.c \
121124 base-connection.c \
122125 base-connection-manager.c \
126 base-protocol-internal.h \
127 base-protocol.c \
123128 capabilities.c \
124129 capabilities-internal.h \
125130 channel.c \
132137 channel-request.c \
133138 client.c \
134139 connection.c \
140 connection-avatars.c \
135141 connection-contact-info.c \
136142 connection-internal.h \
137143 connection-handles.c \
169175 observe-channels-context.c \
170176 presence-mixin.c \
171177 properties-mixin.c \
178 protocol.c \
179 protocol-internal.h \
172180 proxy.c \
173181 proxy-internal.h \
174182 proxy-methods.c \
104104 am_libtelepathy_glib_internal_la_OBJECTS = account.lo \
105105 account-manager.lo add-dispatch-operation-context.lo \
106106 base-client.lo base-connection.lo base-connection-manager.lo \
107 capabilities.lo channel.lo channel-group.lo \
107 base-protocol.lo capabilities.lo channel.lo channel-group.lo \
108108 channel-dispatcher.lo channel-dispatch-operation.lo \
109109 channel-manager.lo channel-request.lo client.lo connection.lo \
110 connection-contact-info.lo connection-handles.lo \
111 connection-manager.lo contact.lo contacts-mixin.lo dbus.lo \
112 dbus-daemon.lo dbus-properties-mixin.lo debug.lo \
113 debug-sender.lo interfaces.lo errors.lo exportable-channel.lo \
114 gnio-util.lo group-mixin.lo gtypes.lo handle.lo \
115 handle-channels-context.lo handle-repo.lo \
116 handle-repo-dynamic.lo handle-repo-static.lo handle-set.lo \
117 heap.lo intset.lo channel-iface.lo channel-factory-iface.lo \
118 media-interfaces.lo message-mixin.lo \
110 connection-avatars.lo connection-contact-info.lo \
111 connection-handles.lo connection-manager.lo contact.lo \
112 contacts-mixin.lo dbus.lo dbus-daemon.lo \
113 dbus-properties-mixin.lo debug.lo debug-sender.lo \
114 interfaces.lo errors.lo exportable-channel.lo gnio-util.lo \
115 group-mixin.lo gtypes.lo handle.lo handle-channels-context.lo \
116 handle-repo.lo handle-repo-dynamic.lo handle-repo-static.lo \
117 handle-set.lo heap.lo intset.lo channel-iface.lo \
118 channel-factory-iface.lo media-interfaces.lo message-mixin.lo \
119119 observe-channels-context.lo presence-mixin.lo \
120 properties-mixin.lo proxy.lo proxy-methods.lo proxy-signals.lo \
121 run.lo simple-approver.lo simple-handler.lo simple-observer.lo \
122 text-mixin.lo util.lo
120 properties-mixin.lo protocol.lo proxy.lo proxy-methods.lo \
121 proxy-signals.lo run.lo simple-approver.lo simple-handler.lo \
122 simple-observer.lo text-mixin.lo util.lo
123123 nodist_libtelepathy_glib_internal_la_OBJECTS = error-str.lo \
124124 signals-marshal.lo genums.lo tp-svc-account.lo \
125125 tp-svc-account-manager.lo tp-svc-channel.lo \
127127 tp-svc-channel-dispatch-operation.lo tp-svc-channel-request.lo \
128128 tp-svc-client.lo tp-svc-connection.lo \
129129 tp-svc-connection-manager.lo tp-svc-debug.lo tp-svc-generic.lo \
130 tp-svc-media-session-handler.lo tp-svc-media-stream-handler.lo
130 tp-svc-media-session-handler.lo tp-svc-media-stream-handler.lo \
131 tp-svc-protocol.lo
131132 libtelepathy_glib_internal_la_OBJECTS = \
132133 $(am_libtelepathy_glib_internal_la_OBJECTS) \
133134 $(nodist_libtelepathy_glib_internal_la_OBJECTS)
366367 base-client.h \
367368 base-connection.h \
368369 base-connection-manager.h \
370 base-protocol.h \
369371 channel.h \
370372 channel-iface.h \
371373 channel-dispatcher.h \
405407 observe-channels-context.h \
406408 presence-mixin.h \
407409 properties-mixin.h \
410 protocol.h \
408411 proxy.h \
409412 proxy-subclass.h \
410413 run.h \
424427 svc-generic.h \
425428 svc-media-interfaces.h \
426429 svc-properties-interface.h \
430 svc-protocol.h \
427431 telepathy-glib.h \
428432 text-mixin.h \
429433 util.h
449453 base-client.c \
450454 base-connection.c \
451455 base-connection-manager.c \
456 base-protocol-internal.h \
457 base-protocol.c \
452458 capabilities.c \
453459 capabilities-internal.h \
454460 channel.c \
461467 channel-request.c \
462468 client.c \
463469 connection.c \
470 connection-avatars.c \
464471 connection-contact-info.c \
465472 connection-internal.h \
466473 connection-handles.c \
498505 observe-channels-context.c \
499506 presence-mixin.c \
500507 properties-mixin.c \
508 protocol.c \
509 protocol-internal.h \
501510 proxy.c \
502511 proxy-internal.h \
503512 proxy-methods.c \
567576 versions/0.11.5.abi \
568577 versions/0.11.6.abi \
569578 versions/0.11.7.abi \
570 versions/0.11.9.abi
579 versions/0.11.9.abi \
580 versions/0.11.11.abi
571581
572582
573583 # The quoting here is unnecessary but harmless, and has the useful side-effect
608618 genums.h.template \
609619 media-session-handler.xml \
610620 media-stream-handler.xml \
621 protocol.xml \
611622 stable-interfaces.xml
612623
613624 codegen_sources = \
636647 _gen/tp-cli-generic.h \
637648 _gen/tp-cli-media-session-handler.h \
638649 _gen/tp-cli-media-stream-handler.h \
650 _gen/tp-cli-protocol.h \
639651 _gen/tp-svc-account.h \
640652 _gen/tp-svc-account-manager.h \
641653 _gen/tp-svc-channel.h \
648660 _gen/tp-svc-debug.h \
649661 _gen/tp-svc-generic.h \
650662 _gen/tp-svc-media-session-handler.h \
651 _gen/tp-svc-media-stream-handler.h
663 _gen/tp-svc-media-stream-handler.h \
664 _gen/tp-svc-protocol.h
652665
653666 nodist_libtelepathy_glib_internal_la_SOURCES = \
654667 _gen/error-str.c \
673686 _gen/tp-cli-generic-body.h \
674687 _gen/tp-cli-media-session-handler-body.h \
675688 _gen/tp-cli-media-stream-handler-body.h \
689 _gen/tp-cli-protocol-body.h \
676690 _gen/tp-svc-account.c \
677691 _gen/tp-svc-account-manager.c \
678692 _gen/tp-svc-channel.c \
685699 _gen/tp-svc-debug.c \
686700 _gen/tp-svc-generic.c \
687701 _gen/tp-svc-media-session-handler.c \
688 _gen/tp-svc-media-stream-handler.c
702 _gen/tp-svc-media-stream-handler.c \
703 _gen/tp-svc-protocol.c
689704
690705
691706 # Generated stuff
698713 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/account-manager.c $(srcdir)/account-manager.h \
699714 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/connection.c $(srcdir)/connection.h \
700715 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/connection-handles.c \
716 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/protocol.c $(srcdir)/protocol.h \
701717 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/connection-manager.c $(srcdir)/connection-manager.h \
702718 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/channel.c $(srcdir)/channel.h \
703719 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/handle.c $(srcdir)/handle.h \
719735 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/channel-request.c $(srcdir)/channel-request.h \
720736 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/observe-channels-context.c $(srcdir)/observe-channels-context.h \
721737 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/add-dispatch-operation-context.c $(srcdir)/add-dispatch-operation-context.h \
738 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/protocol.c $(srcdir)/protocol.h \
739 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/base-connection.c $(srcdir)/base-connection.h \
740 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/handle-repo.c $(srcdir)/handle-repo.h $(srcdir)/handle-set.c \
722741 @HAVE_INTROSPECTION_TRUE@ _gen/telepathy-enums.h \
723742 @HAVE_INTROSPECTION_TRUE@ _gen/telepathy-interfaces.h
724743
822841 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-client.Plo@am__quote@
823842 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-connection-manager.Plo@am__quote@
824843 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-connection.Plo@am__quote@
844 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-protocol.Plo@am__quote@
825845 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capabilities.Plo@am__quote@
826846 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel-dispatch-operation.Plo@am__quote@
827847 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel-dispatcher.Plo@am__quote@
832852 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel-request.Plo@am__quote@
833853 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Plo@am__quote@
834854 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Plo@am__quote@
855 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-avatars.Plo@am__quote@
835856 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-contact-info.Plo@am__quote@
836857 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-handles.Plo@am__quote@
837858 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-manager.Plo@am__quote@
864885 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/observe-channels-context.Plo@am__quote@
865886 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/presence-mixin.Plo@am__quote@
866887 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/properties-mixin.Plo@am__quote@
888 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protocol.Plo@am__quote@
867889 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxy-methods.Plo@am__quote@
868890 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxy-signals.Plo@am__quote@
869891 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxy.Plo@am__quote@
886908 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-svc-generic.Plo@am__quote@
887909 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-svc-media-session-handler.Plo@am__quote@
888910 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-svc-media-stream-handler.Plo@am__quote@
911 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-svc-protocol.Plo@am__quote@
889912 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@
890913
891914 .c.o:
10391062 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='_gen/tp-svc-media-stream-handler.c' object='tp-svc-media-stream-handler.lo' libtool=yes @AMDEPBACKSLASH@
10401063 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
10411064 @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tp-svc-media-stream-handler.lo `test -f '_gen/tp-svc-media-stream-handler.c' || echo '$(srcdir)/'`_gen/tp-svc-media-stream-handler.c
1065
1066 tp-svc-protocol.lo: _gen/tp-svc-protocol.c
1067 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tp-svc-protocol.lo -MD -MP -MF $(DEPDIR)/tp-svc-protocol.Tpo -c -o tp-svc-protocol.lo `test -f '_gen/tp-svc-protocol.c' || echo '$(srcdir)/'`_gen/tp-svc-protocol.c
1068 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tp-svc-protocol.Tpo $(DEPDIR)/tp-svc-protocol.Plo
1069 @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
1070 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='_gen/tp-svc-protocol.c' object='tp-svc-protocol.lo' libtool=yes @AMDEPBACKSLASH@
1071 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1072 @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tp-svc-protocol.lo `test -f '_gen/tp-svc-protocol.c' || echo '$(srcdir)/'`_gen/tp-svc-protocol.c
10421073
10431074 mostlyclean-libtool:
10441075 -rm -f *.lo
4242 versions/0.11.5.abi \
4343 versions/0.11.6.abi \
4444 versions/0.11.7.abi \
45 versions/0.11.9.abi
45 versions/0.11.9.abi \
46 versions/0.11.11.abi
4647
4748 # The quoting here is unnecessary but harmless, and has the useful side-effect
4849 # that vim quickfix mode (:make) doesn't interpret the libtool --mode=link
20192019 const gchar *
20202020 tp_base_client_get_bus_name (TpBaseClient *self)
20212021 {
2022 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), NULL);
20222023 return self->priv->bus_name;
20232024 }
20242025
20372038 const gchar *
20382039 tp_base_client_get_object_path (TpBaseClient *self)
20392040 {
2041 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), NULL);
20402042 return self->priv->object_path;
2043 }
2044
2045 /**
2046 * tp_base_client_get_name: (skip)
2047 * @self: a #TpBaseClient
2048 *
2049 * Return the #TpBaseClient:name construct-only property, which is used as
2050 * part of the bus name and object path.
2051 *
2052 * Returns: the value of #TpBaseClient:name
2053 * Since: 0.11.11
2054 */
2055 const gchar *
2056 tp_base_client_get_name (TpBaseClient *self)
2057 {
2058 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), NULL);
2059 return self->priv->name;
2060 }
2061
2062 /**
2063 * tp_base_client_get_uniquify_name: (skip)
2064 * @self: a #TpBaseClient
2065 *
2066 * Return the #TpBaseClient:uniquify-name construct-only property; if this
2067 * is true, the bus name and object path will be made unique by appending
2068 * a suffix that includes the D-Bus unique name and a per-process counter.
2069 *
2070 * Returns: the value of #TpBaseClient:uniquify-name
2071 * Since: 0.11.11
2072 */
2073 gboolean
2074 tp_base_client_get_uniquify_name (TpBaseClient *self)
2075 {
2076 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), FALSE);
2077 return self->priv->uniquify_name;
2078 }
2079
2080 /**
2081 * tp_base_client_get_dbus_daemon: (skip)
2082 * @self: a #TpBaseClient
2083 *
2084 * Return the #TpBaseClient:dbus-daemon construct-only property, which
2085 * represents the D-Bus connection used to export this client object.
2086 *
2087 * The returned object's reference count is not incremented, so it is not
2088 * necessarily valid after @self is destroyed.
2089 *
2090 * Returns: (transfer none): the value of #TpBaseClient:dbus-daemon
2091 * Since: 0.11.11
2092 */
2093 TpDBusDaemon *
2094 tp_base_client_get_dbus_daemon (TpBaseClient *self)
2095 {
2096 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), NULL);
2097 return self->priv->dbus;
20412098 }
20422099
20432100 /**
21012158 {
21022159 GError *error = NULL;
21032160
2161 g_return_if_fail (TP_IS_BASE_CLIENT (self));
2162
21042163 if (!self->priv->registered)
21052164 return;
21062165
135135 gboolean tp_base_client_register (TpBaseClient *self,
136136 GError **error);
137137
138 const gchar *tp_base_client_get_bus_name (TpBaseClient *self);
139
140 const gchar *tp_base_client_get_object_path (TpBaseClient *self);
141
142138 /* Normal methods, can be called at any time */
143139
144140 GList *tp_base_client_get_pending_requests (TpBaseClient *self);
145141 GList *tp_base_client_get_handled_channels (TpBaseClient *self);
142
143 const gchar *tp_base_client_get_name (TpBaseClient *self);
144 gboolean tp_base_client_get_uniquify_name (TpBaseClient *self);
145 const gchar *tp_base_client_get_bus_name (TpBaseClient *self);
146 const gchar *tp_base_client_get_object_path (TpBaseClient *self);
147 TpDBusDaemon *tp_base_client_get_dbus_daemon (TpBaseClient *self);
146148
147149 void tp_base_client_unregister (TpBaseClient *self);
148150
3939 #include <telepathy-glib/telepathy-glib.h>
4040
4141 #define DEBUG_FLAG TP_DEBUG_PARAMS
42 #include "telepathy-glib/base-protocol-internal.h"
4243 #include "telepathy-glib/debug-internal.h"
43
44 /**
45 * TpCMParamSpec:
46 * @name: Name as passed over D-Bus
47 * @dtype: D-Bus type signature. We currently support 16- and 32-bit integers
48 * (@gtype is INT), 16- and 32-bit unsigned integers (gtype is UINT),
49 * strings (gtype is STRING) and booleans (gtype is BOOLEAN).
50 * @gtype: GLib type, derived from @dtype as above
51 * @flags: Some combination of TP_CONN_MGR_PARAM_FLAG_foo
52 * @def: Default value, as a (const gchar *) for string parameters, or
53 using #GINT_TO_POINTER or #GUINT_TO_POINTER for integer parameters
54 * @offset: Offset of the parameter in the opaque data structure, if
55 * appropriate. The member at that offset is expected to be a gint,
56 * guint, (gchar *) or gboolean, depending on @gtype. The default
57 * parameter setter, #tp_cm_param_setter_offset, uses this field.
58 * @filter: A callback which is used to validate or normalize the user-provided
59 * value before it is written into the opaque data structure
60 * @filter_data: Arbitrary opaque data intended for use by the filter function
61 * @setter_data: Arbitrary opaque data intended for use by the setter function
62 * instead of or in addition to @offset.
63 *
64 * Structure representing a connection manager parameter, as accepted by
65 * RequestConnection.
66 *
67 * In addition to the fields documented here, there is one gpointer field
68 * which must currently be %NULL. A meaning may be defined for it in a
69 * future version of telepathy-glib.
70 */
71
72 /**
73 * TpCMParamFilter:
74 * @paramspec: The parameter specification. The filter is likely to use
75 * name (for the error message if the value is invalid) and filter_data.
76 * @value: The value for that parameter provided by the user.
77 * May be changed to contain a different value of the same type, if
78 * some sort of normalization is required
79 * @error: Used to raise %TP_ERROR_INVALID_ARGUMENT if the given value is
80 * rejected
81 *
82 * Signature of a callback used to validate and/or normalize user-provided
83 * CM parameter values.
84 *
85 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
86 */
87
88 /**
89 * TpCMParamSetter:
90 * @paramspec: The parameter specification. The setter is likely to use
91 * some combination of the name, offset and setter_data fields.
92 * @value: The value for that parameter provided by the user.
93 * @params: An opaque data structure, created by
94 * #TpCMProtocolSpec.params_new.
95 *
96 * The signature of a callback used to set a parameter within the opaque
97 * data structure used for a protocol.
98 *
99 * Since: 0.7.0
100 */
10144
10245 /**
10346 * TpCMProtocolSpec:
12669 * future version of telepathy-glib.
12770 */
12871
72 /*
73 * _TpLegacyProtocol:
74 *
75 * A limited implementation of TpProtocol, in terms of the ConnectionManager
76 * API from telepathy-spec 0.18.
77 */
78 typedef struct {
79 TpBaseProtocol parent;
80 /* Really a TpBaseConnectionManager, but using that type with
81 * g_object_add_weak_pointer violates strict aliasing */
82 gpointer cm;
83 const TpCMProtocolSpec *protocol_spec;
84 } _TpLegacyProtocol;
85
86 typedef struct {
87 TpBaseProtocolClass parent;
88 } _TpLegacyProtocolClass;
89
90 #define _TP_TYPE_LEGACY_PROTOCOL (_tp_legacy_protocol_get_type ())
91 GType _tp_legacy_protocol_get_type (void) G_GNUC_CONST;
92
93 G_DEFINE_TYPE(_TpLegacyProtocol,
94 _tp_legacy_protocol,
95 TP_TYPE_BASE_PROTOCOL);
96
97 static const TpCMParamSpec *
98 _tp_legacy_protocol_get_parameters (TpBaseProtocol *protocol)
99 {
100 _TpLegacyProtocol *self = (_TpLegacyProtocol *) protocol;
101
102 return self->protocol_spec->parameters;
103 }
104
105 static gboolean parse_parameters (const TpCMParamSpec *paramspec,
106 GHashTable *provided, TpIntSet *params_present,
107 const TpCMParamSetter set_param, void *params, GError **error);
108
109 static TpBaseConnection *
110 _tp_legacy_protocol_new_connection (TpBaseProtocol *protocol,
111 GHashTable *asv,
112 GError **error)
113 {
114 _TpLegacyProtocol *self = (_TpLegacyProtocol *) protocol;
115 const TpCMProtocolSpec *protospec = self->protocol_spec;
116 TpBaseConnectionManagerClass *cls;
117 TpBaseConnection *conn = NULL;
118 void *params = NULL;
119 TpIntSet *params_present = NULL;
120 TpCMParamSetter set_param;
121
122 if (self->cm == NULL)
123 {
124 g_set_error (error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
125 "Connection manager no longer available");
126 return NULL;
127 }
128
129 g_object_ref (self->cm);
130
131 g_assert (protospec->parameters != NULL);
132 g_assert (protospec->params_new != NULL);
133 g_assert (protospec->params_free != NULL);
134
135 cls = TP_BASE_CONNECTION_MANAGER_GET_CLASS (self->cm);
136
137 params_present = tp_intset_new ();
138 params = protospec->params_new ();
139
140 set_param = protospec->set_param;
141
142 if (set_param == NULL)
143 set_param = tp_cm_param_setter_offset;
144
145 if (!parse_parameters (protospec->parameters, (GHashTable *) asv,
146 params_present, set_param, params, error))
147 {
148 goto finally;
149 }
150
151 conn = (cls->new_connection) (self->cm, protospec->name, params_present,
152 params, error);
153
154 finally:
155 if (params_present != NULL)
156 tp_intset_destroy (params_present);
157
158 if (params != NULL)
159 protospec->params_free (params);
160
161 g_object_unref (self->cm);
162
163 return conn;
164 }
165
166 static void
167 _tp_legacy_protocol_class_init (_TpLegacyProtocolClass *cls)
168 {
169 TpBaseProtocolClass *base_class = (TpBaseProtocolClass *) cls;
170
171 base_class->is_stub = TRUE;
172 base_class->get_parameters = _tp_legacy_protocol_get_parameters;
173 base_class->new_connection = _tp_legacy_protocol_new_connection;
174 }
175
176 static void
177 _tp_legacy_protocol_init (_TpLegacyProtocol *self)
178 {
179 }
180
181 static TpBaseProtocol *
182 _tp_legacy_protocol_new (TpBaseConnectionManager *cm,
183 const TpCMProtocolSpec *protocol_spec)
184 {
185 _TpLegacyProtocol *self = g_object_new (_TP_TYPE_LEGACY_PROTOCOL,
186 "name", protocol_spec->name,
187 NULL);
188
189 self->protocol_spec = protocol_spec;
190 self->cm = cm;
191 g_object_add_weak_pointer ((GObject *) cm, &(self->cm));
192 return (TpBaseProtocol *) self;
193 }
194
129195 /**
130196 * TpBaseConnectionManager:
131197 *
142208 * subclasses in their class_init function.
143209 * @protocol_params: An array of #TpCMProtocolSpec structures representing
144210 * the protocols this connection manager supports, terminated by a structure
145 * whose name member is %NULL.
211 * whose name member is %NULL; or %NULL if this CM uses Protocol objects.
146212 * @new_connection: A #TpBaseConnectionManagerNewConnFunc used to construct
147 * new connections. Must be filled in by subclasses in their class_init
148 * function.
213 * new connections, or %NULL if this CM uses Protocol objects.
214 * @interfaces: A #GStrv of extra D-Bus interfaces implemented
215 * by instances of this class, which may be filled in by subclasses. The
216 * default is to list no additional interfaces. Since: 0.11.11
149217 *
150218 * The class structure for #TpBaseConnectionManager.
151219 *
152 * In addition to the fields documented here, there are four gpointer fields
220 * In addition to the fields documented here, there are some gpointer fields
153221 * which must currently be %NULL (a meaning may be defined for these in a
154 * future version of telepathy-glib), and a pointer to opaque private data.
222 * future version of telepathy-glib).
155223 *
156224 * Changed in 0.7.1: it is a fatal error for @cm_dbus_name not to conform to
157225 * the specification.
226 *
227 * Changed in 0.11.11: protocol_params and new_connection may both be
228 * %NULL. If so, this connection manager is assumed to use Protocol objects
229 * instead.
158230 */
159231
160232 /**
184256 G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TpBaseConnectionManager,
185257 tp_base_connection_manager,
186258 G_TYPE_OBJECT,
259 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
260 tp_dbus_properties_mixin_iface_init);
187261 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CONNECTION_MANAGER,
188262 service_iface_init))
189263
195269 GHashTable *connections;
196270 /* true after tp_base_connection_manager_register is called */
197271 gboolean registered;
272 /* dup'd string => ref to TpBaseProtocol */
273 GHashTable *protocols;
274
198275 TpDBusDaemon *dbus_daemon;
199276 };
200277
201278 enum
202279 {
203280 PROP_DBUS_DAEMON = 1,
281 PROP_INTERFACES,
282 PROP_PROTOCOLS,
204283 N_PROPS
205284 };
206285
229308 {
230309 g_object_unref (priv->dbus_daemon);
231310 priv->dbus_daemon = NULL;
311 }
312
313 if (priv->protocols != NULL)
314 {
315 g_hash_table_destroy (priv->protocols);
316 priv->protocols = NULL;
232317 }
233318
234319 if (dispose != NULL)
276361 GError *error = NULL;
277362
278363 g_assert (tp_connection_manager_check_valid_name (cls->cm_dbus_name, NULL));
279 g_assert (cls->protocol_params != NULL);
280 g_assert (cls->new_connection != NULL);
364
365 /* if one of these is NULL, the other must be too */
366 g_assert (cls->new_connection == NULL || cls->protocol_params != NULL);
367 g_assert (cls->protocol_params == NULL || cls->new_connection != NULL);
281368
282369 if (!tp_base_connection_manager_ensure_dbus (self, &error))
283370 {
295382 GParamSpec *pspec)
296383 {
297384 TpBaseConnectionManager *self = TP_BASE_CONNECTION_MANAGER (object);
385 TpBaseConnectionManagerClass *cls = TP_BASE_CONNECTION_MANAGER_GET_CLASS (
386 object);
298387
299388 switch (property_id)
300389 {
301390 case PROP_DBUS_DAEMON:
302391 g_value_set_object (value, self->priv->dbus_daemon);
392 break;
393
394 case PROP_INTERFACES:
395 g_value_set_boxed (value, cls->interfaces);
396 break;
397
398 case PROP_PROTOCOLS:
399 {
400 GHashTable *map = g_hash_table_new_full (g_str_hash, g_str_equal,
401 g_free, (GDestroyNotify) g_hash_table_unref);
402 GHashTableIter iter;
403 gpointer name, protocol;
404
405 g_hash_table_iter_init (&iter, self->priv->protocols);
406
407 while (g_hash_table_iter_next (&iter, &name, &protocol))
408 {
409 GHashTable *props;
410
411 g_object_get (protocol,
412 "immutable-properties", &props,
413 NULL);
414
415 g_hash_table_insert (map, g_strdup (name), props);
416 }
417
418 g_value_take_boxed (value, map);
419 }
303420 break;
304421
305422 default:
338455 static void
339456 tp_base_connection_manager_class_init (TpBaseConnectionManagerClass *klass)
340457 {
458 static TpDBusPropertiesMixinPropImpl cm_properties[] = {
459 { "Protocols", "protocols", NULL },
460 { "Interfaces", "interfaces", NULL },
461 { NULL }
462 };
341463 GObjectClass *object_class = G_OBJECT_CLASS (klass);
342464
343465 g_type_class_add_private (klass, sizeof (TpBaseConnectionManagerPrivate));
367489 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
368490
369491 /**
492 * TpBaseConnectionManager:interfaces:
493 *
494 * The set of D-Bus interfaces available on this ConnectionManager, other
495 * than ConnectionManager itself.
496 *
497 * Since: 0.11.11
498 */
499 g_object_class_install_property (object_class, PROP_INTERFACES,
500 g_param_spec_boxed ("interfaces",
501 "ConnectionManager.Interfaces",
502 "The set of D-Bus interfaces available on this ConnectionManager, "
503 "other than ConnectionManager itself",
504 G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
505
506 /**
507 * TpBaseConnectionManager:protocols:
508 *
509 * The Protocol objects available on this ConnectionManager.
510 *
511 * Since: 0.11.11
512 */
513 g_object_class_install_property (object_class, PROP_PROTOCOLS,
514 g_param_spec_boxed ("protocols",
515 "ConnectionManager.Protocols",
516 "The set of protocols available on this Connection, other than "
517 "ConnectionManager itself",
518 TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP,
519 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
520
521 /**
370522 * TpBaseConnectionManager::no-more-connections:
371523 *
372524 * Emitted when the table of active connections becomes empty.
381533 NULL, NULL,
382534 g_cclosure_marshal_VOID__VOID,
383535 G_TYPE_NONE, 0);
536
537 tp_dbus_properties_mixin_class_init (object_class, 0);
538 tp_dbus_properties_mixin_implement_interface (object_class,
539 TP_IFACE_QUARK_CONNECTION_MANAGER,
540 tp_dbus_properties_mixin_getter_gobject_properties, NULL,
541 cm_properties);
384542 }
385543
386544 static void
392550 self->priv = priv;
393551
394552 priv->connections = g_hash_table_new (g_direct_hash, g_direct_equal);
553 priv->protocols = g_hash_table_new_full (g_str_hash, g_str_equal,
554 g_free, g_object_unref);
395555 }
396556
397557 /**
424584
425585 /* Parameter parsing */
426586
427 static gboolean
428 get_parameters (const TpCMProtocolSpec *protos,
429 const char *proto,
430 const TpCMProtocolSpec **ret,
431 GError **error)
432 {
433 guint i;
434
435 for (i = 0; protos[i].name; i++)
436 {
437 if (!tp_strdiff (proto, protos[i].name))
438 {
439 *ret = protos + i;
440 return TRUE;
441 }
442 }
443
444 DEBUG ("unknown protocol %s", proto);
587 static TpBaseProtocol *
588 tp_base_connection_manager_get_protocol (TpBaseConnectionManager *self,
589 const gchar *protocol_name,
590 GError **error)
591 {
592 TpBaseProtocol *protocol = g_hash_table_lookup (self->priv->protocols,
593 protocol_name);
594
595 if (protocol != NULL)
596 return protocol;
445597
446598 g_set_error (error, TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
447 "unknown protocol %s", proto);
448
449 return FALSE;
450 }
451
452 static GValue *
453 param_default_value (const TpCMParamSpec *param)
454 {
455 GValue *value;
456
457 value = tp_g_value_slice_new (param->gtype);
458
459 /* If HAS_DEFAULT is false, we don't really care what the value is, so we'll
460 * just use whatever's in the user-supplied param spec. As long as we're
461 * careful to accept NULL, that should be fine. */
462
463 switch (param->dtype[0])
464 {
465 case DBUS_TYPE_STRING:
466 g_assert (param->gtype == G_TYPE_STRING);
467 if (param->def == NULL)
468 g_value_set_static_string (value, "");
469 else
470 g_value_set_static_string (value, param->def);
471 break;
472
473 case DBUS_TYPE_INT16:
474 case DBUS_TYPE_INT32:
475 g_assert (param->gtype == G_TYPE_INT);
476 g_value_set_int (value, GPOINTER_TO_INT (param->def));
477 break;
478
479 case DBUS_TYPE_UINT16:
480 case DBUS_TYPE_UINT32:
481 g_assert (param->gtype == G_TYPE_UINT);
482 g_value_set_uint (value, GPOINTER_TO_UINT (param->def));
483 break;
484
485 case DBUS_TYPE_UINT64:
486 g_assert (param->gtype == G_TYPE_UINT64);
487 g_value_set_uint64 (value, param->def == NULL ? 0
488 : *(const guint64 *) param->def);
489 break;
490
491 case DBUS_TYPE_INT64:
492 g_assert (param->gtype == G_TYPE_INT64);
493 g_value_set_int64 (value, param->def == NULL ? 0
494 : *(const gint64 *) param->def);
495 break;
496
497 case DBUS_TYPE_DOUBLE:
498 g_assert (param->gtype == G_TYPE_DOUBLE);
499 g_value_set_double (value, param->def == NULL ? 0.0
500 : *(const double *) param->def);
501 break;
502
503 case DBUS_TYPE_OBJECT_PATH:
504 g_assert (param->gtype == DBUS_TYPE_G_OBJECT_PATH);
505 g_value_set_static_boxed (value, param->def == NULL ? "/"
506 : param->def);
507 break;
508
509 case DBUS_TYPE_ARRAY:
510 switch (param->dtype[1])
511 {
512 case DBUS_TYPE_STRING:
513 g_assert (param->gtype == G_TYPE_STRV);
514 g_value_set_static_boxed (value, param->def);
515 break;
516
517 case DBUS_TYPE_BYTE:
518 g_assert (param->gtype == DBUS_TYPE_G_UCHAR_ARRAY);
519 if (param->def == NULL)
520 {
521 GArray *array = g_array_new (FALSE, FALSE, sizeof (guint8));
522 g_value_take_boxed (value, array);
523 }
524 else
525 {
526 g_value_set_static_boxed (value, param->def);
527 }
528 break;
529
530 default:
531 ERROR ("encountered unknown type %s on argument %s",
532 param->dtype, param->name);
533 }
534 break;
535
536 case DBUS_TYPE_BOOLEAN:
537 g_assert (param->gtype == G_TYPE_BOOLEAN);
538 g_value_set_boolean (value, GPOINTER_TO_INT (param->def));
539 break;
540
541 default:
542 ERROR ("encountered unknown type %s on argument %s",
543 param->dtype, param->name);
544 }
545
546 return value;
599 "unknown protocol %s", protocol_name);
600
601 return NULL;
547602 }
548603
549604 /**
731786 }
732787 }
733788
734 static void
735 set_param_from_default (const TpCMParamSpec *paramspec,
736 const TpCMParamSetter set_param,
737 gpointer params)
738 {
739 GValue *value = param_default_value (paramspec);
740 set_param (paramspec, value, params);
741 tp_g_value_slice_free (value);
742 }
743
744789 static gboolean
745790 set_param_from_value (const TpCMParamSpec *paramspec,
746791 GValue *value,
760805 return FALSE;
761806 }
762807
763 if (paramspec->filter != NULL)
764 {
765 if (!(paramspec->filter) (paramspec, value, error))
766 {
767 DEBUG ("parameter %s rejected by filter function: %s",
768 paramspec->name, error ? (*error)->message : "(error ignored)");
769 return FALSE;
770 }
771
772 /* the filter may not change the type of the GValue */
773 g_return_val_if_fail (G_VALUE_TYPE (value) == paramspec->gtype, FALSE);
774 }
775
776808 set_param (paramspec, value, params);
777809
778810 return TRUE;
779 }
780
781 static void
782 report_unknown_param (gpointer key, gpointer value, gpointer user_data)
783 {
784 const char *arg = (const char *) key;
785 GString **error_str = (GString **) user_data;
786 *error_str = g_string_append_c (*error_str, ' ');
787 *error_str = g_string_append (*error_str, arg);
788811 }
789812
790813 static gboolean
796819 GError **error)
797820 {
798821 int i;
799 guint mandatory_flag = TP_CONN_MGR_PARAM_FLAG_REQUIRED;
800822 GValue *value;
801823
802 value = g_hash_table_lookup (provided, "register");
803 if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_BOOLEAN &&
804 g_value_get_boolean (value))
805 {
806 mandatory_flag = TP_CONN_MGR_PARAM_FLAG_REGISTER;
807 }
808
809824 for (i = 0; paramspec[i].name; i++)
810825 {
811826 value = g_hash_table_lookup (provided, paramspec[i].name);
812827
813 if (value == NULL)
814 {
815 if (paramspec[i].flags & mandatory_flag)
816 {
817 DEBUG ("missing mandatory param %s", paramspec[i].name);
818 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
819 "missing mandatory account parameter %s", paramspec[i].name);
820 return FALSE;
821 }
822 else if (paramspec[i].flags & TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT)
823 {
824 set_param_from_default (&paramspec[i], set_param, params);
825 tp_intset_add (params_present, i);
826 }
827 else
828 {
829 DEBUG ("%s not given, using default behaviour",
830 paramspec[i].name);
831 }
832 }
833 else
828 if (value != NULL)
834829 {
835830 if (!set_param_from_value (&paramspec[i], value, set_param, params,
836831 error))
844839 }
845840 }
846841
847 if (g_hash_table_size (provided) != 0)
848 {
849 gchar *error_txt;
850 GString *error_str = g_string_new ("unknown parameters provided:");
851
852 g_hash_table_foreach (provided, report_unknown_param, &error_str);
853 error_txt = g_string_free (error_str, FALSE);
854
855 DEBUG ("%s", error_txt);
856 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
857 "%s", error_txt);
858 g_free (error_txt);
859 return FALSE;
860 }
861
862842 return TRUE;
863843 }
864844
876856 {
877857 GPtrArray *ret;
878858 GError *error = NULL;
879 const TpCMProtocolSpec *protospec = NULL;
880859 TpBaseConnectionManager *self = TP_BASE_CONNECTION_MANAGER (iface);
881 TpBaseConnectionManagerClass *cls =
882 TP_BASE_CONNECTION_MANAGER_GET_CLASS (self);
883 GType param_type = TP_STRUCT_TYPE_PARAM_SPEC;
884860 guint i;
861 TpBaseProtocol *protocol;
862 const TpCMParamSpec *parameters;
885863
886864 g_assert (TP_IS_BASE_CONNECTION_MANAGER (iface));
887 g_assert (cls->protocol_params != NULL);
888865 /* a D-Bus method shouldn't be happening til we're on D-Bus */
889866 g_assert (self->priv->registered);
890867
891 if (!get_parameters (cls->protocol_params, proto, &protospec, &error))
868 protocol = tp_base_connection_manager_get_protocol (self, proto, &error);
869
870 if (protocol == NULL)
892871 {
893872 dbus_g_method_return_error (context, error);
894873 g_error_free (error);
895874 return;
896875 }
897876
877 parameters = tp_base_protocol_get_parameters (protocol);
878 g_assert (parameters != NULL);
879
898880 ret = g_ptr_array_new ();
899881
900 for (i = 0; protospec->parameters[i].name != NULL; i++)
901 {
902 GValue *def_value;
903 GValue param = { 0, };
904
905 g_value_init (&param, param_type);
906 g_value_set_static_boxed (&param,
907 dbus_g_type_specialized_construct (param_type));
908
909 def_value = param_default_value (protospec->parameters + i);
910 dbus_g_type_struct_set (&param,
911 0, protospec->parameters[i].name,
912 1, protospec->parameters[i].flags,
913 2, protospec->parameters[i].dtype,
914 3, def_value,
915 G_MAXUINT);
916 g_value_unset (def_value);
917 g_slice_free (GValue, def_value);
918
919 g_ptr_array_add (ret, g_value_get_boxed (&param));
882 for (i = 0; parameters[i].name != NULL; i++)
883 {
884 g_ptr_array_add (ret,
885 _tp_cm_param_spec_to_dbus (parameters + i));
920886 }
921887
922888 tp_svc_connection_manager_return_from_get_parameters (context, ret);
923889
924890 for (i = 0; i < ret->len; i++)
925891 {
926 g_boxed_free (param_type, g_ptr_array_index (ret, i));
892 g_value_array_free (g_ptr_array_index (ret, i));
927893 }
928894
929895 g_ptr_array_free (ret, TRUE);
941907 DBusGMethodInvocation *context)
942908 {
943909 TpBaseConnectionManager *self = TP_BASE_CONNECTION_MANAGER (iface);
944 TpBaseConnectionManagerClass *cls =
945 TP_BASE_CONNECTION_MANAGER_GET_CLASS (self);
946 const char **protocols;
947 guint i = 0;
910 GPtrArray *protocols;
911 GHashTableIter iter;
912 gpointer name;
948913
949914 /* a D-Bus method shouldn't be happening til we're on D-Bus */
950915 g_assert (self->priv->registered);
951916
952 while (cls->protocol_params[i].name)
953 i++;
954
955 protocols = g_new0 (const char *, i + 1);
956 for (i = 0; cls->protocol_params[i].name; i++)
957 {
958 protocols[i] = cls->protocol_params[i].name;
959 }
960 g_assert (protocols[i] == NULL);
917 protocols = g_ptr_array_sized_new (
918 g_hash_table_size (self->priv->protocols) + 1);
919
920 g_hash_table_iter_init (&iter, self->priv->protocols);
921
922 while (g_hash_table_iter_next (&iter, &name, NULL))
923 {
924 g_ptr_array_add (protocols, name);
925 }
926
927 g_ptr_array_add (protocols, NULL);
961928
962929 tp_svc_connection_manager_return_from_list_protocols (
963 context, protocols);
964 g_free (protocols);
930 context, (const gchar **) protocols->pdata);
931 g_ptr_array_free (protocols, TRUE);
965932 }
966933
967934
991958 gchar *bus_name;
992959 gchar *object_path;
993960 GError *error = NULL;
994 void *params = NULL;
995 TpIntSet *params_present = NULL;
996 const TpCMProtocolSpec *protospec = NULL;
997 TpCMParamSetter set_param;
961 TpBaseProtocol *protocol;
998962
999963 g_assert (TP_IS_BASE_CONNECTION_MANAGER (iface));
1000964
1004968 if (!tp_connection_manager_check_valid_protocol_name (proto, &error))
1005969 goto ERROR;
1006970
1007 if (!get_parameters (cls->protocol_params, proto, &protospec, &error))
1008 {
1009 goto ERROR;
1010 }
1011
1012 g_assert (protospec->parameters != NULL);
1013 g_assert (protospec->params_new != NULL);
1014 g_assert (protospec->params_free != NULL);
1015
1016 params_present = tp_intset_new ();
1017 params = protospec->params_new ();
1018
1019 set_param = protospec->set_param;
1020 if (set_param == NULL)
1021 set_param = tp_cm_param_setter_offset;
1022
1023 if (!parse_parameters (protospec->parameters, parameters, params_present,
1024 set_param, params, &error))
1025 {
1026 goto ERROR;
1027 }
1028
1029 conn = (cls->new_connection) (self, proto, params_present, params, &error);
1030 if (!conn)
1031 {
1032 goto ERROR;
1033 }
971 protocol = tp_base_connection_manager_get_protocol (self, proto, &error);
972
973 if (protocol == NULL)
974 goto ERROR;
975
976 conn = tp_base_protocol_new_connection (protocol, parameters, &error);
977
978 if (conn == NULL)
979 goto ERROR;
1034980
1035981 /* register on bus and save bus name and object path */
1036982 if (!tp_base_connection_register (conn, cls->cm_dbus_name,
10591005
10601006 g_free (bus_name);
10611007 g_free (object_path);
1062 goto OUT;
1008 return;
10631009
10641010 ERROR:
10651011 dbus_g_method_return_error (context, error);
10661012 g_error_free (error);
1067
1068 OUT:
1069 if (params_present)
1070 tp_intset_destroy (params_present);
1071 if (params)
1072 protospec->params_free (params);
10731013 }
10741014
10751015 /**
10901030 GError *error = NULL;
10911031 TpBaseConnectionManagerClass *cls;
10921032 GString *string = NULL;
1033 guint i;
1034 GHashTableIter iter;
1035 gpointer name, protocol;
10931036
10941037 g_assert (TP_IS_BASE_CONNECTION_MANAGER (self));
10951038 cls = TP_BASE_CONNECTION_MANAGER_GET_CLASS (self);
10961039
10971040 if (!tp_base_connection_manager_ensure_dbus (self, &error))
10981041 goto except;
1042
1043 if (cls->protocol_params != NULL)
1044 {
1045 for (i = 0; cls->protocol_params[i].name != NULL; i++)
1046 {
1047 tp_base_connection_manager_add_protocol (self,
1048 _tp_legacy_protocol_new (self, cls->protocol_params + i));
1049 }
1050 }
10991051
11001052 g_assert (self->priv->dbus_daemon != NULL);
11011053
11091061 g_string_assign (string, TP_CM_OBJECT_PATH_BASE);
11101062 g_string_append (string, cls->cm_dbus_name);
11111063 tp_dbus_daemon_register_object (self->priv->dbus_daemon, string->str, self);
1064
1065 g_hash_table_iter_init (&iter, self->priv->protocols);
1066
1067 while (g_hash_table_iter_next (&iter, &name, &protocol))
1068 {
1069 TpBaseProtocolClass *protocol_class =
1070 TP_BASE_PROTOCOL_GET_CLASS (protocol);
1071
1072 if (!tp_connection_manager_check_valid_protocol_name (name, &error))
1073 {
1074 g_critical ("%s", error->message);
1075 goto except;
1076 }
1077
1078 /* don't export uninformative "stub" protocol objects on D-Bus */
1079 if (protocol_class->is_stub)
1080 continue;
1081
1082 g_string_assign (string, TP_CM_OBJECT_PATH_BASE);
1083 g_string_append (string, cls->cm_dbus_name);
1084 g_string_append_c (string, '/');
1085 g_string_append (string, name);
1086
1087 g_strdelimit (string->str, "-", '_');
1088
1089 tp_dbus_daemon_register_object (self->priv->dbus_daemon, string->str,
1090 protocol);
1091 }
11121092
11131093 g_string_free (string, TRUE);
11141094
11401120 }
11411121
11421122 /**
1143 * tp_cm_param_filter_uint_nonzero:
1144 * @paramspec: The parameter specification for a guint parameter
1145 * @value: A GValue containing a guint, which will not be altered
1146 * @error: Used to return an error if the guint is 0
1147 *
1148 * A #TpCMParamFilter which rejects zero, useful for server port numbers.
1149 *
1150 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
1151 */
1152 gboolean
1153 tp_cm_param_filter_uint_nonzero (const TpCMParamSpec *paramspec,
1154 GValue *value,
1155 GError **error)
1156 {
1157 if (g_value_get_uint (value) == 0)
1158 {
1159 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1160 "Account parameter '%s' may not be set to zero",
1161 paramspec->name);
1162 return FALSE;
1163 }
1164 return TRUE;
1165 }
1166
1167 /**
1168 * tp_cm_param_filter_string_nonempty:
1169 * @paramspec: The parameter specification for a string parameter
1170 * @value: A GValue containing a string, which will not be altered
1171 * @error: Used to return an error if the string is empty
1172 *
1173 * A #TpCMParamFilter which rejects empty strings.
1174 *
1175 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
1176 */
1177 gboolean
1178 tp_cm_param_filter_string_nonempty (const TpCMParamSpec *paramspec,
1179 GValue *value,
1180 GError **error)
1181 {
1182 const gchar *str = g_value_get_string (value);
1183
1184 if (tp_str_empty (str))
1185 {
1186 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1187 "Account parameter '%s' may not be set to an empty string",
1188 paramspec->name);
1189 return FALSE;
1190 }
1191 return TRUE;
1192 }
1193
1194 /**
11951123 * tp_base_connection_manager_get_dbus_daemon:
11961124 * @self: the connection manager
11971125 *
12101138
12111139 return self->priv->dbus_daemon;
12121140 }
1141
1142 /**
1143 * tp_base_connection_manager_add_protocol:
1144 * @self: a connection manager object which has not yet registered on D-Bus
1145 * (i.e. tp_base_connection_manager_register() must not have been called)
1146 * @protocol: a protocol object, which must not have the same protocol name as
1147 * any that has already been added
1148 *
1149 * Add a protocol object to the set of supported protocols.
1150 */
1151 void
1152 tp_base_connection_manager_add_protocol (TpBaseConnectionManager *self,
1153 TpBaseProtocol *protocol)
1154 {
1155 g_return_if_fail (TP_IS_BASE_CONNECTION_MANAGER (self));
1156 g_return_if_fail (!self->priv->registered);
1157 g_return_if_fail (TP_IS_BASE_PROTOCOL (protocol));
1158
1159 g_hash_table_insert (self->priv->protocols,
1160 g_strdup (tp_base_protocol_get_name (protocol)),
1161 g_object_ref (protocol));
1162 }
2525 #include <glib-object.h>
2626
2727 #include <telepathy-glib/base-connection.h>
28 #include <telepathy-glib/base-protocol.h>
2829 #include <telepathy-glib/defs.h>
2930 #include <telepathy-glib/proxy.h>
3031 #include <telepathy-glib/svc-connection-manager.h>
3132
3233 G_BEGIN_DECLS
33
34 typedef struct _TpCMParamSpec TpCMParamSpec;
35
36 typedef gboolean (*TpCMParamFilter) (const TpCMParamSpec *paramspec,
37 GValue *value, GError **error);
38
39 gboolean tp_cm_param_filter_string_nonempty (const TpCMParamSpec *paramspec,
40 GValue *value, GError **error);
41
42 gboolean tp_cm_param_filter_uint_nonzero (const TpCMParamSpec *paramspec,
43 GValue *value, GError **error);
44
45 /* XXX: This should be driven by GTypes, but the GType is insufficiently
46 * descriptive: if it's UINT we can't tell whether the D-Bus type is
47 * UInt32, UInt16 or possibly even Byte. So we have the D-Bus type too.
48 *
49 * As it stands at the moment it could be driven by the *D-Bus* type, but
50 * in future we may want to have more than one possible GType for a D-Bus
51 * type, e.g. converting arrays of string into either a strv or a GPtrArray.
52 * So, we keep the redundancy for future expansion.
53 */
54
55 struct _TpCMParamSpec {
56 const gchar *name;
57 const gchar *dtype;
58 GType gtype;
59 guint flags;
60 gconstpointer def;
61 gsize offset;
62
63 TpCMParamFilter filter;
64 gconstpointer filter_data;
65
66 gconstpointer setter_data;
67
68 /*<private>*/
69 gpointer _future1;
70 };
71
72 typedef void (*TpCMParamSetter) (const TpCMParamSpec *paramspec,
73 const GValue *value, gpointer params);
7434
7535 void tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
7636 const GValue *value, gpointer params);
10565 const TpCMProtocolSpec *protocol_params;
10666 TpBaseConnectionManagerNewConnFunc new_connection;
10767
68 const gchar * const *interfaces;
69
10870 /*<private>*/
109 gpointer _future1;
11071 gpointer _future2;
11172 gpointer _future3;
11273 gpointer _future4;
12586
12687 gboolean tp_base_connection_manager_register (TpBaseConnectionManager *self);
12788
89
12890 TpDBusDaemon *tp_base_connection_manager_get_dbus_daemon (
12991 TpBaseConnectionManager *self);
92
93 void tp_base_connection_manager_add_protocol (TpBaseConnectionManager *self,
94 TpBaseProtocol *protocol);
13095
13196 /* TYPE MACROS */
13297 #define TP_TYPE_BASE_CONNECTION_MANAGER \
7575 */
7676
7777 /**
78 * TpBaseConnectionCreateHandleReposImpl:
78 * TpBaseConnectionCreateHandleReposImpl: (skip)
7979 * @self: The connection object
8080 * @repos: An array of pointers to be filled in; the implementation
8181 * may assume all are initially NULL.
170170 */
171171
172172 /**
173 * TP_INTERNAL_CONNECTION_STATUS_NEW:
173 * TP_INTERNAL_CONNECTION_STATUS_NEW: (skip)
174174 *
175175 * A special value for #TpConnectionStatus, used within GLib connection
176176 * managers to indicate that the connection is disconnected because
209209 */
210210
211211 /**
212 * TpChannelManagerIter:
212 * TpChannelManagerIter: (skip)
213213 *
214214 * An iterator over the #TpChannelManager objects known to a #TpBaseConnection.
215215 * It has no public fields.
221221 */
222222
223223 /**
224 * TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED:
224 * TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED: (skip)
225225 * @conn: A TpBaseConnection
226226 * @context: A DBusGMethodInvocation
227227 *
14281428 object_class->set_property = tp_base_connection_set_property;
14291429
14301430 /**
1431 * TpBaseConnection:protocol:
1431 * TpBaseConnection:protocol: (skip)
14321432 *
14331433 * Identifier used in the Telepathy protocol when this connection's protocol
14341434 * name is required.
14421442 g_object_class_install_property (object_class, PROP_PROTOCOL, param_spec);
14431443
14441444 /**
1445 * TpBaseConnection:self-handle:
1445 * TpBaseConnection:self-handle: (skip)
14461446 *
14471447 * The handle of type %TP_HANDLE_TYPE_CONTACT representing the local user.
14481448 * Must be set nonzero by the subclass before moving to state CONNECTED.
14581458 g_object_class_install_property (object_class, PROP_SELF_HANDLE, param_spec);
14591459
14601460 /**
1461 * TpBaseConnection:interfaces:
1461 * TpBaseConnection:interfaces: (skip)
14621462 *
14631463 * The set of D-Bus interfaces available on this Connection, other than
14641464 * Connection itself.
14741474 g_object_class_install_property (object_class, PROP_INTERFACES, param_spec);
14751475
14761476 /**
1477 * TpBaseConnection:dbus-status:
1477 * TpBaseConnection:dbus-status: (skip)
14781478 *
14791479 * The Connection.Status as visible on D-Bus, which is the same as
14801480 * #TpBaseConnection.status except that %TP_INTERNAL_CONNECTION_STATUS_NEW
14931493 g_object_class_install_property (object_class, PROP_DBUS_STATUS, param_spec);
14941494
14951495 /**
1496 * TpBaseConnection:dbus-daemon:
1496 * TpBaseConnection:dbus-daemon: (skip)
14971497 *
14981498 * #TpDBusDaemon object encapsulating this object's connection to D-Bus.
14991499 * Read-only except during construction.
15131513 /* signal definitions */
15141514
15151515 /**
1516 * TpBaseConnection::shutdown-finished:
1516 * TpBaseConnection::shutdown-finished: (skip)
15171517 *
15181518 * Emitted by tp_base_connection_finish_shutdown() when the underlying
15191519 * network connection has been closed; #TpBaseConnectionManager listens
15801580 * tp_base_connection_register:
15811581 * @self: A connection
15821582 * @cm_name: The name of the connection manager in the Telepathy protocol
1583 * @bus_name: Used to return the bus name corresponding to the connection
1584 * if %TRUE is returned; must not be %NULL. To be freed by the caller.
1585 * @object_path: Used to return the object path of the connection if
1586 * %TRUE is returned; must not be %NULL. To be freed by the caller.
1583 * @bus_name: (out): Used to return the bus name corresponding to the connection
1584 * if %TRUE is returned. To be freed by the caller.
1585 * @object_path: (out): Used to return the object path of the connection if
1586 * %TRUE is returned. To be freed by the caller.
15871587 * @error: Used to return an error if %FALSE is returned; may be %NULL
15881588 *
15891589 * Make the connection object appear on the bus, returning the bus
15901590 * name and object path used. If %TRUE is returned, the connection owns the
15911591 * bus name, and will release it when destroyed.
1592 *
1593 * Since 0.11.11, @bus_name and @object_path may be %NULL if the
1594 * strings are not needed.
15921595 *
15931596 * Returns: %TRUE on success, %FALSE on error.
15941597 */
16091612
16101613 g_return_val_if_fail (TP_IS_BASE_CONNECTION (self), FALSE);
16111614 g_return_val_if_fail (cm_name != NULL, FALSE);
1612 g_return_val_if_fail (bus_name != NULL, FALSE);
1613 g_return_val_if_fail (object_path != NULL, FALSE);
16141615
16151616 if (tp_connection_manager_check_valid_protocol_name (priv->protocol, NULL))
16161617 {
16901691
16911692 tp_dbus_daemon_register_object (priv->bus_proxy, self->object_path, self);
16921693
1693 *bus_name = g_strdup (self->bus_name);
1694 *object_path = g_strdup (self->object_path);
1694 if (bus_name != NULL)
1695 *bus_name = g_strdup (self->bus_name);
1696
1697 if (object_path != NULL)
1698 *object_path = g_strdup (self->object_path);
16951699
16961700 return TRUE;
16971701 }
17681772 return TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED;
17691773 }
17701774
1771 /**
1772 * tp_base_connection_connect:
1773 *
1774 * @context: Used to return the result onto D-Bus.
1775 *
1776 * Implements D-Bus method Connect
1777 * on interface org.freedesktop.Telepathy.Connection
1778 */
17791775 static void
17801776 tp_base_connection_connect (TpSvcConnection *iface,
17811777 DBusGMethodInvocation *context)
18131809 tp_svc_connection_return_from_connect (context);
18141810 }
18151811
1816
1817 /**
1818 * tp_base_connection_disconnect
1819 *
1820 * Implements D-Bus method Disconnect
1821 * on interface org.freedesktop.Telepathy.Connection
1822 *
1823 * @error: Used to return a pointer to a GError detailing any error
1824 * that occurred, D-Bus will throw the error only if this
1825 * function returns FALSE.
1826 *
1827 * Returns: TRUE if successful, FALSE if an error was thrown.
1828 */
18291812 static void
18301813 tp_base_connection_disconnect (TpSvcConnection *iface,
18311814 DBusGMethodInvocation *context)
18771860 }
18781861 }
18791862
1880 /**
1881 * tp_base_connection_get_interfaces
1882 *
1883 * Implements D-Bus method GetInterfaces
1884 * on interface org.freedesktop.Telepathy.Connection
1885 */
18861863 static void
18871864 tp_base_connection_dbus_get_interfaces (TpSvcConnection *iface,
18881865 DBusGMethodInvocation *context)
18921869 (TpBaseConnection *) iface));
18931870 }
18941871
1895 /**
1896 * tp_base_connection_get_protocol
1897 *
1898 * Implements D-Bus method GetProtocol
1899 * on interface org.freedesktop.Telepathy.Connection
1900 *
1901 * @error: Used to return a pointer to a GError detailing any error
1902 * that occurred, D-Bus will throw the error only if this
1903 * function returns FALSE.
1904 *
1905 * Returns: TRUE if successful, FALSE if an error was thrown.
1906 */
19071872 static void
19081873 tp_base_connection_get_protocol (TpSvcConnection *iface,
19091874 DBusGMethodInvocation *context)
19201885 tp_svc_connection_return_from_get_protocol (context, priv->protocol);
19211886 }
19221887
1923 /**
1924 * tp_base_connection_dbus_get_self_handle
1925 *
1926 * Implements D-Bus method GetSelfHandle
1927 * on interface org.freedesktop.Telepathy.Connection
1928 */
19291888 static void
19301889 tp_base_connection_dbus_get_self_handle (TpSvcConnection *iface,
19311890 DBusGMethodInvocation *context)
19561915 }
19571916 }
19581917
1959 /*
1960 * tp_base_connection_dbus_get_status
1961 *
1962 * Implements D-Bus method GetStatus
1963 * on interface org.freedesktop.Telepathy.Connection
1964 */
19651918 static void
19661919 tp_base_connection_dbus_get_status (TpSvcConnection *iface,
19671920 DBusGMethodInvocation *context)
19761929 #define DEBUG_FLAG TP_DEBUG_HANDLES
19771930 #include "telepathy-glib/debug-internal.h"
19781931
1979 /**
1980 * tp_base_connection_hold_handles
1981 *
1982 * Implements D-Bus method HoldHandles
1983 * on interface org.freedesktop.Telepathy.Connection
1984 *
1985 * @context: The D-Bus invocation context to use to return values
1986 * or throw an error.
1987 */
19881932 static void
19891933 tp_base_connection_hold_handles (TpSvcConnection *iface,
19901934 guint handle_type,
20281972 tp_svc_connection_return_from_hold_handles (context);
20291973 }
20301974
2031 /**
2032 * tp_base_connection_inspect_handles
2033 *
2034 * Implements D-Bus method InspectHandles
2035 * on interface org.freedesktop.Telepathy.Connection
2036 *
2037 * Returns: TRUE if successful, FALSE if an error was thrown.
2038 */
20391975 static void
20401976 tp_base_connection_inspect_handles (TpSvcConnection *iface,
20411977 guint handle_type,
20872023 #define DEBUG_FLAG TP_DEBUG_CONNECTION
20882024 #include "telepathy-glib/debug-internal.h"
20892025
2090 /**
2026 /*
20912027 * list_channel_factory_foreach_one:
20922028 * @chan: a channel
20932029 * @data: a GPtrArray in which channel information should be stored
21342070 }
21352071
21362072
2137 /**
2073 /*
21382074 * list_channel_manager_foreach_one:
21392075 * @chan: a channel
21402076 * @data: a GPtrArray in which channel information should be stored
22332169 g_ptr_array_free (values, TRUE);
22342170 }
22352171
2236
2237 /**
2238 * tp_base_connection_request_channel
2239 *
2240 * Implements D-Bus method RequestChannel
2241 * on interface org.freedesktop.Telepathy.Connection
2242 *
2243 * @context: The D-Bus invocation context to use to return values
2244 * or throw an error.
2245 */
22462172 static void
22472173 tp_base_connection_request_channel (TpSvcConnection *iface,
22482174 const gchar *type,
24282354 #define DEBUG_FLAG TP_DEBUG_HANDLES
24292355 #include "telepathy-glib/debug-internal.h"
24302356
2431 /**
2432 * tp_base_connection_release_handles
2433 *
2434 * Implements D-Bus method ReleaseHandles
2435 * on interface org.freedesktop.Telepathy.Connection
2436 *
2437 * @context: The D-Bus invocation context to use to return values
2438 * or throw an error.
2439 */
24402357 static void
24412358 tp_base_connection_release_handles (TpSvcConnection *iface,
24422359 guint handle_type,
24792396
24802397
24812398 /**
2482 * tp_base_connection_dbus_request_handles:
2399 * tp_base_connection_dbus_request_handles: (skip)
24832400 * @iface: A pointer to #TpBaseConnection, cast to a pointer to
24842401 * #TpSvcConnection
24852402 * @handle_type: The handle type (#TpHandleType) as a guint
25882505 *
25892506 * <!---->
25902507 *
2591 * Returns: the handle repository corresponding to the given handle type,
2592 * or #NULL if it's unsupported or invalid.
2508 * Returns: (transfer none): the handle repository corresponding to the given
2509 * handle type, or #NULL if it's unsupported or invalid.
25932510 */
25942511 TpHandleRepoIface *
25952512 tp_base_connection_get_handles (TpBaseConnection *self,
26052522
26062523
26072524 /**
2608 * tp_base_connection_get_self_handle:
2525 * tp_base_connection_get_self_handle: (skip)
26092526 * @self: A connection
26102527 *
26112528 * Returns the #TpBaseConnection:self-handle property, which is guaranteed not
26422559
26432560
26442561 /**
2645 * tp_base_connection_finish_shutdown:
2562 * tp_base_connection_finish_shutdown: (skip)
26462563 * @self: The connection
26472564 *
26482565 * Tell the connection manager that this Connection has been disconnected,
26722589 }
26732590
26742591 /**
2675 * tp_base_connection_disconnect_with_dbus_error:
2592 * tp_base_connection_disconnect_with_dbus_error: (skip)
26762593 * @self: The connection
26772594 * @error_name: The D-Bus error with which the connection changed status to
26782595 * Disconnected
28892806
28902807
28912808 /**
2892 * tp_base_connection_add_interfaces:
2809 * tp_base_connection_add_interfaces: (skip)
28932810 * @self: A TpBaseConnection in state #TP_INTERNAL_CONNECTION_STATUS_NEW
28942811 * or #TP_CONNECTION_STATUS_CONNECTING
28952812 * @interfaces: A %NULL-terminated array of D-Bus interface names, which
33173234
33183235
33193236 /**
3320 * tp_base_connection_channel_manager_iter_init:
3237 * tp_base_connection_channel_manager_iter_init: (skip)
33213238 * @iter: an uninitialized #TpChannelManagerIter
33223239 * @self: a connection
33233240 *
33493266
33503267
33513268 /**
3352 * tp_base_connection_channel_manager_iter_next:
3269 * tp_base_connection_channel_manager_iter_next: (skip)
33533270 * @iter: an initialized #TpChannelManagerIter
33543271 * @manager_out: a location to store the channel manager, or %NULL.
33553272 *
34113328 }
34123329
34133330 /**
3414 * tp_base_connection_register_with_contacts_mixin:
3331 * tp_base_connection_register_with_contacts_mixin: (skip)
34153332 * @self: An instance of the #TpBaseConnections that uses the Contacts
34163333 * mixin
34173334 *
34303347 }
34313348
34323349 /**
3433 * tp_base_connection_get_dbus_daemon:
3350 * tp_base_connection_get_dbus_daemon: (skip)
34343351 * @self: the connection manager
34353352 *
34363353 * <!-- -->
5858 struct _TpBaseConnectionClass {
5959 GObjectClass parent_class;
6060
61 #ifdef __GI_SCANNER__
62 /*<private>*/
63 GCallback _internal_create_handle_repos;
64 /*<public>*/
65 #else
6166 TpBaseConnectionCreateHandleReposImpl create_handle_repos;
67 #endif
6268
6369 TpBaseConnectionCreateChannelFactoriesImpl create_channel_factories;
6470
0 /* TpBaseProtocol (not public API)
1 *
2 * Copyright © 2007-2010 Collabora Ltd.
3 * Copyright © 2007-2009 Nokia Corporation
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #ifndef TP_BASE_PROTOCOL_INTERNAL_H
21 #define TP_BASE_PROTOCOL_INTERNAL_H
22
23 #include <telepathy-glib/base-protocol.h>
24
25 G_BEGIN_DECLS
26
27 GValueArray *_tp_cm_param_spec_to_dbus (const TpCMParamSpec *paramspec);
28
29 G_END_DECLS
30
31 #endif
0 /* TpBaseProtocol
1 *
2 * Copyright © 2007-2010 Collabora Ltd.
3 * Copyright © 2007-2009 Nokia Corporation
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include <telepathy-glib/base-protocol.h>
21 #include <telepathy-glib/base-protocol-internal.h>
22
23 #include <dbus/dbus-protocol.h>
24 #include <telepathy-glib/channel-manager.h>
25 #include <telepathy-glib/svc-protocol.h>
26 #include <telepathy-glib/telepathy-glib.h>
27
28 #define DEBUG_FLAG TP_DEBUG_PARAMS
29 #include "telepathy-glib/debug-internal.h"
30
31 /**
32 * TpCMParamSpec:
33 * @name: Name as passed over D-Bus
34 * @dtype: D-Bus type signature. We currently support 16- and 32-bit integers
35 * (@gtype is INT), 16- and 32-bit unsigned integers (gtype is UINT),
36 * strings (gtype is STRING) and booleans (gtype is BOOLEAN).
37 * @gtype: GLib type, derived from @dtype as above
38 * @flags: Some combination of TP_CONN_MGR_PARAM_FLAG_foo
39 * @def: Default value, as a (const gchar *) for string parameters, or
40 using #GINT_TO_POINTER or #GUINT_TO_POINTER for integer parameters
41 * @offset: Offset of the parameter in the opaque data structure, if
42 * appropriate. The member at that offset is expected to be a gint,
43 * guint, (gchar *) or gboolean, depending on @gtype. The default
44 * parameter setter, #tp_cm_param_setter_offset, uses this field.
45 * @filter: A callback which is used to validate or normalize the user-provided
46 * value before it is written into the opaque data structure
47 * @filter_data: Arbitrary opaque data intended for use by the filter function
48 * @setter_data: Arbitrary opaque data intended for use by the setter function
49 * instead of or in addition to @offset.
50 *
51 * Structure representing a connection manager parameter, as accepted by
52 * RequestConnection.
53 *
54 * In addition to the fields documented here, there is one gpointer field
55 * which must currently be %NULL. A meaning may be defined for it in a
56 * future version of telepathy-glib.
57 */
58
59 /**
60 * TpCMParamFilter:
61 * @paramspec: The parameter specification. The filter is likely to use
62 * name (for the error message if the value is invalid) and filter_data.
63 * @value: The value for that parameter provided by the user.
64 * May be changed to contain a different value of the same type, if
65 * some sort of normalization is required
66 * @error: Used to raise %TP_ERROR_INVALID_ARGUMENT if the given value is
67 * rejected
68 *
69 * Signature of a callback used to validate and/or normalize user-provided
70 * CM parameter values.
71 *
72 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
73 */
74
75 /**
76 * TpCMParamSetter:
77 * @paramspec: The parameter specification. The setter is likely to use
78 * some combination of the name, offset and setter_data fields.
79 * @value: The value for that parameter provided by the user.
80 * @params: An opaque data structure, created by
81 * #TpCMProtocolSpec.params_new.
82 *
83 * The signature of a callback used to set a parameter within the opaque
84 * data structure used for a protocol.
85 *
86 * Since: 0.7.0
87 */
88
89 static GValue *
90 param_default_value (const TpCMParamSpec *param)
91 {
92 GValue *value;
93
94 value = tp_g_value_slice_new (param->gtype);
95
96 /* If HAS_DEFAULT is false, we don't really care what the value is, so we'll
97 * just use whatever's in the user-supplied param spec. As long as we're
98 * careful to accept NULL, that should be fine. */
99
100 switch (param->dtype[0])
101 {
102 case DBUS_TYPE_STRING:
103 g_assert (param->gtype == G_TYPE_STRING);
104 if (param->def == NULL)
105 g_value_set_static_string (value, "");
106 else
107 g_value_set_static_string (value, param->def);
108 break;
109
110 case DBUS_TYPE_INT16:
111 case DBUS_TYPE_INT32:
112 g_assert (param->gtype == G_TYPE_INT);
113 g_value_set_int (value, GPOINTER_TO_INT (param->def));
114 break;
115
116 case DBUS_TYPE_UINT16:
117 case DBUS_TYPE_UINT32:
118 g_assert (param->gtype == G_TYPE_UINT);
119 g_value_set_uint (value, GPOINTER_TO_UINT (param->def));
120 break;
121
122 case DBUS_TYPE_UINT64:
123 g_assert (param->gtype == G_TYPE_UINT64);
124 g_value_set_uint64 (value, param->def == NULL ? 0
125 : *(const guint64 *) param->def);
126 break;
127
128 case DBUS_TYPE_INT64:
129 g_assert (param->gtype == G_TYPE_INT64);
130 g_value_set_int64 (value, param->def == NULL ? 0
131 : *(const gint64 *) param->def);
132 break;
133
134 case DBUS_TYPE_DOUBLE:
135 g_assert (param->gtype == G_TYPE_DOUBLE);
136 g_value_set_double (value, param->def == NULL ? 0.0
137 : *(const double *) param->def);
138 break;
139
140 case DBUS_TYPE_OBJECT_PATH:
141 g_assert (param->gtype == DBUS_TYPE_G_OBJECT_PATH);
142 g_value_set_static_boxed (value, param->def == NULL ? "/"
143 : param->def);
144 break;
145
146 case DBUS_TYPE_ARRAY:
147 switch (param->dtype[1])
148 {
149 case DBUS_TYPE_STRING:
150 g_assert (param->gtype == G_TYPE_STRV);
151 g_value_set_static_boxed (value, param->def);
152 break;
153
154 case DBUS_TYPE_BYTE:
155 g_assert (param->gtype == DBUS_TYPE_G_UCHAR_ARRAY);
156 if (param->def == NULL)
157 {
158 GArray *array = g_array_new (FALSE, FALSE, sizeof (guint8));
159 g_value_take_boxed (value, array);
160 }
161 else
162 {
163 g_value_set_static_boxed (value, param->def);
164 }
165 break;
166
167 default:
168 ERROR ("encountered unknown type %s on argument %s",
169 param->dtype, param->name);
170 }
171 break;
172
173 case DBUS_TYPE_BOOLEAN:
174 g_assert (param->gtype == G_TYPE_BOOLEAN);
175 g_value_set_boolean (value, GPOINTER_TO_INT (param->def));
176 break;
177
178 default:
179 ERROR ("encountered unknown type %s on argument %s",
180 param->dtype, param->name);
181 }
182
183 return value;
184 }
185
186 GValueArray *
187 _tp_cm_param_spec_to_dbus (const TpCMParamSpec *paramspec)
188 {
189 GValueArray *susv;
190 GValue *value = param_default_value (paramspec);
191
192 susv = tp_value_array_build (4,
193 G_TYPE_STRING, paramspec->name,
194 G_TYPE_UINT, paramspec->flags,
195 G_TYPE_STRING, paramspec->dtype,
196 G_TYPE_VALUE, value,
197 G_TYPE_INVALID);
198
199 tp_g_value_slice_free (value);
200
201 return susv;
202 }
203
204 /**
205 * tp_cm_param_filter_uint_nonzero:
206 * @paramspec: The parameter specification for a guint parameter
207 * @value: A GValue containing a guint, which will not be altered
208 * @error: Used to return an error if the guint is 0
209 *
210 * A #TpCMParamFilter which rejects zero, useful for server port numbers.
211 *
212 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
213 */
214 gboolean
215 tp_cm_param_filter_uint_nonzero (const TpCMParamSpec *paramspec,
216 GValue *value,
217 GError **error)
218 {
219 if (g_value_get_uint (value) == 0)
220 {
221 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
222 "Account parameter '%s' may not be set to zero",
223 paramspec->name);
224 return FALSE;
225 }
226 return TRUE;
227 }
228
229 /**
230 * tp_cm_param_filter_string_nonempty:
231 * @paramspec: The parameter specification for a string parameter
232 * @value: A GValue containing a string, which will not be altered
233 * @error: Used to return an error if the string is empty
234 *
235 * A #TpCMParamFilter which rejects empty strings.
236 *
237 * Returns: %TRUE to accept, %FALSE (with @error set) to reject
238 */
239 gboolean
240 tp_cm_param_filter_string_nonempty (const TpCMParamSpec *paramspec,
241 GValue *value,
242 GError **error)
243 {
244 const gchar *str = g_value_get_string (value);
245
246 if (str == NULL || str[0] == '\0')
247 {
248 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
249 "Account parameter '%s' may not be set to an empty string",
250 paramspec->name);
251 return FALSE;
252 }
253 return TRUE;
254 }
255
256 /**
257 * SECTION:base-protocol
258 * @title: TpBaseProtocol
259 * @short_description: base class for #TpSvcProtocol implementations
260 * @see_also: #TpBaseConnectionManager, #TpSvcProtocol
261 *
262 * Base class for Telepathy Protocol objects.
263 *
264 * Since: 0.11.11
265 */
266
267 /**
268 * TpBaseProtocol:
269 *
270 * An object providing static details of the implementation of one real-time
271 * communications protocol.
272 *
273 * Since: 0.11.11
274 */
275
276 /**
277 * TpBaseProtocolGetParametersFunc:
278 * @self: a protocol
279 *
280 * Signature of a virtual method to get the allowed parameters for connections
281 * to a protocol.
282 *
283 * Returns the parameters supported by this protocol, as an array of structs
284 * which must remain valid at least as long as @self exists (it will typically
285 * be a global static array).
286 *
287 * Returns: (transfer none) (array zero-terminated=1): a description of the
288 * parameters supported by this protocol
289 *
290 * Since: 0.11.11
291 */
292
293 /**
294 * TpBaseProtocolNewConnectionFunc:
295 * @self: a protocol
296 * @asv: (transfer none) (element-type utf8 GObject.Value): the parameters
297 * provided via D-Bus
298 * @error: used to return an error if %NULL is returned
299 *
300 * Signature of a virtual method to create a new connection to this protocol.
301 * This is used to implement the RequestConnection D-Bus method.
302 *
303 * Implementations of #TpBaseProtocolClass.new_connection may assume that
304 * the parameters in @asv conform to the specifications given by
305 * #TpBaseProtocolClass.get_parameters.
306 *
307 * Returns: (transfer full): a new connection, or %NULL on error
308 *
309 * Since: 0.11.11
310 */
311
312 /**
313 * TpBaseProtocolNormalizeContactFunc:
314 * @self: a protocol
315 * @contact: a contact's identifier
316 * @error: used to return an error if %NULL is returned
317 *
318 * Signature of a virtual method to perform best-effort offline normalization
319 * of a contact's identifier. It must either return a newly allocated string
320 * that is the normalized form of @contact, or raise an error and return %NULL.
321 *
322 * Returns: (transfer full): a normalized identifier, or %NULL on error
323 *
324 * Since: 0.11.11
325 */
326
327 /**
328 * TpBaseProtocolIdentifyAccountFunc:
329 * @self: a protocol
330 * @asv: parameters that might be passed to the RequestConnection D-Bus method
331 * @error: used to return an error if %NULL is returned
332 *
333 * Signature of a virtual method to choose a unique name for an account whose
334 * connection parameters are @asv. This will typically return a copy of
335 * the 'account' parameter from @asv, but may do something more complex (for
336 * instance, on IRC it could combine the nickname and the IRC network).
337 *
338 * Implementations of #TpBaseProtocolClass.identify_account may assume that
339 * the parameters in @asv conform to the specifications given by
340 * #TpBaseProtocolClass.get_parameters.
341 *
342 * Returns: (transfer full): a unique name for the account, or %NULL on error
343 *
344 * Since: 0.11.11
345 */
346
347 /**
348 * TpBaseProtocolGetInterfacesFunc:
349 * @self: a protocol
350 *
351 * Signature of a virtual method to get the D-Bus interfaces implemented by
352 * @self, in addition to the Protocol interface.
353 *
354 * Returns: (transfer full): a %NULL-terminated array of D-Bus interface names
355 *
356 * Since: 0.11.11
357 */
358
359 /**
360 * TpBaseProtocolGetConnectionDetailsFunc:
361 * @self: a protocol
362 * @connection_interfaces: (out) (transfer full): used to return a
363 * %NULL-terminated array of interfaces which might be implemented on
364 * connections to this protocol
365 * @channel_manager_types: (out) (transfer full) (array zero-terminated=1):
366 * used to return a %G_TYPE_INVALID-terminated array of types that implement
367 * #TpChannelManager, which must include all channel managers that might be
368 * present on connections to this protocol; the channel managers should
369 * all implement #TpChannelManagerIface.type_foreach_channel_class. The
370 * array will be freed with g_free() by the caller.
371 * @icon_name: (out) (transfer full): used to return the name of an icon
372 * for this protocol, such as "im-icq", or an empty string
373 * @english_name: (out) (transfer full): used to return a human-readable
374 * but non-localized name for this protocol, or an empty string
375 * @vcard_field: (out) (transfer full): used to return the name of the vCard
376 * field typically used with this protocol, or an empty string
377 *
378 * Signature of a virtual method to get the D-Bus interfaces implemented by
379 * @self, in addition to the Protocol interface.
380 *
381 * Since: 0.11.11
382 */
383
384 /**
385 * TpBaseProtocolClass:
386 * @parent_class: the parent class
387 * @dbus_properties_class: a D-Bus properties mixin
388 * @is_stub: if %TRUE, this protocol will not be advertised on D-Bus (for
389 * internal use by #TpBaseConnection)
390 * @get_parameters: a callback used to implement
391 * tp_base_protocol_get_parameters(), which all subclasses must provide;
392 * see the documentation of that method for details
393 * @new_connection: a callback used to implement
394 * tp_base_protocol_new_connection(), which all subclasses must provide;
395 * see the documentation of that method for details
396 * @normalize_contact: a callback used to implement the NormalizeContact
397 * D-Bus method; it must either return a newly allocated string that is the
398 * normalized version of @contact, or raise an error via @error and
399 * return %NULL. If not implemented, %TP_ERROR_NOT_IMPLEMENTED will be raised
400 * instead.
401 * @identify_account: a callback used to implement the IdentifyAccount
402 * D-Bus method; it takes as input a map from strings to #GValue<!---->s,
403 * and must either return a newly allocated string that represents the
404 * "identity" of the parameters in @asv (usually the "account" parameter),
405 * or %NULL with an error raised via @error
406 * @get_interfaces: a callback used to implement the Interfaces D-Bus property;
407 * it must return a newly allocated #GStrv containing D-Bus interface names
408 * @get_connection_details: a callback used to implement the Protocol D-Bus
409 * properties that represent details of the connections provided by this
410 * protocol
411 *
412 * The class of a #TpBaseProtocol.
413 *
414 * Since: 0.11.11
415 */
416
417 static void protocol_iface_init (TpSvcProtocolClass *cls);
418
419 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (TpBaseProtocol, tp_base_protocol,
420 G_TYPE_OBJECT,
421 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
422 tp_dbus_properties_mixin_iface_init);
423 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_PROTOCOL, protocol_iface_init));
424
425 struct _TpBaseProtocolPrivate
426 {
427 gchar *name;
428 GStrv interfaces;
429 GStrv connection_interfaces;
430 GPtrArray *requestable_channel_classes;
431 gchar *icon;
432 gchar *english_name;
433 gchar *vcard_field;
434 };
435
436 enum
437 {
438 PROP_NAME = 1,
439 PROP_IMMUTABLE_PROPERTIES,
440 N_PROPS
441 };
442
443 static void
444 append_to_ptr_array (GType type G_GNUC_UNUSED,
445 GHashTable *table,
446 const gchar * const *allowed,
447 gpointer user_data)
448 {
449 g_ptr_array_add (user_data, tp_value_array_build (2,
450 TP_HASH_TYPE_CHANNEL_CLASS, table,
451 G_TYPE_STRV, allowed,
452 G_TYPE_INVALID));
453 }
454
455 static GPtrArray *
456 tp_base_protocol_build_requestable_channel_classes (
457 const GType *channel_managers)
458 {
459 GPtrArray *ret = g_ptr_array_new ();
460 gsize i;
461
462 if (channel_managers != NULL)
463 {
464 for (i = 0; channel_managers[i] != G_TYPE_INVALID; i++)
465 {
466 if (!g_type_is_a (channel_managers[i], TP_TYPE_CHANNEL_MANAGER))
467 {
468 g_critical ("Channel manager type %s does not actually "
469 "implement TpChannelManager",
470 g_type_name (channel_managers[i]));
471 }
472 else
473 {
474 tp_channel_manager_type_foreach_channel_class (
475 channel_managers[i], append_to_ptr_array, ret);
476 }
477 }
478 }
479
480 return ret;
481 }
482
483 static void
484 tp_base_protocol_constructed (GObject *object)
485 {
486 TpBaseProtocol *self = (TpBaseProtocol *) object;
487 TpBaseProtocolClass *cls = TP_BASE_PROTOCOL_GET_CLASS (self);
488 void (*chain_up) (GObject *) =
489 ((GObjectClass *) tp_base_protocol_parent_class)->constructed;
490
491 if (chain_up != NULL)
492 chain_up (object);
493
494 if (cls->get_interfaces != NULL)
495 {
496 self->priv->interfaces = (cls->get_interfaces) (self);
497 }
498
499 if (cls->get_connection_details != NULL)
500 {
501 GType *channel_managers = NULL;
502 gchar *vcard_field = NULL;
503
504 (cls->get_connection_details) (self,
505 &self->priv->connection_interfaces,
506 &channel_managers,
507 &self->priv->icon,
508 &self->priv->english_name,
509 &vcard_field);
510
511 self->priv->requestable_channel_classes =
512 tp_base_protocol_build_requestable_channel_classes (channel_managers);
513 g_free (channel_managers);
514
515 /* normalize the case-insensitive vCard field to lower-case, and make
516 * sure the strings are non-NULL */
517 if (self->priv->icon == NULL)
518 self->priv->icon = g_strdup ("");
519
520 if (self->priv->english_name == NULL)
521 self->priv->english_name = g_strdup ("");
522
523 if (vcard_field == NULL)
524 vcard_field = g_strdup ("");
525
526 self->priv->vcard_field = g_ascii_strdown (vcard_field, -1);
527 g_free (vcard_field);
528 }
529 else
530 {
531 self->priv->requestable_channel_classes = g_ptr_array_sized_new (0);
532 self->priv->icon = g_strdup ("");
533 self->priv->english_name = g_strdup ("");
534 self->priv->vcard_field = g_strdup ("");
535 }
536 }
537
538 /**
539 * tp_base_protocol_get_name: (skip)
540 * @self: a Protocol
541 *
542 * <!-- -->
543 *
544 * Returns: (transfer none): the value of #TpBaseProtocol:name
545 *
546 * Since: 0.11.11
547 */
548 const gchar *
549 tp_base_protocol_get_name (TpBaseProtocol *self)
550 {
551 g_return_val_if_fail (TP_IS_BASE_PROTOCOL (self), NULL);
552
553 return self->priv->name;
554 }
555
556 /**
557 * tp_base_protocol_get_immutable_properties:
558 * @self: a Protocol
559 *
560 * Return a basic set of immutable properties for this Protocol object,
561 * by using tp_dbus_properties_mixin_make_properties_hash().
562 *
563 * Additional keys and values can be inserted into the returned hash table;
564 * if this is done, the inserted keys and values will be freed when the
565 * hash table is destroyed. The keys must be allocated with g_strdup() or
566 * equivalent, and the values must be slice-allocated (for instance with
567 * tp_g_value_slice_new_string() or a similar function).
568 *
569 * Note that in particular, tp_asv_set_string() and similar functions should
570 * not be used with this hash table.
571 *
572 * Returns: a hash table mapping (gchar *) fully-qualified property names to
573 * GValues, which must be freed by the caller (at which point its
574 * contents will also be freed).
575 *
576 * Since: 0.11.11
577 */
578
579 GHashTable *
580 tp_base_protocol_get_immutable_properties (TpBaseProtocol *self)
581 {
582 TpBaseProtocolClass *cls;
583 GHashTable *table;
584
585 g_return_val_if_fail (TP_IS_BASE_PROTOCOL (self), NULL);
586
587 cls = TP_BASE_PROTOCOL_GET_CLASS (self);
588
589 table = tp_dbus_properties_mixin_make_properties_hash ((GObject *) self,
590 TP_IFACE_PROTOCOL, "Parameters",
591 NULL);
592
593 if (cls->is_stub)
594 return table;
595
596 tp_dbus_properties_mixin_fill_properties_hash ((GObject *) self, table,
597 TP_IFACE_PROTOCOL, "Interfaces",
598 TP_IFACE_PROTOCOL, "ConnectionInterfaces",
599 TP_IFACE_PROTOCOL, "RequestableChannelClasses",
600 TP_IFACE_PROTOCOL, "VCardField",
601 TP_IFACE_PROTOCOL, "EnglishName",
602 TP_IFACE_PROTOCOL, "Icon",
603 NULL);
604
605 /* FIXME: when we support avatar requirements, etc., we could use
606 * tp_dbus_properties_mixin_fill_properties_hash() for them */
607
608 return table;
609 }
610
611 static void
612 tp_base_protocol_get_property (GObject *object,
613 guint property_id,
614 GValue *value,
615 GParamSpec *pspec)
616 {
617 TpBaseProtocol *self = (TpBaseProtocol *) object;
618
619 switch (property_id)
620 {
621 case PROP_NAME:
622 g_value_set_string (value, self->priv->name);
623 break;
624
625 case PROP_IMMUTABLE_PROPERTIES:
626 g_value_take_boxed (value,
627 tp_base_protocol_get_immutable_properties (self));
628 break;
629
630 default:
631 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
632 break;
633 }
634 }
635
636 static void
637 tp_base_protocol_set_property (GObject *object,
638 guint property_id,
639 const GValue *value,
640 GParamSpec *pspec)
641 {
642 TpBaseProtocol *self = (TpBaseProtocol *) object;
643
644 switch (property_id)
645 {
646 case PROP_NAME:
647 g_assert (self->priv->name == NULL); /* construct-only */
648 self->priv->name = g_value_dup_string (value);
649 break;
650
651 default:
652 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
653 break;
654 }
655 }
656
657 static void
658 tp_base_protocol_finalize (GObject *object)
659 {
660 TpBaseProtocol *self = (TpBaseProtocol *) object;
661 GObjectFinalizeFunc finalize =
662 ((GObjectClass *) tp_base_protocol_parent_class)->finalize;
663
664 g_free (self->priv->name);
665 g_strfreev (self->priv->interfaces);
666 g_strfreev (self->priv->connection_interfaces);
667 g_free (self->priv->icon);
668 g_free (self->priv->english_name);
669 g_free (self->priv->vcard_field);
670
671 if (self->priv->requestable_channel_classes != NULL)
672 g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST,
673 self->priv->requestable_channel_classes);
674
675 if (finalize != NULL)
676 finalize (object);
677 }
678
679 typedef enum {
680 PP_PARAMETERS,
681 PP_INTERFACES,
682 PP_CONNECTION_INTERFACES,
683 PP_REQUESTABLE_CHANNEL_CLASSES,
684 PP_VCARD_FIELD,
685 PP_ENGLISH_NAME,
686 PP_ICON,
687 N_PP
688 } ProtocolProp;
689
690 static void
691 protocol_properties_getter (GObject *object,
692 GQuark iface G_GNUC_UNUSED,
693 GQuark name G_GNUC_UNUSED,
694 GValue *value,
695 gpointer getter_data)
696 {
697 TpBaseProtocol *self = (TpBaseProtocol *) object;
698
699 switch (GPOINTER_TO_INT (getter_data))
700 {
701 case PP_PARAMETERS:
702 {
703 GPtrArray *ret = g_ptr_array_new ();
704 const TpCMParamSpec *parameter;
705
706 for (parameter = tp_base_protocol_get_parameters (self);
707 parameter->name != NULL;
708 parameter++)
709 {
710 g_ptr_array_add (ret, _tp_cm_param_spec_to_dbus (parameter));
711 }
712
713 g_value_take_boxed (value, ret);
714 }
715 break;
716
717 case PP_INTERFACES:
718 g_value_set_boxed (value, self->priv->interfaces);
719 break;
720
721 case PP_CONNECTION_INTERFACES:
722 g_value_set_boxed (value, self->priv->connection_interfaces);
723 break;
724
725 case PP_REQUESTABLE_CHANNEL_CLASSES:
726 g_value_set_boxed (value, self->priv->requestable_channel_classes);
727 break;
728
729 case PP_VCARD_FIELD:
730 g_value_set_string (value, self->priv->vcard_field);
731 break;
732
733 case PP_ENGLISH_NAME:
734 g_value_set_string (value, self->priv->english_name);
735 break;
736
737 case PP_ICON:
738 g_value_set_string (value, self->priv->icon);
739 break;
740
741 default:
742 g_assert_not_reached ();
743 }
744 }
745
746 static void
747 tp_base_protocol_class_init (TpBaseProtocolClass *klass)
748 {
749 static TpDBusPropertiesMixinPropImpl channel_props[] = {
750 { "Parameters", GINT_TO_POINTER (PP_PARAMETERS), NULL },
751 { "Interfaces", GINT_TO_POINTER (PP_INTERFACES), NULL },
752 { "ConnectionInterfaces", GINT_TO_POINTER (PP_CONNECTION_INTERFACES),
753 NULL },
754 { "RequestableChannelClasses",
755 GINT_TO_POINTER (PP_REQUESTABLE_CHANNEL_CLASSES), NULL },
756 { "VCardField", GINT_TO_POINTER (PP_VCARD_FIELD), NULL },
757 { "EnglishName", GINT_TO_POINTER (PP_ENGLISH_NAME), NULL },
758 { "Icon", GINT_TO_POINTER (PP_ICON), NULL },
759 { NULL }
760 };
761 static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
762 { TP_IFACE_PROTOCOL, protocol_properties_getter, NULL, channel_props },
763 { NULL }
764 };
765 GObjectClass *object_class = G_OBJECT_CLASS (klass);
766
767 g_type_class_add_private (klass, sizeof (TpBaseProtocolPrivate));
768
769 object_class->constructed = tp_base_protocol_constructed;
770 object_class->get_property = tp_base_protocol_get_property;
771 object_class->set_property = tp_base_protocol_set_property;
772 object_class->finalize = tp_base_protocol_finalize;
773
774 g_object_class_install_property (object_class, PROP_NAME,
775 g_param_spec_string ("name",
776 "Name of this protocol",
777 "The Protocol from telepathy-spec, such as 'jabber' or 'local-xmpp'",
778 NULL,
779 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
780
781 /**
782 * TpBaseProtocol:immutable-properties:
783 *
784 * The D-Bus properties to be announced in the ConnectionManager
785 * interface's Protocols property, as a map from
786 * interface.name.propertyname to GValue.
787 *
788 * A protocol's immutable properties are constant for its lifetime on the
789 * bus, so this property should never change. All of the D-Bus
790 * properties mentioned here should also be exposed through the D-Bus
791 * properties interface.
792 *
793 * The #TpBaseProtocol base class implements this property to be correct
794 * for the basic set of properties. It can be reimplemented by
795 * subclasses to have more immutable properties; if so, the subclass
796 * should use tp_base_protocol_get_immutable_properties(),
797 * then augment the result using
798 * tp_dbus_properties_mixin_fill_properties_hash().
799 *
800 * Since: 0.11.11
801 */
802 g_object_class_install_property (object_class, PROP_IMMUTABLE_PROPERTIES,
803 g_param_spec_boxed ("immutable-properties",
804 "Immutable properties",
805 "The protocol's immutable properties",
806 TP_HASH_TYPE_QUALIFIED_PROPERTY_VALUE_MAP,
807 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
808
809 klass->dbus_properties_class.interfaces = prop_interfaces;
810 tp_dbus_properties_mixin_class_init (object_class,
811 G_STRUCT_OFFSET (TpBaseProtocolClass, dbus_properties_class));
812 }
813
814 static void
815 tp_base_protocol_init (TpBaseProtocol *self)
816 {
817 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TYPE_BASE_PROTOCOL,
818 TpBaseProtocolPrivate);
819 }
820
821 /**
822 * tp_base_protocol_get_parameters:
823 * @self: a Protocol object
824 *
825 * Returns the parameters supported by this protocol, as an array of structs
826 * which must remain valid at least as long as @self exists (it will typically
827 * be a global static array).
828 *
829 * Returns: (transfer none) (array zero-terminated=1): a description of the
830 * parameters supported by this protocol
831 *
832 * Since: 0.11.11
833 */
834 const TpCMParamSpec *
835 tp_base_protocol_get_parameters (TpBaseProtocol *self)
836 {
837 TpBaseProtocolClass *cls = TP_BASE_PROTOCOL_GET_CLASS (self);
838
839 g_return_val_if_fail (cls != NULL, NULL);
840 g_return_val_if_fail (cls->get_parameters != NULL, NULL);
841
842 return cls->get_parameters (self);
843 }
844
845 static gboolean
846 _tp_cm_param_spec_check_all_allowed (const TpCMParamSpec *parameters,
847 GHashTable *asv,
848 GError **error)
849 {
850 GHashTable *tmp = g_hash_table_new (g_str_hash, g_str_equal);
851 const TpCMParamSpec *iter;
852
853 tp_g_hash_table_update (tmp, asv, NULL, NULL);
854
855 for (iter = parameters; iter->name != NULL; iter++)
856 {
857 g_hash_table_remove (tmp, iter->name);
858 }
859
860 if (g_hash_table_size (tmp) != 0)
861 {
862 gchar *error_txt;
863 GString *error_str = g_string_new ("unknown parameters provided:");
864 GHashTableIter h_iter;
865 gpointer k;
866
867 g_hash_table_iter_init (&h_iter, tmp);
868
869 while (g_hash_table_iter_next (&h_iter, &k, NULL))
870 {
871 g_string_append_c (error_str, ' ');
872 g_string_append (error_str, k);
873 }
874
875 error_txt = g_string_free (error_str, FALSE);
876
877 DEBUG ("%s", error_txt);
878 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
879 "%s", error_txt);
880 g_free (error_txt);
881 return FALSE;
882 }
883
884 return TRUE;
885 }
886
887 static GValue *
888 _tp_cm_param_spec_coerce (const TpCMParamSpec *param_spec,
889 GHashTable *asv,
890 GError **error)
891 {
892 const gchar *name = param_spec->name;
893 const GValue *value = tp_asv_lookup (asv, name);
894
895 if (tp_asv_lookup (asv, name) == NULL)
896 {
897 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
898 "%s not found in parameters", name);
899 return NULL;
900 }
901
902 switch (param_spec->dtype[0])
903 {
904 case DBUS_TYPE_BOOLEAN:
905 case DBUS_TYPE_OBJECT_PATH:
906 case DBUS_TYPE_STRING:
907 case DBUS_TYPE_ARRAY:
908 {
909 /* These types only accept an exactly-matching GType. */
910
911 if (G_VALUE_TYPE (value) != param_spec->gtype)
912 {
913 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
914 "%s has type %s, but %s was expected",
915 name, G_VALUE_TYPE_NAME (value),
916 g_type_name (param_spec->gtype));
917 return NULL;
918 }
919
920 return tp_g_value_slice_dup (value);
921 }
922
923 case DBUS_TYPE_INT16:
924 case DBUS_TYPE_INT32:
925 {
926 /* Coerce any sensible integer to G_TYPE_INT */
927 gboolean valid;
928 gint i;
929
930 i = tp_asv_get_int32 (asv, name, &valid);
931
932 if (!valid)
933 {
934 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
935 "%s has a non-integer type or is out of range (type=%s)",
936 name, G_VALUE_TYPE_NAME (value));
937 return NULL;
938 }
939
940 if (param_spec->dtype[0] == DBUS_TYPE_INT16 &&
941 (i < -0x8000 || i > 0x7fff))
942 {
943 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
944 "%s is out of range for a 16-bit signed integer", name);
945 return NULL;
946 }
947
948 return tp_g_value_slice_new_int (i);
949 }
950
951 case DBUS_TYPE_BYTE:
952 case DBUS_TYPE_UINT16:
953 case DBUS_TYPE_UINT32:
954 {
955 /* Coerce any sensible integer to G_TYPE_UINT */
956 gboolean valid;
957 guint i;
958
959 i = tp_asv_get_uint32 (asv, name, &valid);
960
961 if (!valid)
962 {
963 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
964 "%s has a non-integer type or is out of range (type=%s)",
965 name, G_VALUE_TYPE_NAME (value));
966 return NULL;
967 }
968
969 if (param_spec->dtype[0] == DBUS_TYPE_BYTE && i > 0xff)
970 {
971 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
972 "%s is out of range for a byte", name);
973 return NULL;
974 }
975
976 if (param_spec->dtype[0] == DBUS_TYPE_UINT16 && i > 0xffff)
977 {
978 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
979 "%s is out of range for a 16-bit unsigned integer", name);
980 return NULL;
981 }
982
983 if (param_spec->dtype[0] == DBUS_TYPE_BYTE)
984 return tp_g_value_slice_new_byte (i);
985 else
986 return tp_g_value_slice_new_uint (i);
987 }
988
989 case DBUS_TYPE_INT64:
990 {
991 /* Coerce any sensible integer to G_TYPE_INT64 */
992 gboolean valid;
993 gint64 i;
994
995 i = tp_asv_get_int64 (asv, name, &valid);
996
997 if (!valid)
998 {
999 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1000 "%s is not a valid 64-bit signed integer (type=%s)", name,
1001 G_VALUE_TYPE_NAME (value));
1002 return NULL;
1003 }
1004
1005 return tp_g_value_slice_new_int64 (i);
1006 }
1007
1008 case DBUS_TYPE_UINT64:
1009 {
1010 /* Coerce any sensible integer to G_TYPE_UINT64 */
1011 gboolean valid;
1012 guint64 i;
1013
1014 i = tp_asv_get_uint64 (asv, name, &valid);
1015
1016 if (!valid)
1017 {
1018 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1019 "%s is not a valid 64-bit unsigned integer (type=%s)", name,
1020 G_VALUE_TYPE_NAME (value));
1021 return NULL;
1022 }
1023
1024 return tp_g_value_slice_new_uint64 (i);
1025 }
1026
1027 case DBUS_TYPE_DOUBLE:
1028 {
1029 /* Coerce any sensible number to G_TYPE_DOUBLE */
1030 gboolean valid;
1031 gdouble d;
1032
1033 d = tp_asv_get_double (asv, name, &valid);
1034
1035 if (!valid)
1036 {
1037 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1038 "%s is not a valid double (type=%s)", name,
1039 G_VALUE_TYPE_NAME (value));
1040 return NULL;
1041 }
1042
1043 return tp_g_value_slice_new_double (d);
1044 }
1045
1046 default:
1047 {
1048 g_error ("%s: encountered unhandled D-Bus type %s on argument %s",
1049 G_STRFUNC, param_spec->dtype, param_spec->name);
1050 }
1051 }
1052
1053 g_assert_not_reached ();
1054 }
1055
1056 static GHashTable *
1057 tp_base_protocol_sanitize_parameters (TpBaseProtocol *self,
1058 GHashTable *asv,
1059 GError **error)
1060 {
1061 GHashTable *combined;
1062 const TpCMParamSpec *parameters;
1063 guint i;
1064 guint mandatory_flag;
1065
1066 parameters = tp_base_protocol_get_parameters (self);
1067
1068 combined = g_hash_table_new_full (g_str_hash, g_str_equal,
1069 g_free, (GDestroyNotify) tp_g_value_slice_free);
1070
1071 if (!_tp_cm_param_spec_check_all_allowed (parameters, asv, error))
1072 goto except;
1073
1074 if (tp_asv_get_boolean (asv, "register", NULL))
1075 {
1076 mandatory_flag = TP_CONN_MGR_PARAM_FLAG_REGISTER;
1077 }
1078 else
1079 {
1080 mandatory_flag = TP_CONN_MGR_PARAM_FLAG_REQUIRED;
1081 }
1082
1083 for (i = 0; parameters[i].name != NULL; i++)
1084 {
1085 const gchar *name = parameters[i].name;
1086
1087 if (tp_asv_lookup (asv, name) != NULL)
1088 {
1089 /* coerce to the expected type */
1090 GValue *coerced = _tp_cm_param_spec_coerce (parameters + i, asv,
1091 error);
1092
1093 if (coerced == NULL)
1094 goto except;
1095
1096 if (G_UNLIKELY (G_VALUE_TYPE (coerced) != parameters[i].gtype))
1097 {
1098 g_error ("parameter %s should have been coerced to %s, got %s",
1099 name, g_type_name (parameters[i].gtype),
1100 G_VALUE_TYPE_NAME (coerced));
1101 }
1102
1103 if (parameters[i].filter != NULL)
1104 {
1105 if (!(parameters[i].filter (parameters + i, coerced, error)))
1106 {
1107 DEBUG ("parameter %s rejected by filter function", name);
1108 tp_g_value_slice_free (coerced);
1109 goto except;
1110 }
1111 }
1112
1113 if (G_UNLIKELY (G_VALUE_TYPE (coerced) != parameters[i].gtype))
1114 {
1115 g_error ("parameter %s filter changed its type from %s to %s",
1116 name, g_type_name (parameters[i].gtype),
1117 G_VALUE_TYPE_NAME (coerced));
1118 }
1119
1120 DEBUG ("using specified value for %s", name);
1121 g_hash_table_insert (combined, g_strdup (name), coerced);
1122 }
1123 else if ((parameters[i].flags & mandatory_flag) != 0)
1124 {
1125 DEBUG ("missing mandatory account parameter %s", name);
1126 g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1127 "missing mandatory account parameter %s",
1128 name);
1129 goto except;
1130 }
1131 else if ((parameters[i].flags & TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT) != 0)
1132 {
1133 GValue *value = param_default_value (parameters + i);
1134
1135 DEBUG ("using default value for %s", name);
1136 g_hash_table_insert (combined, g_strdup (name), value);
1137 }
1138 else
1139 {
1140 DEBUG ("no default value for %s", name);
1141 }
1142 }
1143
1144 return combined;
1145
1146 except:
1147 g_hash_table_unref (combined);
1148 return NULL;
1149 }
1150
1151 /**
1152 * tp_base_protocol_new_connection:
1153 * @self: a Protocol object
1154 * @asv: (transfer none) (element-type utf8 GObject.Value): the parameters
1155 * provided via D-Bus
1156 * @error: used to return an error if %NULL is returned
1157 *
1158 * Create a new connection using the #TpBaseProtocolClass.get_parameters and
1159 * #TpBaseProtocolClass.new_connection implementations provided by a subclass.
1160 * This is used to implement the RequestConnection() D-Bus method.
1161 *
1162 * If the parameters in @asv do not fit the result of @get_parameters (unknown
1163 * parameters are given, types are inappropriate, required parameters are
1164 * not given, or a #TpCMParamSpec.filter fails), then this method raises an
1165 * error and @new_connection is not called.
1166 *
1167 * Otherwise, @new_connection is called. Its @asv argument is a copy of the
1168 * @asv given to this method, with default values for missing parameters
1169 * filled in where available, and parameters' types converted to the #GType
1170 * specified by #TpCMParamSpec.gtype.
1171 *
1172 * Returns: a new connection, or %NULL on error
1173 *
1174 * Since: 0.11.11
1175 */
1176 TpBaseConnection *
1177 tp_base_protocol_new_connection (TpBaseProtocol *self,
1178 GHashTable *asv,
1179 GError **error)
1180 {
1181 TpBaseProtocolClass *cls = TP_BASE_PROTOCOL_GET_CLASS (self);
1182 GHashTable *combined;
1183 TpBaseConnection *conn = NULL;
1184
1185 g_return_val_if_fail (cls != NULL, NULL);
1186 g_return_val_if_fail (cls->new_connection != NULL, NULL);
1187
1188 combined = tp_base_protocol_sanitize_parameters (self, asv, error);
1189
1190 if (combined != NULL)
1191 {
1192 conn = cls->new_connection (self, combined, error);
1193 g_hash_table_unref (combined);
1194 }
1195
1196 return conn;
1197 }
1198
1199 static void
1200 protocol_normalize_contact (TpSvcProtocol *protocol,
1201 const gchar *contact,
1202 DBusGMethodInvocation *context)
1203 {
1204 TpBaseProtocol *self = TP_BASE_PROTOCOL (protocol);
1205 TpBaseProtocolClass *cls = TP_BASE_PROTOCOL_GET_CLASS (self);
1206 GError *error = NULL;
1207 gchar *ret = NULL;
1208
1209 g_return_if_fail (cls != NULL);
1210
1211 if (cls->normalize_contact != NULL)
1212 {
1213 ret = cls->normalize_contact (self, contact, &error);
1214 }
1215 else
1216 {
1217 g_set_error (&error, TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
1218 "This Protocol does not implement NormalizeContact");
1219 }
1220
1221 if (ret == NULL)
1222 {
1223 dbus_g_method_return_error (context, error);
1224 g_error_free (error);
1225 }
1226 else
1227 {
1228 tp_svc_protocol_return_from_normalize_contact (context, ret);
1229 g_free (ret);
1230 }
1231 }
1232
1233 static void
1234 protocol_identify_account (TpSvcProtocol *protocol,
1235 GHashTable *parameters,
1236 DBusGMethodInvocation *context)
1237 {
1238 TpBaseProtocol *self = TP_BASE_PROTOCOL (protocol);
1239 TpBaseProtocolClass *cls = TP_BASE_PROTOCOL_GET_CLASS (self);
1240 GError *error = NULL;
1241 gchar *ret = NULL;
1242
1243 g_return_if_fail (cls != NULL);
1244
1245 if (cls->identify_account != NULL)
1246 {
1247 GHashTable *sanitized = tp_base_protocol_sanitize_parameters (self,
1248 parameters, &error);
1249
1250 if (sanitized != NULL)
1251 {
1252 ret = cls->identify_account (self, sanitized, &error);
1253 g_hash_table_unref (sanitized);
1254 }
1255 }
1256 else
1257 {
1258 g_set_error (&error, TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
1259 "This Protocol does not implement IdentifyAccount");
1260 }
1261
1262 if (ret == NULL)
1263 {
1264 dbus_g_method_return_error (context, error);
1265 g_error_free (error);
1266 }
1267 else
1268 {
1269 tp_svc_protocol_return_from_identify_account (context, ret);
1270 g_free (ret);
1271 }
1272 }
1273
1274 static void
1275 protocol_iface_init (TpSvcProtocolClass *cls)
1276 {
1277 #define IMPLEMENT(x) tp_svc_protocol_implement_##x (cls, protocol_##x)
1278 IMPLEMENT (normalize_contact);
1279 IMPLEMENT (identify_account);
1280 #undef IMPLEMENT
1281 }
0 /* TpBaseProtocol
1 *
2 * Copyright © 2007-2010 Collabora Ltd.
3 * Copyright © 2007-2009 Nokia Corporation
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #ifndef TP_BASE_PROTOCOL_H
21 #define TP_BASE_PROTOCOL_H
22
23 #include <glib-object.h>
24
25 #include <telepathy-glib/base-connection.h>
26
27 G_BEGIN_DECLS
28
29 typedef struct _TpCMParamSpec TpCMParamSpec;
30
31 typedef void (*TpCMParamSetter) (const TpCMParamSpec *paramspec,
32 const GValue *value, gpointer params);
33
34 typedef gboolean (*TpCMParamFilter) (const TpCMParamSpec *paramspec,
35 GValue *value, GError **error);
36
37 gboolean tp_cm_param_filter_string_nonempty (const TpCMParamSpec *paramspec,
38 GValue *value, GError **error);
39
40 gboolean tp_cm_param_filter_uint_nonzero (const TpCMParamSpec *paramspec,
41 GValue *value, GError **error);
42
43 /* XXX: This should be driven by GTypes, but the GType is insufficiently
44 * descriptive: if it's UINT we can't tell whether the D-Bus type is
45 * UInt32, UInt16 or possibly even Byte. So we have the D-Bus type too.
46 *
47 * As it stands at the moment it could be driven by the *D-Bus* type, but
48 * in future we may want to have more than one possible GType for a D-Bus
49 * type, e.g. converting arrays of string into either a strv or a GPtrArray.
50 * So, we keep the redundancy for future expansion.
51 */
52
53 struct _TpCMParamSpec {
54 const gchar *name;
55 const gchar *dtype;
56 GType gtype;
57 guint flags;
58 gconstpointer def;
59 gsize offset;
60
61 TpCMParamFilter filter;
62 gconstpointer filter_data;
63
64 gconstpointer setter_data;
65
66 /*<private>*/
67 gpointer _future1;
68 };
69
70 typedef struct _TpBaseProtocol TpBaseProtocol;
71 typedef struct _TpBaseProtocolClass TpBaseProtocolClass;
72 typedef struct _TpBaseProtocolPrivate TpBaseProtocolPrivate;
73 typedef struct _TpBaseProtocolClassPrivate TpBaseProtocolClassPrivate;
74
75 GType tp_base_protocol_get_type (void) G_GNUC_CONST;
76
77 #define TP_TYPE_BASE_PROTOCOL \
78 (tp_base_protocol_get_type ())
79 #define TP_BASE_PROTOCOL(obj) \
80 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TYPE_BASE_PROTOCOL, \
81 TpBaseProtocol))
82 #define TP_BASE_PROTOCOL_CLASS(klass) \
83 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TYPE_BASE_PROTOCOL, \
84 TpBaseProtocolClass))
85 #define TP_IS_BASE_PROTOCOL(obj) \
86 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TYPE_BASE_PROTOCOL))
87 #define TP_IS_BASE_PROTOCOL_CLASS(klass) \
88 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TYPE_BASE_PROTOCOL))
89 #define TP_BASE_PROTOCOL_GET_CLASS(obj) \
90 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TYPE_BASE_PROTOCOL, \
91 TpBaseProtocolClass))
92
93 struct _TpBaseProtocol
94 {
95 /*<private>*/
96 GObject parent;
97 TpBaseProtocolPrivate *priv;
98 };
99
100 typedef const TpCMParamSpec *(*TpBaseProtocolGetParametersFunc) (
101 TpBaseProtocol *self);
102
103 typedef TpBaseConnection *(*TpBaseProtocolNewConnectionFunc) (
104 TpBaseProtocol *self,
105 GHashTable *asv,
106 GError **error);
107
108 typedef gchar *(*TpBaseProtocolNormalizeContactFunc) (TpBaseProtocol *self,
109 const gchar *contact,
110 GError **error);
111
112 typedef gchar *(*TpBaseProtocolIdentifyAccountFunc) (TpBaseProtocol *self,
113 GHashTable *asv,
114 GError **error);
115
116 typedef GStrv (*TpBaseProtocolGetInterfacesFunc) (TpBaseProtocol *self);
117
118 typedef void (*TpBaseProtocolGetConnectionDetailsFunc) (TpBaseProtocol *self,
119 GStrv *connection_interfaces,
120 GType **channel_manager_types,
121 gchar **icon_name,
122 gchar **english_name,
123 gchar **vcard_field);
124
125 struct _TpBaseProtocolClass
126 {
127 GObjectClass parent_class;
128 TpDBusPropertiesMixinClass dbus_properties_class;
129
130 gboolean is_stub;
131 const TpCMParamSpec *(*get_parameters) (TpBaseProtocol *self);
132 TpBaseConnection *(*new_connection) (TpBaseProtocol *self,
133 GHashTable *asv,
134 GError **error);
135
136 gchar *(*normalize_contact) (TpBaseProtocol *self,
137 const gchar *contact,
138 GError **error);
139 gchar *(*identify_account) (TpBaseProtocol *self,
140 GHashTable *asv,
141 GError **error);
142
143 GStrv (*get_interfaces) (TpBaseProtocol *self);
144
145 void (*get_connection_details) (TpBaseProtocol *self,
146 GStrv *connection_interfaces,
147 GType **channel_manager_types,
148 gchar **icon_name,
149 gchar **english_name,
150 gchar **vcard_field);
151
152 /*<private>*/
153 GCallback padding[8];
154 TpBaseProtocolClassPrivate *priv;
155 };
156
157 const gchar *tp_base_protocol_get_name (TpBaseProtocol *self);
158 GHashTable *tp_base_protocol_get_immutable_properties (TpBaseProtocol *self);
159
160 const TpCMParamSpec *tp_base_protocol_get_parameters (TpBaseProtocol *self);
161
162 TpBaseConnection *tp_base_protocol_new_connection (TpBaseProtocol *self,
163 GHashTable *asv, GError **error);
164
165 G_END_DECLS
166
167 #endif
7272 };
7373
7474 /**
75 * tp_capabilities_get_channel_classes: (skip)
75 * tp_capabilities_get_channel_classes:
7676 * @self: a #TpCapabilities object
7777 *
7878 * <!-- -->
8585 * Signature of an implementation of foreach_channel_class, which must call
8686 * func(manager, fixed, allowed, user_data) for each channel class understood
8787 * by @manager.
88 */
89
90 /**
91 * TpChannelManagerTypeChannelClassFunc:
92 * @type: A type whose instances implement #TpChannelManager
93 * @fixed_properties: A table mapping (const gchar *) property names to
94 * GValues, representing the values those properties must take to request
95 * channels of a particular class.
96 * @allowed_properties: A %NULL-terminated array of property names which may
97 * appear in requests for a particular channel class.
98 * @user_data: Arbitrary user-supplied data.
99 *
100 * Signature of callbacks which act on each channel class potentially supported
101 * by instances of @type.
102 */
103
104 /**
105 * TpChannelManagerTypeForeachChannelClassFunc:
106 * @type: A type whose instances implement #TpChannelManager
107 * @func: A function
108 * @user_data: Arbitrary data to be passed as the final argument of @func
109 *
110 * Signature of an implementation of type_foreach_channel_class, which must
111 * call func(type, fixed, allowed, user_data) for each channel class
112 * potentially understood by instances of @type.
88113 */
89114
90115 /**
142167 * this manager. If not implemented, the manager is assumed to manage no
143168 * channels.
144169 * @foreach_channel_class: Call func(manager, fixed, allowed, user_data) for
145 * each class of channel that this manager can create. If not implemented, the
146 * manager is assumed to be able to create no classes of channels.
170 * each class of channel that this instance can create (a subset of the
171 * channel classes produced by @type_foreach_channel_class). If not
172 * implemented, @type_foreach_channel_class is used.
147173 * @create_channel: Respond to a request for a new channel made with the
148174 * Connection.Interface.Requests.CreateChannel method. See
149175 * #TpChannelManagerRequestFunc for details.
154180 * with the Connection.Interface.Requests.EnsureChannel method. See
155181 * #TpChannelManagerRequestFunc for details.
156182 * Since: 0.7.16
183 * @type_foreach_channel_class: Call func(cls, fixed, allowed, user_data)
184 * for each class of channel that instances of this class might be able to
185 * create.
186 * Since: 0.11.11
157187 *
158188 * The vtable for a channel manager implementation.
159189 *
534564 /* ... else assume it has no channels, and do nothing */
535565 }
536566
567 typedef struct
568 {
569 TpChannelManager *self;
570 TpChannelManagerChannelClassFunc func;
571 gpointer user_data;
572 } ForeachAdaptor;
573
574 static void
575 foreach_adaptor (GType type G_GNUC_UNUSED,
576 GHashTable *fixed,
577 const gchar * const *allowed,
578 gpointer user_data)
579 {
580 ForeachAdaptor *adaptor = user_data;
581
582 adaptor->func (adaptor->self, fixed, allowed, adaptor->user_data);
583 }
537584
538585 /**
539586 * tp_channel_manager_foreach_channel_class:
560607 {
561608 method (manager, func, user_data);
562609 }
610 else
611 {
612 ForeachAdaptor adaptor = { manager, func, user_data };
613
614 return tp_channel_manager_type_foreach_channel_class (
615 G_TYPE_FROM_INSTANCE (manager), foreach_adaptor, &adaptor);
616 }
617 }
618
619
620 /**
621 * tp_channel_manager_type_foreach_channel_class:
622 * @type: A type whose instances implement #TpChannelManager
623 * @func: A function
624 * @user_data: Arbitrary data to be passed as the final argument of @func
625 *
626 * Calls func(type, fixed, allowed, user_data) for each channel class
627 * potentially understood by instances of @type.
628 *
629 * Since: 0.11.11
630 */
631 void
632 tp_channel_manager_type_foreach_channel_class (GType type,
633 TpChannelManagerTypeChannelClassFunc func,
634 gpointer user_data)
635 {
636 GTypeClass *cls;
637 TpChannelManagerIface *iface;
638 TpChannelManagerTypeForeachChannelClassFunc method;
639
640 g_return_if_fail (g_type_is_a (type, TP_TYPE_CHANNEL_MANAGER));
641
642 cls = g_type_class_ref (type);
643 iface = g_type_interface_peek (cls, TP_TYPE_CHANNEL_MANAGER);
644 method = iface->type_foreach_channel_class;
645
646 if (method != NULL)
647 {
648 method (type, func, user_data);
649 }
563650 /* ... else assume it has no classes of requestable channel */
651
652 g_type_class_unref (cls);
564653 }
565654
566655
7070 TpChannelManager *manager,
7171 TpChannelManagerChannelClassFunc func, gpointer user_data);
7272
73 typedef void (*TpChannelManagerTypeChannelClassFunc) (GType type,
74 GHashTable *fixed_properties,
75 const gchar * const *allowed_properties,
76 gpointer user_data);
77
78 typedef void (*TpChannelManagerTypeForeachChannelClassFunc) (
79 GType type, TpChannelManagerTypeChannelClassFunc func,
80 gpointer user_data);
81
82 void tp_channel_manager_type_foreach_channel_class (GType type,
83 TpChannelManagerTypeChannelClassFunc func, gpointer user_data);
84
7385
7486 typedef gboolean (*TpChannelManagerRequestFunc) (
7587 TpChannelManager *manager, gpointer request_token,
96108 TpChannelManagerRequestFunc request_channel;
97109 TpChannelManagerRequestFunc ensure_channel;
98110
111 TpChannelManagerTypeForeachChannelClassFunc type_foreach_channel_class;
112
99113 /*<private>*/
100114 /* We know that these two methods will be added in the near future, so
101115 * reserve extra space for them.
103117 GCallback _reserved_for_foreach_contact_channel_class;
104118 GCallback _reserved_for_add_cap;
105119
106 GCallback _future[8];
120 GCallback _future[7];
107121 };
108122
109123
16301630 * #guint containing the local-pending members added
16311631 * @remote_pending: (type GLib.Array) (element-type uint): a #GArray of
16321632 * #guint containing the remote-pending members added
1633 * @details: (type GLib.HashTable): (element-type utf8 GObject.Value):
1633 * @details: (type GLib.HashTable) (element-type utf8 GObject.Value):
16341634 * a #GHashTable mapping (gchar *) to #GValue containing details
16351635 * about the change, as described in the specification of the
16361636 * MembersChangedDetailed signal.
66 <xi:include href="../spec/Channel.xml"/>
77
88 <xi:include href="../spec/Channel_Type_Contact_List.xml"/>
9 <xi:include href="../spec/Channel_Type_Contact_Search.xml"/>
910 <xi:include href="../spec/Channel_Type_File_Transfer.xml"/>
1011 <xi:include href="../spec/Channel_Type_Streamed_Media.xml"/>
1112 <xi:include href="../spec/Channel_Type_Room_List.xml"/>
1919 genums.h.template \
2020 media-session-handler.xml \
2121 media-stream-handler.xml \
22 protocol.xml \
2223 stable-interfaces.xml
2324
2425 codegen_sources = \
4748 _gen/tp-cli-generic.h \
4849 _gen/tp-cli-media-session-handler.h \
4950 _gen/tp-cli-media-stream-handler.h \
51 _gen/tp-cli-protocol.h \
5052 _gen/tp-svc-account.h \
5153 _gen/tp-svc-account-manager.h \
5254 _gen/tp-svc-channel.h \
5961 _gen/tp-svc-debug.h \
6062 _gen/tp-svc-generic.h \
6163 _gen/tp-svc-media-session-handler.h \
62 _gen/tp-svc-media-stream-handler.h
64 _gen/tp-svc-media-stream-handler.h \
65 _gen/tp-svc-protocol.h
6366
6467 nodist_libtelepathy_glib_internal_la_SOURCES = \
6568 _gen/error-str.c \
8487 _gen/tp-cli-generic-body.h \
8588 _gen/tp-cli-media-session-handler-body.h \
8689 _gen/tp-cli-media-stream-handler-body.h \
90 _gen/tp-cli-protocol-body.h \
8791 _gen/tp-svc-account.c \
8892 _gen/tp-svc-account-manager.c \
8993 _gen/tp-svc-channel.c \
96100 _gen/tp-svc-debug.c \
97101 _gen/tp-svc-generic.c \
98102 _gen/tp-svc-media-session-handler.c \
99 _gen/tp-svc-media-stream-handler.c
103 _gen/tp-svc-media-stream-handler.c \
104 _gen/tp-svc-protocol.c
100105
101106 # Generated stuff
102107
0 /*
1 * Proxy for a Telepathy connection - avatar support
2 *
3 * Copyright © 2007-2010 Collabora Ltd. <http://www.collabora.co.uk/>
4 * Copyright © 2007-2010 Nokia Corporation
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #include "telepathy-glib/connection.h"
22
23 #include <telepathy-glib/dbus.h>
24 #include <telepathy-glib/interfaces.h>
25
26 #define DEBUG_FLAG TP_DEBUG_CONNECTION
27 #include "telepathy-glib/debug-internal.h"
28 #include "telepathy-glib/connection-internal.h"
29 #include "telepathy-glib/proxy-internal.h"
30
31 /**
32 * TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS:
33 *
34 * Expands to a call to a function that returns a #GQuark representing the
35 * "avatar-requirements" feature.
36 *
37 * When this feature is prepared, the avatar requirements of the Connection has
38 * been retrieved. Use tp_connection_get_avatar_requirements() to get them once
39 * prepared.
40 *
41 * One can ask for a feature to be prepared using the
42 * tp_proxy_prepare_async() function, and waiting for it to callback.
43 *
44 * Since: 0.11.4
45 */
46
47 GQuark
48 tp_connection_get_feature_quark_avatar_requirements (void)
49 {
50 return g_quark_from_static_string ("tp-connection-feature-avatar-requirements");
51 }
52
53 static void
54 tp_connection_get_avatar_requirements_cb (TpProxy *proxy,
55 GHashTable *properties,
56 const GError *error,
57 gpointer user_data,
58 GObject *weak_object)
59 {
60 TpConnection *self = (TpConnection *) proxy;
61
62 self->priv->fetching_avatar_requirements = FALSE;
63
64 if (error != NULL)
65 {
66 DEBUG ("Failed to get avatar requirements properties: %s", error->message);
67 goto finally;
68 }
69
70 g_assert (self->priv->avatar_requirements == NULL);
71
72 DEBUG ("AVATAR REQUIREMENTS ready");
73
74 self->priv->avatar_requirements = tp_avatar_requirements_new (
75 (GStrv) tp_asv_get_strv (properties, "SupportedAvatarMIMETypes"),
76 tp_asv_get_uint32 (properties, "MinimumAvatarWidth", NULL),
77 tp_asv_get_uint32 (properties, "MinimumAvatarHeight", NULL),
78 tp_asv_get_uint32 (properties, "RecommendedAvatarWidth", NULL),
79 tp_asv_get_uint32 (properties, "RecommendedAvatarHeight", NULL),
80 tp_asv_get_uint32 (properties, "MaximumAvatarWidth", NULL),
81 tp_asv_get_uint32 (properties, "MaximumAvatarHeight", NULL),
82 tp_asv_get_uint32 (properties, "MaximumAvatarBytes", NULL));
83
84 finally:
85 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS,
86 self->priv->avatar_requirements != NULL);
87 }
88
89 void
90 _tp_connection_maybe_prepare_avatar_requirements (TpProxy *proxy)
91 {
92 TpConnection *self = (TpConnection *) proxy;
93
94 if (self->priv->avatar_requirements != NULL)
95 return; /* already done */
96
97 if (!_tp_proxy_is_preparing (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS))
98 return; /* not interested right now */
99
100 if (!self->priv->ready)
101 return; /* will try again when ready */
102
103 if (self->priv->fetching_avatar_requirements)
104 return; /* Another Get operation is running */
105
106 if (!tp_proxy_has_interface_by_id (proxy,
107 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS))
108 {
109 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS,
110 FALSE);
111 return;
112 }
113
114 self->priv->fetching_avatar_requirements = TRUE;
115
116 tp_cli_dbus_properties_call_get_all (self, -1,
117 TP_IFACE_CONNECTION_INTERFACE_AVATARS,
118 tp_connection_get_avatar_requirements_cb, NULL, NULL, NULL);
119 }
120
121 /**
122 * tp_connection_get_avatar_requirements:
123 * @self: a connection
124 *
125 * To wait for valid avatar requirements, call tp_proxy_prepare_async()
126 * with the feature %TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS.
127 *
128 * This property cannot change after @self goes to the Connected state.
129 *
130 * Returns: (transfer none): a #TpAvatarRequirements struct, or %NULL if the
131 * feature is not yet prepared or the connection doesn't have the necessary
132 * properties.
133 * Since: 0.11.4
134 */
135 TpAvatarRequirements *
136 tp_connection_get_avatar_requirements (TpConnection *self)
137 {
138 g_return_val_if_fail (TP_IS_CONNECTION (self), NULL);
139
140 return self->priv->avatar_requirements;
141 }
142
143 /**
144 * TpAvatarRequirements:
145 * @supported_mime_types: An array of supported MIME types (e.g. "image/jpeg")
146 * Clients MAY assume that the first type in this array is preferred
147 * @minimum_width: The minimum width in pixels of an avatar, which MAY be 0
148 * @minimum_height: The minimum height in pixels of an avatar, which MAY be 0
149 * @recommended_width: The recommended width in pixels of an avatar, or 0 if
150 * there is no preferred width.
151 * @recommended_height: The recommended height in pixels of an avatar, or 0 if
152 * there is no preferred height
153 * @maximum_width: The maximum width in pixels of an avatar on this protocol,
154 * or 0 if there is no limit.
155 * @maximum_height: The maximum height in pixels of an avatar, or 0 if there is
156 * no limit.
157 * @maximum_bytes: he maximum size in bytes of an avatar, or 0 if there is no
158 * limit.
159 *
160 * The requirements for setting an avatar on a particular protocol.
161 *
162 * Since: 0.11.4
163 */
164
165 /**
166 * TP_TYPE_AVATAR_REQUIREMENTS:
167 *
168 * The boxed type of a #TpAvatarRequirements.
169 *
170 * Since: 0.11.4
171 */
172 GType
173 tp_avatar_requirements_get_type (void)
174 {
175 static GType type = 0;
176
177 if (G_UNLIKELY (type == 0))
178 {
179 type = g_boxed_type_register_static (g_intern_static_string ("TpAvatarRequirements"),
180 (GBoxedCopyFunc) tp_avatar_requirements_copy,
181 (GBoxedFreeFunc) tp_avatar_requirements_destroy);
182 }
183
184 return type;
185 }
186
187 /**
188 * tp_avatar_requirements_new:
189 * @supported_mime_types: An array of supported MIME types (e.g. "image/jpeg")
190 * Clients MAY assume that the first type in this array is preferred
191 * @minimum_width: The minimum width in pixels of an avatar, which MAY be 0
192 * @minimum_height: The minimum height in pixels of an avatar, which MAY be 0
193 * @recommended_width: The recommended width in pixels of an avatar, or 0 if
194 * there is no preferred width.
195 * @recommended_height: The recommended height in pixels of an avatar, or 0 if
196 * there is no preferred height
197 * @maximum_width: The maximum width in pixels of an avatar on this protocol,
198 * or 0 if there is no limit.
199 * @maximum_height: The maximum height in pixels of an avatar, or 0 if there is
200 * no limit.
201 * @maximum_bytes: he maximum size in bytes of an avatar, or 0 if there is no
202 * limit.
203 *
204 * <!--Returns: says it all-->
205 *
206 * Returns: a newly allocated #TpAvatarRequirements, free it with
207 * tp_avatar_requirements_destroy()
208 * Since: 0.11.4
209 */
210 TpAvatarRequirements *
211 tp_avatar_requirements_new (GStrv supported_mime_types,
212 guint minimum_width,
213 guint minimum_height,
214 guint recommended_width,
215 guint recommended_height,
216 guint maximum_width,
217 guint maximum_height,
218 guint maximum_bytes)
219 {
220 TpAvatarRequirements *self;
221 gchar *empty[] = { NULL };
222
223 self = g_slice_new (TpAvatarRequirements);
224 self->supported_mime_types =
225 g_strdupv (supported_mime_types ? supported_mime_types : empty);
226 self->minimum_width = minimum_width;
227 self->minimum_height = minimum_height;
228 self->recommended_width = recommended_width;
229 self->recommended_height = recommended_height;
230 self->maximum_width = maximum_width;
231 self->maximum_height = maximum_height;
232 self->maximum_bytes = maximum_bytes;
233
234 return self;
235 }
236
237 /**
238 * tp_avatar_requirements_copy: (skip)
239 * @self: a #TpAvatarRequirements
240 *
241 * <!--Returns: says it all-->
242 *
243 * Returns: a newly allocated #TpAvatarRequirements, free it with
244 * tp_avatar_requirements_destroy()
245 * Since: 0.11.4
246 */
247 TpAvatarRequirements *
248 tp_avatar_requirements_copy (const TpAvatarRequirements *self)
249 {
250 g_return_val_if_fail (self != NULL, NULL);
251
252 return tp_avatar_requirements_new (self->supported_mime_types,
253 self->minimum_width,
254 self->minimum_height,
255 self->recommended_width,
256 self->recommended_height,
257 self->maximum_width,
258 self->maximum_height,
259 self->maximum_bytes);
260 }
261
262 /**
263 * tp_avatar_requirements_destroy: (skip)
264 * @self: a #TpAvatarRequirements
265 *
266 * Free all memory used by the #TpAvatarRequirements.
267 *
268 * Since: 0.11.4
269 */
270 void
271 tp_avatar_requirements_destroy (TpAvatarRequirements *self)
272 {
273 g_return_if_fail (self != NULL);
274
275 g_strfreev (self->supported_mime_types);
276 g_slice_free (TpAvatarRequirements, self);
277 }
9595 TpContactInfoFieldSpec *_tp_contact_info_field_spec_new (const gchar *name,
9696 GStrv parameters, TpContactInfoFieldFlags flags, guint max);
9797
98
98 /* connection-avatars.c */
99 void _tp_connection_maybe_prepare_avatar_requirements (TpProxy *proxy);
99100
100101 G_END_DECLS
101102
3333
3434 #define DEBUG_FLAG TP_DEBUG_MANAGER
3535 #include "telepathy-glib/debug-internal.h"
36 #include "telepathy-glib/protocol-internal.h"
3637
3738 #include "telepathy-glib/_gen/tp-cli-connection-manager-body.h"
3839
8384 * tp_connection_manager_dup_protocol_names()), and their available parameters,
8485 * will have been retrieved, either by activating the connection manager over
8586 * D-Bus or by reading the .manager file in which that information is cached.
87 *
88 * Since 0.11.11, this feature also finds any extra interfaces that
89 * this connection manager has, and adds them to #TpProxy:interfaces (where
90 * they can be queried with tp_proxy_has_interface()).
8691 *
8792 * (These are the same guarantees offered by the older
8893 * tp_connection_manager_call_when_ready() mechanism.)
216221 * Since: 0.7.1
217222 */
218223
224 typedef enum {
225 INTROSPECT_IDLE,
226 INTROSPECT_GETTING_PROPERTIES,
227 INTROSPECT_LISTING_PROTOCOLS,
228 INTROSPECT_GETTING_PARAMETERS
229 } IntrospectionStep;
230
219231 struct _TpConnectionManagerPrivate {
220232 /* absolute path to .manager file */
221233 gchar *manager_file;
229241 /* TRUE if dispose() has run already */
230242 unsigned disposed:1;
231243
244 /* dup'd name => referenced TpProtocol, corresponding exactly to
245 * @protocol_structs */
246 GHashTable *protocol_objects;
247
232248 /* GPtrArray of TpConnectionManagerProtocol *. This is the implementation
233 * for self->protocols.
249 * for self->protocols. Each item is borrowed from the corresponding
250 * object in protocol_objects.
234251 *
235252 * NULL if file_info and live_info are both FALSE
236253 * Protocols from file, if file_info is TRUE but live_info is FALSE
237254 * Protocols from last time introspecting the CM succeeded, if live_info
238255 * is TRUE */
239 GPtrArray *protocols;
256 GPtrArray *protocol_structs;
240257
241258 /* If we're waiting for a GetParameters, then GPtrArray of g_strdup'd
242259 * gchar * representing protocols we haven't yet introspected.
243260 * Otherwise NULL */
244261 GPtrArray *pending_protocols;
245 /* If we're waiting for a GetParameters, then GPtrArray of
246 * TpConnectionManagerProtocol * for the introspection that is in
247 * progress (will replace ->protocols when finished).
248 * Otherwise NULL */
249 GPtrArray *found_protocols;
262
263 /* dup'd name => referenced TpProtocol
264 *
265 * If we're waiting for a GetParameters, protocols we found so far for
266 * the introspection that is in progress (will replace protocol_objects
267 * when finished). Otherwise NULL */
268 GHashTable *found_protocols;
250269
251270 /* list of WhenReadyContext */
252271 GList *waiting_for_ready;
272
273 /* things we introspected so far */
274 IntrospectionStep introspection_step;
253275
254276 /* the method call currently pending, or NULL if none. */
255277 TpProxyPendingCall *introspection_call;
283305 }
284306
285307
286 static void
287 _tp_connection_manager_param_free_contents (TpConnectionManagerParam *param)
288 {
289 g_free (param->name);
290 g_free (param->dbus_signature);
291
292 if (G_IS_VALUE (&param->default_value))
293 g_value_unset (&param->default_value);
294 }
295
296
297308 /**
298309 * tp_connection_manager_param_copy:
299310 * @in: the #TpConnectionManagerParam to copy
379390 void
380391 tp_connection_manager_protocol_free (TpConnectionManagerProtocol *proto)
381392 {
382 TpConnectionManagerParam *param;
383
384 g_free (proto->name);
385
386 for (param = proto->params; param->name != NULL; param++)
387 {
388 _tp_connection_manager_param_free_contents (param);
389 }
390
391 g_free (proto->params);
393 _tp_connection_manager_protocol_free_contents (proto);
392394
393395 g_slice_free (TpConnectionManagerProtocol, proto);
394396 }
607609 GObject *user_object)
608610 {
609611 gchar *protocol = user_data;
610 GArray *output;
611 guint i;
612 TpConnectionManagerProtocol *proto_struct;
613
614 DEBUG ("Protocol name: %s", protocol);
615
612 TpProtocol *proto_object;
613 GHashTable *immutables;
614
615 g_assert (self->priv->introspection_step == INTROSPECT_GETTING_PARAMETERS);
616616 g_assert (self->priv->introspection_call != NULL);
617617 self->priv->introspection_call = NULL;
618618
622622 goto out;
623623 }
624624
625 output = g_array_sized_new (TRUE, TRUE,
626 sizeof (TpConnectionManagerParam), parameters->len);
627
628 for (i = 0; i < parameters->len; i++)
629 {
630 GValue structure = { 0 };
631 GValue *tmp;
632 /* Points to the zeroed entry just after the end of the array
633 * - but we're about to extend the array to make it valid */
634 TpConnectionManagerParam *param = &g_array_index (output,
635 TpConnectionManagerParam, output->len);
636
637 g_value_init (&structure, TP_STRUCT_TYPE_PARAM_SPEC);
638 g_value_set_static_boxed (&structure, g_ptr_array_index (parameters, i));
639
640 g_array_set_size (output, output->len + 1);
641
642 if (!dbus_g_type_struct_get (&structure,
643 0, &param->name,
644 1, &param->flags,
645 2, &param->dbus_signature,
646 3, &tmp,
647 G_MAXUINT))
648 {
649 DEBUG ("Unparseable parameter #%d for %s, ignoring", i, protocol);
650 /* *shrug* that one didn't work, let's skip it */
651 g_array_set_size (output, output->len - 1);
652 continue;
653 }
654
655 g_value_init (&param->default_value,
656 G_VALUE_TYPE (tmp));
657 g_value_copy (tmp, &param->default_value);
658 g_value_unset (tmp);
659 g_free (tmp);
660
661 param->priv = NULL;
662
663 DEBUG ("\tParam name: %s", param->name);
664 DEBUG ("\tParam flags: 0x%x", param->flags);
665 DEBUG ("\tParam sig: %s", param->dbus_signature);
666
667 if ((!tp_strdiff (param->name, "password") ||
668 g_str_has_suffix (param->name, "-password")) &&
669 (param->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
670 {
671 DEBUG ("\tTreating as secret due to its name (please fix %s)",
672 self->name);
673 param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
674 }
675
676 #ifdef ENABLE_DEBUG
677 {
678 gchar *repr = g_strdup_value_contents (&(param->default_value));
679
680 DEBUG ("\tParam default value: %s of type %s", repr,
681 G_VALUE_TYPE_NAME (&(param->default_value)));
682 g_free (repr);
683 }
684 #endif
685 }
686
687 proto_struct = g_slice_new (TpConnectionManagerProtocol);
688 proto_struct->name = g_strdup (protocol);
689 proto_struct->params =
690 (TpConnectionManagerParam *) g_array_free (output, FALSE);
691 g_ptr_array_add (self->priv->found_protocols, proto_struct);
625 immutables = tp_asv_new (
626 TP_PROP_PROTOCOL_PARAMETERS, TP_ARRAY_TYPE_PARAM_SPEC_LIST, parameters,
627 NULL);
628 proto_object = tp_protocol_new (tp_proxy_get_dbus_daemon (self),
629 self->name, protocol, immutables, NULL);
630 g_hash_table_unref (immutables);
631
632 /* tp_protocol_new can currently only fail because of malformed names,
633 * and we already checked those */
634 g_assert (proto_object != NULL);
635
636 g_hash_table_insert (self->priv->found_protocols,
637 g_strdup (protocol), proto_object);
692638
693639 out:
694640 tp_connection_manager_continue_introspection (self);
695 }
696
697 static void
698 tp_connection_manager_free_protocols (GPtrArray *protocols)
699 {
700 guint i;
701
702 for (i = 0; i < protocols->len; i++)
703 {
704 TpConnectionManagerProtocol *proto = g_ptr_array_index (protocols, i);
705
706 if (proto == NULL)
707 continue;
708
709 tp_connection_manager_protocol_free (proto);
710 }
711
712 g_ptr_array_free (protocols, TRUE);
713641 }
714642
715643 static void tp_connection_manager_ready_or_failed (TpConnectionManager *self,
721649 {
722650 guint i;
723651
652 self->priv->introspection_step = INTROSPECT_IDLE;
653
724654 if (self->priv->introspection_call != NULL)
725655 {
726656 tp_proxy_pending_call_cancel (self->priv->introspection_call);
729659
730660 if (self->priv->found_protocols != NULL)
731661 {
732 tp_connection_manager_free_protocols (self->priv->found_protocols);
662 g_hash_table_unref (self->priv->found_protocols);
733663 self->priv->found_protocols = NULL;
734664 }
735665
748678 }
749679
750680 static void
681 tp_connection_manager_update_protocol_structs (TpConnectionManager *self)
682 {
683 GHashTableIter iter;
684 gpointer protocol_object;
685
686 g_assert (self->priv->protocol_objects != NULL);
687
688 if (self->priv->protocol_structs != NULL)
689 g_ptr_array_free (self->priv->protocol_structs, TRUE);
690
691 self->priv->protocol_structs = g_ptr_array_sized_new (
692 g_hash_table_size (self->priv->protocol_objects) + 1);
693
694 g_hash_table_iter_init (&iter, self->priv->protocol_objects);
695
696 while (g_hash_table_iter_next (&iter, NULL, &protocol_object))
697 {
698 g_ptr_array_add (self->priv->protocol_structs,
699 _tp_protocol_get_struct (protocol_object));
700 }
701
702 g_ptr_array_add (self->priv->protocol_structs, NULL);
703 self->protocols = (const TpConnectionManagerProtocol * const *)
704 self->priv->protocol_structs->pdata;
705 }
706
707 static void
708 tp_connection_manager_add_interfaces (TpConnectionManager *self,
709 const gchar * const * interfaces)
710 {
711 if (interfaces == NULL)
712 return;
713
714 for (; *interfaces != NULL; interfaces++)
715 {
716 if (tp_dbus_check_valid_interface_name (*interfaces, NULL))
717 {
718 GQuark q = g_quark_from_string (*interfaces);
719
720 tp_proxy_add_interface_by_id ((TpProxy *) self, q);
721 }
722 else
723 {
724 DEBUG ("Ignoring invalid interface on %s: %s",
725 tp_proxy_get_object_path (self), *interfaces);
726 }
727 }
728 }
729
730 static void
731 tp_connection_manager_get_all_cb (TpProxy *proxy,
732 GHashTable *properties,
733 const GError *error,
734 gpointer nil G_GNUC_UNUSED,
735 GObject *object G_GNUC_UNUSED)
736 {
737 TpConnectionManager *self = (TpConnectionManager *) proxy;
738
739 g_assert (TP_IS_CONNECTION_MANAGER (self));
740 g_assert (self->priv->introspection_step == INTROSPECT_GETTING_PROPERTIES);
741 g_assert (self->priv->introspection_call != NULL);
742 self->priv->introspection_call = NULL;
743
744 if (error == NULL)
745 {
746 GHashTable *protocols;
747
748 tp_connection_manager_add_interfaces (self,
749 tp_asv_get_strv (properties, "Interfaces"));
750
751 protocols = tp_asv_get_boxed (properties, "Protocols",
752 TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP);
753
754 if (protocols != NULL)
755 {
756 GHashTableIter iter;
757 gpointer k, v;
758
759 DEBUG ("%u Protocols from D-Bus", g_hash_table_size (protocols));
760
761 g_assert (self->priv->found_protocols == NULL);
762 self->priv->found_protocols = g_hash_table_new_full (g_str_hash,
763 g_str_equal, g_free, g_object_unref);
764
765 g_hash_table_iter_init (&iter, protocols);
766
767 while (g_hash_table_iter_next (&iter, &k, &v))
768 {
769 const gchar *name = k;
770 GHashTable *protocol_properties = v;
771
772 if (tp_connection_manager_check_valid_protocol_name (name, NULL))
773 {
774 TpProtocol *proto_object = tp_protocol_new (
775 tp_proxy_get_dbus_daemon (self), self->name, name,
776 protocol_properties, NULL);
777
778 /* tp_protocol_new can currently only fail because of
779 * malformed names, and we already checked for that */
780 g_assert (proto_object != NULL);
781
782 g_hash_table_insert (self->priv->found_protocols,
783 g_strdup (name), proto_object);
784 }
785 else
786 {
787 INFO ("ignoring invalid Protocol name %s from %s",
788 name, tp_proxy_get_object_path (self));
789 }
790 }
791 }
792 }
793 else
794 {
795 DEBUG ("Ignoring error getting ConnectionManager properties: %s %d: %s",
796 g_quark_to_string (error->domain), error->code, error->message);
797 }
798
799 tp_connection_manager_continue_introspection (self);
800 }
801
802 static void tp_connection_manager_got_protocols (TpConnectionManager *self,
803 const gchar **protocols,
804 const GError *error,
805 gpointer user_data,
806 GObject *user_object);
807
808 static void
751809 tp_connection_manager_continue_introspection (TpConnectionManager *self)
752810 {
753811 gchar *next_protocol;
754812
755 g_assert (self->priv->pending_protocols != NULL);
756
757 if (self->priv->pending_protocols->len == 0)
758 {
759 GPtrArray *tmp;
813 if (self->priv->introspection_step == INTROSPECT_IDLE)
814 {
815 DEBUG ("calling GetAll on CM");
816 self->priv->introspection_step = INTROSPECT_GETTING_PROPERTIES;
817 self->priv->introspection_call = tp_cli_dbus_properties_call_get_all (
818 self, -1, TP_IFACE_CONNECTION_MANAGER,
819 tp_connection_manager_get_all_cb, NULL, NULL, NULL);
820 return;
821 }
822
823 if (self->priv->introspection_step == INTROSPECT_GETTING_PROPERTIES)
824 {
825 g_assert (self->priv->pending_protocols == NULL);
826
827 if (self->priv->found_protocols == NULL)
828 {
829 DEBUG ("calling ListProtocols on CM");
830 self->priv->introspection_step = INTROSPECT_LISTING_PROTOCOLS;
831 self->priv->introspection_call =
832 tp_cli_connection_manager_call_list_protocols (self, -1,
833 tp_connection_manager_got_protocols, NULL, NULL, NULL);
834 return;
835 }
836 /* else we already found the protocols and their parameters, so behave
837 * as though we'd already called GetParameters n times */
838 }
839
840 if (self->priv->pending_protocols == NULL ||
841 self->priv->pending_protocols->len == 0)
842 {
843 GHashTable *tmp;
760844 guint old;
761845
762 g_ptr_array_add (self->priv->found_protocols, NULL);
763
764 /* swap found_protocols and protocols, so we'll free the old protocols
765 * as part of end_introspection */
766 tmp = self->priv->protocols;
767 self->priv->protocols = self->priv->found_protocols;
846 /* swap found_protocols and protocol_objects, so we'll free the old
847 * protocol_objects as part of end_introspection */
848 tmp = self->priv->protocol_objects;
849 self->priv->protocol_objects = self->priv->found_protocols;
768850 self->priv->found_protocols = tmp;
769851
770 self->protocols = (const TpConnectionManagerProtocol * const *)
771 self->priv->protocols->pdata;
852 tp_connection_manager_update_protocol_structs (self);
772853
773854 old = self->info_source;
774855 self->info_source = TP_CM_INFO_SOURCE_LIVE;
778859
779860 tp_connection_manager_end_introspection (self, NULL);
780861
781 return;
782 }
783
784 next_protocol = g_ptr_array_remove_index_fast (self->priv->pending_protocols,
785 0);
786 self->priv->introspection_call =
787 tp_cli_connection_manager_call_get_parameters (self, -1, next_protocol,
788 tp_connection_manager_got_parameters, next_protocol, g_free,
789 NULL);
862 g_assert (self->priv->introspection_step == INTROSPECT_IDLE);
863 }
864 else
865 {
866 next_protocol = g_ptr_array_remove_index_fast (
867 self->priv->pending_protocols, 0);
868 self->priv->introspection_step = INTROSPECT_GETTING_PARAMETERS;
869 self->priv->introspection_call =
870 tp_cli_connection_manager_call_get_parameters (self, -1,
871 next_protocol, tp_connection_manager_got_parameters,
872 next_protocol, g_free, NULL);
873 }
790874 }
791875
792876 static void
823907 DEBUG ("Succeeded with %u protocols", i);
824908
825909 g_assert (self->priv->found_protocols == NULL);
826 /* Allocate one more pointer - we're going to append NULL afterwards */
827 self->priv->found_protocols = g_ptr_array_sized_new (i + 1);
910 self->priv->found_protocols = g_hash_table_new_full (g_str_hash,
911 g_str_equal, g_free, g_object_unref);
828912
829913 g_assert (self->priv->pending_protocols == NULL);
830914 self->priv->pending_protocols = g_ptr_array_sized_new (i);
831915
832916 for (iter = protocols; *iter != NULL; iter++)
833917 {
918 if (!tp_connection_manager_check_valid_protocol_name (*iter, NULL))
919 {
920 DEBUG ("Protocol %s has an invalid name", *iter);
921 continue;
922 }
923
834924 g_ptr_array_add (self->priv->pending_protocols, g_strdup (*iter));
835925 }
836926
854944 (self->always_introspect ||
855945 self->info_source == TP_CM_INFO_SOURCE_NONE))
856946 {
857 DEBUG ("calling ListProtocols on CM");
858 self->priv->introspection_call =
859 tp_cli_connection_manager_call_list_protocols (self, -1,
860 tp_connection_manager_got_protocols, NULL, NULL, NULL);
947 tp_connection_manager_continue_introspection (self);
861948 }
862949
863950 self->priv->introspect_idle_id = 0;
9361023 }
9371024
9381025 static gboolean
939 init_gvalue_from_dbus_sig (const gchar *sig,
940 GValue *value)
941 {
942 g_assert (!G_IS_VALUE (value));
943
944 switch (sig[0])
945 {
946 case 'b':
947 g_value_init (value, G_TYPE_BOOLEAN);
948 return TRUE;
949
950 case 's':
951 g_value_init (value, G_TYPE_STRING);
952 return TRUE;
953
954 case 'q':
955 case 'u':
956 g_value_init (value, G_TYPE_UINT);
957 return TRUE;
958
959 case 'y':
960 g_value_init (value, G_TYPE_UCHAR);
961 return TRUE;
962
963 case 'n':
964 case 'i':
965 g_value_init (value, G_TYPE_INT);
966 return TRUE;
967
968 case 'x':
969 g_value_init (value, G_TYPE_INT64);
970 return TRUE;
971
972 case 't':
973 g_value_init (value, G_TYPE_UINT64);
974 return TRUE;
975
976 case 'o':
977 g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
978 g_value_set_static_boxed (value, "/");
979 return TRUE;
980
981 case 'd':
982 g_value_init (value, G_TYPE_DOUBLE);
983 return TRUE;
984
985 case 'v':
986 g_value_init (value, G_TYPE_VALUE);
987 return TRUE;
988
989 case 'a':
990 switch (sig[1])
991 {
992 case 's':
993 g_value_init (value, G_TYPE_STRV);
994 return TRUE;
995
996 case 'y':
997 g_value_init (value, DBUS_TYPE_G_UCHAR_ARRAY);
998 return TRUE;
999 }
1000 }
1001
1002 return FALSE;
1003 }
1004
1005 static gboolean
1006 parse_default_value (GValue *value,
1007 const gchar *sig,
1008 gchar *string,
1009 GKeyFile *file,
1010 const gchar *group,
1011 const gchar *key)
1012 {
1013 GError *error = NULL;
1014 gchar *s, *p;
1015
1016 switch (sig[0])
1017 {
1018 case 'b':
1019 g_value_set_boolean (value, g_key_file_get_boolean (file, group, key,
1020 &error));
1021
1022 if (error == NULL)
1023 return TRUE;
1024
1025 /* In telepathy-glib < 0.7.26 we accepted true and false in
1026 * any case combination, 0, and 1. The desktop file spec specifies
1027 * "true" and "false" only, while GKeyFile currently accepts 0 and 1 too.
1028 * So, on error, let's fall back to more lenient parsing that explicitly
1029 * allows everything we historically allowed. */
1030 g_error_free (error);
1031 s = g_key_file_get_value (file, group, key, NULL);
1032
1033 if (s == NULL)
1034 return FALSE;
1035
1036 for (p = s; *p != '\0'; p++)
1037 {
1038 *p = g_ascii_tolower (*p);
1039 }
1040
1041 if (!tp_strdiff (s, "1") || !tp_strdiff (s, "true"))
1042 {
1043 g_value_set_boolean (value, TRUE);
1044 }
1045 else if (!tp_strdiff (s, "0") || !tp_strdiff (s, "false"))
1046 {
1047 g_value_set_boolean (value, TRUE);
1048 }
1049 else
1050 {
1051 g_free (s);
1052 return FALSE;
1053 }
1054
1055 g_free (s);
1056 return TRUE;
1057
1058 case 's':
1059 s = g_key_file_get_string (file, group, key, NULL);
1060
1061 g_value_take_string (value, s);
1062 return (s != NULL);
1063
1064 case 'y':
1065 case 'q':
1066 case 'u':
1067 case 't':
1068 {
1069 guint64 v = tp_g_key_file_get_uint64 (file, group, key, &error);
1070
1071 if (error != NULL)
1072 {
1073 g_error_free (error);
1074 return FALSE;
1075 }
1076
1077 if (sig[0] == 't')
1078 {
1079 g_value_set_uint64 (value, v);
1080 return TRUE;
1081 }
1082
1083 if (sig[0] == 'y')
1084 {
1085 if (v > G_MAXUINT8)
1086 {
1087 return FALSE;
1088 }
1089
1090 g_value_set_uchar (value, v);
1091 return TRUE;
1092 }
1093
1094 if (v > G_MAXUINT32 || (sig[0] == 'q' && v > G_MAXUINT16))
1095 return FALSE;
1096
1097 g_value_set_uint (value, v);
1098 return TRUE;
1099 }
1100
1101 case 'n':
1102 case 'i':
1103 case 'x':
1104 if (string[0] == '\0')
1105 {
1106 return FALSE;
1107 }
1108 else
1109 {
1110 gint64 v = tp_g_key_file_get_int64 (file, group, key, &error);
1111
1112 if (error != NULL)
1113 {
1114 g_error_free (error);
1115 return FALSE;
1116 }
1117
1118 if (sig[0] == 'x')
1119 {
1120 g_value_set_int64 (value, v);
1121 return TRUE;
1122 }
1123
1124 if (v > G_MAXINT32 || (sig[0] == 'q' && v > G_MAXINT16))
1125 return FALSE;
1126
1127 if (v < G_MININT32 || (sig[0] == 'n' && v < G_MININT16))
1128 return FALSE;
1129
1130 g_value_set_int (value, v);
1131 return TRUE;
1132 }
1133
1134 case 'o':
1135 s = g_key_file_get_string (file, group, key, NULL);
1136
1137 if (s == NULL || !tp_dbus_check_valid_object_path (s, NULL))
1138 {
1139 g_free (s);
1140 return FALSE;
1141 }
1142
1143 g_value_take_boxed (value, s);
1144
1145 return TRUE;
1146
1147 case 'd':
1148 g_value_set_double (value, g_key_file_get_double (file, group, key,
1149 &error));
1150
1151 if (error != NULL)
1152 {
1153 g_error_free (error);
1154 return FALSE;
1155 }
1156
1157 return TRUE;
1158
1159 case 'a':
1160 switch (sig[1])
1161 {
1162 case 's':
1163 {
1164 g_value_take_boxed (value,
1165 g_key_file_get_string_list (file, group, key, NULL, &error));
1166
1167 if (error != NULL)
1168 {
1169 g_error_free (error);
1170 return FALSE;
1171 }
1172
1173 return TRUE;
1174 }
1175 }
1176 }
1177
1178 if (G_IS_VALUE (value))
1179 g_value_unset (value);
1180
1181 return FALSE;
1182 }
1183
1184 static GPtrArray *
1185 tp_connection_manager_read_file (const gchar *cm_name,
1026 tp_connection_manager_read_file (TpDBusDaemon *dbus_daemon,
1027 const gchar *cm_name,
11861028 const gchar *filename,
1029 GHashTable **protocols_out,
1030 GStrv *interfaces_out,
11871031 GError **error)
11881032 {
11891033 GKeyFile *file;
1190 gchar **groups, **group;
1191 guint i;
1192 TpConnectionManagerProtocol *proto_struct;
1193 GPtrArray *protocols;
1034 gchar **groups = NULL;
1035 gchar **group;
1036 TpProtocol *proto_object;
1037 GHashTable *protocols = NULL;
1038 GStrv interfaces = NULL;
11941039
11951040 file = g_key_file_new ();
11961041
11971042 if (!g_key_file_load_from_file (file, filename, G_KEY_FILE_NONE, error))
1198 return NULL;
1043 return FALSE;
1044
1045 /* if missing, it's not an error, so ignore @error */
1046 interfaces = g_key_file_get_string_list (file, "ConnectionManager",
1047 "Interfaces", NULL, NULL);
1048
1049 protocols = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
1050 g_object_unref);
11991051
12001052 groups = g_key_file_get_groups (file, NULL);
12011053
1202 if (groups == NULL || *groups == NULL)
1203 return g_ptr_array_sized_new (1);
1204
1205 i = 0;
1054 if (groups == NULL)
1055 goto success;
1056
12061057 for (group = groups; *group != NULL; group++)
12071058 {
1208 if (g_str_has_prefix (*group, "Protocol "))
1209 i++;
1210 }
1211
1212 /* Reserve space for the caller to add a NULL at the end, so +1 */
1213 protocols = g_ptr_array_sized_new (i + 1);
1214
1215 for (group = groups; *group != NULL; group++)
1216 {
1217 gchar **keys, **key;
1218 GArray *output;
1219
1220 if (!g_str_has_prefix (*group, "Protocol "))
1059 gchar *name;
1060 GHashTable *immutables;
1061
1062 immutables = _tp_protocol_parse_manager_file (file, cm_name, *group,
1063 &name);
1064
1065 if (immutables == NULL)
12211066 continue;
12221067
1223 proto_struct = g_slice_new (TpConnectionManagerProtocol);
1224
1225 keys = g_strsplit (*group, " ", 2);
1226 proto_struct->name = g_strdup (keys[1]);
1227 g_strfreev (keys);
1228
1229 DEBUG ("Protocol %s", proto_struct->name);
1230
1231 keys = g_key_file_get_keys (file, *group, NULL, NULL);
1232
1233 i = 0;
1234 for (key = keys; key != NULL && *key != NULL; key++)
1235 {
1236 if (g_str_has_prefix (*key, "param-"))
1237 i++;
1238 }
1239
1240 output = g_array_sized_new (TRUE, TRUE,
1241 sizeof (TpConnectionManagerParam), i);
1242
1243 for (key = keys; key != NULL && *key != NULL; key++)
1244 {
1245 if (g_str_has_prefix (*key, "param-"))
1246 {
1247 gchar **strv, **iter;
1248 gchar *value, *def;
1249 /* Points to the zeroed entry just after the end of the array
1250 * - but we're about to extend the array to make it valid */
1251 TpConnectionManagerParam *param = &g_array_index (output,
1252 TpConnectionManagerParam, output->len);
1253
1254 value = g_key_file_get_string (file, *group, *key, NULL);
1255 if (value == NULL)
1256 continue;
1257
1258 /* zero_terminated=TRUE and clear_=TRUE */
1259 g_assert (param->name == NULL);
1260
1261 g_array_set_size (output, output->len + 1);
1262
1263 /* strlen ("param-") == 6 */
1264 param->name = g_strdup (*key + 6);
1265
1266 strv = g_strsplit (value, " ", 0);
1267 g_free (value);
1268
1269 param->dbus_signature = g_strdup (strv[0]);
1270
1271 for (iter = strv + 1; *iter != NULL; iter++)
1272 {
1273 if (!tp_strdiff (*iter, "required"))
1274 param->flags |= TP_CONN_MGR_PARAM_FLAG_REQUIRED;
1275 if (!tp_strdiff (*iter, "register"))
1276 param->flags |= TP_CONN_MGR_PARAM_FLAG_REGISTER;
1277 if (!tp_strdiff (*iter, "secret"))
1278 param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
1279 if (!tp_strdiff (*iter, "dbus-property"))
1280 param->flags |= TP_CONN_MGR_PARAM_FLAG_DBUS_PROPERTY;
1281 }
1282
1283 g_strfreev (strv);
1284
1285 if ((!tp_strdiff (param->name, "password") ||
1286 g_str_has_suffix (param->name, "-password")) &&
1287 (param->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
1288 {
1289 DEBUG ("\tTreating %s as secret due to its name (please "
1290 "fix %s)", param->name, cm_name);
1291 param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
1292 }
1293
1294 def = g_strdup_printf ("default-%s", param->name);
1295 value = g_key_file_get_string (file, *group, def, NULL);
1296
1297 init_gvalue_from_dbus_sig (param->dbus_signature,
1298 &param->default_value);
1299
1300 if (value != NULL && parse_default_value (&param->default_value,
1301 param->dbus_signature, value, file, *group, def))
1302 param->flags |= TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT;
1303
1304 g_free (value);
1305 g_free (def);
1306
1307 DEBUG ("\tParam name: %s", param->name);
1308 DEBUG ("\tParam flags: 0x%x", param->flags);
1309 DEBUG ("\tParam sig: %s", param->dbus_signature);
1310
1311 #ifdef ENABLE_DEBUG
1312 if (G_IS_VALUE (&param->default_value))
1313 {
1314 gchar *repr = g_strdup_value_contents
1315 (&(param->default_value));
1316
1317 DEBUG ("\tParam default value: %s of type %s", repr,
1318 G_VALUE_TYPE_NAME (&(param->default_value)));
1319 g_free (repr);
1320 }
1321 else
1322 {
1323 DEBUG ("\tParam default value: not set");
1324 }
1325 #endif
1326 }
1327 }
1328
1329 g_strfreev (keys);
1330
1331 proto_struct->params =
1332 (TpConnectionManagerParam *) g_array_free (output, FALSE);
1333
1334 g_ptr_array_add (protocols, proto_struct);
1335 }
1336
1068 proto_object = tp_protocol_new (dbus_daemon, cm_name, name,
1069 immutables, NULL);
1070 g_assert (proto_object != NULL);
1071
1072 /* steals @name */
1073 g_hash_table_insert (protocols, name, proto_object);
1074
1075 g_hash_table_unref (immutables);
1076 }
1077
1078 success:
13371079 g_strfreev (groups);
13381080 g_key_file_free (file);
13391081
1340 return protocols;
1082 if (protocols_out != NULL)
1083 *protocols_out = protocols;
1084 else
1085 g_hash_table_unref (protocols);
1086
1087 if (interfaces_out != NULL)
1088 *interfaces_out = interfaces;
1089 else
1090 g_strfreev (interfaces);
1091
1092 return TRUE;
13411093 }
13421094
13431095 static gboolean
13471099
13481100 self->priv->manager_file_read_idle_id = 0;
13491101
1350 if (self->priv->protocols == NULL)
1102 if (self->priv->protocol_objects == NULL)
13511103 {
13521104 if (self->priv->manager_file != NULL &&
13531105 self->priv->manager_file[0] != '\0')
13541106 {
13551107 GError *error = NULL;
1356 GPtrArray *protocols = tp_connection_manager_read_file (
1357 self->name, self->priv->manager_file, &error);
1358
1359 DEBUG ("Read %s", self->priv->manager_file);
1360
1361 if (protocols == NULL)
1108 GHashTable *protocols;
1109 GStrv interfaces = NULL;
1110
1111 DEBUG ("Reading %s", self->priv->manager_file);
1112
1113 if (!tp_connection_manager_read_file (
1114 tp_proxy_get_dbus_daemon (self),
1115 self->name, self->priv->manager_file, &protocols, &interfaces,
1116 &error))
13621117 {
13631118 DEBUG ("Failed to load %s: %s", self->priv->manager_file,
13641119 error->message);
13671122 }
13681123 else
13691124 {
1370 g_ptr_array_add (protocols, NULL);
1371 self->priv->protocols = protocols;
1372
1373 self->protocols = (const TpConnectionManagerProtocol * const *)
1374 self->priv->protocols->pdata;
1125 tp_connection_manager_add_interfaces (self,
1126 (const gchar * const *) interfaces);
1127 g_strfreev (interfaces);
1128
1129 self->priv->protocol_objects = protocols;
1130 tp_connection_manager_update_protocol_structs (self);
13751131
13761132 DEBUG ("Got info from file");
13771133 /* previously it must have been NONE */
14981254 as_proxy->bus_name, tp_connection_manager_name_owner_changed_cb,
14991255 object);
15001256
1257 if (self->priv->protocol_structs != NULL)
1258 {
1259 g_ptr_array_free (self->priv->protocol_structs, TRUE);
1260 self->priv->protocol_structs = NULL;
1261 }
1262
1263 if (self->priv->protocol_objects != NULL)
1264 {
1265 g_hash_table_unref (self->priv->protocol_objects);
1266 self->priv->protocol_objects = NULL;
1267 }
1268
1269 if (self->priv->found_protocols != NULL)
1270 {
1271 g_hash_table_unref (self->priv->found_protocols);
1272 self->priv->found_protocols = NULL;
1273 }
1274
15011275 finally:
15021276 G_OBJECT_CLASS (tp_connection_manager_parent_class)->dispose (object);
15031277 }
15161290 if (self->priv->introspect_idle_id != 0)
15171291 g_source_remove (self->priv->introspect_idle_id);
15181292
1519 if (self->priv->protocols != NULL)
1520 {
1521 tp_connection_manager_free_protocols (self->priv->protocols);
1522 }
1523
15241293 if (self->priv->pending_protocols != NULL)
15251294 {
15261295 for (i = 0; i < self->priv->pending_protocols->len; i++)
15271296 g_free (self->priv->pending_protocols->pdata[i]);
15281297
15291298 g_ptr_array_free (self->priv->pending_protocols, TRUE);
1530 }
1531
1532 if (self->priv->found_protocols != NULL)
1533 {
1534 tp_connection_manager_free_protocols (self->priv->found_protocols);
15351299 }
15361300
15371301 G_OBJECT_CLASS (tp_connection_manager_parent_class)->finalize (object);
23302094 if (self->info_source == TP_CM_INFO_SOURCE_NONE)
23312095 return NULL;
23322096
2333 g_assert (self->priv->protocols != NULL);
2334
2335 ret = g_ptr_array_sized_new (self->priv->protocols->len);
2336
2337 for (i = 0; i < self->priv->protocols->len; i++)
2097 g_assert (self->priv->protocol_structs != NULL);
2098
2099 ret = g_ptr_array_sized_new (self->priv->protocol_structs->len);
2100
2101 for (i = 0; i < self->priv->protocol_structs->len; i++)
23382102 {
23392103 TpConnectionManagerProtocol *proto = g_ptr_array_index (
2340 self->priv->protocols, i);
2104 self->priv->protocol_structs, i);
23412105
23422106 if (proto != NULL)
23432107 g_ptr_array_add (ret, g_strdup (proto->name));
23572121 * Returns a structure representing a protocol, or %NULL if this connection
23582122 * manager does not support the specified protocol.
23592123 *
2124 * Since 0.11.11, you can get a #GObject version with more
2125 * functionality by calling tp_connection_manager_get_protocol_object().
2126 *
23602127 * If this function is called before the connection manager information has
23612128 * been obtained, the result is always %NULL. Use
23622129 * tp_connection_manager_call_when_ready() to wait for this.
23702137 */
23712138 const TpConnectionManagerProtocol *
23722139 tp_connection_manager_get_protocol (TpConnectionManager *self,
2373 const gchar *protocol)
2374 {
2375 guint i;
2376
2140 const gchar *protocol)
2141 {
2142 TpProtocol *object;
2143
2144 object = tp_connection_manager_get_protocol_object (self, protocol);
2145
2146 if (object == NULL)
2147 return NULL;
2148
2149 return _tp_protocol_get_struct (object);
2150 }
2151
2152 /**
2153 * tp_connection_manager_get_protocol_object:
2154 * @self: a connection manager
2155 * @protocol: the name of a protocol as defined in the Telepathy D-Bus API,
2156 * e.g. "jabber" or "msn"
2157 *
2158 * Returns an object representing a protocol, or %NULL if this connection
2159 * manager does not support the specified protocol.
2160 *
2161 * If this function is called before the connection manager information has
2162 * been obtained, the result is always %NULL. Use tp_proxy_prepare_async()
2163 * to wait for this.
2164 *
2165 * The result should be referenced with g_object_ref() if it will be kept.
2166 *
2167 * Returns: (transfer none): an object representing the protocol, or %NULL
2168 *
2169 * Since: 0.11.11
2170 */
2171 TpProtocol *
2172 tp_connection_manager_get_protocol_object (TpConnectionManager *self,
2173 const gchar *protocol)
2174 {
23772175 g_return_val_if_fail (TP_IS_CONNECTION_MANAGER (self), NULL);
2378
2379 if (self->info_source == TP_CM_INFO_SOURCE_NONE)
2176 g_return_val_if_fail (protocol != NULL, NULL);
2177
2178 if (self->priv->protocol_objects == NULL)
23802179 return NULL;
23812180
2382 g_assert (self->priv->protocols != NULL);
2383
2384 for (i = 0; i < self->priv->protocols->len; i++)
2385 {
2386 TpConnectionManagerProtocol *proto = g_ptr_array_index (
2387 self->priv->protocols, i);
2388
2389 if (proto != NULL && !tp_strdiff (proto->name, protocol))
2390 return proto;
2391 }
2392
2393 return NULL;
2181 return g_hash_table_lookup (self->priv->protocol_objects, protocol);
23942182 }
23952183
23962184 /**
24122200 tp_connection_manager_has_protocol (TpConnectionManager *self,
24132201 const gchar *protocol)
24142202 {
2415 return (tp_connection_manager_get_protocol (self, protocol) != NULL);
2203 return (tp_connection_manager_get_protocol_object (self, protocol) != NULL);
24162204 }
24172205
24182206 /**
2323
2424 #include <telepathy-glib/dbus.h>
2525 #include <telepathy-glib/defs.h>
26 #include <telepathy-glib/protocol.h>
2627 #include <telepathy-glib/proxy.h>
2728
2829 #include <telepathy-glib/_gen/genums.h>
5859 (tp_connection_manager_param_get_type ())
5960 #define TP_TYPE_CONNECTION_MANAGER_PROTOCOL \
6061 (tp_connection_manager_protocol_get_type ())
61
62 typedef struct _TpConnectionManagerParam TpConnectionManagerParam;
63 struct _TpConnectionManagerParam
64 {
65 /*<public>*/
66 gchar *name;
67 gchar *dbus_signature;
68 GValue default_value;
69 guint flags;
70
71 gpointer priv;
72 };
7362
7463 typedef struct _TpConnectionManagerProtocol TpConnectionManagerProtocol;
7564 struct _TpConnectionManagerProtocol
152141 const gchar *protocol);
153142 const TpConnectionManagerProtocol *tp_connection_manager_get_protocol (
154143 TpConnectionManager *self, const gchar *protocol);
144 TpProtocol *tp_connection_manager_get_protocol_object (
145 TpConnectionManager *self, const gchar *protocol);
155146
156147 gchar **tp_connection_manager_protocol_dup_param_names (
157148 const TpConnectionManagerProtocol *protocol)
167167 tp_connection_get_feature_quark_capabilities (void)
168168 {
169169 return g_quark_from_static_string ("tp-connection-feature-capabilities");
170 }
171
172 /**
173 * TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS:
174 *
175 * Expands to a call to a function that returns a #GQuark representing the
176 * "avatar-requirements" feature.
177 *
178 * When this feature is prepared, the avatar requirements of the Connection has
179 * been retrieved. Use tp_connection_get_avatar_requirements() to get them once
180 * prepared.
181 *
182 * One can ask for a feature to be prepared using the
183 * tp_proxy_prepare_async() function, and waiting for it to callback.
184 *
185 * Since: 0.11.4
186 */
187
188 GQuark
189 tp_connection_get_feature_quark_avatar_requirements (void)
190 {
191 return g_quark_from_static_string ("tp-connection-feature-avatar-requirements");
192170 }
193171
194172 /**
377355 }
378356
379357 static void
380 tp_connection_get_avatar_requirements_cb (TpProxy *proxy,
381 GHashTable *properties,
382 const GError *error,
383 gpointer user_data,
384 GObject *weak_object)
385 {
386 TpConnection *self = (TpConnection *) proxy;
387
388 self->priv->fetching_avatar_requirements = FALSE;
389
390 if (error != NULL)
391 {
392 DEBUG ("Failed to get avatar requirements properties: %s", error->message);
393 goto finally;
394 }
395
396 g_assert (self->priv->avatar_requirements == NULL);
397
398 DEBUG ("AVATAR REQUIREMENTS ready");
399
400 self->priv->avatar_requirements = tp_avatar_requirements_new (
401 (GStrv) tp_asv_get_strv (properties, "SupportedAvatarMIMETypes"),
402 tp_asv_get_uint32 (properties, "MinimumAvatarWidth", NULL),
403 tp_asv_get_uint32 (properties, "MinimumAvatarHeight", NULL),
404 tp_asv_get_uint32 (properties, "RecommendedAvatarWidth", NULL),
405 tp_asv_get_uint32 (properties, "RecommendedAvatarHeight", NULL),
406 tp_asv_get_uint32 (properties, "MaximumAvatarWidth", NULL),
407 tp_asv_get_uint32 (properties, "MaximumAvatarHeight", NULL),
408 tp_asv_get_uint32 (properties, "MaximumAvatarBytes", NULL));
409
410 finally:
411 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS,
412 self->priv->avatar_requirements != NULL);
413 }
414
415 static void
416 tp_connection_maybe_prepare_avatar_requirements (TpProxy *proxy)
417 {
418 TpConnection *self = (TpConnection *) proxy;
419
420 if (self->priv->avatar_requirements != NULL)
421 return; /* already done */
422
423 if (!_tp_proxy_is_preparing (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS))
424 return; /* not interested right now */
425
426 if (!self->priv->ready)
427 return; /* will try again when ready */
428
429 if (self->priv->fetching_avatar_requirements)
430 return; /* Another Get operation is running */
431
432 if (!tp_proxy_has_interface_by_id (proxy,
433 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS))
434 {
435 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS,
436 FALSE);
437 return;
438 }
439
440 self->priv->fetching_avatar_requirements = TRUE;
441
442 tp_cli_dbus_properties_call_get_all (self, -1,
443 TP_IFACE_CONNECTION_INTERFACE_AVATARS,
444 tp_connection_get_avatar_requirements_cb, NULL, NULL, NULL);
445 }
446
447 static void
448358 tp_connection_continue_introspection (TpConnection *self)
449359 {
450360 if (tp_proxy_get_invalidated (self) != NULL)
481391 g_object_notify ((GObject *) self, "connection-ready");
482392
483393 tp_connection_maybe_prepare_capabilities ((TpProxy *) self);
484 tp_connection_maybe_prepare_avatar_requirements ((TpProxy *) self);
394 _tp_connection_maybe_prepare_avatar_requirements ((TpProxy *) self);
485395 _tp_connection_maybe_prepare_contact_info ((TpProxy *) self);
486396 }
487397 else
11201030
11211031 features[FEAT_AVATAR_REQUIREMENTS].name = TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS;
11221032 features[FEAT_AVATAR_REQUIREMENTS].start_preparing =
1123 tp_connection_maybe_prepare_avatar_requirements;
1033 _tp_connection_maybe_prepare_avatar_requirements;
11241034
11251035 features[FEAT_CONTACT_INFO].name = TP_CONNECTION_FEATURE_CONTACT_INFO;
11261036 features[FEAT_CONTACT_INFO].start_preparing =
20571967 }
20581968
20591969 /**
2060 * tp_connection_get_avatar_requirements:
2061 * @self: a connection
2062 *
2063 * To wait for valid avatar requirements, call tp_proxy_prepare_async()
2064 * with the feature %TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS.
2065 *
2066 * This property cannot change after @self goes to the Connected state.
2067 *
2068 * Returns: (transfer none): a #TpAvatarRequirements struct, or %NULL if the
2069 * feature is not yet prepared or the connection doesn't have the necessary
2070 * properties.
2071 * Since: 0.11.4
2072 */
2073 TpAvatarRequirements *
2074 tp_connection_get_avatar_requirements (TpConnection *self)
2075 {
2076 g_return_val_if_fail (TP_IS_CONNECTION (self), NULL);
2077
2078 return self->priv->avatar_requirements;
2079 }
2080
2081 /**
2082 * TpAvatarRequirements:
2083 * @supported_mime_types: An array of supported MIME types (e.g. "image/jpeg")
2084 * Clients MAY assume that the first type in this array is preferred
2085 * @minimum_width: The minimum width in pixels of an avatar, which MAY be 0
2086 * @minimum_height: The minimum height in pixels of an avatar, which MAY be 0
2087 * @recommended_width: The recommended width in pixels of an avatar, or 0 if
2088 * there is no preferred width.
2089 * @recommended_height: The recommended height in pixels of an avatar, or 0 if
2090 * there is no preferred height
2091 * @maximum_width: The maximum width in pixels of an avatar on this protocol,
2092 * or 0 if there is no limit.
2093 * @maximum_height: The maximum height in pixels of an avatar, or 0 if there is
2094 * no limit.
2095 * @maximum_bytes: he maximum size in bytes of an avatar, or 0 if there is no
2096 * limit.
2097 *
2098 * The requirements for setting an avatar on a particular protocol.
2099 *
2100 * Since: 0.11.4
2101 */
2102
2103 /**
2104 * TP_TYPE_AVATAR_REQUIREMENTS:
2105 *
2106 * The boxed type of a #TpAvatarRequirements.
2107 *
2108 * Since: 0.11.4
2109 */
2110 GType
2111 tp_avatar_requirements_get_type (void)
2112 {
2113 static GType type = 0;
2114
2115 if (G_UNLIKELY (type == 0))
2116 {
2117 type = g_boxed_type_register_static (g_intern_static_string ("TpAvatarRequirements"),
2118 (GBoxedCopyFunc) tp_avatar_requirements_copy,
2119 (GBoxedFreeFunc) tp_avatar_requirements_destroy);
2120 }
2121
2122 return type;
2123 }
2124
2125 /**
2126 * tp_avatar_requirements_new:
2127 * @supported_mime_types: An array of supported MIME types (e.g. "image/jpeg")
2128 * Clients MAY assume that the first type in this array is preferred
2129 * @minimum_width: The minimum width in pixels of an avatar, which MAY be 0
2130 * @minimum_height: The minimum height in pixels of an avatar, which MAY be 0
2131 * @recommended_width: The recommended width in pixels of an avatar, or 0 if
2132 * there is no preferred width.
2133 * @recommended_height: The recommended height in pixels of an avatar, or 0 if
2134 * there is no preferred height
2135 * @maximum_width: The maximum width in pixels of an avatar on this protocol,
2136 * or 0 if there is no limit.
2137 * @maximum_height: The maximum height in pixels of an avatar, or 0 if there is
2138 * no limit.
2139 * @maximum_bytes: he maximum size in bytes of an avatar, or 0 if there is no
2140 * limit.
2141 *
2142 * <!--Returns: says it all-->
2143 *
2144 * Returns: a newly allocated #TpAvatarRequirements, free it with
2145 * tp_avatar_requirements_destroy()
2146 * Since: 0.11.4
2147 */
2148 TpAvatarRequirements *
2149 tp_avatar_requirements_new (GStrv supported_mime_types,
2150 guint minimum_width,
2151 guint minimum_height,
2152 guint recommended_width,
2153 guint recommended_height,
2154 guint maximum_width,
2155 guint maximum_height,
2156 guint maximum_bytes)
2157 {
2158 TpAvatarRequirements *self;
2159 gchar *empty[] = { NULL };
2160
2161 self = g_slice_new (TpAvatarRequirements);
2162 self->supported_mime_types =
2163 g_strdupv (supported_mime_types ? supported_mime_types : empty);
2164 self->minimum_width = minimum_width;
2165 self->minimum_height = minimum_height;
2166 self->recommended_width = recommended_width;
2167 self->recommended_height = recommended_height;
2168 self->maximum_width = maximum_width;
2169 self->maximum_height = maximum_height;
2170 self->maximum_bytes = maximum_bytes;
2171
2172 return self;
2173 }
2174
2175 /**
2176 * tp_avatar_requirements_copy: (skip)
2177 * @self: a #TpAvatarRequirements
2178 *
2179 * <!--Returns: says it all-->
2180 *
2181 * Returns: a newly allocated #TpAvatarRequirements, free it with
2182 * tp_avatar_requirements_destroy()
2183 * Since: 0.11.4
2184 */
2185 TpAvatarRequirements *
2186 tp_avatar_requirements_copy (const TpAvatarRequirements *self)
2187 {
2188 g_return_val_if_fail (self != NULL, NULL);
2189
2190 return tp_avatar_requirements_new (self->supported_mime_types,
2191 self->minimum_width,
2192 self->minimum_height,
2193 self->recommended_width,
2194 self->recommended_height,
2195 self->maximum_width,
2196 self->maximum_height,
2197 self->maximum_bytes);
2198 }
2199
2200 /**
2201 * tp_avatar_requirements_destroy: (skip)
2202 * @self: a #TpAvatarRequirements
2203 *
2204 * Free all memory used by the #TpAvatarRequirements.
2205 *
2206 * Since: 0.11.4
2207 */
2208 void
2209 tp_avatar_requirements_destroy (TpAvatarRequirements *self)
2210 {
2211 g_return_if_fail (self != NULL);
2212
2213 g_strfreev (self->supported_mime_types);
2214 g_slice_free (TpAvatarRequirements, self);
2215 }
2216
2217 /**
22181970 * tp_connection_get_detailed_error:
22191971 * @self: a connection
22201972 * @details: (out) (allow-none) (element-type utf8 GObject.Value) (transfer none):
2828 #include <telepathy-glib/proxy.h>
2929
3030 G_BEGIN_DECLS
31
32 typedef struct _TpAvatarRequirements TpAvatarRequirements;
33 struct _TpAvatarRequirements
34 {
35 GStrv supported_mime_types;
36 guint minimum_width;
37 guint minimum_height;
38 guint recommended_width;
39 guint recommended_height;
40 guint maximum_width;
41 guint maximum_height;
42 guint maximum_bytes;
43
44 /*<private>*/
45 gpointer _1;
46 gpointer _2;
47 gpointer _3;
48 gpointer _4;
49 };
50
51 #define TP_TYPE_AVATAR_REQUIREMENTS (tp_avatar_requirements_get_type ())
52 GType tp_avatar_requirements_get_type (void);
53 TpAvatarRequirements * tp_avatar_requirements_new (GStrv supported_mime_types,
54 guint minimum_width,
55 guint minimum_height,
56 guint recommended_width,
57 guint recommended_height,
58 guint maximum_width,
59 guint maximum_height,
60 guint maximum_bytes);
61 TpAvatarRequirements * tp_avatar_requirements_copy (
62 const TpAvatarRequirements *self);
63 void tp_avatar_requirements_destroy (TpAvatarRequirements *self);
6431
6532 typedef struct _TpContactInfoFieldSpec TpContactInfoFieldSpec;
6633 struct _TpContactInfoFieldSpec
159126
160127 TpCapabilities * tp_connection_get_capabilities (TpConnection *self);
161128
162 TpAvatarRequirements * tp_connection_get_avatar_requirements (
163 TpConnection *self);
164
165129 TpContactInfoFlags tp_connection_get_contact_info_flags (TpConnection *self);
166130
167131 GList *tp_connection_get_contact_info_supported_fields (TpConnection *self);
220184 (tp_connection_get_feature_quark_capabilities ())
221185 GQuark tp_connection_get_feature_quark_capabilities (void) G_GNUC_CONST;
222186
223 #define TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS \
224 (tp_connection_get_feature_quark_avatar_requirements ())
225 GQuark tp_connection_get_feature_quark_avatar_requirements (void) G_GNUC_CONST;
226
227187 #define TP_CONNECTION_FEATURE_CONTACT_INFO \
228188 (tp_connection_get_feature_quark_contact_info ())
229189 GQuark tp_connection_get_feature_quark_contact_info (void) G_GNUC_CONST;
251211
252212 void tp_connection_unref_handles (TpConnection *self,
253213 TpHandleType handle_type, guint n_handles, const TpHandle *handles);
214
215 /* connection-avatars.c */
216
217 typedef struct _TpAvatarRequirements TpAvatarRequirements;
218 struct _TpAvatarRequirements
219 {
220 GStrv supported_mime_types;
221 guint minimum_width;
222 guint minimum_height;
223 guint recommended_width;
224 guint recommended_height;
225 guint maximum_width;
226 guint maximum_height;
227 guint maximum_bytes;
228
229 /*<private>*/
230 gpointer _1;
231 gpointer _2;
232 gpointer _3;
233 gpointer _4;
234 };
235
236 #define TP_TYPE_AVATAR_REQUIREMENTS (tp_avatar_requirements_get_type ())
237 GType tp_avatar_requirements_get_type (void);
238 TpAvatarRequirements * tp_avatar_requirements_new (GStrv supported_mime_types,
239 guint minimum_width,
240 guint minimum_height,
241 guint recommended_width,
242 guint recommended_height,
243 guint maximum_width,
244 guint maximum_height,
245 guint maximum_bytes);
246 TpAvatarRequirements * tp_avatar_requirements_copy (
247 const TpAvatarRequirements *self);
248 void tp_avatar_requirements_destroy (TpAvatarRequirements *self);
249
250 #define TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS \
251 (tp_connection_get_feature_quark_avatar_requirements ())
252 GQuark tp_connection_get_feature_quark_avatar_requirements (void) G_GNUC_CONST;
253
254 TpAvatarRequirements * tp_connection_get_avatar_requirements (
255 TpConnection *self);
254256
255257 G_END_DECLS
256258
770770 }
771771
772772
773 /**
774 * tp_dbus_properties_mixin_make_properties_hash:
775 * @object: an object which uses the D-Bus properties mixin
776 * @first_interface: the interface of the first property to be retrieved
777 * @first_property: the name of the first property to be retrieved
778 * @...: more (interface name, property name) pairs, terminated by %NULL.
779 *
780 * Retrieves the values of several D-Bus properties from an object, and builds
781 * a hash mapping the fully-qualified name of the property to its value. This
782 * is equivalent to calling tp_dbus_properties_mixin_get() for each property
783 * and building the table yourself, with the proviso that this function will
784 * g_assert() if retrieving a property fails (for instance, because it does not
785 * exist).
786 *
787 * Additional keys and values can be inserted into the returned hash table;
788 * if this is done, the inserted keys and values will be freed when the
789 * hash table is destroyed. The keys must be allocated with g_strdup() or
790 * equivalent, and the values must be slice-allocated (for instance with
791 * tp_g_value_slice_new_string() or a similar function).
792 *
793 * Note that in particular, tp_asv_set_string() and similar functions should
794 * not be used with this hash table.
795 *
796 * Returns: a hash table mapping (gchar *) fully-qualified property names to
797 * GValues, which must be freed by the caller (at which point its
798 * contents will also be freed).
799 */
800 GHashTable *
801 tp_dbus_properties_mixin_make_properties_hash (
773 static void
774 tp_dbus_properties_mixin_fill_properties_hash_va (
802775 GObject *object,
776 GHashTable *table,
803777 const gchar *first_interface,
804778 const gchar *first_property,
805 ...)
806 {
807 va_list ap;
808 GHashTable *table;
779 va_list ap)
780 {
809781 const gchar *iface, *property;
810782 gboolean first = TRUE;
811
812 table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
813 (GDestroyNotify) tp_g_value_slice_free);
814
815 va_start (ap, first_property);
816783
817784 for (iface = first_interface;
818785 iface != NULL;
843810 g_hash_table_insert (table,
844811 g_strdup_printf ("%s.%s", iface, property), value);
845812 }
846
813 }
814
815 /**
816 * tp_dbus_properties_mixin_fill_properties_hash: (skip)
817 * @object: an object which uses the D-Bus properties mixin
818 * @table: (element-type utf8 GObject.Value): a hash table where the keys are
819 * strings copied with g_strdup() and the values are slice-allocated
820 * #GValue<!-- -->s
821 * @first_interface: the interface of the first property to be retrieved
822 * @first_property: the name of the first property to be retrieved
823 * @...: more (interface name, property name) pairs, terminated by %NULL.
824 *
825 * Retrieves the values of several D-Bus properties from an object, and adds
826 * them to a hash mapping the fully-qualified name of the property to its
827 * value. This is equivalent to calling tp_dbus_properties_mixin_get() for
828 * each property and adding it to the table yourself, with the proviso that
829 * this function will g_assert() if retrieving a property fails (for instance,
830 * because it does not exist).
831 *
832 * Note that in particular, @table does not have the same memory-allocation
833 * model as the hash tables required by tp_asv_set_string() and similar
834 * functions.
835 *
836 * Since: 0.11.11
837 */
838 void
839 tp_dbus_properties_mixin_fill_properties_hash (
840 GObject *object,
841 GHashTable *table,
842 const gchar *first_interface,
843 const gchar *first_property,
844 ...)
845 {
846 va_list ap;
847
848 va_start (ap, first_property);
849 tp_dbus_properties_mixin_fill_properties_hash_va (object, table,
850 first_interface, first_property, ap);
851 va_end (ap);
852 }
853
854 /**
855 * tp_dbus_properties_mixin_make_properties_hash: (skip)
856 * @object: an object which uses the D-Bus properties mixin
857 * @first_interface: the interface of the first property to be retrieved
858 * @first_property: the name of the first property to be retrieved
859 * @...: more (interface name, property name) pairs, terminated by %NULL.
860 *
861 * Retrieves the values of several D-Bus properties from an object, and builds
862 * a hash mapping the fully-qualified name of the property to its value. This
863 * is equivalent to calling tp_dbus_properties_mixin_get() for each property
864 * and building the table yourself, with the proviso that this function will
865 * g_assert() if retrieving a property fails (for instance, because it does not
866 * exist).
867 *
868 * Additional keys and values can be inserted into the returned hash table;
869 * if this is done, the inserted keys and values will be freed when the
870 * hash table is destroyed. The keys must be allocated with g_strdup() or
871 * equivalent, and the values must be slice-allocated (for instance with
872 * tp_g_value_slice_new_string() or a similar function).
873 *
874 * Note that in particular, tp_asv_set_string() and similar functions should
875 * not be used with this hash table.
876 *
877 * Returns: a hash table mapping (gchar *) fully-qualified property names to
878 * GValues, which must be freed by the caller (at which point its
879 * contents will also be freed).
880 */
881 GHashTable *
882 tp_dbus_properties_mixin_make_properties_hash (
883 GObject *object,
884 const gchar *first_interface,
885 const gchar *first_property,
886 ...)
887 {
888 GHashTable *table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
889 (GDestroyNotify) tp_g_value_slice_free);
890 va_list ap;
891
892 va_start (ap, first_property);
893 tp_dbus_properties_mixin_fill_properties_hash_va (object, table,
894 first_interface, first_property, ap);
847895 va_end (ap);
848896
849897 return table;
125125 const gchar *first_property, ...)
126126 G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT;
127127
128 void tp_dbus_properties_mixin_fill_properties_hash (GObject *object,
129 GHashTable *table,
130 const gchar *first_interface,
131 const gchar *first_property,
132 ...)
133 G_GNUC_NULL_TERMINATED;
134
128135 G_END_DECLS
129136
130137 #endif /* #ifndef __TP_DBUS_PROPERTIES_MIXIN_H__ */
758758 *
759759 * Since: 0.11.9
760760 */
761
762 /**
763 * SECTION:svc-protocol
764 * @title: Service-side Protocol interface
765 * @short_description: GInterface for Telepathy Protocol objects
766 * @see_also: #TpBaseProtocol
767 *
768 * The #TpSvcProtocol interface (auto-generated from the Telepathy
769 * spec) makes it easier to export an object implementing the Telepathy
770 * Protocol interface.
771 *
772 * Since: 0.11.11
773 */
774
775 /**
776 * SECTION:channel-contactsearch
777 * @title: Contact Search channels
778 * @short_description: client-side wrappers for the Contact Search channel type
779 * @see_also: #TpChannel
780 *
781 * Some instant messaging protocols allow searching for contacts by name or
782 * other details. In Telepathy, each search attempt is represented as a
783 * Channel.
784 *
785 * This section documents the auto-generated C wrappers for the Contact Search
786 * channel type.
787 *
788 * Since: 0.11.11
789 */
790
791 /**
792 * SECTION:svc-channel-contactsearch
793 * @title: Contact Search channels
794 * @short_description: service-side interface for the Contact Search channel
795 * type
796 *
797 * Some instant messaging protocols allow searching for contacts by name or
798 * other details. In Telepathy, each search attempt is represented as a
799 * Channel.
800 *
801 * This section documents the auto-generated C wrappers for the Contact Search
802 * channel type.
803 *
804 * Since: 0.11.11
805 */
8282
8383
8484 /**
85 * tp_handle_is_valid:
85 * tp_handle_is_valid: (skip)
8686 * @self: A handle repository implementation
8787 * @handle: A handle of the type stored in the repository @self
8888 * @error: Set to InvalidHandle if %FALSE is returned
104104
105105
106106 /**
107 * tp_handles_are_valid:
107 * tp_handles_are_valid: (skip)
108108 * @self: A handle repository implementation
109109 * @handles: Array of TpHandle representing handles of the type stored in
110110 * the repository @self
128128
129129
130130 /**
131 * tp_handle_ref:
131 * tp_handle_ref: (skip)
132132 * @self: A handle repository implementation
133133 * @handle: A handle of the type stored in the repository
134134 *
146146
147147
148148 /**
149 * tp_handles_ref:
149 * tp_handles_ref: (skip)
150150 * @self: A handle repository implementation
151151 * @handles: A GArray of TpHandle representing handles
152152 *
174174
175175
176176 /**
177 * tp_handle_unref:
177 * tp_handle_unref: (skip)
178178 * @self: A handle repository implementation
179179 * @handle: A handle of the type stored in the repository
180180 *
195195
196196
197197 /**
198 * tp_handles_unref:
198 * tp_handles_unref: (skip)
199199 * @self: A handle repository implementation
200200 * @handles: A GArray of TpHandle representing handles
201201 *
223223
224224
225225 /**
226 * tp_handle_client_hold:
226 * tp_handle_client_hold: (skip)
227227 * @self: A handle repository implementation
228228 * @client: The unique bus name of a D-Bus peer
229229 * @handle: A handle of the type stored in the repository
257257 TpHandle, GError **);
258258
259259 /**
260 * tp_handles_client_hold:
260 * tp_handles_client_hold: (skip)
261261 * @self: A handle repository implementation
262262 * @client: The D-Bus unique name of a client
263263 * @handles: A GArray of TpHandle representing handles
314314
315315
316316 /**
317 * tp_handle_client_release:
317 * tp_handle_client_release: (skip)
318318 * @self: A handle repository implementation
319319 * @client: The unique bus name of a D-Bus peer
320320 * @handle: A handle of the type stored in the repository
342342
343343
344344 /**
345 * tp_handles_client_release:
345 * tp_handles_client_release: (skip)
346346 * @self: A handle repository implementation
347347 * @client: The D-Bus unique name of a client
348348 * @handles: A GArray of TpHandle representing handles
406406
407407
408408 /**
409 * tp_handle_inspect:
409 * tp_handle_inspect: (skip)
410410 * @self: A handle repository implementation
411411 * @handle: A handle of the type stored in the repository
412412 *
453453
454454
455455 /**
456 * tp_handle_lookup:
456 * tp_handle_lookup: (skip)
457457 * @self: A handle repository implementation
458458 * @id: A string whose handle is required
459459 * @context: User data to be passed to the normalization callback
479479
480480
481481 /**
482 * tp_handle_set_qdata:
482 * tp_handle_set_qdata: (skip)
483483 * @repo: A handle repository implementation
484484 * @handle: A handle to set data on
485485 * @key_id: Key id to associate data with
504504 }
505505
506506 /**
507 * tp_handle_get_qdata:
507 * tp_handle_get_qdata: (skip)
508508 * @repo: A handle repository implementation
509509 * @handle: A handle to get data from
510510 * @key_id: Key id of data to fetch
107107
108108 /* Handle set helper class */
109109
110 /**
111 * TpHandleSetMemberFunc:
112 * @set: The set of handles on which tp_handle_set_foreach() was called
113 * @handle: A handle in the set
114 * @userdata: Arbitrary user data as supplied to tp_handle_set_foreach()
115 *
116 * Signature of the callback used to iterate over the handle set in
117 * tp_handle_set_foreach().
118 */
119110 typedef void (*TpHandleSetMemberFunc)(TpHandleSet *set, TpHandle handle,
120111 gpointer userdata);
121112
149140
150141 /* static inline because it relies on NUM_TP_HANDLE_TYPES */
151142 /**
152 * tp_handles_supported_and_valid:
143 * tp_handles_supported_and_valid: (skip)
153144 * @repos: An array of possibly null pointers to handle repositories, indexed
154145 * by handle type, where a null pointer means an unsupported handle
155146 * type
4141 };
4242
4343 /**
44 * TP_TYPE_HANDLE_SET:
44 * TP_TYPE_HANDLE_SET: (skip)
4545 *
4646 * The boxed type of a #TpHandleSet.
4747 *
6565 }
6666
6767 /**
68 * tp_handle_set_new:
68 * tp_handle_set_new: (skip)
6969 * @repo: #TpHandleRepoIface that holds the handles to be reffed by this set
7070 *
7171 * Creates a new #TpHandleSet
8686 }
8787
8888 /**
89 * tp_handle_set_new_from_array:
89 * tp_handle_set_new_from_array: (skip)
9090 * @repo: #TpHandleRepoIface that holds the handles to be reffed by this set
91 * @array: array of handles to be referenced by this set
91 * @array: (element-type uint): array of handles to be referenced by this set
9292 *
9393 * Creates a new #TpHandleSet
9494 *
115115 }
116116
117117 /**
118 * tp_handle_set_destroy:
118 * tp_handle_set_destroy: (skip)
119119 * @set:#TpHandleSet to destroy
120120 *
121121 * Delete a #TpHandleSet and unreference any handles that it holds
129129 }
130130
131131 /**
132 * tp_handle_set_clear:
132 * tp_handle_set_clear: (skip)
133133 * @set:#TpHandleSet to clear
134134 *
135135 * Remove every handle from @set, releasing the references it holds.
144144 }
145145
146146 /**
147 * tp_handle_set_is_empty:
147 * tp_handle_set_is_empty: (skip)
148148 * @set:#TpHandleSet to check
149149 *
150150 * Return the same thing as <code>(tp_handle_set_size (set) == 0)</code>,
161161 }
162162
163163 /**
164 * tp_handle_set_peek:
164 * tp_handle_set_peek: (skip)
165165 * @set:#TpHandleSet to peek at
166166 *
167167 * <!--Returns: says it all, this comment is just to keep gtkdoc happy-->
168168 *
169 * Returns: the underlying #TpIntSet used by this #TpHandleSet
169 * Returns: (transfer none): the underlying #TpIntSet used by this #TpHandleSet
170170 */
171171 TpIntSet *
172172 tp_handle_set_peek (TpHandleSet *set)
175175 }
176176
177177 /**
178 * tp_handle_set_add:
178 * tp_handle_set_add: (skip)
179179 * @set: #TpHandleSet to add this handle to
180180 * @handle: handle to add
181181 *
197197 }
198198
199199 /**
200 * tp_handle_set_remove:
200 * tp_handle_set_remove: (skip)
201201 * @set: #TpHandleSet to remove this handle from
202202 * @handle: handle to remove
203203 *
224224 }
225225
226226 /**
227 * tp_handle_set_is_member:
227 * tp_handle_set_is_member: (skip)
228228 * @set: A #TpHandleSet
229229 * @handle: handle to check
230230 *
256256 }
257257
258258 /**
259 * tp_handle_set_foreach:
259 * TpHandleSetMemberFunc: (skip)
260 * @set: The set of handles on which tp_handle_set_foreach() was called
261 * @handle: A handle in the set
262 * @userdata: Arbitrary user data as supplied to tp_handle_set_foreach()
263 *
264 * Signature of the callback used to iterate over the handle set in
265 * tp_handle_set_foreach().
266 */
267
268 /**
269 * tp_handle_set_foreach: (skip)
260270 * @set: A set of handles
261 * @func: A callback
262 * @userdata: Arbitrary data to pass to @func
271 * @func: (scope call): A callback
272 * @userdata: (closure): Arbitrary data to pass to @func
263273 *
264274 * Call @func(@set, @handle, @userdata) for each handle in @set.
265275 */
275285 }
276286
277287 /**
278 * tp_handle_set_size:
288 * tp_handle_set_size: (skip)
279289 * @set: A set of handles
280290 *
281291 * <!--no further documentation needed-->
289299 }
290300
291301 /**
292 * tp_handle_set_to_array:
302 * tp_handle_set_to_array: (skip)
293303 * @set: A handle set
294304 *
295305 * <!--Returns: says it all, this comment is just to keep gtkdoc happy-->
296306 *
297 * Returns: a newly-allocated GArray of guint representing the handles
298 * in the set
307 * Returns: (element-type uint): a newly-allocated GArray of guint representing
308 * the handles in the set
299309 */
300310 GArray *
301311 tp_handle_set_to_array (const TpHandleSet *set)
313323 }
314324
315325 /**
316 * tp_handle_set_copy:
326 * tp_handle_set_copy: (skip)
317327 * @other: another handle set
318328 *
319329 * Creates a new #TpHandleSet with the same contents as @other.
337347 }
338348
339349 /**
340 * tp_handle_set_update:
350 * tp_handle_set_update: (skip)
341351 * @set: a #TpHandleSet to update
342352 * @add: a #TpIntSet of handles to add
343353 *
374384 }
375385
376386 /**
377 * tp_handle_set_difference_update:
387 * tp_handle_set_difference_update: (skip)
378388 * @set: a #TpHandleSet to update
379389 * @remove: a #TpIntSet of handles to remove
380390 *
99 $(srcdir)/account-manager.c $(srcdir)/account-manager.h \
1010 $(srcdir)/connection.c $(srcdir)/connection.h \
1111 $(srcdir)/connection-handles.c \
12 $(srcdir)/protocol.c $(srcdir)/protocol.h \
1213 $(srcdir)/connection-manager.c $(srcdir)/connection-manager.h \
1314 $(srcdir)/channel.c $(srcdir)/channel.h \
1415 $(srcdir)/handle.c $(srcdir)/handle.h \
3031 $(srcdir)/channel-request.c $(srcdir)/channel-request.h \
3132 $(srcdir)/observe-channels-context.c $(srcdir)/observe-channels-context.h \
3233 $(srcdir)/add-dispatch-operation-context.c $(srcdir)/add-dispatch-operation-context.h \
34 $(srcdir)/protocol.c $(srcdir)/protocol.h \
35 $(srcdir)/base-connection.c $(srcdir)/base-connection.h \
36 $(srcdir)/handle-repo.c $(srcdir)/handle-repo.h $(srcdir)/handle-set.c \
3337 _gen/telepathy-enums.h \
3438 _gen/telepathy-interfaces.h
3539
0 /* TpProtocol - internal header
1 *
2 * Copyright © 2010 Collabora Ltd.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #ifndef TP_PROTOCOL_INTERNAL_H
20 #define TP_PROTOCOL_INTERNAL_H
21
22 #include <telepathy-glib/connection-manager.h>
23 #include <telepathy-glib/protocol.h>
24
25 G_BEGIN_DECLS
26
27 void _tp_connection_manager_param_free_contents (
28 TpConnectionManagerParam *param);
29 void _tp_connection_manager_protocol_free_contents (
30 TpConnectionManagerProtocol *proto);
31
32 TpConnectionManagerProtocol *_tp_protocol_get_struct (TpProtocol *self);
33
34 GHashTable *_tp_protocol_parse_manager_file (GKeyFile *file,
35 const gchar *cm_name,
36 const gchar *group,
37 gchar **protocol_name);
38
39 G_END_DECLS
40
41 #endif
0 /* TpProtocol
1 *
2 * Copyright © 2010 Collabora Ltd.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 /**
20 * SECTION:protocol
21 * @title: TpProtocol
22 * @short_description: proxy for a Telepathy Protocol object
23 * @see_also: #TpConnectionManager
24 *
25 * #TpProtocol objects represent the protocols implemented by Telepathy
26 * connection managers. In modern connection managers, each protocol is
27 * represented by a D-Bus object; in older connection managers, the protocols
28 * are represented by data structures, and this object merely emulates a D-Bus
29 * object.
30 *
31 * Since: 0.11.11
32 */
33
34 #include <telepathy-glib/protocol.h>
35 #include <telepathy-glib/protocol-internal.h>
36
37 #include <telepathy-glib/proxy-subclass.h>
38 #include <telepathy-glib/telepathy-glib.h>
39
40 #define DEBUG_FLAG TP_DEBUG_PARAMS
41 #include "telepathy-glib/capabilities-internal.h"
42 #include "telepathy-glib/debug-internal.h"
43 #include "telepathy-glib/proxy-internal.h"
44
45 #include "telepathy-glib/_gen/signals-marshal.h"
46 #include "telepathy-glib/_gen/tp-cli-protocol.h"
47 #include "telepathy-glib/_gen/tp-cli-protocol-body.h"
48
49 #include <string.h>
50
51 struct _TpProtocolClass
52 {
53 /*<private>*/
54 TpProxyClass parent_class;
55 };
56
57 /**
58 * TpProtocol:
59 *
60 * A base class for connection managers' protocols.
61 *
62 * Since: 0.11.11
63 */
64
65 /**
66 * TpProtocolClass:
67 *
68 * The class of a #TpProtocol.
69 *
70 * Since: 0.11.11
71 */
72
73 G_DEFINE_TYPE(TpProtocol, tp_protocol, TP_TYPE_PROXY);
74
75 /**
76 * TP_PROTOCOL_FEATURE_PARAMETERS:
77 *
78 * Expands to a call to a function that returns a quark for the parameters
79 * feature of a #TpProtocol.
80 *
81 * When this feature is prepared, the possible parameters for connections to
82 * this protocol have been retrieved and are available for use.
83 *
84 * Unlike %TP_PROTOCOL_FEATURE_CORE, this feature can even be available on
85 * connection managers that don't really have Protocol objects
86 * (on these older connection managers, the #TpProtocol uses information from
87 * ConnectionManager methods to provide the list of parameters).
88 *
89 * One can ask for a feature to be prepared using the
90 * tp_proxy_prepare_async() function, and waiting for it to callback.
91 *
92 * Since: 0.11.11
93 */
94
95 GQuark
96 tp_protocol_get_feature_quark_parameters (void)
97 {
98 return g_quark_from_static_string ("tp-protocol-feature-parameters");
99 }
100
101 /**
102 * TP_PROTOCOL_FEATURE_CORE:
103 *
104 * Expands to a call to a function that returns a quark for the core
105 * feature of a #TpProtocol.
106 *
107 * When this feature is prepared, at least the following basic information
108 * about the protocol is available:
109 *
110 * <itemizedlist>
111 * <listitem>possible parameters for connections to this protocol</listitem>
112 * <listitem>interfaces expected on connections to this protocol</listitem>
113 * <listitem>classes of channel that could be requested from connections
114 * to this protocol</listitem>
115 * </itemizedlist>
116 *
117 * (This feature implies that %TP_PROTOCOL_FEATURE_PARAMETERS is also
118 * available.)
119 *
120 * Unlike %TP_PROTOCOL_FEATURE_PARAMETERS, this feature can only become
121 * available on connection managers that implement Protocol objects.
122 *
123 * One can ask for a feature to be prepared using the
124 * tp_proxy_prepare_async() function, and waiting for it to callback.
125 *
126 * Since: 0.11.11
127 */
128
129 GQuark
130 tp_protocol_get_feature_quark_core (void)
131 {
132 return g_quark_from_static_string ("tp-protocol-feature-core");
133 }
134
135 struct _TpProtocolPrivate
136 {
137 TpConnectionManagerProtocol protocol_struct;
138 GHashTable *protocol_properties;
139 gchar *vcard_field;
140 gchar *english_name;
141 gchar *icon_name;
142 TpCapabilities *capabilities;
143 };
144
145 enum
146 {
147 PROP_PROTOCOL_NAME = 1,
148 PROP_PROTOCOL_PROPERTIES,
149 PROP_ENGLISH_NAME,
150 PROP_VCARD_FIELD,
151 PROP_ICON_NAME,
152 PROP_CAPABILITIES,
153 PROP_PARAM_NAMES,
154 N_PROPS
155 };
156
157 /* this is NULL-safe for @parameters, and callers rely on this */
158 static TpConnectionManagerParam *
159 tp_protocol_params_from_param_specs (const GPtrArray *parameters,
160 const gchar *cm_debug_name,
161 const gchar *protocol)
162 {
163 GArray *output;
164 guint i;
165
166 DEBUG ("Protocol name: %s", protocol);
167
168 if (parameters == NULL)
169 {
170 return g_new0 (TpConnectionManagerParam, 1);
171 }
172
173 output = g_array_sized_new (TRUE, TRUE,
174 sizeof (TpConnectionManagerParam), parameters->len);
175
176 for (i = 0; i < parameters->len; i++)
177 {
178 GValue structure = { 0 };
179 GValue *tmp;
180 /* Points to the zeroed entry just after the end of the array
181 * - but we're about to extend the array to make it valid */
182 TpConnectionManagerParam *param = &g_array_index (output,
183 TpConnectionManagerParam, output->len);
184
185 g_value_init (&structure, TP_STRUCT_TYPE_PARAM_SPEC);
186 g_value_set_static_boxed (&structure, g_ptr_array_index (parameters, i));
187
188 g_array_set_size (output, output->len + 1);
189
190 if (!dbus_g_type_struct_get (&structure,
191 0, &param->name,
192 1, &param->flags,
193 2, &param->dbus_signature,
194 3, &tmp,
195 G_MAXUINT))
196 {
197 DEBUG ("Unparseable parameter #%d for %s, ignoring", i, protocol);
198 /* *shrug* that one didn't work, let's skip it */
199 g_array_set_size (output, output->len - 1);
200 continue;
201 }
202
203 g_value_init (&param->default_value,
204 G_VALUE_TYPE (tmp));
205 g_value_copy (tmp, &param->default_value);
206 g_value_unset (tmp);
207 g_free (tmp);
208
209 param->priv = NULL;
210
211 DEBUG ("\tParam name: %s", param->name);
212 DEBUG ("\tParam flags: 0x%x", param->flags);
213 DEBUG ("\tParam sig: %s", param->dbus_signature);
214
215 if ((!tp_strdiff (param->name, "password") ||
216 g_str_has_suffix (param->name, "-password")) &&
217 (param->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
218 {
219 DEBUG ("\tTreating as secret due to its name (please fix %s)",
220 cm_debug_name);
221 param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
222 }
223
224 #ifdef ENABLE_DEBUG
225 {
226 gchar *repr = g_strdup_value_contents (&(param->default_value));
227
228 DEBUG ("\tParam default value: %s of type %s", repr,
229 G_VALUE_TYPE_NAME (&(param->default_value)));
230 g_free (repr);
231 }
232 #endif
233 }
234
235 return (TpConnectionManagerParam *) g_array_free (output, FALSE);
236 }
237
238 static void
239 tp_protocol_get_property (GObject *object,
240 guint property_id,
241 GValue *value,
242 GParamSpec *pspec)
243 {
244 TpProtocol *self = (TpProtocol *) object;
245
246 switch (property_id)
247 {
248 case PROP_PROTOCOL_NAME:
249 g_value_set_string (value, self->priv->protocol_struct.name);
250 break;
251
252 case PROP_PROTOCOL_PROPERTIES:
253 g_value_set_boxed (value, self->priv->protocol_properties);
254 break;
255
256 case PROP_ENGLISH_NAME:
257 g_value_set_string (value, tp_protocol_get_english_name (self));
258 break;
259
260 case PROP_VCARD_FIELD:
261 g_value_set_string (value, tp_protocol_get_vcard_field (self));
262 break;
263
264 case PROP_ICON_NAME:
265 g_value_set_string (value, tp_protocol_get_icon_name (self));
266 break;
267
268 case PROP_CAPABILITIES:
269 g_value_set_object (value, tp_protocol_get_capabilities (self));
270 break;
271
272 case PROP_PARAM_NAMES:
273 g_value_take_boxed (value, tp_protocol_dup_param_names (self));
274 break;
275
276 default:
277 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
278 break;
279 }
280 }
281
282 static void
283 tp_protocol_set_property (GObject *object,
284 guint property_id,
285 const GValue *value,
286 GParamSpec *pspec)
287 {
288 TpProtocol *self = (TpProtocol *) object;
289
290 switch (property_id)
291 {
292 case PROP_PROTOCOL_NAME:
293 g_assert (self->priv->protocol_struct.name == NULL);
294 self->priv->protocol_struct.name = g_value_dup_string (value);
295 break;
296
297 case PROP_PROTOCOL_PROPERTIES:
298 g_assert (self->priv->protocol_properties == NULL);
299 self->priv->protocol_properties = g_value_dup_boxed (value);
300 break;
301
302 default:
303 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
304 break;
305 }
306 }
307
308 void
309 _tp_connection_manager_param_free_contents (TpConnectionManagerParam *param)
310 {
311 g_free (param->name);
312 g_free (param->dbus_signature);
313
314 if (G_IS_VALUE (&param->default_value))
315 g_value_unset (&param->default_value);
316 }
317
318 void
319 _tp_connection_manager_protocol_free_contents (
320 TpConnectionManagerProtocol *proto)
321 {
322 g_free (proto->name);
323
324 if (proto->params != NULL)
325 {
326 TpConnectionManagerParam *param;
327
328 for (param = proto->params; param->name != NULL; param++)
329 _tp_connection_manager_param_free_contents (param);
330 }
331
332 g_free (proto->params);
333 }
334
335 static void
336 tp_protocol_dispose (GObject *object)
337 {
338 TpProtocol *self = TP_PROTOCOL (object);
339 GObjectFinalizeFunc dispose =
340 ((GObjectClass *) tp_protocol_parent_class)->dispose;
341
342 if (self->priv->capabilities != NULL)
343 {
344 g_object_unref (self->priv->capabilities);
345 self->priv->capabilities = NULL;
346 }
347
348 if (dispose != NULL)
349 dispose (object);
350 }
351
352 static void
353 tp_protocol_finalize (GObject *object)
354 {
355 TpProtocol *self = TP_PROTOCOL (object);
356 GObjectFinalizeFunc finalize =
357 ((GObjectClass *) tp_protocol_parent_class)->finalize;
358
359 _tp_connection_manager_protocol_free_contents (&self->priv->protocol_struct);
360 g_free (self->priv->vcard_field);
361 g_free (self->priv->english_name);
362
363 if (self->priv->protocol_properties != NULL)
364 g_hash_table_unref (self->priv->protocol_properties);
365
366 if (finalize != NULL)
367 finalize (object);
368 }
369
370 static gboolean
371 tp_protocol_check_for_core (TpProtocol *self)
372 {
373 const GHashTable *props = self->priv->protocol_properties;
374 const GValue *value;
375
376 /* this one can legitimately be NULL so we need to be more careful */
377 value = tp_asv_lookup (props, TP_PROP_PROTOCOL_CONNECTION_INTERFACES);
378
379 if (value == NULL || !G_VALUE_HOLDS (value, G_TYPE_STRV))
380 return FALSE;
381
382 if (tp_asv_get_boxed (props, TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES,
383 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST) == NULL)
384 return FALSE;
385
386 /* Interfaces has a sensible default, the empty list.
387 * VCardField, EnglishName and Icon have a sensible default, "". */
388
389 return TRUE;
390 }
391
392 static gchar *
393 title_case (const gchar *s)
394 {
395 gunichar u;
396 /* 6 bytes are enough for any Unicode character, 7th byte remains '\0' */
397 gchar buf[7] = { 0 };
398
399 /* if s isn't UTF-8, give up and use it as-is */
400 if (!g_utf8_validate (s, -1, NULL))
401 return g_strdup (s);
402
403 u = g_utf8_get_char (s);
404
405 if (!g_unichar_islower (u))
406 return g_strdup (s);
407
408 u = g_unichar_totitle (u);
409 g_unichar_to_utf8 (u, buf);
410 g_assert (buf [sizeof (buf) - 1] == '\0');
411
412 return g_strdup_printf ("%s%s", buf, g_utf8_next_char (s));
413 }
414
415 static void
416 tp_protocol_constructed (GObject *object)
417 {
418 TpProtocol *self = (TpProtocol *) object;
419 TpProxy *proxy = (TpProxy *) object;
420 void (*chain_up) (GObject *) =
421 ((GObjectClass *) tp_protocol_parent_class)->constructed;
422 const gchar *s;
423 const GPtrArray *rccs;
424 gboolean had_immutables = TRUE;
425
426 if (chain_up != NULL)
427 chain_up (object);
428
429 g_assert (self->priv->protocol_struct.name != NULL);
430
431 if (self->priv->protocol_properties == NULL)
432 {
433 had_immutables = FALSE;
434 self->priv->protocol_properties = g_hash_table_new_full (g_str_hash,
435 g_str_equal, g_free, (GDestroyNotify) tp_g_value_slice_free);
436 }
437
438 self->priv->protocol_struct.params = tp_protocol_params_from_param_specs (
439 tp_asv_get_boxed (self->priv->protocol_properties,
440 TP_PROP_PROTOCOL_PARAMETERS,
441 TP_ARRAY_TYPE_PARAM_SPEC_LIST),
442 tp_proxy_get_bus_name (self), self->priv->protocol_struct.name);
443
444 /* force vCard field to lower case, even if the CM is spec-incompliant */
445 s = tp_asv_get_string (self->priv->protocol_properties,
446 TP_PROP_PROTOCOL_VCARD_FIELD);
447
448 if (tp_str_empty (s))
449 self->priv->vcard_field = NULL;
450 else
451 self->priv->vcard_field = g_utf8_strdown (s, -1);
452
453 s = tp_asv_get_string (self->priv->protocol_properties,
454 TP_PROP_PROTOCOL_ENGLISH_NAME);
455
456 if (tp_str_empty (s))
457 self->priv->english_name = title_case (self->priv->protocol_struct.name);
458 else
459 self->priv->english_name = g_strdup (s);
460
461 s = tp_asv_get_string (self->priv->protocol_properties,
462 TP_PROP_PROTOCOL_ICON);
463
464 if (tp_str_empty (s))
465 self->priv->icon_name = g_strdup_printf ("im-%s",
466 self->priv->protocol_struct.name);
467 else
468 self->priv->icon_name = g_strdup (s);
469
470 rccs = tp_asv_get_boxed (self->priv->protocol_properties,
471 TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES,
472 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST);
473
474 if (rccs != NULL)
475 self->priv->capabilities = _tp_capabilities_new (rccs, FALSE);
476
477 /* become ready immediately */
478 _tp_proxy_set_feature_prepared (proxy, TP_PROTOCOL_FEATURE_PARAMETERS,
479 had_immutables);
480 _tp_proxy_set_feature_prepared (proxy, TP_PROTOCOL_FEATURE_CORE,
481 had_immutables && tp_protocol_check_for_core (self));
482 }
483
484 enum {
485 FEAT_PARAMETERS,
486 FEAT_CORE,
487 N_FEAT
488 };
489
490 static const TpProxyFeature *
491 tp_protocol_list_features (TpProxyClass *cls G_GNUC_UNUSED)
492 {
493 static TpProxyFeature features[N_FEAT + 1] = { { 0 } };
494
495 if (G_LIKELY (features[0].name != 0))
496 return features;
497
498 /* we always try to prepare both of these features, and nothing else is
499 * allowed to complete until they have succeeded or failed */
500 features[FEAT_PARAMETERS].name = TP_PROTOCOL_FEATURE_PARAMETERS;
501 features[FEAT_PARAMETERS].core = TRUE;
502 features[FEAT_CORE].name = TP_PROTOCOL_FEATURE_CORE;
503 features[FEAT_CORE].core = TRUE;
504
505 /* assert that the terminator at the end is there */
506 g_assert (features[N_FEAT].name == 0);
507
508 return features;
509 }
510
511 static void
512 tp_protocol_class_init (TpProtocolClass *klass)
513 {
514 TpProxyClass *proxy_class = (TpProxyClass *) klass;
515 GObjectClass *object_class = (GObjectClass *) klass;
516
517 g_type_class_add_private (klass, sizeof (TpProtocolPrivate));
518
519 object_class->constructed = tp_protocol_constructed;
520 object_class->get_property = tp_protocol_get_property;
521 object_class->set_property = tp_protocol_set_property;
522 object_class->dispose = tp_protocol_dispose;
523 object_class->finalize = tp_protocol_finalize;
524
525 /**
526 * TpProtocol:protocol-name:
527 *
528 * The machine-readable name of the protocol, taken from the Telepathy
529 * D-Bus Interface Specification, such as "jabber" or "local-xmpp".
530 *
531 * Since: 0.11.11
532 */
533 g_object_class_install_property (object_class, PROP_PROTOCOL_NAME,
534 g_param_spec_string ("protocol-name",
535 "Name of this protocol",
536 "The Protocol from telepathy-spec, such as 'jabber' or 'local-xmpp'",
537 NULL,
538 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
539
540 /**
541 * TpProtocol:protocol-properties
542 *
543 * The immutable properties of this Protocol, as provided at construction
544 * time. This is a map from string to #GValue, which must not be modified.
545 *
546 * If the immutable properties were not provided at construction time,
547 * the %TP_PROTOCOL_FEATURE_PARAMETERS and %TP_PROTOCOL_FEATURE_CORE features
548 * will both be unavailable, and this #TpProtocol object will only be useful
549 * as a way to access lower-level D-Bus calls.
550 *
551 * Since: 0.11.11
552 */
553 g_object_class_install_property (object_class, PROP_PROTOCOL_PROPERTIES,
554 g_param_spec_boxed ("protocol-properties",
555 "Protocol properties",
556 "The immutable properties of this Protocol",
557 TP_HASH_TYPE_QUALIFIED_PROPERTY_VALUE_MAP,
558 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
559
560 /**
561 * TpProtocol:english-name:
562 *
563 * The name of the protocol in a form suitable for display to users,
564 * such as "AIM" or "Yahoo!", or a string based on #TpProtocol:name
565 * (currently constructed by putting the first character in title case,
566 * but this is not guaranteed) if no better name is available or the
567 * %TP_PROTOCOL_FEATURE_CORE feature has not been prepared.
568 *
569 * This is effectively in the C locale (international English); user
570 * interfaces requiring a localized protocol name should look one up in their
571 * own message catalog based on either #TpProtocol:name or
572 * #TpProtocol:english-name, but should use this English version as a
573 * fallback if no translated version can be found.
574 *
575 * Since: 0.11.11
576 */
577 g_object_class_install_property (object_class, PROP_ENGLISH_NAME,
578 g_param_spec_string ("english-name",
579 "English name",
580 "A non-NULL English name for this Protocol",
581 NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
582
583 /**
584 * TpProtocol:vcard-field:
585 *
586 * The most common vCard field used for this protocol's contact
587 * identifiers, normalized to lower case, or %NULL if there is no such field
588 * or the %TP_PROTOCOL_FEATURE_CORE feature has not been prepared.
589 *
590 * Since: 0.11.11
591 */
592 g_object_class_install_property (object_class, PROP_VCARD_FIELD,
593 g_param_spec_string ("vcard-field",
594 "vCard field",
595 "A lower-case vCard name for this Protocol, or NULL",
596 NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
597
598 /**
599 * TpProtocol:icon-name:
600 *
601 * The name of an icon in the system's icon theme. If none was supplied
602 * by the Protocol, or the %TP_PROTOCOL_FEATURE_CORE feature has not been
603 * prepared, a default is used; currently, this is "im-" plus
604 * #TpProtocol:name.
605 *
606 * Since: 0.11.11
607 */
608 g_object_class_install_property (object_class, PROP_ICON_NAME,
609 g_param_spec_string ("icon-name",
610 "Icon name",
611 "A non-NULL Icon name for this Protocol",
612 NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
613
614 /**
615 * TpProtocol:capabilities:
616 *
617 * The classes of channel that can be requested from connections to this
618 * protocol, or %NULL if this is unknown or the %TP_PROTOCOL_FEATURE_CORE
619 * feature has not been prepared.
620 *
621 * Since: 0.11.11
622 */
623 g_object_class_install_property (object_class, PROP_CAPABILITIES,
624 g_param_spec_object ("capabilities",
625 "Capabilities",
626 "Requestable channel classes for this Protocol",
627 TP_TYPE_CAPABILITIES, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
628
629 /**
630 * TpProtocol:param-names:
631 *
632 * A list of parameter names supported by this connection manager
633 * for this protocol, or %NULL if %TP_PROTOCOL_FEATURE_PARAMETERS has not
634 * been prepared.
635 *
636 * Since: 0.11.11
637 */
638 g_object_class_install_property (object_class, PROP_PARAM_NAMES,
639 g_param_spec_boxed ("param-names",
640 "Parameter names",
641 "A list of parameter names",
642 G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
643
644 proxy_class->list_features = tp_protocol_list_features;
645 proxy_class->must_have_unique_name = FALSE;
646 proxy_class->interface = TP_IFACE_QUARK_PROTOCOL;
647 tp_protocol_init_known_interfaces ();
648 }
649
650 static void
651 tp_protocol_init (TpProtocol *self)
652 {
653 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TYPE_PROTOCOL,
654 TpProtocolPrivate);
655 }
656
657 /**
658 * tp_protocol_new:
659 * @dbus: proxy for the D-Bus daemon; may not be %NULL
660 * @cm_name: the connection manager name (such as "gabble")
661 * @protocol_name: the protocol name (such as "jabber")
662 * @immutable_properties: the immutable D-Bus properties for this protocol
663 * @error: used to indicate the error if %NULL is returned
664 *
665 * <!-- -->
666 *
667 * Returns: a new protocol proxy, or %NULL on invalid arguments
668 *
669 * Since: 0.11.11
670 */
671 TpProtocol *
672 tp_protocol_new (TpDBusDaemon *dbus,
673 const gchar *cm_name,
674 const gchar *protocol_name,
675 const GHashTable *immutable_properties,
676 GError **error)
677 {
678 TpProtocol *ret = NULL;
679 gchar *bus_name = NULL;
680 gchar *object_path = NULL;
681
682 g_return_val_if_fail (TP_IS_DBUS_DAEMON (dbus), NULL);
683
684 if (!tp_connection_manager_check_valid_protocol_name (protocol_name, error))
685 goto finally;
686
687 if (!tp_connection_manager_check_valid_name (cm_name, error))
688 goto finally;
689
690 bus_name = g_strdup_printf ("%s%s", TP_CM_BUS_NAME_BASE, cm_name);
691 object_path = g_strdup_printf ("%s%s/%s", TP_CM_OBJECT_PATH_BASE, cm_name,
692 protocol_name);
693 /* e.g. local-xmpp -> local_xmpp */
694 g_strdelimit (object_path, "-", '_');
695
696 ret = TP_PROTOCOL (g_object_new (TP_TYPE_PROTOCOL,
697 "dbus-daemon", dbus,
698 "bus-name", bus_name,
699 "object-path", object_path,
700 "protocol-name", protocol_name,
701 "protocol-properties", immutable_properties,
702 NULL));
703
704 finally:
705 g_free (bus_name);
706 g_free (object_path);
707 return ret;
708 }
709
710 /**
711 * tp_protocol_init_known_interfaces:
712 *
713 * Ensure that the known interfaces for TpProtocol have been set up.
714 * This is done automatically when necessary, but for correct
715 * overriding of library interfaces by local extensions, you should
716 * call this function before calling
717 * tp_proxy_or_subclass_hook_on_interface_add() with first argument
718 * %TP_TYPE_PROTOCOL.
719 *
720 * Since: 0.11.11
721 */
722 void
723 tp_protocol_init_known_interfaces (void)
724 {
725 static gsize once = 0;
726
727 if (g_once_init_enter (&once))
728 {
729 GType type = TP_TYPE_PROTOCOL;
730
731 tp_proxy_init_known_interfaces ();
732
733 tp_proxy_or_subclass_hook_on_interface_add (type,
734 tp_cli_protocol_add_signals);
735 tp_proxy_subclass_add_error_mapping (type,
736 TP_ERROR_PREFIX, TP_ERRORS, TP_TYPE_ERROR);
737
738 g_once_init_leave (&once, 1);
739 }
740 }
741
742 TpConnectionManagerProtocol *
743 _tp_protocol_get_struct (TpProtocol *self)
744 {
745 return &self->priv->protocol_struct;
746 }
747
748 /**
749 * tp_protocol_get_name:
750 * @self: a protocol object
751 *
752 * Return the same thing as the protocol-name property, for convenient use
753 * in C code. The returned string is valid for as long as @self exists.
754 *
755 * Returns: the value of the #TpProtocol:protocol-name property
756 *
757 * Since: 0.11.11
758 */
759 const gchar *
760 tp_protocol_get_name (TpProtocol *self)
761 {
762 g_return_val_if_fail (TP_IS_PROTOCOL (self), NULL);
763 return self->priv->protocol_struct.name;
764 }
765
766 /**
767 * tp_protocol_has_param:
768 * @self: a protocol
769 * @param: a parameter name
770 *
771 * <!-- no more to say -->
772 *
773 * Returns: %TRUE if @self supports the parameter @param.
774 *
775 * Since: 0.11.11
776 */
777 gboolean
778 tp_protocol_has_param (TpProtocol *self,
779 const gchar *param)
780 {
781 return (tp_protocol_get_param (self, param) != NULL);
782 }
783
784 /**
785 * tp_protocol_get_param:
786 * @self: a protocol
787 * @param: a parameter name
788 *
789 * <!-- no more to say -->
790 *
791 * Returns: a structure representing the parameter @param, or %NULL if not
792 * supported
793 *
794 * Since: 0.11.11
795 */
796 const TpConnectionManagerParam *tp_protocol_get_param (TpProtocol *self,
797 const gchar *param)
798 {
799 g_return_val_if_fail (TP_IS_PROTOCOL (self), FALSE);
800 return tp_connection_manager_protocol_get_param (
801 &self->priv->protocol_struct, param);
802 }
803
804 /**
805 * tp_protocol_can_register:
806 * @self: a protocol
807 *
808 * Return whether a new account can be registered on this protocol, by setting
809 * the special "register" parameter to %TRUE.
810 *
811 * Returns: %TRUE if @protocol supports the parameter "register"
812 *
813 * Since: 0.11.11
814 */
815 gboolean
816 tp_protocol_can_register (TpProtocol *self)
817 {
818 return tp_protocol_has_param (self, "register");
819 }
820
821 /**
822 * tp_protocol_dup_param_names:
823 * @self: a protocol
824 *
825 * Returns a list of parameter names supported by this connection manager
826 * for this protocol.
827 *
828 * The result is copied and must be freed by the caller with g_strfreev().
829 *
830 * Returns: (type GObject.Strv) (transfer full): a copy of
831 * #TpProtocol:param-names
832 *
833 * Since: 0.11.11
834 */
835 GStrv
836 tp_protocol_dup_param_names (TpProtocol *self)
837 {
838 g_return_val_if_fail (TP_IS_PROTOCOL (self), NULL);
839 return tp_connection_manager_protocol_dup_param_names (
840 &self->priv->protocol_struct);
841 }
842
843 /**
844 * tp_protocol_get_vcard_field:
845 * @self: a protocol object
846 *
847 * <!-- -->
848 *
849 * Returns: the value of #TpProtocol:vcard-field
850 *
851 * Since: 0.11.11
852 */
853 const gchar *
854 tp_protocol_get_vcard_field (TpProtocol *self)
855 {
856 g_return_val_if_fail (TP_IS_PROTOCOL (self), NULL);
857 return self->priv->vcard_field;
858 }
859
860 /**
861 * tp_protocol_get_english_name:
862 * @self: a protocol object
863 *
864 * <!-- -->
865 *
866 * Returns: the non-%NULL, non-empty value of #TpProtocol:english-name
867 *
868 * Since: 0.11.11
869 */
870 const gchar *
871 tp_protocol_get_english_name (TpProtocol *self)
872 {
873 g_return_val_if_fail (TP_IS_PROTOCOL (self), "");
874 return self->priv->english_name;
875 }
876
877 /**
878 * tp_protocol_get_icon_name:
879 * @self: a protocol object
880 *
881 * <!-- -->
882 *
883 * Returns: the non-%NULL, non-empty value of #TpProtocol:icon-name
884 *
885 * Since: 0.11.11
886 */
887 const gchar *
888 tp_protocol_get_icon_name (TpProtocol *self)
889 {
890 g_return_val_if_fail (TP_IS_PROTOCOL (self), "dialog-error");
891 return self->priv->icon_name;
892 }
893
894 /**
895 * tp_protocol_get_capabilities:
896 * @self: a protocol object
897 *
898 * <!-- -->
899 *
900 * Returns: (transfer none): #TpProtocol:capabilities, which must be referenced
901 * (if non-%NULL) if it will be kept
902 *
903 * Since: 0.11.11
904 */
905 TpCapabilities *
906 tp_protocol_get_capabilities (TpProtocol *self)
907 {
908 g_return_val_if_fail (TP_IS_PROTOCOL (self), NULL);
909 return self->priv->capabilities;
910 }
911
912 static gboolean
913 init_gvalue_from_dbus_sig (const gchar *sig,
914 GValue *value)
915 {
916 g_assert (!G_IS_VALUE (value));
917
918 switch (sig[0])
919 {
920 case 'b':
921 g_value_init (value, G_TYPE_BOOLEAN);
922 return TRUE;
923
924 case 's':
925 g_value_init (value, G_TYPE_STRING);
926 return TRUE;
927
928 case 'q':
929 case 'u':
930 g_value_init (value, G_TYPE_UINT);
931 return TRUE;
932
933 case 'y':
934 g_value_init (value, G_TYPE_UCHAR);
935 return TRUE;
936
937 case 'n':
938 case 'i':
939 g_value_init (value, G_TYPE_INT);
940 return TRUE;
941
942 case 'x':
943 g_value_init (value, G_TYPE_INT64);
944 return TRUE;
945
946 case 't':
947 g_value_init (value, G_TYPE_UINT64);
948 return TRUE;
949
950 case 'o':
951 g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
952 g_value_set_static_boxed (value, "/");
953 return TRUE;
954
955 case 'd':
956 g_value_init (value, G_TYPE_DOUBLE);
957 return TRUE;
958
959 case 'v':
960 g_value_init (value, G_TYPE_VALUE);
961 return TRUE;
962
963 case 'a':
964 switch (sig[1])
965 {
966 case 's':
967 g_value_init (value, G_TYPE_STRV);
968 return TRUE;
969
970 case 'y':
971 g_value_init (value, DBUS_TYPE_G_UCHAR_ARRAY);
972 return TRUE;
973 }
974 }
975
976 return FALSE;
977 }
978
979 static gboolean
980 parse_default_value (GValue *value,
981 const gchar *sig,
982 gchar *string,
983 GKeyFile *file,
984 const gchar *group,
985 const gchar *key)
986 {
987 GError *error = NULL;
988 gchar *s, *p;
989
990 switch (sig[0])
991 {
992 case 'b':
993 g_value_set_boolean (value, g_key_file_get_boolean (file, group, key,
994 &error));
995
996 if (error == NULL)
997 return TRUE;
998
999 /* In telepathy-glib < 0.7.26 we accepted true and false in
1000 * any case combination, 0, and 1. The desktop file spec specifies
1001 * "true" and "false" only, while GKeyFile currently accepts 0 and 1 too.
1002 * So, on error, let's fall back to more lenient parsing that explicitly
1003 * allows everything we historically allowed. */
1004 g_error_free (error);
1005 s = g_key_file_get_value (file, group, key, NULL);
1006
1007 if (s == NULL)
1008 return FALSE;
1009
1010 for (p = s; *p != '\0'; p++)
1011 {
1012 *p = g_ascii_tolower (*p);
1013 }
1014
1015 if (!tp_strdiff (s, "1") || !tp_strdiff (s, "true"))
1016 {
1017 g_value_set_boolean (value, TRUE);
1018 }
1019 else if (!tp_strdiff (s, "0") || !tp_strdiff (s, "false"))
1020 {
1021 g_value_set_boolean (value, TRUE);
1022 }
1023 else
1024 {
1025 g_free (s);
1026 return FALSE;
1027 }
1028
1029 g_free (s);
1030 return TRUE;
1031
1032 case 's':
1033 s = g_key_file_get_string (file, group, key, NULL);
1034
1035 g_value_take_string (value, s);
1036 return (s != NULL);
1037
1038 case 'y':
1039 case 'q':
1040 case 'u':
1041 case 't':
1042 {
1043 guint64 v = tp_g_key_file_get_uint64 (file, group, key, &error);
1044
1045 if (error != NULL)
1046 {
1047 g_error_free (error);
1048 return FALSE;
1049 }
1050
1051 if (sig[0] == 't')
1052 {
1053 g_value_set_uint64 (value, v);
1054 return TRUE;
1055 }
1056
1057 if (sig[0] == 'y')
1058 {
1059 if (v > G_MAXUINT8)
1060 {
1061 return FALSE;
1062 }
1063
1064 g_value_set_uchar (value, v);
1065 return TRUE;
1066 }
1067
1068 if (v > G_MAXUINT32 || (sig[0] == 'q' && v > G_MAXUINT16))
1069 return FALSE;
1070
1071 g_value_set_uint (value, v);
1072 return TRUE;
1073 }
1074
1075 case 'n':
1076 case 'i':
1077 case 'x':
1078 if (string[0] == '\0')
1079 {
1080 return FALSE;
1081 }
1082 else
1083 {
1084 gint64 v = tp_g_key_file_get_int64 (file, group, key, &error);
1085
1086 if (error != NULL)
1087 {
1088 g_error_free (error);
1089 return FALSE;
1090 }
1091
1092 if (sig[0] == 'x')
1093 {
1094 g_value_set_int64 (value, v);
1095 return TRUE;
1096 }
1097
1098 if (v > G_MAXINT32 || (sig[0] == 'q' && v > G_MAXINT16))
1099 return FALSE;
1100
1101 if (v < G_MININT32 || (sig[0] == 'n' && v < G_MININT16))
1102 return FALSE;
1103
1104 g_value_set_int (value, v);
1105 return TRUE;
1106 }
1107
1108 case 'o':
1109 s = g_key_file_get_string (file, group, key, NULL);
1110
1111 if (s == NULL || !tp_dbus_check_valid_object_path (s, NULL))
1112 {
1113 g_free (s);
1114 return FALSE;
1115 }
1116
1117 g_value_take_boxed (value, s);
1118
1119 return TRUE;
1120
1121 case 'd':
1122 g_value_set_double (value, g_key_file_get_double (file, group, key,
1123 &error));
1124
1125 if (error != NULL)
1126 {
1127 g_error_free (error);
1128 return FALSE;
1129 }
1130
1131 return TRUE;
1132
1133 case 'a':
1134 switch (sig[1])
1135 {
1136 case 's':
1137 {
1138 g_value_take_boxed (value,
1139 g_key_file_get_string_list (file, group, key, NULL, &error));
1140
1141 if (error != NULL)
1142 {
1143 g_error_free (error);
1144 return FALSE;
1145 }
1146
1147 return TRUE;
1148 }
1149 }
1150 }
1151
1152 if (G_IS_VALUE (value))
1153 g_value_unset (value);
1154
1155 return FALSE;
1156 }
1157
1158 #define PROTOCOL_PREFIX "Protocol "
1159 #define PROTOCOL_PREFIX_LEN 9
1160 tp_verify (sizeof (PROTOCOL_PREFIX) == PROTOCOL_PREFIX_LEN + 1);
1161
1162 static gchar *
1163 replace_null_with_empty (gchar *in)
1164 {
1165 return (in == NULL ? g_strdup ("") : in);
1166 }
1167
1168 static GHashTable *
1169 _tp_protocol_parse_channel_class (GKeyFile *file,
1170 const gchar *group)
1171 {
1172 GHashTable *ret;
1173 gchar **keys, **key;
1174
1175 ret = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
1176 (GDestroyNotify) tp_g_value_slice_free);
1177
1178 keys = g_key_file_get_keys (file, group, NULL, NULL);
1179
1180 for (key = keys; key != NULL && *key != NULL; key++)
1181 {
1182 gchar *space = strchr (*key, ' ');
1183 gchar *value = NULL;
1184 gchar *property = NULL;
1185 const gchar *dbus_type;
1186 GValue *v = NULL;
1187
1188 value = g_key_file_get_string (file, group, *key, NULL);
1189
1190 /* keys without a space are reserved */
1191 if (space == NULL)
1192 goto cleanup;
1193
1194 property = g_strndup (*key, space - *key);
1195 dbus_type = space + 1;
1196
1197 if (!init_gvalue_from_dbus_sig (dbus_type, v))
1198 goto cleanup;
1199
1200 if (!parse_default_value (v, dbus_type, value, file, group, *key))
1201 goto cleanup;
1202
1203 /* transfer ownership to @ret */
1204 g_hash_table_insert (ret, property, v);
1205 property = NULL;
1206 v = NULL;
1207
1208 cleanup:
1209 if (v != NULL)
1210 tp_g_value_slice_free (v);
1211
1212 g_free (property);
1213 g_free (value);
1214 }
1215
1216 return ret;
1217 }
1218
1219 static GValueArray *
1220 _tp_protocol_parse_rcc (GKeyFile *file,
1221 const gchar *group)
1222 {
1223 GHashTable *fixed;
1224 GStrv allowed;
1225 GValueArray *ret;
1226
1227 fixed = _tp_protocol_parse_channel_class (file, group);
1228 allowed = g_key_file_get_string_list (file, group, "allowed", NULL, NULL);
1229
1230 ret = tp_value_array_build (2,
1231 TP_HASH_TYPE_CHANNEL_CLASS, fixed,
1232 G_TYPE_STRV, allowed,
1233 NULL);
1234
1235 g_hash_table_unref (fixed);
1236 g_strfreev (allowed);
1237
1238 return ret;
1239 }
1240
1241 GHashTable *
1242 _tp_protocol_parse_manager_file (GKeyFile *file,
1243 const gchar *cm_debug_name,
1244 const gchar *group,
1245 gchar **protocol_name)
1246 {
1247 GHashTable *immutables;
1248 GPtrArray *param_specs, *rccs;
1249 const gchar *name;
1250 gchar **rcc_groups, **rcc_group;
1251 gchar **keys, **key;
1252 guint i;
1253
1254 if (!g_str_has_prefix (group, PROTOCOL_PREFIX))
1255 return NULL;
1256
1257 name = group + PROTOCOL_PREFIX_LEN;
1258
1259 if (!tp_connection_manager_check_valid_protocol_name (name, NULL))
1260 {
1261 DEBUG ("Protocol '%s' has an invalid name", name);
1262 return NULL;
1263 }
1264
1265 keys = g_key_file_get_keys (file, group, NULL, NULL);
1266
1267 i = 0;
1268
1269 for (key = keys; key != NULL && *key != NULL; key++)
1270 {
1271 if (g_str_has_prefix (*key, "param-"))
1272 i++;
1273 }
1274
1275 param_specs = g_ptr_array_sized_new (i);
1276
1277 for (key = keys; key != NULL && *key != NULL; key++)
1278 {
1279 if (g_str_has_prefix (*key, "param-"))
1280 {
1281 gchar **strv, **iter;
1282 gchar *value, *def;
1283 TpConnectionManagerParam param = { NULL };
1284
1285 value = g_key_file_get_string (file, group, *key, NULL);
1286
1287 if (value == NULL)
1288 continue;
1289
1290 /* strlen ("param-") == 6 */
1291 param.name = *key + 6;
1292
1293 strv = g_strsplit (value, " ", 0);
1294 g_free (value);
1295
1296 param.dbus_signature = strv[0];
1297
1298 param.flags = 0;
1299
1300 for (iter = strv + 1; *iter != NULL; iter++)
1301 {
1302 if (!tp_strdiff (*iter, "required"))
1303 param.flags |= TP_CONN_MGR_PARAM_FLAG_REQUIRED;
1304 if (!tp_strdiff (*iter, "register"))
1305 param.flags |= TP_CONN_MGR_PARAM_FLAG_REGISTER;
1306 if (!tp_strdiff (*iter, "secret"))
1307 param.flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
1308 if (!tp_strdiff (*iter, "dbus-property"))
1309 param.flags |= TP_CONN_MGR_PARAM_FLAG_DBUS_PROPERTY;
1310 }
1311
1312 if ((!tp_strdiff (param.name, "password") ||
1313 g_str_has_suffix (param.name, "-password")) &&
1314 (param.flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
1315 {
1316 DEBUG ("\tTreating %s as secret due to its name (please "
1317 "fix %s.manager)", param.name, cm_debug_name);
1318 param.flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
1319 }
1320
1321 def = g_strdup_printf ("default-%s", param.name);
1322 value = g_key_file_get_string (file, group, def, NULL);
1323
1324 init_gvalue_from_dbus_sig (param.dbus_signature,
1325 &param.default_value);
1326
1327 if (value != NULL && parse_default_value (&param.default_value,
1328 param.dbus_signature, value, file, group, def))
1329 param.flags |= TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT;
1330
1331 DEBUG ("\tParam name: %s", param.name);
1332 DEBUG ("\tParam flags: 0x%x", param.flags);
1333 DEBUG ("\tParam sig: %s", param.dbus_signature);
1334
1335 #ifdef ENABLE_DEBUG
1336 if (G_IS_VALUE (&param.default_value))
1337 {
1338 gchar *repr = g_strdup_value_contents (&(param.default_value));
1339
1340 DEBUG ("\tParam default value: %s of type %s", repr,
1341 G_VALUE_TYPE_NAME (&(param.default_value)));
1342 g_free (repr);
1343 }
1344 else
1345 {
1346 DEBUG ("\tParam default value: not set");
1347 }
1348 #endif
1349
1350 g_ptr_array_add (param_specs, tp_value_array_build (4,
1351 G_TYPE_STRING, param.name,
1352 G_TYPE_UINT, param.flags,
1353 G_TYPE_STRING, param.dbus_signature,
1354 G_TYPE_VALUE, &param.default_value,
1355 G_TYPE_INVALID));
1356
1357 if (G_IS_VALUE (&param.default_value))
1358 g_value_unset (&param.default_value);
1359
1360 g_free (value);
1361 g_free (def);
1362 g_strfreev (strv);
1363 }
1364 }
1365
1366 g_strfreev (keys);
1367
1368 immutables = tp_asv_new (
1369 TP_PROP_PROTOCOL_PARAMETERS, TP_ARRAY_TYPE_PARAM_SPEC_LIST, param_specs,
1370 NULL);
1371
1372 tp_asv_take_boxed (immutables, TP_PROP_PROTOCOL_INTERFACES, G_TYPE_STRV,
1373 g_key_file_get_string_list (file, group, "Interfaces", NULL, NULL));
1374 tp_asv_take_boxed (immutables, TP_PROP_PROTOCOL_CONNECTION_INTERFACES,
1375 G_TYPE_STRV,
1376 g_key_file_get_string_list (file, group, "ConnectionInterfaces",
1377 NULL, NULL));
1378 tp_asv_take_string (immutables, TP_PROP_PROTOCOL_VCARD_FIELD,
1379 replace_null_with_empty (
1380 g_key_file_get_string (file, group, "VCardField", NULL)));
1381 tp_asv_take_string (immutables, TP_PROP_PROTOCOL_ENGLISH_NAME,
1382 replace_null_with_empty (
1383 g_key_file_get_string (file, group, "EnglishName", NULL)));
1384 tp_asv_take_string (immutables, TP_PROP_PROTOCOL_ICON,
1385 replace_null_with_empty (
1386 g_key_file_get_string (file, group, "Icon", NULL)));
1387
1388 rccs = g_ptr_array_new ();
1389
1390 rcc_groups = g_key_file_get_string_list (file, group,
1391 "RequestableChannelClasses", NULL, NULL);
1392
1393 if (rcc_groups != NULL)
1394 {
1395 for (rcc_group = rcc_groups; *rcc_group != NULL; rcc_group++)
1396 g_ptr_array_add (rccs, _tp_protocol_parse_rcc (file, *rcc_group));
1397 }
1398
1399 g_strfreev (rcc_groups);
1400
1401 if (protocol_name != NULL)
1402 *protocol_name = g_strdup (name);
1403
1404 return immutables;
1405 }
0 /* TpProtocol
1 *
2 * Copyright © 2010 Collabora Ltd.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #ifndef TP_PROTOCOL_H
20 #define TP_PROTOCOL_H
21
22 #include <glib-object.h>
23
24 #include <telepathy-glib/capabilities.h>
25 #include <telepathy-glib/proxy.h>
26
27 G_BEGIN_DECLS
28
29 typedef struct _TpConnectionManagerParam TpConnectionManagerParam;
30
31 struct _TpConnectionManagerParam
32 {
33 /*<public>*/
34 gchar *name;
35 gchar *dbus_signature;
36 GValue default_value;
37 guint flags;
38
39 gpointer priv;
40 };
41
42 typedef struct _TpProtocol TpProtocol;
43 typedef struct _TpProtocolClass TpProtocolClass;
44 typedef struct _TpProtocolPrivate TpProtocolPrivate;
45 typedef struct _TpProtocolClassPrivate TpProtocolClassPrivate;
46
47 GType tp_protocol_get_type (void) G_GNUC_CONST;
48
49 #define TP_TYPE_PROTOCOL \
50 (tp_protocol_get_type ())
51 #define TP_PROTOCOL(obj) \
52 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TYPE_PROTOCOL, \
53 TpProtocol))
54 #define TP_PROTOCOL_CLASS(klass) \
55 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TYPE_PROTOCOL, \
56 TpProtocolClass))
57 #define TP_IS_PROTOCOL(obj) \
58 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TYPE_PROTOCOL))
59 #define TP_IS_PROTOCOL_CLASS(klass) \
60 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TYPE_PROTOCOL))
61 #define TP_PROTOCOL_GET_CLASS(obj) \
62 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TYPE_PROTOCOL, \
63 TpProtocolClass))
64
65 struct _TpProtocol
66 {
67 /*<private>*/
68 TpProxy parent;
69 TpProtocolPrivate *priv;
70 };
71
72 void tp_protocol_init_known_interfaces (void);
73
74 TpProtocol *tp_protocol_new (TpDBusDaemon *dbus, const gchar *cm_name,
75 const gchar *protocol_name, const GHashTable *immutable_properties,
76 GError **error);
77
78 const gchar *tp_protocol_get_name (TpProtocol *self);
79
80 #define TP_PROTOCOL_FEATURE_PARAMETERS \
81 (tp_protocol_get_feature_quark_parameters ())
82 GQuark tp_protocol_get_feature_quark_parameters (void) G_GNUC_CONST;
83
84 const TpConnectionManagerParam *tp_protocol_get_param (TpProtocol *self,
85 const gchar *param);
86 gboolean tp_protocol_has_param (TpProtocol *self,
87 const gchar *param);
88 gboolean tp_protocol_can_register (TpProtocol *self);
89 GStrv tp_protocol_dup_param_names (TpProtocol *self) G_GNUC_WARN_UNUSED_RESULT;
90
91 #define TP_PROTOCOL_FEATURE_CORE \
92 (tp_protocol_get_feature_quark_core ())
93 GQuark tp_protocol_get_feature_quark_core (void) G_GNUC_CONST;
94
95 const gchar *tp_protocol_get_vcard_field (TpProtocol *self);
96 const gchar *tp_protocol_get_english_name (TpProtocol *self);
97 const gchar *tp_protocol_get_icon_name (TpProtocol *self);
98 TpCapabilities *tp_protocol_get_capabilities (TpProtocol *self);
99
100 G_END_DECLS
101
102 #endif
0 <tp:spec
1 xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
2 xmlns:xi="http://www.w3.org/2001/XInclude">
3
4 <tp:title>Protocol interfaces</tp:title>
5
6 <xi:include href="../spec/Protocol.xml"/>
7
8 </tp:spec>
431431 /**
432432 * tp_proxy_has_interface_by_id:
433433 * @self: the #TpProxy (or subclass)
434 * @iface: quark representing the interface required
435 *
436 * <!-- -->
434 * @iface: quark representing the D-Bus interface required
435 *
436 * Return whether this proxy is known to have a particular interface, by its
437 * quark ID. This is equivalent to using g_quark_to_string() followed by
438 * tp_proxy_has_interface(), but more efficient.
437439 *
438440 * Returns: %TRUE if this proxy implements the given interface.
439441 *
443445 tp_proxy_has_interface_by_id (gpointer self,
444446 GQuark iface)
445447 {
446 TpProxy *proxy = TP_PROXY (self);
448 TpProxy *proxy = self;
449
450 g_return_val_if_fail (TP_IS_PROXY (self), FALSE);
447451
448452 return (g_datalist_id_get_data (&proxy->priv->interfaces, iface)
449453 != NULL);
452456 /**
453457 * tp_proxy_has_interface:
454458 * @self: the #TpProxy (or subclass)
455 * @iface: the interface required, as a string
456 *
457 * A macro wrapping tp_proxy_has_interface_by_id(). Returns %TRUE if this
458 * proxy implements the given interface.
459 *
459 * @iface: the D-Bus interface required, as a string
460 *
461 * Return whether this proxy is known to have a particular interface. In
462 * versions older than 0.11.11, this was a macro wrapper around
463 * tp_proxy_has_interface_by_id().
464 *
465 * For objects that discover their interfaces at runtime, this method will
466 * indicate that interfaces are missing until they are known to be present.
467 * In subclasses that define features for use with tp_proxy_prepare_async(),
468 * successfully preparing the "core" feature for that subclass (such as
469 * %TP_CHANNEL_FEATURE_CORE or %TP_CONNECTION_FEATURE_CORE) implies that the
470 * interfaces are known.
471 *
472 * Returns: %TRUE if this proxy implements the given interface.
460473 * Since: 0.7.1
461474 */
475 gboolean
476 tp_proxy_has_interface (gpointer self,
477 const gchar *iface)
478 {
479 TpProxy *proxy = self;
480 GQuark q = g_quark_try_string (iface);
481
482 g_return_val_if_fail (TP_IS_PROXY (self), FALSE);
483
484 return (q != 0 &&
485 g_datalist_id_get_data (&proxy->priv->interfaces, q) != NULL);
486 }
462487
463488 static void
464489 tp_proxy_lose_interface (GQuark unused,
127127 TpProxyClass))
128128
129129 gboolean tp_proxy_has_interface_by_id (gpointer self, GQuark iface);
130
131 static inline gboolean
132 _tp_proxy_inline_has_interface (gpointer self, const gchar *iface)
133 {
134 GQuark q = g_quark_try_string (iface);
135
136 return q != 0 && tp_proxy_has_interface_by_id (self, q);
137 }
138
139 #define tp_proxy_has_interface(self, iface) \
140 (_tp_proxy_inline_has_interface (self, iface))
130 gboolean tp_proxy_has_interface (gpointer self, const gchar *iface);
141131
142132 TpDBusDaemon *tp_proxy_get_dbus_daemon (gpointer self);
143133
44 <tp:title>telepathy-glib</tp:title>
55
66 <xi:include href="connection-manager.xml"/>
7 <xi:include href="protocol.xml"/>
78 <xi:include href="connection.xml"/>
89 <xi:include href="channel.xml"/>
910 <xi:include href="media-session-handler.xml"/>
0 #ifndef __TP_META_SVC_PROTOCOL_H__
1 #define __TP_META_SVC_PROTOCOL_H__
2
3 #include <telepathy-glib/_gen/tp-svc-protocol.h>
4
5 #endif
0 Version: TELEPATHY_GLIB_0.11.11
1 Extends: TELEPATHY_GLIB_0.11.9
2 Release: 0.11.11
3
4 tp_base_client_get_dbus_daemon
5 tp_base_client_get_name
6 tp_base_client_get_uniquify_name
7 tp_base_connection_manager_add_protocol
8 tp_base_protocol_get_immutable_properties
9 tp_base_protocol_get_name
10 tp_base_protocol_get_parameters
11 tp_base_protocol_get_type
12 tp_base_protocol_new_connection
13 tp_channel_manager_type_foreach_channel_class
14 tp_cli_channel_type_contact_search_call_more
15 tp_cli_channel_type_contact_search_call_search
16 tp_cli_channel_type_contact_search_call_stop
17 tp_cli_channel_type_contact_search_connect_to_search_result_received
18 tp_cli_channel_type_contact_search_connect_to_search_state_changed
19 tp_cli_channel_type_contact_search_run_more
20 tp_cli_channel_type_contact_search_run_search
21 tp_cli_channel_type_contact_search_run_stop
22 tp_cli_protocol_call_identify_account
23 tp_cli_protocol_call_normalize_contact
24 tp_connection_manager_get_protocol_object
25 tp_dbus_properties_mixin_fill_properties_hash
26 tp_iface_quark_channel_type_contact_search
27 tp_iface_quark_protocol
28 tp_protocol_can_register
29 tp_protocol_dup_param_names
30 tp_protocol_get_capabilities
31 tp_protocol_get_english_name
32 tp_protocol_get_feature_quark_core
33 tp_protocol_get_feature_quark_parameters
34 tp_protocol_get_icon_name
35 tp_protocol_get_name
36 tp_protocol_get_param
37 tp_protocol_get_type
38 tp_protocol_get_vcard_field
39 tp_protocol_has_param
40 tp_protocol_init_known_interfaces
41 tp_protocol_new
42 tp_proxy_has_interface
43 tp_svc_channel_type_contact_search_emit_search_result_received
44 tp_svc_channel_type_contact_search_emit_search_state_changed
45 tp_svc_channel_type_contact_search_get_type
46 tp_svc_channel_type_contact_search_implement_more
47 tp_svc_channel_type_contact_search_implement_search
48 tp_svc_channel_type_contact_search_implement_stop
49 tp_svc_protocol_get_type
50 tp_svc_protocol_implement_identify_account
51 tp_svc_protocol_implement_normalize_contact
52 tp_type_dbus_hash_sa_28sasas_29
3636 test-message-mixin \
3737 test-params-cm \
3838 test-properties \
39 test-protocol-objects \
3940 test-self-handle \
4041 test-self-presence \
4142 test-simple-approver \
154155 nodist_test_properties_SOURCES = \
155156 _gen/svc.h \
156157 _gen/svc.c
158
159 test_protocol_objects_LDADD = \
160 $(LDADD) \
161 $(top_builddir)/examples/cm/echo/libexample-cm-echo.la \
162 $(top_builddir)/examples/cm/echo-message-parts/libexample-cm-echo-2.la
163 test_protocol_objects_SOURCES = protocol-objects.c
157164
158165 test_self_handle_SOURCES = self-handle.c
159166
5757 test-invalidated-while-invoking-signals$(EXEEXT) \
5858 test-long-connection-name$(EXEEXT) test-message-mixin$(EXEEXT) \
5959 test-params-cm$(EXEEXT) test-properties$(EXEEXT) \
60 test-self-handle$(EXEEXT) test-self-presence$(EXEEXT) \
61 test-simple-approver$(EXEEXT) test-simple-handler$(EXEEXT) \
62 test-simple-observer$(EXEEXT) test-text-mixin$(EXEEXT) \
63 test-text-respawn$(EXEEXT) test-unsupported-interface$(EXEEXT)
60 test-protocol-objects$(EXEEXT) test-self-handle$(EXEEXT) \
61 test-self-presence$(EXEEXT) test-simple-approver$(EXEEXT) \
62 test-simple-handler$(EXEEXT) test-simple-observer$(EXEEXT) \
63 test-text-mixin$(EXEEXT) test-text-respawn$(EXEEXT) \
64 test-unsupported-interface$(EXEEXT)
6465 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
6566 $(top_srcdir)/tools/check-coding-style.mk \
6667 $(top_srcdir)/tools/valgrind.mk
361362 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
362363 $(top_builddir)/tests/lib/libtp-glib-tests.la \
363364 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
365 am_test_protocol_objects_OBJECTS = protocol-objects.$(OBJEXT)
366 test_protocol_objects_OBJECTS = $(am_test_protocol_objects_OBJECTS)
367 test_protocol_objects_DEPENDENCIES = $(am__DEPENDENCIES_2) \
368 $(top_builddir)/examples/cm/echo/libexample-cm-echo.la \
369 $(top_builddir)/examples/cm/echo-message-parts/libexample-cm-echo-2.la
364370 am_test_self_handle_OBJECTS = self-handle.$(OBJEXT)
365371 test_self_handle_OBJECTS = $(am_test_self_handle_OBJECTS)
366372 test_self_handle_LDADD = $(LDADD)
468474 $(test_long_connection_name_SOURCES) \
469475 $(test_message_mixin_SOURCES) $(test_params_cm_SOURCES) \
470476 $(test_properties_SOURCES) $(nodist_test_properties_SOURCES) \
471 $(test_self_handle_SOURCES) $(test_self_presence_SOURCES) \
472 $(test_simple_approver_SOURCES) $(test_simple_handler_SOURCES) \
473 $(test_simple_observer_SOURCES) $(test_text_mixin_SOURCES) \
474 $(test_text_respawn_SOURCES) \
477 $(test_protocol_objects_SOURCES) $(test_self_handle_SOURCES) \
478 $(test_self_presence_SOURCES) $(test_simple_approver_SOURCES) \
479 $(test_simple_handler_SOURCES) $(test_simple_observer_SOURCES) \
480 $(test_text_mixin_SOURCES) $(test_text_respawn_SOURCES) \
475481 $(test_unsupported_interface_SOURCES)
476482 DIST_SOURCES = $(test_account_SOURCES) $(test_account_manager_SOURCES) \
477483 $(test_base_client_SOURCES) $(test_call_cancellation_SOURCES) \
500506 $(test_invalidated_while_invoking_signals_SOURCES) \
501507 $(test_long_connection_name_SOURCES) \
502508 $(test_message_mixin_SOURCES) $(test_params_cm_SOURCES) \
503 $(test_properties_SOURCES) $(test_self_handle_SOURCES) \
504 $(test_self_presence_SOURCES) $(test_simple_approver_SOURCES) \
505 $(test_simple_handler_SOURCES) $(test_simple_observer_SOURCES) \
506 $(test_text_mixin_SOURCES) $(test_text_respawn_SOURCES) \
509 $(test_properties_SOURCES) $(test_protocol_objects_SOURCES) \
510 $(test_self_handle_SOURCES) $(test_self_presence_SOURCES) \
511 $(test_simple_approver_SOURCES) $(test_simple_handler_SOURCES) \
512 $(test_simple_observer_SOURCES) $(test_text_mixin_SOURCES) \
513 $(test_text_respawn_SOURCES) \
507514 $(test_unsupported_interface_SOURCES)
508515 ETAGS = etags
509516 CTAGS = ctags
756763 _gen/svc.h \
757764 _gen/svc.c
758765
766 test_protocol_objects_LDADD = \
767 $(LDADD) \
768 $(top_builddir)/examples/cm/echo/libexample-cm-echo.la \
769 $(top_builddir)/examples/cm/echo-message-parts/libexample-cm-echo-2.la
770
771 test_protocol_objects_SOURCES = protocol-objects.c
759772 test_self_handle_SOURCES = self-handle.c
760773 test_self_presence_SOURCES = self-presence.c
761774 test_text_mixin_LDADD = \
984997 test-properties$(EXEEXT): $(test_properties_OBJECTS) $(test_properties_DEPENDENCIES)
985998 @rm -f test-properties$(EXEEXT)
986999 $(AM_V_CCLD)$(LINK) $(test_properties_OBJECTS) $(test_properties_LDADD) $(LIBS)
1000 test-protocol-objects$(EXEEXT): $(test_protocol_objects_OBJECTS) $(test_protocol_objects_DEPENDENCIES)
1001 @rm -f test-protocol-objects$(EXEEXT)
1002 $(AM_V_CCLD)$(LINK) $(test_protocol_objects_OBJECTS) $(test_protocol_objects_LDADD) $(LIBS)
9871003 test-self-handle$(EXEEXT): $(test_self_handle_OBJECTS) $(test_self_handle_DEPENDENCIES)
9881004 @rm -f test-self-handle$(EXEEXT)
9891005 $(AM_V_CCLD)$(LINK) $(test_self_handle_OBJECTS) $(test_self_handle_LDADD) $(LIBS)
10531069 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message-mixin.Po@am__quote@
10541070 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/params-cm.Po@am__quote@
10551071 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/properties.Po@am__quote@
1072 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protocol-objects.Po@am__quote@
10561073 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/self-handle.Po@am__quote@
10571074 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/self-presence.Po@am__quote@
10581075 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-approver.Po@am__quote@
77 * notice and this notice are preserved.
88 */
99
10 #include <telepathy-glib/connection-manager.h>
11 #include <telepathy-glib/debug.h>
10 #include <telepathy-glib/telepathy-glib.h>
1211
1312 #include "examples/cm/echo/connection-manager.h"
1413
2221 TpConnectionManager *cm;
2322 GError *error /* initialized where needed */;
2423 } Test;
24
25 typedef ExampleEchoConnectionManager PropertylessConnectionManager;
26 typedef ExampleEchoConnectionManagerClass PropertylessConnectionManagerClass;
27
28 static void stub_properties_iface_init (gpointer iface);
29 static GType propertyless_connection_manager_get_type (void);
30
31 G_DEFINE_TYPE_WITH_CODE (PropertylessConnectionManager,
32 propertyless_connection_manager,
33 EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER,
34 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
35 stub_properties_iface_init))
36
37 static void
38 propertyless_connection_manager_class_init (
39 PropertylessConnectionManagerClass *cls)
40 {
41 }
42
43 static void
44 propertyless_connection_manager_init (PropertylessConnectionManager *self)
45 {
46 }
47
48 static void
49 stub_get (TpSvcDBusProperties *iface G_GNUC_UNUSED,
50 const gchar *i G_GNUC_UNUSED,
51 const gchar *p G_GNUC_UNUSED,
52 DBusGMethodInvocation *context)
53 {
54 tp_dbus_g_method_return_not_implemented (context);
55 }
56
57 static void
58 stub_get_all (TpSvcDBusProperties *iface G_GNUC_UNUSED,
59 const gchar *i G_GNUC_UNUSED,
60 DBusGMethodInvocation *context)
61 {
62 tp_dbus_g_method_return_not_implemented (context);
63 }
64
65 static void
66 stub_set (TpSvcDBusProperties *iface G_GNUC_UNUSED,
67 const gchar *i G_GNUC_UNUSED,
68 const gchar *p G_GNUC_UNUSED,
69 const GValue *v G_GNUC_UNUSED,
70 DBusGMethodInvocation *context)
71 {
72 tp_dbus_g_method_return_not_implemented (context);
73 }
74
75 static void
76 stub_properties_iface_init (gpointer iface)
77 {
78 TpSvcDBusPropertiesClass *cls = iface;
79
80 #define IMPLEMENT(x) \
81 tp_svc_dbus_properties_implement_##x (cls, stub_##x)
82 IMPLEMENT (get);
83 IMPLEMENT (get_all);
84 IMPLEMENT (set);
85 #undef IMPLEMENT
86 }
2587
2688 static void
2789 setup (Test *test,
167229 g_assert (test->cm->protocols[1] != NULL);
168230 g_assert (test->cm->protocols[2] == NULL);
169231
170 /* FIXME: it's not technically an API guarantee that protocols and params
171 * come out in this order... */
172
173232 strv = tp_connection_manager_dup_protocol_names (test->cm);
174 g_assert_cmpstr (strv[0], ==, "normal");
175 g_assert_cmpstr (strv[1], ==, "weird");
233
234 if (tp_strdiff (strv[0], "normal"))
235 {
236 g_assert_cmpstr (strv[0], ==, "weird");
237 g_assert_cmpstr (strv[1], ==, "normal");
238 }
239 else
240 {
241 g_assert_cmpstr (strv[0], ==, "normal");
242 g_assert_cmpstr (strv[1], ==, "weird");
243 }
244
176245 g_assert (strv[2] == NULL);
177246 g_strfreev (strv);
178247
179248 g_assert (tp_connection_manager_has_protocol (test->cm, "normal"));
180249 g_assert (!tp_connection_manager_has_protocol (test->cm, "not-there"));
181250
182 protocol = test->cm->protocols[0];
251 protocol = tp_connection_manager_get_protocol (test->cm, "normal");
252
183253 g_assert_cmpstr (protocol->name, ==, "normal");
184 g_assert (protocol == tp_connection_manager_get_protocol (test->cm,
185 "normal"));
186254 g_assert (tp_connection_manager_protocol_can_register (protocol));
187255
188256 g_assert (tp_connection_manager_protocol_has_param (protocol, "account"));
189257 g_assert (!tp_connection_manager_protocol_has_param (protocol, "not-there"));
258
259 /* FIXME: it's not technically an API guarantee that params
260 * come out in this order... */
190261
191262 param = &protocol->params[0];
192263 g_assert_cmpstr (param->name, ==, "account");
239310 g_assert (strv[3] == NULL);
240311 g_strfreev (strv);
241312
242 protocol = test->cm->protocols[1];
313 /* switch to the other protocol, whichever one that actually is */
314 if (protocol == test->cm->protocols[0])
315 {
316 protocol = test->cm->protocols[1];
317 }
318 else
319 {
320 g_assert (protocol == test->cm->protocols[1]);
321 protocol = test->cm->protocols[0];
322 }
323
243324 g_assert_cmpstr (protocol->name, ==, "weird");
244325 g_assert (protocol == tp_connection_manager_get_protocol (test->cm,
245326 "weird"));
255336 param = &protocol->params[1];
256337 g_assert (param->name == NULL);
257338
258 protocol = test->cm->protocols[2];
259 g_assert (protocol == NULL);
339 g_assert (test->cm->protocols[2] == NULL);
260340 }
261341
262342 static void
290370 g_assert (test->cm->protocols[2] != NULL);
291371 g_assert (test->cm->protocols[3] == NULL);
292372
293 /* FIXME: it's not technically an API guarantee that protocols and params
373 /* FIXME: it's not technically an API guarantee that params
294374 * come out in this order... */
295375
296 protocol = test->cm->protocols[0];
376 protocol = tp_connection_manager_get_protocol (test->cm, "foo");
297377
298378 g_assert_cmpstr (protocol->name, ==, "foo");
299379
345425 param = &protocol->params[6];
346426 g_assert (param->name == NULL);
347427
348 protocol = test->cm->protocols[1];
428 protocol = tp_connection_manager_get_protocol (test->cm, "bar");
349429 g_assert_cmpstr (protocol->name, ==, "bar");
350430
351431 param = &protocol->params[0];
399479 param = &protocol->params[6];
400480 g_assert (param->name == NULL);
401481
402 protocol = test->cm->protocols[2];
403 g_assert_cmpstr (test->cm->protocols[2]->name, ==, "somewhat-pathological");
482 protocol = tp_connection_manager_get_protocol (test->cm,
483 "somewhat-pathological");
484 g_assert_cmpstr (protocol->name, ==, "somewhat-pathological");
404485
405486 param = &protocol->params[0];
406487 g_assert_cmpstr (param->name, ==, "foo");
814895 }
815896
816897 static void
898 test_dbus_fallback (Test *test,
899 gconstpointer data)
900 {
901 gchar *name;
902 guint info_source;
903 const gboolean activate = GPOINTER_TO_INT (data);
904 TpBaseConnectionManager *service_cm_as_base;
905 gboolean ok;
906
907 /* Register a stub version of the CM that doesn't have Properties, to
908 * exercise the fallback path */
909 g_object_unref (test->service_cm);
910 test->service_cm = NULL;
911 test->service_cm = EXAMPLE_ECHO_CONNECTION_MANAGER (tp_tests_object_new_static_class (
912 propertyless_connection_manager_get_type (),
913 NULL));
914 g_assert (test->service_cm != NULL);
915 service_cm_as_base = TP_BASE_CONNECTION_MANAGER (test->service_cm);
916 g_assert (service_cm_as_base != NULL);
917 ok = tp_base_connection_manager_register (service_cm_as_base);
918 g_assert (ok);
919
920 test->error = NULL;
921 test->cm = tp_connection_manager_new (test->dbus,
922 TP_BASE_CONNECTION_MANAGER_GET_CLASS (test->service_cm)->cm_dbus_name,
923 NULL, &test->error);
924 g_assert (TP_IS_CONNECTION_MANAGER (test->cm));
925 g_assert (test->error == NULL);
926 g_test_queue_unref (test->cm);
927
928 if (activate)
929 {
930 g_test_bug ("23524");
931
932 /* The bug being tested here was caused by ListProtocols being called
933 * twice on the same CM; this can be triggered by _activate()ing at
934 * exactly the wrong moment. But the wrong moment involves racing an
935 * idle. This triggered the assertion about 1/3 of the time on my laptop.
936 * --wjt
937 */
938 g_idle_add (idle_activate, test->cm);
939 }
940 else
941 {
942 g_test_bug ("18291");
943 }
944
945 tp_connection_manager_call_when_ready (test->cm, ready_or_not,
946 test, NULL, NULL);
947 g_main_loop_run (test->mainloop);
948 g_assert (test->error == NULL);
949
950 g_assert_cmpstr (tp_connection_manager_get_name (test->cm), ==,
951 "example_echo");
952 g_assert_cmpuint (tp_connection_manager_is_ready (test->cm), ==, TRUE);
953 g_assert_cmpuint (tp_connection_manager_is_running (test->cm), ==, TRUE);
954 g_assert_cmpuint (tp_connection_manager_get_info_source (test->cm), ==,
955 TP_CM_INFO_SOURCE_LIVE);
956
957 g_object_get (test->cm,
958 "info-source", &info_source,
959 "connection-manager", &name,
960 NULL);
961 g_assert_cmpstr (name, ==, "example_echo");
962 g_assert_cmpuint (info_source, ==, TP_CM_INFO_SOURCE_LIVE);
963 g_free (name);
964 }
965
966 static void
817967 on_listed_connection_managers (TpConnectionManager * const * cms,
818968 gsize n_cms,
819969 const GError *error,
8901040 test_dbus_ready, teardown);
8911041 g_test_add ("/cm/dbus-and-activate", Test, GINT_TO_POINTER (TRUE), setup,
8921042 test_dbus_ready, teardown);
1043 g_test_add ("/cm/dbus-fallback", Test, GINT_TO_POINTER (FALSE), setup,
1044 test_dbus_fallback, teardown);
1045 g_test_add ("/cm/dbus-fallback-activate", Test, GINT_TO_POINTER (TRUE),
1046 setup, test_dbus_fallback, teardown);
8931047
8941048 g_test_add ("/cm/list", Test, NULL, setup, test_list, teardown);
8951049
242242 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
243243 "");
244244 g_assert_no_error (error);
245
246 {
247 GHashTable *properties = NULL;
248 GPtrArray *arr;
249
250 /* check that it has the requestable channel class */
251 tp_cli_dbus_properties_run_get_all (conn, -1,
252 TP_IFACE_CONNECTION_INTERFACE_REQUESTS, &properties, &error, NULL);
253 g_assert_no_error (error);
254
255 arr = tp_asv_get_boxed (properties, "RequestableChannelClasses",
256 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST);
257 g_assert_cmpuint (arr->len, ==, 1);
258
259 g_hash_table_unref (properties);
260 }
245261
246262 handle = tp_tests_connection_run_request_contact_handle (conn,
247263 "them@example.com");
0 /* Regression test for Protocol objects in the echo-2 example CM.
1 *
2 * Copyright © 2010 Collabora Ltd. <http://www.collabora.co.uk/>
3 *
4 * Copying and distribution of this file, with or without modification,
5 * are permitted in any medium without royalty provided the copyright
6 * notice and this notice are preserved.
7 */
8
9 #include <telepathy-glib/protocol.h>
10 #include <telepathy-glib/telepathy-glib.h>
11
12 #include "examples/cm/echo/connection-manager.h"
13
14 #include "examples/cm/echo-message-parts/connection-manager.h"
15 #include "examples/cm/echo-message-parts/chan.h"
16 #include "examples/cm/echo-message-parts/conn.h"
17
18 #include "tests/lib/util.h"
19
20 #define CLEAR_OBJECT(o) \
21 G_STMT_START { \
22 if (*(o) != NULL) \
23 { \
24 g_object_unref (*(o)); \
25 *(o) = NULL; \
26 } \
27 } G_STMT_END
28
29 typedef struct
30 {
31 GMainLoop *mainloop;
32 TpDBusDaemon *dbus;
33 GError *error /* statically initialized to NULL */ ;
34
35 ExampleEcho2ConnectionManager *service_cm;
36
37 TpConnectionManager *cm;
38 TpProtocol *protocol;
39
40 ExampleEchoConnectionManager *old_service_cm;
41 TpConnectionManager *old_cm;
42 TpProtocol *old_protocol;
43 } Test;
44
45 static void
46 setup (Test *test,
47 gconstpointer data G_GNUC_UNUSED)
48 {
49 TpBaseConnectionManager *service_cm_as_base;
50 gboolean ok;
51
52 g_type_init ();
53 tp_debug_set_flags ("all");
54
55 test->mainloop = g_main_loop_new (NULL, FALSE);
56 test->dbus = tp_dbus_daemon_dup (NULL);
57 g_assert (test->dbus != NULL);
58
59 test->service_cm = EXAMPLE_ECHO_2_CONNECTION_MANAGER (g_object_new (
60 EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER,
61 NULL));
62 g_assert (test->service_cm != NULL);
63 service_cm_as_base = TP_BASE_CONNECTION_MANAGER (test->service_cm);
64 g_assert (service_cm_as_base != NULL);
65
66 ok = tp_base_connection_manager_register (service_cm_as_base);
67 g_assert (ok);
68
69 test->cm = tp_connection_manager_new (test->dbus, "example_echo_2",
70 NULL, &test->error);
71 g_assert (test->cm != NULL);
72 tp_tests_proxy_run_until_prepared (test->cm, NULL);
73
74 test->old_service_cm = EXAMPLE_ECHO_CONNECTION_MANAGER (g_object_new (
75 EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER,
76 NULL));
77 g_assert (test->old_service_cm != NULL);
78 service_cm_as_base = TP_BASE_CONNECTION_MANAGER (test->old_service_cm);
79 g_assert (service_cm_as_base != NULL);
80
81 ok = tp_base_connection_manager_register (service_cm_as_base);
82 g_assert (ok);
83
84 test->old_cm = tp_connection_manager_new (test->dbus, "example_echo",
85 NULL, &test->error);
86 g_assert (test->old_cm != NULL);
87 tp_tests_proxy_run_until_prepared (test->old_cm, NULL);
88
89 test->old_protocol = NULL;
90 }
91
92 static void
93 teardown (Test *test,
94 gconstpointer data G_GNUC_UNUSED)
95 {
96 CLEAR_OBJECT (&test->protocol);
97 CLEAR_OBJECT (&test->cm);
98 CLEAR_OBJECT (&test->service_cm);
99 CLEAR_OBJECT (&test->old_service_cm);
100
101 CLEAR_OBJECT (&test->dbus);
102 g_main_loop_unref (test->mainloop);
103 test->mainloop = NULL;
104 }
105
106 const gchar * const expected_interfaces[] = {
107 TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
108 NULL };
109
110 static void
111 test_protocol_properties (Test *test,
112 gconstpointer data G_GNUC_UNUSED)
113 {
114 GHashTable *properties = NULL;
115 GPtrArray *arr;
116 GValueArray *va;
117 GHashTable *fixed;
118
119 test->protocol = tp_protocol_new (test->dbus, "example_echo_2",
120 "example", NULL, NULL);
121 g_assert (test->protocol != NULL);
122
123 tp_cli_dbus_properties_run_get_all (test->protocol, -1,
124 TP_IFACE_PROTOCOL, &properties, &test->error, NULL);
125 g_assert_no_error (test->error);
126
127 test_assert_empty_strv (tp_asv_get_boxed (properties, "Interfaces",
128 G_TYPE_STRV));
129
130 g_assert_cmpstr (tp_asv_get_string (properties, "Icon"), ==, "im-icq");
131 g_assert_cmpstr (tp_asv_get_string (properties, "EnglishName"), ==,
132 "Echo II example");
133 g_assert_cmpstr (tp_asv_get_string (properties, "VCardField"), ==,
134 "x-telepathy-example");
135 g_assert_cmpstr (tp_asv_get_string (properties, "VCardField"), ==,
136 "x-telepathy-example");
137
138 tp_tests_assert_strv_equals (tp_asv_get_boxed (properties,
139 "ConnectionInterfaces", G_TYPE_STRV), expected_interfaces);
140
141 arr = tp_asv_get_boxed (properties, "RequestableChannelClasses",
142 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST);
143 g_assert (arr != NULL);
144 g_assert_cmpuint (arr->len, ==, 1);
145
146 va = g_ptr_array_index (arr, 0);
147 g_assert (G_VALUE_HOLDS (va->values + 0, TP_HASH_TYPE_CHANNEL_CLASS));
148 g_assert (G_VALUE_HOLDS (va->values + 1, G_TYPE_STRV));
149
150 fixed = g_value_get_boxed (va->values + 0);
151 g_assert_cmpstr (tp_asv_get_string (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE), ==,
152 TP_IFACE_CHANNEL_TYPE_TEXT);
153
154 arr = tp_asv_get_boxed (properties, "Parameters",
155 TP_ARRAY_TYPE_PARAM_SPEC_LIST);
156 g_assert (arr != NULL);
157 g_assert_cmpuint (arr->len, >=, 1);
158 }
159
160 static void
161 test_protocols_property (Test *test,
162 gconstpointer data G_GNUC_UNUSED)
163 {
164 GHashTable *properties = NULL;
165 GHashTable *protocols;
166 GHashTable *pp;
167 GPtrArray *arr;
168 GValueArray *va;
169 GHashTable *fixed;
170
171 tp_cli_dbus_properties_run_get_all (test->cm, -1,
172 TP_IFACE_CONNECTION_MANAGER, &properties, &test->error, NULL);
173 g_assert_no_error (test->error);
174
175 g_assert (tp_asv_lookup (properties, "Interfaces") != NULL);
176 test_assert_empty_strv (tp_asv_get_boxed (properties, "Interfaces",
177 G_TYPE_STRV));
178
179 protocols = tp_asv_get_boxed (properties, "Protocols",
180 TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP);
181 g_assert (protocols != NULL);
182 g_assert_cmpuint (g_hash_table_size (protocols), ==, 1);
183
184 pp = g_hash_table_lookup (protocols, "example");
185 g_assert (pp != NULL);
186
187 test_assert_empty_strv (tp_asv_get_boxed (pp, TP_PROP_PROTOCOL_INTERFACES,
188 G_TYPE_STRV));
189
190 g_assert_cmpstr (tp_asv_get_string (pp, TP_PROP_PROTOCOL_ICON), ==,
191 "im-icq");
192 g_assert_cmpstr (tp_asv_get_string (pp, TP_PROP_PROTOCOL_ENGLISH_NAME), ==,
193 "Echo II example");
194 g_assert_cmpstr (tp_asv_get_string (pp, TP_PROP_PROTOCOL_VCARD_FIELD), ==,
195 "x-telepathy-example");
196
197 tp_tests_assert_strv_equals (tp_asv_get_boxed (pp,
198 TP_PROP_PROTOCOL_CONNECTION_INTERFACES, G_TYPE_STRV),
199 expected_interfaces);
200
201 arr = tp_asv_get_boxed (pp, TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES,
202 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST);
203 g_assert (arr != NULL);
204 g_assert_cmpuint (arr->len, ==, 1);
205
206 va = g_ptr_array_index (arr, 0);
207 g_assert (G_VALUE_HOLDS (va->values + 0, TP_HASH_TYPE_CHANNEL_CLASS));
208 g_assert (G_VALUE_HOLDS (va->values + 1, G_TYPE_STRV));
209
210 fixed = g_value_get_boxed (va->values + 0);
211 g_assert_cmpstr (tp_asv_get_string (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE), ==,
212 TP_IFACE_CHANNEL_TYPE_TEXT);
213
214 arr = tp_asv_get_boxed (pp, TP_PROP_PROTOCOL_PARAMETERS,
215 TP_ARRAY_TYPE_PARAM_SPEC_LIST);
216 g_assert (arr != NULL);
217 g_assert_cmpuint (arr->len, >=, 1);
218 }
219
220 static void
221 test_protocols_property_old (Test *test,
222 gconstpointer data G_GNUC_UNUSED)
223 {
224 GHashTable *properties = NULL;
225 GHashTable *protocols;
226 GHashTable *pp;
227 GPtrArray *arr;
228
229 tp_cli_dbus_properties_run_get_all (test->old_cm, -1,
230 TP_IFACE_CONNECTION_MANAGER, &properties, &test->error, NULL);
231 g_assert_no_error (test->error);
232
233 g_assert (tp_asv_lookup (properties, "Interfaces") != NULL);
234 test_assert_empty_strv (tp_asv_get_boxed (properties, "Interfaces",
235 G_TYPE_STRV));
236
237 protocols = tp_asv_get_boxed (properties, "Protocols",
238 TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP);
239 g_assert (protocols != NULL);
240 g_assert_cmpuint (g_hash_table_size (protocols), ==, 1);
241
242 pp = g_hash_table_lookup (protocols, "example");
243 g_assert (pp != NULL);
244
245 g_assert (tp_asv_lookup (pp, TP_PROP_PROTOCOL_INTERFACES) == NULL);
246 g_assert (tp_asv_lookup (pp, TP_PROP_PROTOCOL_ICON) == NULL);
247 g_assert (tp_asv_lookup (pp, TP_PROP_PROTOCOL_ENGLISH_NAME) == NULL);
248 g_assert (tp_asv_lookup (pp, TP_PROP_PROTOCOL_VCARD_FIELD) == NULL);
249 g_assert (tp_asv_lookup (pp,
250 TP_PROP_PROTOCOL_CONNECTION_INTERFACES) == NULL);
251 g_assert (tp_asv_lookup (pp, TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES)
252 == NULL);
253
254 arr = tp_asv_get_boxed (pp, TP_PROP_PROTOCOL_PARAMETERS,
255 TP_ARRAY_TYPE_PARAM_SPEC_LIST);
256 g_assert (arr != NULL);
257 g_assert_cmpuint (arr->len, >=, 1);
258
259 }
260
261 static void
262 test_protocol_object (Test *test,
263 gconstpointer data G_GNUC_UNUSED)
264 {
265 g_assert_cmpstr (tp_connection_manager_get_name (test->cm), ==,
266 "example_echo_2");
267 tp_tests_proxy_run_until_prepared (test->cm, NULL);
268 test->protocol = g_object_ref (
269 tp_connection_manager_get_protocol_object (test->cm, "example"));
270
271 g_assert_cmpstr (tp_protocol_get_name (test->protocol), ==, "example");
272
273 g_assert (tp_proxy_is_prepared (test->protocol,
274 TP_PROTOCOL_FEATURE_PARAMETERS));
275
276 g_assert (tp_protocol_has_param (test->protocol, "account"));
277 g_assert (!tp_protocol_has_param (test->protocol, "no-way"));
278
279 g_assert (tp_proxy_is_prepared (test->protocol, TP_PROTOCOL_FEATURE_CORE));
280
281 g_assert_cmpstr (tp_protocol_get_icon_name (test->protocol), ==,
282 "im-icq");
283 g_assert_cmpstr (tp_protocol_get_english_name (test->protocol), ==,
284 "Echo II example");
285 g_assert_cmpstr (tp_protocol_get_vcard_field (test->protocol), ==,
286 "x-telepathy-example");
287 g_assert (TP_IS_CAPABILITIES (tp_protocol_get_capabilities (
288 test->protocol)));
289 }
290
291 static void
292 test_protocol_object_old (Test *test,
293 gconstpointer data G_GNUC_UNUSED)
294 {
295 g_assert_cmpstr (tp_connection_manager_get_name (test->old_cm), ==,
296 "example_echo");
297 tp_tests_proxy_run_until_prepared (test->old_cm, NULL);
298 test->old_protocol = g_object_ref (
299 tp_connection_manager_get_protocol_object (test->old_cm, "example"));
300
301 g_assert_cmpstr (tp_protocol_get_name (test->old_protocol), ==, "example");
302
303 g_assert (tp_proxy_is_prepared (test->old_protocol,
304 TP_PROTOCOL_FEATURE_PARAMETERS));
305
306 g_assert (tp_protocol_has_param (test->old_protocol, "account"));
307 g_assert (!tp_protocol_has_param (test->old_protocol, "no-way"));
308
309 g_assert (!tp_proxy_is_prepared (test->old_protocol,
310 TP_PROTOCOL_FEATURE_CORE));
311
312 g_assert_cmpstr (tp_protocol_get_icon_name (test->old_protocol), ==,
313 "im-example");
314 g_assert_cmpstr (tp_protocol_get_english_name (test->old_protocol), ==,
315 "Example");
316 g_assert_cmpstr (tp_protocol_get_vcard_field (test->old_protocol), ==, NULL);
317 g_assert (tp_protocol_get_capabilities (test->old_protocol) == NULL);
318 }
319
320 int
321 main (int argc,
322 char **argv)
323 {
324 g_test_init (&argc, &argv, NULL);
325 g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
326
327 g_test_add ("/protocol-objects/protocol-properties", Test, NULL, setup,
328 test_protocol_properties, teardown);
329 g_test_add ("/protocol-objects/protocols-property", Test, NULL, setup,
330 test_protocols_property, teardown);
331 g_test_add ("/protocol-objects/protocols-property-old", Test, NULL, setup,
332 test_protocols_property_old, teardown);
333 g_test_add ("/protocol-objects/object", Test, NULL, setup,
334 test_protocol_object, teardown);
335 g_test_add ("/protocol-objects/object-old", Test, NULL, setup,
336 test_protocol_object_old, teardown);
337
338 return g_test_run ();
339 }
0 XSLTPROCFLAGS = --nonet --novalid
1
2 vapidir = $(datarootdir)/telepathy/vapi
3 vapi_DATA = telepathy-glib.vapi
0 vapidir = $(datarootdir)/vala/vapi
1 vapi_DATA = \
2 telepathy-glib.vapi \
3 telepathy-glib.deps \
4 $(NULL)
45
56 BUILT_SOURCES = \
67 telepathy-glib.vapi \
2930 $(NULL)
3031
3132 # set up the verbosity rules to avoid some build noise
32 # XXX: once automake >= 1.11 is common, remove these, push VALASOURCES files
33 # into SOURCES and add AM_PROG_VALAC to configure.ac
3433 VAPIGEN_V = $(VAPIGEN_V_$(V))
3534 VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
3635 VAPIGEN_V_0 = @echo " VAPIG " $^;
37
38 VGI_V = $(VGI_V_$(V))
39 VGI_V_ = $(VGI_V_$(AM_DEFAULT_VERBOSITY))
40 VGI_V_0 = @echo " VGI " $^;
247247 top_build_prefix = @top_build_prefix@
248248 top_builddir = @top_builddir@
249249 top_srcdir = @top_srcdir@
250 XSLTPROCFLAGS = --nonet --novalid
251 vapidir = $(datarootdir)/telepathy/vapi
252 vapi_DATA = telepathy-glib.vapi
250 vapidir = $(datarootdir)/vala/vapi
251 vapi_DATA = \
252 telepathy-glib.vapi \
253 telepathy-glib.deps \
254 $(NULL)
255
253256 BUILT_SOURCES = \
254257 telepathy-glib.vapi \
255258 $(NULL)
262265
263266
264267 # set up the verbosity rules to avoid some build noise
265 # XXX: once automake >= 1.11 is common, remove these, push VALASOURCES files
266 # into SOURCES and add AM_PROG_VALAC to configure.ac
267268 VAPIGEN_V = $(VAPIGEN_V_$(V))
268269 VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
269270 VAPIGEN_V_0 = @echo " VAPIG " $^;
270 VGI_V = $(VGI_V_$(V))
271 VGI_V_ = $(VGI_V_$(AM_DEFAULT_VERBOSITY))
272 VGI_V_0 = @echo " VGI " $^;
273271 all: $(BUILT_SOURCES)
274272 $(MAKE) $(AM_MAKEFLAGS) all-am
275273
33 includedir=@includedir@
44 datarootdir=@datarootdir@
55 datadir=@datadir@
6 vapidir=@datadir@/telepathy/vapi
7 valaflags=--vapidir=${vapidir}
6 vapidir=@datadir@/vala/vapi
7 valaflags=
88
99 Name: Telepathy Vala bindings
1010 Description: Vala bindings for the Telepathy framework