Codebase list telepathy-glib / ddc7fc9
Imported Upstream version 0.11.6 Simon McVittie 13 years ago
248 changed file(s) with 15197 addition(s) and 1307 deletion(s). Raw diff Collapse all Expand all
0 commit d1a80dee31d7b4d4e64342fbb103adb26b49e272
1 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2 Date: 2010-05-25 16:34:15 +0100
3
4 Prepare version 0.11.6
5
6 commit af17eb7f98e97b506ac6ad129b08a0b38db977c7
7 Merge: 9c5dbdb 4e39c8c
8 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
9 Date: 2010-05-25 16:25:12 +0100
10
11 Merge branch 'telepathy-glib-0.10'
12
13 Conflicts:
14 NEWS
15 configure.ac
16
17 commit 4e39c8c30d874af5ca3af1f13f77e1bd8662ddfa
18 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
19 Date: 2010-05-25 16:24:00 +0100
20
21 Nano version
22
23 commit 89758d18706ea62fe7c339dd922ef170c7fe4843
24 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
25 Date: 2010-05-25 16:14:41 +0100
26
27 Prepare stable release 0.10.6
28
29 commit 9c5dbdb1b8b65c3dcef024b0009128743498ad1f
30 Merge: c581fe9 d13b2b0
31 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
32 Date: 2010-05-25 16:12:39 +0100
33
34 Merge branch 'spec'
35
36 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
37
38 commit d13b2b043f5d3fd3f7ab6804dff27a592b5ce546
39 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
40 Date: 2010-05-25 16:02:38 +0100
41
42 Update NEWS
43
44 commit ffa1154dddfdb8a1b52cab61fa8b93079ba28da7
45 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
46 Date: 2010-05-25 15:47:38 +0100
47
48 tp_account_get_changing_presence, TpAccount:changing-presence: add
49
50 commit 2948ab95e843a969840d9e2696103e9b63282c92
51 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
52 Date: 2010-05-25 15:45:24 +0100
53
54 Update to spec 0.19.6
55
56 commit fc4cf185b4528a582c5f2eb2efeb0cc60509371a
57 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
58 Date: 2010-05-24 13:28:01 +0100
59
60 Set the correct nsversion for GIR
61
62 nsversion is meant to be an API/ABI version rather than a version number;
63 the g-ir-scanner man page says "This is usually the platform version,
64 eg 2.0 for Gtk+, not 2.12.7".
65
66 commit c581fe948c52a09b4e28bcf46c5ef3c9630b2488
67 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
68 Date: 2010-05-25 13:43:20 +0200
69
70 fix typo in tp_simple_handler_new doc
71
72 commit 2743dd452844fb234155e82efb106a839f9e8e6e
73 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
74 Date: 2010-05-25 12:50:01 +0200
75
76 ignore messages until GetPendingMessages() has returned
77
78 commit 0845f60ad48dc43f586da31cfeec01ddacb0c042
79 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
80 Date: 2010-05-25 12:45:15 +0200
81
82 text-handler: including telepathy-glib.h is enough
83
84 commit 301ec9dca799e441934aa78c60ae9c18355a7a42
85 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
86 Date: 2010-05-25 12:42:50 +0200
87
88 telepathy-glib.h: add simple-handler.h
89
90 commit 8ddb84adaf13f45a24f5cc3949080a0ec6cdf233
91 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
92 Date: 2010-05-17 14:46:04 +0200
93
94 add examples/client/text-handler.c
95
96 commit 25faa0023680f27ffa73ba77153fa7a353589d53
97 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
98 Date: 2010-05-17 14:02:53 +0200
99
100 test TpSimpleHandler
101
102 commit 2011d69f2b42205b047361006850f0e96dedac44
103 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
104 Date: 2010-05-17 14:02:22 +0200
105
106 add TpSimpleHandler (fdo #27873)
107
108 commit 46d0bd5c18c9176367394c137ca16656d882b76e
109 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
110 Date: 2010-05-17 12:56:44 +0200
111
112 telepathy-glib.h: add simple-approver.h
113
114 commit 632d29892b3ef7acd7ff9b303a9cce9804378b22
115 Merge: 3f0783b 7f232db
116 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
117 Date: 2010-05-25 12:36:19 +0200
118
119 Merge branch 'base-handler-27872'
120
121 commit 7f232db322e5128944d9d8a21df3c5ec6ec8a971
122 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
123 Date: 2010-05-25 11:07:01 +0200
124
125 test-cdo: properly close text channels
126
127 commit f70f82aabc8da639a47822fc6dd945e8a4256655
128 Merge: 36b34da 476cfae
129 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
130 Date: 2010-05-25 10:34:58 +0200
131
132 Merge remote branch 'smcv/handler' into base-handler-27872
133
134 commit 36b34daedf3dabafe5fa6f630295272dbecd70f7
135 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
136 Date: 2010-05-25 10:30:19 +0200
137
138 test-base-client: add a comment about private headers
139
140 commit 3f0783b15eb48c50b3760bec4caceea780262468
141 Merge: 2222868 7e6ae3a
142 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
143 Date: 2010-05-24 18:16:11 +0100
144
145 Merge branch 'intset-the-revenge'
146
147 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
148
149 commit 7e6ae3a00bddeb2d029b5fa62e1eec6bfec4e8b8
150 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
151 Date: 2010-05-24 18:11:48 +0100
152
153 intset test: test iteration more systematically
154
155 commit 76908456689ab08e444aa25c5791362d4ad445f4
156 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
157 Date: 2010-05-24 18:10:46 +0100
158
159 tp_intset_copy etc.: set #TpIntSet.largest_ever correctly on the copy
160
161 This fixes a regression in which TpIntSetIter terminated too early
162 (but TpIntSetFastIter was already correct, because it doesn't iterate
163 in order).
164
165 commit 476cfae8f5ca948d08921d402793c5ddcd512b46
166 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
167 Date: 2010-05-24 17:52:20 +0100
168
169 base-client test: close text channels cleanly rather than just taking them off the bus
170
171 commit a23eb00df0bc12172f0089d75346aba25a9e9026
172 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
173 Date: 2010-05-24 17:04:16 +0200
174
175 change user-action-time to a gint64 and improve doc
176
177 commit 3db9f949caf4e467760873c08afe174bee68be26
178 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
179 Date: 2010-05-24 16:32:42 +0200
180
181 handle-channels-context: include public header first
182
183 commit 4d6bf1661dcc775301d2e3b8791264dd474cab48
184 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
185 Date: 2010-05-24 16:29:37 +0200
186
187 remove useless backslash
188
189 commit bc1219b5ed6fb616b5539fda5d631368b83c6050
190 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
191 Date: 2010-05-24 16:27:50 +0200
192
193 use WARNING instead of g_warning
194
195 commit 887d9ab351c674a42ee5d75ac88c4c0591377cf0
196 Merge: 03975b9 fcf6387
197 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
198 Date: 2010-05-24 16:18:12 +0200
199
200 Merge remote branch 'smcv/handler' into base-handler-27872
201
202 commit fcf63876831f00ecdbb99a6ca0e70d9039d31a5e
203 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
204 Date: 2010-05-24 11:36:05 +0100
205
206 tests/dbus/base-client.c: close the channel correctly, causing client-side invalidation
207
208 commit 37bd26967051b0689313f782a849c6fc13af95ce
209 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
210 Date: 2010-05-24 11:35:39 +0100
211
212 TestTextChannelNull: add test_text_channel_null_close
213
214 Also forcibly remove the channel from D-Bus after it closes, even if
215 references to it persist.
216
217 commit 2222868effd164390e6c2b9c54a4ebf3fa89fc3a
218 Merge: 84b4e4d e7e2727
219 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
220 Date: 2010-05-24 11:21:14 +0100
221
222 Merge branch 'trivia'
223
224 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
225
226 commit e7e2727c1b207b1f3c4ed72146128f4736c6e062
227 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
228 Date: 2010-05-24 11:14:59 +0100
229
230 Remove trailing whitespace
231
232 commit f4b67b74a61c7994cc9c31b11cba6af87055f541
233 Author: Morten Mjelva <morten.mjelva@gmail.com>
234 Date: 2010-04-29 14:14:47 +0200
235
236 Added element-type and transfer annotations to garray arguments
237
238 Skipped tp_g_value_slice_* functions in dbus.c
239
240 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
241
242 commit 4a4e732b2a42526849ffefbd9885cacf8252e2eb
243 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
244 Date: 2010-05-24 11:14:47 +0100
245
246 Update README
247
248 commit f7fdb0cc9173179585504e55340066f210e5e41f
249 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
250 Date: 2010-05-24 11:14:33 +0100
251
252 Document new requirements in NEWS
253
254 commit 01da23162c59ae3d6d582eaf69cc20c13aa59b4e
255 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
256 Date: 2010-05-24 10:53:55 +0100
257
258 Require the latest gtk-doc, for sane handling of wrapped lines
259
260 commit 8ba61e8c0e73eddfb4b6c924b55cb47bdd8638f8
261 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
262 Date: 2010-05-24 10:53:34 +0100
263
264 Require the latest GObject-Introspection, for GArray support
265
266 commit 84b4e4dc8c00b6e1dd06fca908f28ead1959248e
267 Author: Danielle Madeley <danielle.madeley@collabora.co.uk>
268 Date: 2010-05-24 13:39:33 +1000
269
270 Remove variables that shadow global function names
271
272 commit 9d2a3943af9f95be83cb4fa4371bda23c77f94f6
273 Author: Xavier Claessens <xclaesse@gmail.com>
274 Date: 2010-05-22 13:28:45 +0200
275
276 Annotate that tp_contact_get_avatar_file() does not return a new ref
277
278 This fix issues with bindings
279
280 commit 599b5f3fa37650e38ba3ce431ccb6124abedcbe0
281 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
282 Date: 2010-05-21 16:33:13 +0100
283
284 Update NEWS
285
286 commit c403d57a5ebebd9fbaa0b136f56257076adfafb9
287 Merge: df5238a fa5ca18
288 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
289 Date: 2010-05-21 16:31:09 +0100
290
291 Merge branch 'test-contact-list-cm'
292
293 commit df5238a9ec5427d0931579f60be70161c5408aae
294 Merge: 42cb649 4e77362
295 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
296 Date: 2010-05-21 16:28:23 +0100
297
298 Merge branch 'telepathy-glib-0.10'
299
300 commit 4e7736243b5b6ceb999e7e9347ea74dac0abad28
301 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
302 Date: 2010-05-21 16:28:16 +0100
303
304 Update NEWS for 0.10.x
305
306 commit 3a7fd8ea60ec01463118297aa76034f364c18b6e
307 Merge: f6bedc9 a36f21c
308 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
309 Date: 2010-05-21 16:22:38 +0100
310
311 Merge branch '010-group-and-contact-list' into telepathy-glib-0.10
312
313 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
314
315 commit a36f21cbec16a1c9a92075d6c26827861e8ab53f
316 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
317 Date: 2010-05-21 13:16:33 +0100
318
319 TpGroupMixin: when removing members, don't raise an error if it's a no-op
320
321 This is awkward if two clients both try to remove the same member at the
322 same time, for instance.
323
324 commit fd03202eb180c6ac40f3786a7059c8340b78d91d
325 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
326 Date: 2010-05-21 12:24:46 +0100
327
328 TpGroupMixin: allow no-op AddMembers for members, even without CAN_ADD
329
330 The spec says "Attempting to add contacts who are already members is
331 allowed; connection managers must silently accept this, without error."
332
333 commit fa5ca18312eed17ab2b4f5e3238e64463fe29beb
334 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
335 Date: 2010-05-21 13:16:33 +0100
336
337 TpGroupMixin: when removing members, don't raise an error if it's a no-op
338
339 This is awkward if two clients both try to remove the same member at the
340 same time, for instance.
341
342 commit f1a58bc59e0ddf19075277322715abf225ad9a0c
343 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
344 Date: 2010-05-21 13:07:05 +0100
345
346 contactlist example: put publish's pending members on the stored list, too
347
348 This is not the current behaviour of CMs like Gabble, but it reflects how
349 the new ContactList D-Bus API is intended to behave.
350
351 commit fc145434b8f348a53af721b128d3a37141d47d7d
352 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
353 Date: 2010-05-21 13:03:59 +0100
354
355 contact-lists test: check the interaction between subscribe and stored
356
357 commit 0dd79c63a188034db7c9f3407fe9baf177841d84
358 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
359 Date: 2010-05-21 13:03:40 +0100
360
361 contactlist example: consistently put people we subscribe to on the stored list
362
363 They're full members of stored, even if they're remote-pending in
364 subscribe. This is realistic - XMPP has this behaviour.
365
366 commit 12a833385c6d31173cae66a143c43bcecc8e2564
367 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
368 Date: 2010-05-21 12:24:46 +0100
369
370 TpGroupMixin: allow no-op AddMembers for members, even without CAN_ADD
371
372 The spec says "Attempting to add contacts who are already members is
373 allowed; connection managers must silently accept this, without error."
374
375 commit 30bda609f984dc05c0b61170109fdcde1fa3bee1
376 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
377 Date: 2010-05-20 14:50:09 +0100
378
379 contact-lists test: also exercise groups
380
381 commit a2725c6b9c5d6ab392f67255e5624f273b1daffa
382 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
383 Date: 2010-05-20 13:48:59 +0100
384
385 contact-lists test: cover most contact lists, avoid simulation delay
386
387 commit 48984edd14deb21b5b783f117e592abed5bccfa8
388 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
389 Date: 2010-05-19 18:07:23 +0100
390
391 Add a stub test for the contactlist example CM
392
393 commit 1c88252f64f96ec1a55c9ccd176e7915ae877453
394 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
395 Date: 2010-05-19 18:23:01 +0100
396
397 test_proxy_run_until_prepared, test_proxy_run_until_prepared_or_failed: add
398
399 commit 6399dd5e594847d1a5bdd98816ce9c29650cb644
400 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
401 Date: 2010-05-20 13:48:36 +0100
402
403 contactlist example CM: have a variable simulation delay, like the callable CM does
404
405 commit 829bb1f2d8c279bc8745e92837fbab71f5c847f3
406 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
407 Date: 2010-05-20 13:26:30 +0100
408
409 example_contact_list_manager_add_to_list: annotate unreachable code
410
411 commit a019177e2ed7f760eec1e2bca07006904df80cba
412 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
413 Date: 2010-05-20 13:59:23 +0100
414
415 contactlist example: when removing people from stored, also remove from other lists
416
417 commit 99dc669ce69d99d71184f751a195dc91946cc316
418 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
419 Date: 2010-05-20 13:26:16 +0100
420
421 contactlist example: ensure_contact: set the created flag correctly
422
423 commit 42cb6493396c38d54126ab2427c4fc1dec1bf417
424 Merge: 0071eb6 711781e
425 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
426 Date: 2010-05-21 12:15:50 +0100
427
428 Merge branch 'intsetting'
429
430 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
431
432 commit 0071eb6daacb2e877e0a69794538a2b2a8461fac
433 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
434 Date: 2010-05-19 18:18:26 +0100
435
436 Move _tp_proxy_set_features_failed to internal header where it should have been
437
438 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
439
440 commit 711781e2641151aa366ccf718c264c54584572ad
441 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
442 Date: 2010-05-21 12:10:39 +0100
443
444 Examples: use TpIntSetFastIter
445
446 commit 51b8cae49b7a57fa26f30b2d3c3659515a4aed8c
447 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
448 Date: 2010-05-21 12:10:15 +0100
449
450 TpChannel: use TpIntSetFastIter
451
452 commit 28644244e5459b8143c52d6b0a10c76940a188b6
453 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
454 Date: 2010-05-21 12:09:58 +0100
455
456 TpPropertiesMixin: use TpIntSetFastIter
457
458 commit a72c557edd25a709598e2d470a56a40213e9dd67
459 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
460 Date: 2010-05-21 12:08:09 +0100
461
462 TpIntSet: improve documentation of TpIntSetFastIter
463
464 commit d21fce565beb44bc4eea8a3be088bb9b48377a68
465 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
466 Date: 2010-05-21 11:51:40 +0100
467
468 Add a boxed type for handle sets
469
470 commit 72a71fd03006ad5ce03fec6414d3d383dd56a94b
471 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
472 Date: 2010-05-19 11:26:07 +0100
473
474 tp_handle_set_copy: add
475
476 commit 0e3a1cc5de52a59316604fb10737120aebea936c
477 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
478 Date: 2010-05-19 11:10:29 +0100
479
480 TpHandleSet: improve const-correctness
481
482 commit f4af6205393a2594a3194f7c5720e810f01821fb
483 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
484 Date: 2010-05-19 11:07:48 +0100
485
486 tp_handle_set_clear, tp_handle_set_is_empty: add
487
488 commit 1eaa54d91ccbd5e67e5709a2bc1f3362ab30c4bd
489 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
490 Date: 2010-05-21 11:46:53 +0100
491
492 tp_intset_is_empty: add
493
494 Now that we're using a different representation of int sets, checking
495 for empty intsets is very, very cheap.
496
497 commit 695b6de8fab432728b1b5a666280d868c8532aec
498 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
499 Date: 2010-05-19 18:18:26 +0100
500
501 Move _tp_proxy_set_features_failed to internal header where it should have been
502
503 commit 8e84dd66d789baac828c05ab17f500209017fc5d
504 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
505 Date: 2010-05-21 11:36:31 +0100
506
507 fd.o #16170: TpIntSet: cope better with sparse sets
508
509 When we stop refcounting handles, it will become more important that
510 clients and services both cope gracefully with sparse sets, since the
511 average numeric value of a handle will increase.
512
513 Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
514 Conflicts:
515 tests/intset.c
516
517 commit 03975b97e1e146c696fde658dc85a398c5d36ab7
518 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
519 Date: 2010-05-20 14:13:49 +0200
520
521 raise a warning if tp_dbus_daemon_release_name fails
522
523 commit 459d58933583245da57b142c1cbfcb87d07ac83a
524 Author: Xavier Claessens <xclaesse@gmail.com>
525 Date: 2010-05-18 16:40:46 +0200
526
527 Rephrase some API doc to be clearer.
528
529 commit daea062bec211451f9e9f545acb46c88496e4839
530 Author: Xavier Claessens <xclaesse@gmail.com>
531 Date: 2010-05-18 16:35:41 +0200
532
533 Rename mimetype to mime_type
534
535 commit 195494fd3077f37a6125a24ab48d40ac5939830f
536 Author: Xavier Claessens <xclaesse@gmail.com>
537 Date: 2010-05-18 16:27:42 +0200
538
539 Make sure the tmp dir we are using for avatar cache does not exist
540
541 commit 082399a79b928362204eafc53da0eefca746c4d1
542 Author: Xavier Claessens <xclaesse@gmail.com>
543 Date: 2010-05-18 14:11:52 +0200
544
545 Use g_return_if_fail() in case a feature is unknown
546
547 commit 663c19c758c6c9aacfb980151d293cda122c253c
548 Author: Xavier Claessens <xclaesse@gmail.com>
549 Date: 2010-05-17 18:21:37 +0200
550
551 Use random temporary directory for the avatar cache
552
553 commit 7ca5add5a04f813fb608ada70c8b928ba8120e02
554 Author: Xavier Claessens <xclaesse@gmail.com>
555 Date: 2010-05-17 16:02:20 +0200
556
557 Fix some coding style in tests
558
559 commit 01c78df058e021a7ef8a481a1feabc3cff41aaba
560 Author: Xavier Claessens <xclaesse@gmail.com>
561 Date: 2010-05-17 15:59:51 +0200
562
563 Use g_assert instead of MYASSERT
564
565 commit c5749a016d910fafef1ad75a3672baf03c6faf5a
566 Author: Xavier Claessens <xclaesse@gmail.com>
567 Date: 2010-05-11 21:20:10 +0200
568
569 Fix case where AVATAR_TOKEN feature is missing and AVATAR_DATA is set.
570
571 Looks like unit tests are useful after all...
572
573 commit 68df61c82f0906e731e280da502d7f7d8970c5d8
574 Author: Xavier Claessens <xclaesse@gmail.com>
575 Date: 2010-05-11 18:59:20 +0200
576
577 Add unit test for avatar data
578
579 commit ba6a69a8813615dddb46e3fbd2e9ec657414c8b9
580 Author: Xavier Claessens <xclaesse@gmail.com>
581 Date: 2010-05-11 16:43:51 +0200
582
583 Add unit test for avatar requirements
584
585 commit c055dba60e1a47337c6ad3eaa76157f6ecd6b065
586 Author: Xavier Claessens <xclaesse@gmail.com>
587 Date: 2009-10-08 08:42:21 +0200
588
589 Add Avatar data cache on TpContact
590
591 New TpContact feature: TP_CONTACT_FEATURE_AVATAR_DATA, and properties:
592 "avatar-file" and "avatar-mimetype".
593
594 commit ce9892dbdb4ec93c9622af808c16f74e2f67ee71
595 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
596 Date: 2010-05-17 11:57:57 +0200
597
598 test tp_base_client_get_handled_channels()
599
600 commit 3cd231671f3f6f8d2a4aa53769fe47152e90ea0f
601 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
602 Date: 2010-05-18 14:39:27 +0200
603
604 tp_base_client_register: no need to fill clients hash table if client is not an handler
605
606 commit c23008472adaa3fa85df615e8d6565e37a20bcb0
607 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
608 Date: 2010-05-18 14:38:46 +0200
609
610 raise an error if tp_base_client_get_{handled_channels,requests} is called on a non handler client
611
612 commit 7e602baaec803c1d7b009b1ea8e51f2939e71508
613 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
614 Date: 2010-05-18 14:30:15 +0200
615
616 test tp_base_client_unregister
617
618 commit 114b7806df881e09b2d819acab7c5449615cf81d
619 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
620 Date: 2010-05-18 14:18:34 +0200
621
622 add tp_base_client_unregister (fdo #28155)
623
624 commit 40683a7bf1bb9f86889d74fb01b332db93ec1c9d
625 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
626 Date: 2010-05-17 11:26:26 +0200
627
628 actually implement tp_base_client_get_handled_channels
629
630 commit a5e57a9822746ad5941c58363cae43ed0a6fb48e
631 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
632 Date: 2010-05-17 11:18:09 +0200
633
634 add TpHandleChannelsContext::done signal
635
636 commit d6413ff4322f3740a3a962e5d8ba7388ef4a320f
637 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
638 Date: 2010-05-12 12:50:55 +0200
639
640 tp_base_client_get_pending_requests: return a copy of the list
641
642 It makes uses of the GList API easier as it doens't have 'const' correctly
643 set.
644
645 commit ae831ff66d6b46a312db126466ede900a73c14da
646 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
647 Date: 2010-05-11 17:09:03 +0200
648
649 check that we reuse existing channel request if possible
650
651 commit fe8d079c5e057bdeda29990b3166d568a946ef81
652 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
653 Date: 2010-05-11 17:08:06 +0200
654
655 _tp_base_client_handle_channels: reuse existing channel request if possible
656
657 commit 577620f641d5c3be1e0195e01832a9cd0d71695e
658 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
659 Date: 2010-05-11 16:37:19 +0200
660
661 test request-removed signal
662
663 commit 011076d14d12c4d41a8ea63799fd02d46915d39f
664 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
665 Date: 2010-05-11 16:36:53 +0200
666
667 implement request-removed signal
668
669 commit 6bf2df7e15eedce369c5c4c431676c896a5abc92
670 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
671 Date: 2010-05-11 15:43:12 +0200
672
673 test request-added signal
674
675 commit f48a2871ef2b8678bdf98dcfe810f4ccf567ead7
676 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
677 Date: 2010-05-11 15:41:52 +0200
678
679 implement request-added signal and tp_base_client_get_pending_requests()
680
681 commit 15f16b4b8ce1a6dd489b51f238dd16570742f0d5
682 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
683 Date: 2010-05-07 13:08:14 +0200
684
685 document Handler API
686
687 commit b25e02782cba3feda01451843183cdcc4d59e202
688 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
689 Date: 2010-05-07 10:11:59 +0200
690
691 simple-client: implement HandleChannels
692
693 commit 3560ce197ee413d7c03a5c1413809cca0bdc02c0
694 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
695 Date: 2010-05-07 10:11:44 +0200
696
697 add API to implement HandleChannels
698
699 commit ba12d63d7d756ae83d76f0a65f128937fcd31458
700 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
701 Date: 2010-05-06 16:22:51 +0200
702
703 add handle-channels-context
704
705 commit 5a4bfd9400e655da6d37921b7bc6cecce48bc972
706 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
707 Date: 2010-05-06 15:42:13 +0200
708
709 test-base-client: re-introduce Handler tests
710
711 This reverts commit fe4104924e9afc3fb9cb03653aac66ae2e0ae868.
712
713 Conflicts:
714
715 tests/dbus/base-client.c
716
717 commit a4435af7264b4788bd90b580917098a3fbeeb7d4
718 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
719 Date: 2010-05-06 15:37:22 +0200
720
721 base-client Re-introduce Handler code
722
723 This reverts commit 7e8e86e34444a94c27a0ae7f9725b784d09a8606.
724
725 Conflicts:
726
727 telepathy-glib/base-client.c
728 telepathy-glib/base-client.h
729
730 commit eadf97f8f96793332ea95862616850c078e9b5ec
731 Merge: 3a68b70 f6bedc9
732 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
733 Date: 2010-05-12 10:50:04 +0200
734
735 Merge branch 'telepathy-glib-0.10'
736
737 commit f6bedc909d885a5c67368de79a040e62078b7287
738 Merge: 3f06257 3fb80dd
739 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
740 Date: 2010-05-12 10:49:53 +0200
741
742 Merge branch 'telepathy-glib-0.8' into telepathy-glib-0.10
743
744 Conflicts:
745 NEWS
746
747 commit 3fb80ddbbc533fda1de5710d0f0511a1c74a1fd5
748 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
749 Date: 2010-05-12 10:48:20 +0200
750
751 Update NEWS
752
753 commit acb518e6c3bbfd351f2a29c3cb77d4ee09f650ec
754 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
755 Date: 2010-05-12 10:42:10 +0200
756
757 TP_IS_HANDLE_REPO_IFACE: fix syntax by adding a parenthesis
758
759 Apparently, nobody has ever used this macro...
760
761 Reviewed-by: Robert McQueen <robert.mcqueen@collabora.co.uk>
762
763 commit 3a68b70cd7d8e571021f44c467dba8f473b708eb
764 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
765 Date: 2010-05-10 18:24:29 +0100
766
767 Nano version
768
0769 commit 2fd57acfab0dd14888baefed5e79c97fce153a74
1770 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2771 Date: 2010-05-10 17:03:56 +0100
194194 PACKAGE_VERSION = @PACKAGE_VERSION@
195195 PATH_SEPARATOR = @PATH_SEPARATOR@
196196 PKG_CONFIG = @PKG_CONFIG@
197 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
198 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
197199 PYTHON = @PYTHON@
198200 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
199201 PYTHON_PLATFORM = @PYTHON_PLATFORM@
0 telepathy-glib 0.11.6 (2010-05-25)
1 ==================================
2
3 The "anybody need this sign?" release.
4
5 This version includes all the bugfixes from today's 0.10.6 release.
6
7 Requirements:
8
9 * If gtk-doc is enabled, it must be version 1.15 or later.
10 * If GObject-Introspection is enabled, it must be version 0.6.11 or later.
11
12 Enhancements:
13
14 * Updated to telepathy-spec 0.19.6:
15 * ChangingPresence property on the Account interface
16 * SupportedLocationFeatures property on the Location interface
17 * HandleWithTime method on ChannelDispatchOperation
18 * MultipleTones method, SendingTones and StoppedTones signals, and
19 CurrentlySendingTones and InitialTones properties on the DTMF interface
20
21 * TpAccount:changing-presence and tp_account_get_changing_presence, a binding
22 for the new ChangingPresence property (smcv)
23
24 * fd.o #27872: enhance TpBaseClient to support being a Handler (cassidy)
25
26 * fd.o #27873: TpSimpleHandler, a simple TpBaseClient subclass for
27 projects that don't need their own subclass, and an example Approver that
28 uses it (cassidy)
29
30 * fd.o #20035: add TP_CONTACT_FEATURE_AVATAR_DATA, the ability to cache and
31 access avatar data (Zdra)
32
33 * fd.o #16170: cope better with sparse TpIntSets (smcv)
34
35 * Add more API for int sets and handle sets (smcv)
36
37 * Make the ContactList example connection manager more realistic, and add a
38 regression test for it (smcv)
39
40 Fixes:
41
42 * fd.o #28203: TpGroupMixin: allow "adding" contacts who are already members,
43 even if the Can_Add flag isn't set (e.g. accepting a subscription request
44 twice), and allow "removing" contacts who are not in the channel
45 (e.g. rejecting a subscription request twice) (smcv)
46
47 * Correct the syntax of TP_IS_HANDLE_REPO_IFACE (smcv)
48
49 * Move _tp_proxy_set_features_failed (which isn't intended to be API, and
50 isn't ABI) to an internal header (smcv)
51
52 * Fix the namespace version for GObject-Introspection (smcv)
53
054 telepathy-glib 0.11.5 (2010-05-10)
155 ==================================
256
2828 Python <http://www.python.org/>
2929
3030 and can also make use of:
31 GObject-Introspection <http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/>
3132 gtkdoc <http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/>
3233
3334 See configure.ac for full details, including versions required.
4142 =====================================
4243
4344 Report all bugs, feature requests and "to-do" items here:
44 <https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=telepathy-glib>
45 <https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-glib>
4546
4647 Running "make check" will produce FIXME.out, which lists all the mentions of
4748 FIXME, TODO or XXX in the source code. Ideally, all of these should be in
99100 Stable branches are available from branches with names like
100101 'telepathy-glib-0.6' in the same repository.
101102
102 Proposed patches awaiting review can usually be found in Merge Monkey:
103 <http://monkey.collabora.co.uk/>
103 Proposed patches awaiting review can usually be found in freedesktop.org bugzilla.
104 Our review procedure is described by:
105 <http://telepathy.freedesktop.org/wiki/Review%20Procedure>
104106
105107 Please follow <http://telepathy.freedesktop.org/wiki/Style>.
1919 To do so, use the procedure documented by the package, typically `autoreconf'.])])
2020
2121 # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
22 # serial 1 (pkg-config-0.24)
2223 #
2324 # Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
2425 #
4647 AC_DEFUN([PKG_PROG_PKG_CONFIG],
4748 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
4849 m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
49 AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
50 AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
51 AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
52 AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
53
5054 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
5155 AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
5256 fi
5963 AC_MSG_RESULT([no])
6064 PKG_CONFIG=""
6165 fi
62
6366 fi[]dnl
6467 ])# PKG_PROG_PKG_CONFIG
6568
6871 # Check to see whether a particular set of modules exists. Similar
6972 # to PKG_CHECK_MODULES(), but does not set variables or print errors.
7073 #
71 #
72 # Similar to PKG_CHECK_MODULES, make sure that the first instance of
73 # this or PKG_CHECK_MODULES is called, or make sure to call
74 # PKG_CHECK_EXISTS manually
74 # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
75 # only at the first occurence in configure.ac, so if the first place
76 # it's called might be skipped (such as if it is within an "if", you
77 # have to call PKG_CHECK_EXISTS manually
7578 # --------------------------------------------------------------
7679 AC_DEFUN([PKG_CHECK_EXISTS],
7780 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
7881 if test -n "$PKG_CONFIG" && \
7982 AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
80 m4_ifval([$2], [$2], [:])
83 m4_default([$2], [:])
8184 m4_ifvaln([$3], [else
8285 $3])dnl
8386 fi])
8487
85
8688 # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
8789 # ---------------------------------------------
8890 m4_define([_PKG_CONFIG],
89 [if test -n "$PKG_CONFIG"; then
90 if test -n "$$1"; then
91 pkg_cv_[]$1="$$1"
92 else
93 PKG_CHECK_EXISTS([$3],
94 [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
95 [pkg_failed=yes])
96 fi
97 else
98 pkg_failed=untried
91 [if test -n "$$1"; then
92 pkg_cv_[]$1="$$1"
93 elif test -n "$PKG_CONFIG"; then
94 PKG_CHECK_EXISTS([$3],
95 [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
96 [pkg_failed=yes])
97 else
98 pkg_failed=untried
9999 fi[]dnl
100100 ])# _PKG_CONFIG
101101
137137 See the pkg-config man page for more details.])
138138
139139 if test $pkg_failed = yes; then
140 AC_MSG_RESULT([no])
140141 _PKG_SHORT_ERRORS_SUPPORTED
141142 if test $_pkg_short_errors_supported = yes; then
142 $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
143 $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
143144 else
144 $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
145 $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
145146 fi
146147 # Put the nasty error message in config.log where it belongs
147148 echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
148149
149 ifelse([$4], , [AC_MSG_ERROR(dnl
150 m4_default([$4], [AC_MSG_ERROR(
150151 [Package requirements ($2) were not met:
151152
152153 $$1_PKG_ERRORS
154155 Consider adjusting the PKG_CONFIG_PATH environment variable if you
155156 installed software in a non-standard prefix.
156157
157 _PKG_TEXT
158 ])],
159 [AC_MSG_RESULT([no])
160 $4])
158 _PKG_TEXT])dnl
159 ])
161160 elif test $pkg_failed = untried; then
162 ifelse([$4], , [AC_MSG_FAILURE(dnl
161 AC_MSG_RESULT([no])
162 m4_default([$4], [AC_MSG_FAILURE(
163163 [The pkg-config script could not be found or is too old. Make sure it
164164 is in your PATH or set the PKG_CONFIG environment variable to the full
165165 path to pkg-config.
166166
167167 _PKG_TEXT
168168
169 To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
170 [$4])
169 To get pkg-config, see <http://pkg-config.freedesktop.org/>.])dnl
170 ])
171171 else
172172 $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
173173 $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
174174 AC_MSG_RESULT([yes])
175 ifelse([$3], , :, [$3])
175 $3
176176 fi[]dnl
177177 ])# PKG_CHECK_MODULES
178178
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.5.
2 # Generated by GNU Autoconf 2.65 for Telepathy-GLib 0.11.6.
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.5'
705 PACKAGE_STRING='Telepathy-GLib 0.11.5'
704 PACKAGE_VERSION='0.11.6'
705 PACKAGE_STRING='Telepathy-GLib 0.11.6'
706706 PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-glib'
707707 PACKAGE_URL=''
708708
805805 INTROSPECTION_GENERATE
806806 INTROSPECTION_COMPILER
807807 INTROSPECTION_SCANNER
808 PKG_CONFIG_LIBDIR
809 PKG_CONFIG_PATH
808810 PKG_CONFIG
809811 CPP
810812 OTOOL64
950952 CPPFLAGS
951953 CPP
952954 PKG_CONFIG
955 PKG_CONFIG_PATH
956 PKG_CONFIG_LIBDIR
953957 GLIB_CFLAGS
954958 GLIB_LIBS
955959 GIO_UNIX_CFLAGS
14971501 # Omit some internal or obsolete options to make the list less imposing.
14981502 # This message is too long to be a string in the A/UX 3.1 sh.
14991503 cat <<_ACEOF
1500 \`configure' configures Telepathy-GLib 0.11.5 to adapt to many kinds of systems.
1504 \`configure' configures Telepathy-GLib 0.11.6 to adapt to many kinds of systems.
15011505
15021506 Usage: $0 [OPTION]... [VAR=VALUE]...
15031507
15671571
15681572 if test -n "$ac_init_help"; then
15691573 case $ac_init_help in
1570 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.5:";;
1574 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.6:";;
15711575 esac
15721576 cat <<\_ACEOF
15731577
16291633 you have headers in a nonstandard directory <include dir>
16301634 CPP C preprocessor
16311635 PKG_CONFIG path to pkg-config utility
1636 PKG_CONFIG_PATH
1637 directories to add to pkg-config's search path
1638 PKG_CONFIG_LIBDIR
1639 path overriding pkg-config's built-in search path
16321640 GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
16331641 GLIB_LIBS linker flags for GLIB, overriding pkg-config
16341642 GIO_UNIX_CFLAGS
17041712 test -n "$ac_init_help" && exit $ac_status
17051713 if $ac_init_version; then
17061714 cat <<\_ACEOF
1707 Telepathy-GLib configure 0.11.5
1715 Telepathy-GLib configure 0.11.6
17081716 generated by GNU Autoconf 2.65
17091717
17101718 Copyright (C) 2009 Free Software Foundation, Inc.
20752083 This file contains any messages produced by compilers while
20762084 running configure, to aid debugging if configure makes a mistake.
20772085
2078 It was created by Telepathy-GLib $as_me 0.11.5, which was
2086 It was created by Telepathy-GLib $as_me 0.11.6, which was
20792087 generated by GNU Autoconf 2.65. Invocation command line was
20802088
20812089 $ $0 $@
28862894
28872895 # Define the identity of the package.
28882896 PACKAGE='telepathy-glib'
2889 VERSION='0.11.5'
2897 VERSION='0.11.6'
28902898
28912899
28922900 cat >>confdefs.h <<_ACEOF
48964904 else
48974905 lt_cv_nm_interface="BSD nm"
48984906 echo "int some_variable = 0;" > conftest.$ac_ext
4899 (eval echo "\"\$as_me:4900: $ac_compile\"" >&5)
4907 (eval echo "\"\$as_me:4908: $ac_compile\"" >&5)
49004908 (eval "$ac_compile" 2>conftest.err)
49014909 cat conftest.err >&5
4902 (eval echo "\"\$as_me:4903: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
4910 (eval echo "\"\$as_me:4911: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
49034911 (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
49044912 cat conftest.err >&5
4905 (eval echo "\"\$as_me:4906: output\"" >&5)
4913 (eval echo "\"\$as_me:4914: output\"" >&5)
49064914 cat conftest.out >&5
49074915 if $GREP 'External.*some_variable' conftest.out > /dev/null; then
49084916 lt_cv_nm_interface="MS dumpbin"
61086116 ;;
61096117 *-*-irix6*)
61106118 # Find out which ABI we are using.
6111 echo '#line 6112 "configure"' > conftest.$ac_ext
6119 echo '#line 6120 "configure"' > conftest.$ac_ext
61126120 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
61136121 (eval $ac_compile) 2>&5
61146122 ac_status=$?
76387646 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
76397647 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
76407648 -e 's:$: $lt_compiler_flag:'`
7641 (eval echo "\"\$as_me:7642: $lt_compile\"" >&5)
7649 (eval echo "\"\$as_me:7650: $lt_compile\"" >&5)
76427650 (eval "$lt_compile" 2>conftest.err)
76437651 ac_status=$?
76447652 cat conftest.err >&5
7645 echo "$as_me:7646: \$? = $ac_status" >&5
7653 echo "$as_me:7654: \$? = $ac_status" >&5
76467654 if (exit $ac_status) && test -s "$ac_outfile"; then
76477655 # The compiler can only warn and ignore the option if not recognized
76487656 # So say no if there are warnings other than the usual output.
79777985 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
79787986 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
79797987 -e 's:$: $lt_compiler_flag:'`
7980 (eval echo "\"\$as_me:7981: $lt_compile\"" >&5)
7988 (eval echo "\"\$as_me:7989: $lt_compile\"" >&5)
79817989 (eval "$lt_compile" 2>conftest.err)
79827990 ac_status=$?
79837991 cat conftest.err >&5
7984 echo "$as_me:7985: \$? = $ac_status" >&5
7992 echo "$as_me:7993: \$? = $ac_status" >&5
79857993 if (exit $ac_status) && test -s "$ac_outfile"; then
79867994 # The compiler can only warn and ignore the option if not recognized
79877995 # So say no if there are warnings other than the usual output.
80828090 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
80838091 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
80848092 -e 's:$: $lt_compiler_flag:'`
8085 (eval echo "\"\$as_me:8086: $lt_compile\"" >&5)
8093 (eval echo "\"\$as_me:8094: $lt_compile\"" >&5)
80868094 (eval "$lt_compile" 2>out/conftest.err)
80878095 ac_status=$?
80888096 cat out/conftest.err >&5
8089 echo "$as_me:8090: \$? = $ac_status" >&5
8097 echo "$as_me:8098: \$? = $ac_status" >&5
80908098 if (exit $ac_status) && test -s out/conftest2.$ac_objext
80918099 then
80928100 # The compiler can only warn and ignore the option if not recognized
81378145 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
81388146 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
81398147 -e 's:$: $lt_compiler_flag:'`
8140 (eval echo "\"\$as_me:8141: $lt_compile\"" >&5)
8148 (eval echo "\"\$as_me:8149: $lt_compile\"" >&5)
81418149 (eval "$lt_compile" 2>out/conftest.err)
81428150 ac_status=$?
81438151 cat out/conftest.err >&5
8144 echo "$as_me:8145: \$? = $ac_status" >&5
8152 echo "$as_me:8153: \$? = $ac_status" >&5
81458153 if (exit $ac_status) && test -s out/conftest2.$ac_objext
81468154 then
81478155 # The compiler can only warn and ignore the option if not recognized
1052110529 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1052210530 lt_status=$lt_dlunknown
1052310531 cat > conftest.$ac_ext <<_LT_EOF
10524 #line 10525 "configure"
10532 #line 10533 "configure"
1052510533 #include "confdefs.h"
1052610534
1052710535 #if HAVE_DLFCN_H
1061710625 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1061810626 lt_status=$lt_dlunknown
1061910627 cat > conftest.$ac_ext <<_LT_EOF
10620 #line 10621 "configure"
10628 #line 10629 "configure"
1062110629 #include "confdefs.h"
1062210630
1062310631 #if HAVE_DLFCN_H
1085410862 # pkg-config 0.21 adds CFLAGS from Requires.private, which we need
1085510863
1085610864
10865
10866
10867
10868
1085710869 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
1085810870 if test -n "$ac_tool_prefix"; then
1085910871 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
1096610978 $as_echo "no" >&6; }
1096710979 PKG_CONFIG=""
1096810980 fi
10969
1097010981 fi
1097110982
1097210983
1099911010 as_fn_error "gobject-introspection-1.0 is not installed" "$LINENO" 5
1100011011 fi
1100111012 if test -n "$PKG_CONFIG" && \
11002 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
11003 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
11013 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.11\""; } >&5
11014 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.11") 2>&5
1100411015 ac_status=$?
1100511016 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1100611017 test $ac_status = 0; }; then
1100711018 found_introspection=yes
1100811019 else
11009 as_fn_error "You need to have gobject-introspection >= 0.6.4 installed to build Telepathy-GLib" "$LINENO" 5
11020 as_fn_error "You need to have gobject-introspection >= 0.6.11 installed to build Telepathy-GLib" "$LINENO" 5
1101011021 fi
1101111022 ;; #(
1101211023 auto) :
1101311024 if test -n "$PKG_CONFIG" && \
11014 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
11015 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
11025 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.11\""; } >&5
11026 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.11") 2>&5
1101611027 ac_status=$?
1101711028 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1101811029 test $ac_status = 0; }; then
1120611217
1120711218 if test x$enable_gtk_doc = xyes; then
1120811219 if test -n "$PKG_CONFIG" && \
11209 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.14\""; } >&5
11210 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.14") 2>&5
11220 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.15\""; } >&5
11221 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.15") 2>&5
1121111222 ac_status=$?
1121211223 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1121311224 test $ac_status = 0; }; then
1121411225 :
1121511226 else
11216 as_fn_error "You need to have gtk-doc >= 1.14 installed to build $PACKAGE_NAME" "$LINENO" 5
11227 as_fn_error "You need to have gtk-doc >= 1.15 installed to build $PACKAGE_NAME" "$LINENO" 5
1121711228 fi
1121811229 fi
1121911230
1128411295
1128511296
1128611297
11287 LT_CURRENT=37
11298 LT_CURRENT=38
1128811299 LT_REVISION=0
11289 LT_AGE=37
11300 LT_AGE=38
1129011301
1129111302
1129211303
1174311754 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
1174411755 $as_echo_n "checking for GLIB... " >&6; }
1174511756
11746 if test -n "$PKG_CONFIG"; then
11747 if test -n "$GLIB_CFLAGS"; then
11748 pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
11749 else
11750 if test -n "$PKG_CONFIG" && \
11757 if test -n "$GLIB_CFLAGS"; then
11758 pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
11759 elif test -n "$PKG_CONFIG"; then
11760 if test -n "$PKG_CONFIG" && \
1175111761 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24\""; } >&5
1175211762 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24") 2>&5
1175311763 ac_status=$?
1175711767 else
1175811768 pkg_failed=yes
1175911769 fi
11760 fi
11761 else
11762 pkg_failed=untried
11763 fi
11764 if test -n "$PKG_CONFIG"; then
11765 if test -n "$GLIB_LIBS"; then
11766 pkg_cv_GLIB_LIBS="$GLIB_LIBS"
11767 else
11768 if test -n "$PKG_CONFIG" && \
11770 else
11771 pkg_failed=untried
11772 fi
11773 if test -n "$GLIB_LIBS"; then
11774 pkg_cv_GLIB_LIBS="$GLIB_LIBS"
11775 elif test -n "$PKG_CONFIG"; then
11776 if test -n "$PKG_CONFIG" && \
1176911777 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24\""; } >&5
1177011778 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24") 2>&5
1177111779 ac_status=$?
1177511783 else
1177611784 pkg_failed=yes
1177711785 fi
11778 fi
11779 else
11780 pkg_failed=untried
11786 else
11787 pkg_failed=untried
1178111788 fi
1178211789
1178311790
1178411791
1178511792 if test $pkg_failed = yes; then
11793 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11794 $as_echo "no" >&6; }
1178611795
1178711796 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
1178811797 _pkg_short_errors_supported=yes
1179011799 _pkg_short_errors_supported=no
1179111800 fi
1179211801 if test $_pkg_short_errors_supported = yes; then
11793 GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24"`
11802 GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24" 2>&1`
1179411803 else
11795 GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24"`
11804 GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.24, gobject-2.0 >= 2.24, gio-2.0 >= 2.24" 2>&1`
1179611805 fi
1179711806 # Put the nasty error message in config.log where it belongs
1179811807 echo "$GLIB_PKG_ERRORS" >&5
1180611815
1180711816 Alternatively, you may set the environment variables GLIB_CFLAGS
1180811817 and GLIB_LIBS to avoid the need to call pkg-config.
11809 See the pkg-config man page for more details.
11810 " "$LINENO" 5
11818 See the pkg-config man page for more details." "$LINENO" 5
1181111819 elif test $pkg_failed = untried; then
11820 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11821 $as_echo "no" >&6; }
1181211822 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
1181311823 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
1181411824 as_fn_error "The pkg-config script could not be found or is too old. Make sure it
1182611836 GLIB_LIBS=$pkg_cv_GLIB_LIBS
1182711837 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1182811838 $as_echo "yes" >&6; }
11829 :
11839
1183011840 fi
1183111841
1183211842
1183411844 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO_UNIX" >&5
1183511845 $as_echo_n "checking for GIO_UNIX... " >&6; }
1183611846
11837 if test -n "$PKG_CONFIG"; then
11838 if test -n "$GIO_UNIX_CFLAGS"; then
11839 pkg_cv_GIO_UNIX_CFLAGS="$GIO_UNIX_CFLAGS"
11840 else
11841 if test -n "$PKG_CONFIG" && \
11847 if test -n "$GIO_UNIX_CFLAGS"; then
11848 pkg_cv_GIO_UNIX_CFLAGS="$GIO_UNIX_CFLAGS"
11849 elif test -n "$PKG_CONFIG"; then
11850 if test -n "$PKG_CONFIG" && \
1184211851 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0\""; } >&5
1184311852 ($PKG_CONFIG --exists --print-errors "gio-unix-2.0") 2>&5
1184411853 ac_status=$?
1184811857 else
1184911858 pkg_failed=yes
1185011859 fi
11851 fi
11852 else
11853 pkg_failed=untried
11854 fi
11855 if test -n "$PKG_CONFIG"; then
11856 if test -n "$GIO_UNIX_LIBS"; then
11857 pkg_cv_GIO_UNIX_LIBS="$GIO_UNIX_LIBS"
11858 else
11859 if test -n "$PKG_CONFIG" && \
11860 else
11861 pkg_failed=untried
11862 fi
11863 if test -n "$GIO_UNIX_LIBS"; then
11864 pkg_cv_GIO_UNIX_LIBS="$GIO_UNIX_LIBS"
11865 elif test -n "$PKG_CONFIG"; then
11866 if test -n "$PKG_CONFIG" && \
1186011867 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0\""; } >&5
1186111868 ($PKG_CONFIG --exists --print-errors "gio-unix-2.0") 2>&5
1186211869 ac_status=$?
1186611873 else
1186711874 pkg_failed=yes
1186811875 fi
11869 fi
11870 else
11871 pkg_failed=untried
11876 else
11877 pkg_failed=untried
1187211878 fi
1187311879
1187411880
1187511881
1187611882 if test $pkg_failed = yes; then
11883 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11884 $as_echo "no" >&6; }
1187711885
1187811886 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
1187911887 _pkg_short_errors_supported=yes
1188111889 _pkg_short_errors_supported=no
1188211890 fi
1188311891 if test $_pkg_short_errors_supported = yes; then
11884 GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gio-unix-2.0"`
11892 GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gio-unix-2.0" 2>&1`
1188511893 else
11886 GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-unix-2.0"`
11894 GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --print-errors "gio-unix-2.0" 2>&1`
1188711895 fi
1188811896 # Put the nasty error message in config.log where it belongs
1188911897 echo "$GIO_UNIX_PKG_ERRORS" >&5
1189011898
11891 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11899 have_gio_unix=no
11900 elif test $pkg_failed = untried; then
11901 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1189211902 $as_echo "no" >&6; }
11893 have_gio_unix=no
11894 elif test $pkg_failed = untried; then
1189511903 have_gio_unix=no
1189611904 else
1189711905 GIO_UNIX_CFLAGS=$pkg_cv_GIO_UNIX_CFLAGS
1192411932 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
1192511933 $as_echo_n "checking for DBUS... " >&6; }
1192611934
11927 if test -n "$PKG_CONFIG"; then
11928 if test -n "$DBUS_CFLAGS"; then
11929 pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS"
11930 else
11931 if test -n "$PKG_CONFIG" && \
11935 if test -n "$DBUS_CFLAGS"; then
11936 pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS"
11937 elif test -n "$PKG_CONFIG"; then
11938 if test -n "$PKG_CONFIG" && \
1193211939 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.95, dbus-glib-1 >= 0.82\""; } >&5
1193311940 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82") 2>&5
1193411941 ac_status=$?
1193811945 else
1193911946 pkg_failed=yes
1194011947 fi
11941 fi
11942 else
11943 pkg_failed=untried
11944 fi
11945 if test -n "$PKG_CONFIG"; then
11946 if test -n "$DBUS_LIBS"; then
11947 pkg_cv_DBUS_LIBS="$DBUS_LIBS"
11948 else
11949 if test -n "$PKG_CONFIG" && \
11948 else
11949 pkg_failed=untried
11950 fi
11951 if test -n "$DBUS_LIBS"; then
11952 pkg_cv_DBUS_LIBS="$DBUS_LIBS"
11953 elif test -n "$PKG_CONFIG"; then
11954 if test -n "$PKG_CONFIG" && \
1195011955 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.95, dbus-glib-1 >= 0.82\""; } >&5
1195111956 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82") 2>&5
1195211957 ac_status=$?
1195611961 else
1195711962 pkg_failed=yes
1195811963 fi
11959 fi
11960 else
11961 pkg_failed=untried
11964 else
11965 pkg_failed=untried
1196211966 fi
1196311967
1196411968
1196511969
1196611970 if test $pkg_failed = yes; then
11971 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11972 $as_echo "no" >&6; }
1196711973
1196811974 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
1196911975 _pkg_short_errors_supported=yes
1197111977 _pkg_short_errors_supported=no
1197211978 fi
1197311979 if test $_pkg_short_errors_supported = yes; then
11974 DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82"`
11980 DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82" 2>&1`
1197511981 else
11976 DBUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82"`
11982 DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-1 >= 0.95, dbus-glib-1 >= 0.82" 2>&1`
1197711983 fi
1197811984 # Put the nasty error message in config.log where it belongs
1197911985 echo "$DBUS_PKG_ERRORS" >&5
1198711993
1198811994 Alternatively, you may set the environment variables DBUS_CFLAGS
1198911995 and DBUS_LIBS to avoid the need to call pkg-config.
11990 See the pkg-config man page for more details.
11991 " "$LINENO" 5
11996 See the pkg-config man page for more details." "$LINENO" 5
1199211997 elif test $pkg_failed = untried; then
11998 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
11999 $as_echo "no" >&6; }
1199312000 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
1199412001 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
1199512002 as_fn_error "The pkg-config script could not be found or is too old. Make sure it
1200712014 DBUS_LIBS=$pkg_cv_DBUS_LIBS
1200812015 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1200912016 $as_echo "yes" >&6; }
12010 :
12017
1201112018 fi
1201212019
1201312020
1296412971 # report actual input values of CONFIG_FILES etc. instead of their
1296512972 # values after options handling.
1296612973 ac_log="
12967 This file was extended by Telepathy-GLib $as_me 0.11.5, which was
12974 This file was extended by Telepathy-GLib $as_me 0.11.6, which was
1296812975 generated by GNU Autoconf 2.65. Invocation command line was
1296912976
1297012977 CONFIG_FILES = $CONFIG_FILES
1303013037 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1303113038 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1303213039 ac_cs_version="\\
13033 Telepathy-GLib config.status 0.11.5
13040 Telepathy-GLib config.status 0.11.6
1303413041 configured by $0, generated by GNU Autoconf 2.65,
1303513042 with options \\"\$ac_cs_config\\"
1303613043
1010
1111 m4_define([tp_glib_major_version], [0])
1212 m4_define([tp_glib_minor_version], [11])
13 m4_define([tp_glib_micro_version], [5])
13 m4_define([tp_glib_micro_version], [6])
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], [37])
28 m4_define([tp_glib_lt_current], [38])
2929 m4_define([tp_glib_lt_revision], [0])
30 m4_define([tp_glib_lt_age], [37])
30 m4_define([tp_glib_lt_age], [38])
3131
3232 # Some magic
3333 m4_define([tp_glib_base_version],
5656 # pkg-config 0.21 adds CFLAGS from Requires.private, which we need
5757 PKG_PROG_PKG_CONFIG([0.21])
5858
59 GOBJECT_INTROSPECTION_CHECK([0.6.4])
60 GTK_DOC_CHECK([1.14])
59 GOBJECT_INTROSPECTION_CHECK([0.6.11])
60 GTK_DOC_CHECK([1.15])
6161
6262 LT_CURRENT=tp_glib_lt_current
6363 LT_REVISION=tp_glib_lt_revision
178178 PACKAGE_VERSION = @PACKAGE_VERSION@
179179 PATH_SEPARATOR = @PATH_SEPARATOR@
180180 PKG_CONFIG = @PKG_CONFIG@
181 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
182 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
181183 PYTHON = @PYTHON@
182184 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
183185 PYTHON_PLATFORM = @PYTHON_PLATFORM@
6767 channel-internal.h \
6868 connection-internal.h \
6969 debug-internal.h \
70 handle-channels-context-internal.h \
7071 handle-repo-internal.h \
7172 observe-channels-context-internal.h \
7273 proxy-internal.h \
153153 PACKAGE_VERSION = @PACKAGE_VERSION@
154154 PATH_SEPARATOR = @PATH_SEPARATOR@
155155 PKG_CONFIG = @PKG_CONFIG@
156 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
157 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
156158 PYTHON = @PYTHON@
157159 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
158160 PYTHON_PLATFORM = @PYTHON_PLATFORM@
279281 channel-internal.h \
280282 connection-internal.h \
281283 debug-internal.h \
284 handle-channels-context-internal.h \
282285 handle-repo-internal.h \
283286 observe-channels-context-internal.h \
284287 proxy-internal.h \
559562 scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
560563 @echo 'gtk-doc: Scanning header files'
561564 @-chmod -R u+w $(srcdir)
562 @cd $(srcdir) && \
563 gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
565 @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
566 _source_dir="$${_source_dir} --source-dir=$$i" ; \
567 done ; \
568 cd $(srcdir) && \
569 gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
564570 @if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
565571 CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
566572 else \
593599 sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
594600 @echo 'gtk-doc: Building XML'
595601 @-chmod -R u+w $(srcdir)
596 @cd $(srcdir) && \
597 gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
602 @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
603 _source_dir="$${_source_dir} --source-dir=$$i" ; \
604 done ; \
605 cd $(srcdir) && \
606 gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
598607 @touch sgml-build.stamp
599608
600609 sgml.stamp: sgml-build.stamp
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager">
99 <link rel="next" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
551551 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
552552 <td> the value of the
553553 <a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon" title='The "dbus-daemon" property'><span class="type">"dbus-daemon"</span></a> property. The caller must reference
554 the returned object 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.
555 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
554 the returned object 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. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
555 </td>
556556 </tr>
557557 </tbody>
558558 </table></div>
11491149 </div>
11501150 <div class="footer">
11511151 <hr>
1152 Generated by GTK-Doc V1.14</div>
1152 Generated by GTK-Doc V1.15</div>
11531153 </body>
11541154 </html>
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">
99 <link rel="next" href="TpBaseConnection.html" title="TpBaseConnection">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
583583 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
584584 <td> the value of the
585585 <a class="link" href="TpBaseConnectionManager.html#TpBaseConnectionManager--dbus-daemon" title='The "dbus-daemon" property'><span class="type">"dbus-daemon"</span></a> property. The caller must reference
586 the returned object 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.
587 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
586 the returned object 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. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
587 </td>
588588 </tr>
589589 </tbody>
590590 </table></div>
663663 </div>
664664 <div class="footer">
665665 <hr>
666 Generated by GTK-Doc V1.14</div>
666 Generated by GTK-Doc V1.15</div>
667667 </body>
668668 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="TpBaseConnection.html" title="TpBaseConnection">
99 <link rel="next" href="TpChannelManager.html" title="TpChannelManager">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
741741 </div>
742742 <div class="footer">
743743 <hr>
744 Generated by GTK-Doc V1.14</div>
744 Generated by GTK-Doc V1.15</div>
745745 </body>
746746 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-gtypes.html" title="GType factory functions">
99 <link rel="next" href="ch-client.html" title="Client-side proxies">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
193193 </div>
194194 <div class="footer">
195195 <hr>
196 Generated by GTK-Doc V1.14</div>
196 Generated by GTK-Doc V1.15</div>
197197 </body>
198198 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface">
99 <link rel="next" href="telepathy-glib-TpContactsMixin.html" title="TpContactsMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
10691069 </div>
10701070 <div class="footer">
10711071 <hr>
1072 Generated by GTK-Doc V1.14</div>
1072 Generated by GTK-Doc V1.15</div>
10731073 </body>
10741074 </html>
77 <link rel="up" href="ch-service-handles.html" title="Service-side handle repositories">
88 <link rel="prev" href="TpStaticHandleRepo.html" title="TpStaticHandleRepo">
99 <link rel="next" href="ch-utilities.html" title="Utilities">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
266266 </div>
267267 <div class="footer">
268268 <hr>
269 Generated by GTK-Doc V1.14</div>
269 Generated by GTK-Doc V1.15</div>
270270 </body>
271271 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-dbus-properties-mixin.html" title="TpDBusPropertiesMixin">
99 <link rel="next" href="telepathy-glib-TpPresenceMixin.html" title="TpPresenceMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
244244 </div>
245245 <div class="footer">
246246 <hr>
247 Generated by GTK-Doc V1.14</div>
247 Generated by GTK-Doc V1.15</div>
248248 </body>
249249 </html>
77 <link rel="up" href="ch-service-handles.html" title="Service-side handle repositories">
88 <link rel="prev" href="telepathy-glib-handle-repo.html" title="TpHandleRepoIface">
99 <link rel="next" href="TpDynamicHandleRepo.html" title="TpDynamicHandleRepo">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
173173 </div>
174174 <div class="footer">
175175 <hr>
176 Generated by GTK-Doc V1.14</div>
176 Generated by GTK-Doc V1.15</div>
177177 </body>
178178 </html>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="telepathy-glib-TpHeap.html" title="TpHeap">
9 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
9 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1010 <link rel="stylesheet" href="style.css" type="text/css">
1111 </head>
1212 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
5959 </div>
6060 <div class="footer">
6161 <hr>
62 Generated by GTK-Doc V1.14</div>
62 Generated by GTK-Doc V1.15</div>
6363 </body>
6464 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="TpChannelIface.html" title="TpChannelIface">
99 <link rel="next" href="telepathy-glib-connection-manager.html" title="TpConnectionManager">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
119119 </div>
120120 <div class="footer">
121121 <hr>
122 Generated by GTK-Doc V1.14</div>
122 Generated by GTK-Doc V1.15</div>
123123 </body>
124124 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="index.html" title="telepathy-glib Reference Manual">
99 <link rel="next" href="telepathy-glib-proxy.html" title="TpProxy">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
4747 </div>
4848 <div class="footer">
4949 <hr>
50 Generated by GTK-Doc V1.14</div>
50 Generated by GTK-Doc V1.15</div>
5151 </body>
5252 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="telepathy-glib-proxy-subclass.html" title="TpProxy subclasses and mixins">
99 <link rel="next" href="telepathy-glib-defs.html" title="Miscellaneous definitions">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
5151 </div>
5252 <div class="footer">
5353 <hr>
54 Generated by GTK-Doc V1.14</div>
54 Generated by GTK-Doc V1.15</div>
5555 </body>
5656 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="telepathy-glib-svc-client.html" title="Service-side Client interfaces">
99 <link rel="next" href="telepathy-glib-run.html" title="Connection manager life cycle">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
7676 <span class="refentrytitle"><a href="telepathy-glib-add-dispatch-operation-context.html">TpAddDispatchOperationContext</a></span><span class="refpurpose"> — context of a Approver.AddDispatchOperation() call</span>
7777 </dt>
7878 <dt>
79 <span class="refentrytitle"><a href="telepathy-glib-handle-channels-context.html">TpHandleChannelsContext</a></span><span class="refpurpose"> — context of a Handler.HandleChannels() call</span>
80 </dt>
81 <dt>
7982 <span class="refentrytitle"><a href="telepathy-glib-simple-observer.html">TpSimpleObserver</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
8083 a simple Observer</span>
8184 </dt>
8386 <span class="refentrytitle"><a href="telepathy-glib-simple-approver.html">TpSimpleApprover</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
8487 a simple Approver</span>
8588 </dt>
89 <dt>
90 <span class="refentrytitle"><a href="telepathy-glib-simple-handler.html">TpSimpleHandler</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
91 a simple Handler</span>
92 </dt>
8693 </dl></div>
8794 </div>
8895 <div class="footer">
8996 <hr>
90 Generated by GTK-Doc V1.14</div>
97 Generated by GTK-Doc V1.15</div>
9198 </body>
9299 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="telepathy-glib-client.html" title="TpClient">
99 <link rel="next" href="telepathy-glib-svc.html" title="The TpSvc* interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
9595 </div>
9696 <div class="footer">
9797 <hr>
98 Generated by GTK-Doc V1.14</div>
98 Generated by GTK-Doc V1.15</div>
9999 </body>
100100 </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="index.html" title="telepathy-glib Reference Manual">
8 <link rel="prev" href="telepathy-glib-simple-approver.html" title="TpSimpleApprover">
8 <link rel="prev" href="telepathy-glib-simple-handler.html" title="TpSimpleHandler">
99 <link rel="next" href="telepathy-glib-handle-repo.html" title="TpHandleRepoIface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
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"><tr valign="middle">
15 <td><a accesskey="p" href="telepathy-glib-simple-approver.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
15 <td><a accesskey="p" href="telepathy-glib-simple-handler.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1616 <td> </td>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <th width="100%" align="center">telepathy-glib Reference Manual</th>
3737 </div>
3838 <div class="footer">
3939 <hr>
40 Generated by GTK-Doc V1.14</div>
40 Generated by GTK-Doc V1.15</div>
4141 </body>
4242 </html>
77 <link rel="up" href="index.html" title="telepathy-glib Reference Manual">
88 <link rel="prev" href="TpDynamicHandleRepo.html" title="TpDynamicHandleRepo">
99 <link rel="next" href="telepathy-glib-util.html" title="Utilities">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
4747 </div>
4848 <div class="footer">
4949 <hr>
50 Generated by GTK-Doc V1.14</div>
50 Generated by GTK-Doc V1.15</div>
5151 </body>
5252 </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="next" href="ch-dbus.html" title="General D-Bus support">
8 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
8 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
99 <link rel="stylesheet" href="style.css" type="text/css">
1010 </head>
1111 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
291291 <span class="refentrytitle"><a href="telepathy-glib-add-dispatch-operation-context.html">TpAddDispatchOperationContext</a></span><span class="refpurpose"> — context of a Approver.AddDispatchOperation() call</span>
292292 </dt>
293293 <dt>
294 <span class="refentrytitle"><a href="telepathy-glib-handle-channels-context.html">TpHandleChannelsContext</a></span><span class="refpurpose"> — context of a Handler.HandleChannels() call</span>
295 </dt>
296 <dt>
294297 <span class="refentrytitle"><a href="telepathy-glib-simple-observer.html">TpSimpleObserver</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
295298 a simple Observer</span>
296299 </dt>
297300 <dt>
298301 <span class="refentrytitle"><a href="telepathy-glib-simple-approver.html">TpSimpleApprover</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
299302 a simple Approver</span>
303 </dt>
304 <dt>
305 <span class="refentrytitle"><a href="telepathy-glib-simple-handler.html">TpSimpleHandler</a></span><span class="refpurpose"> — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
306 a simple Handler</span>
300307 </dt>
301308 </dl></dd>
302309 <dt><span class="chapter"><a href="ch-service-handles.html">Service-side handle repositories</a></span></dt>
342349 </div>
343350 <div class="footer">
344351 <hr>
345 Generated by GTK-Doc V1.14</div>
352 Generated by GTK-Doc V1.15</div>
346353 </body>
347354 </html>
375375 <ANCHOR id="TP-IFACE-CLIENT-INTERFACE-REQUESTS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CLIENT-INTERFACE-REQUESTS:CAPS">
376376 <ANCHOR id="TP-IFACE-QUARK-CLIENT-INTERFACE-REQUESTS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CLIENT-INTERFACE-REQUESTS:CAPS">
377377 <ANCHOR id="TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS">
378 <ANCHOR id="TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS">
378379 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS">
379380 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS">
380381 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS">
406407 <ANCHOR id="TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS">
407408 <ANCHOR id="TP-PROP-CHANNEL-INITIATOR-ID:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS">
408409 <ANCHOR id="TP-PROP-CHANNEL-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS">
410 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS">
411 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS">
409412 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS">
410413 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-GROUP-HANDLE-OWNERS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-HANDLE-OWNERS:CAPS">
411414 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-GROUP-LOCAL-PENDING-MEMBERS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-LOCAL-PENDING-MEMBERS:CAPS">
469472 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-CONTACT-INFO-SUPPORTED-FIELDS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-CONTACT-INFO-SUPPORTED-FIELDS:CAPS">
470473 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL:CAPS">
471474 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL-TYPES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL-TYPES:CAPS">
475 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS">
472476 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS">
473477 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS">
474478 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS">
486490 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS">
487491 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-CAPABILITIES-CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CAPABILITIES-CAPS">
488492 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-CONTACT-CAPABILITIES-CAPABILITIES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-CAPABILITIES-CAPABILITIES:CAPS">
493 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS">
489494 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS">
490495 <ANCHOR id="TP-TOKEN-CONNECTION-INTERFACE-LOCATION-LOCATION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-LOCATION-LOCATION:CAPS">
491496 <ANCHOR id="TP-TOKEN-CHANNEL-INTERFACE-MEDIA-SIGNALLING-GTALK-P2P:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-TOKEN-CHANNEL-INTERFACE-MEDIA-SIGNALLING-GTALK-P2P:CAPS">
769774 <ANCHOR id="TP-CONTACT-INFO-FLAG-PUSH:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-CONTACT-INFO-FLAG-PUSH:CAPS">
770775 <ANCHOR id="TpContactInfoFieldFlags" href="telepathy-glib/telepathy-glib-enums.html#TpContactInfoFieldFlags">
771776 <ANCHOR id="TP-CONTACT-INFO-FIELD-FLAG-PARAMETERS-EXACT:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-CONTACT-INFO-FIELD-FLAG-PARAMETERS-EXACT:CAPS">
777 <ANCHOR id="TpLocationFeatures" href="telepathy-glib/telepathy-glib-enums.html#TpLocationFeatures">
778 <ANCHOR id="TP-LOCATION-FEATURE-CAN-SET:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-LOCATION-FEATURE-CAN-SET:CAPS">
772779 <ANCHOR id="telepathy-glib-errors" href="telepathy-glib/telepathy-glib-errors.html">
773780 <ANCHOR id="telepathy-glib-errors.synopsis" href="telepathy-glib/telepathy-glib-errors.html#telepathy-glib-errors.synopsis">
774781 <ANCHOR id="telepathy-glib-errors.description" href="telepathy-glib/telepathy-glib-errors.html#telepathy-glib-errors.description">
11501157 <ANCHOR id="TP-CONTACT-FEATURE-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-PRESENCE:CAPS">
11511158 <ANCHOR id="TP-CONTACT-FEATURE-LOCATION:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-LOCATION:CAPS">
11521159 <ANCHOR id="TP-CONTACT-FEATURE-CAPABILITIES:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-CAPABILITIES:CAPS">
1160 <ANCHOR id="TP-CONTACT-FEATURE-AVATAR-DATA:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS">
11531161 <ANCHOR id="TP-TYPE-CONTACT-FEATURE:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-TYPE-CONTACT-FEATURE:CAPS">
11541162 <ANCHOR id="TpConnectionContactsByHandleCb" href="telepathy-glib/telepathy-glib-contact.html#TpConnectionContactsByHandleCb">
11551163 <ANCHOR id="tp-connection-get-contacts-by-handle" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-get-contacts-by-handle">
11591167 <ANCHOR id="tp-connection-upgrade-contacts" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-upgrade-contacts">
11601168 <ANCHOR id="tp-contact-get-alias" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-alias">
11611169 <ANCHOR id="tp-contact-get-avatar-token" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-avatar-token">
1170 <ANCHOR id="tp-contact-get-avatar-file" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-avatar-file">
1171 <ANCHOR id="tp-contact-get-avatar-mime-type" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-avatar-mime-type">
11621172 <ANCHOR id="tp-contact-get-connection" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-connection">
11631173 <ANCHOR id="tp-contact-get-handle" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-handle">
11641174 <ANCHOR id="tp-contact-get-identifier" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-identifier">
11701180 <ANCHOR id="tp-contact-has-feature" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-has-feature">
11711181 <ANCHOR id="telepathy-glib-contact.property-details" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.property-details">
11721182 <ANCHOR id="TpContact--alias" href="telepathy-glib/telepathy-glib-contact.html#TpContact--alias">
1183 <ANCHOR id="TpContact--avatar-file" href="telepathy-glib/telepathy-glib-contact.html#TpContact--avatar-file">
1184 <ANCHOR id="TpContact--avatar-mime-type" href="telepathy-glib/telepathy-glib-contact.html#TpContact--avatar-mime-type">
11731185 <ANCHOR id="TpContact--avatar-token" href="telepathy-glib/telepathy-glib-contact.html#TpContact--avatar-token">
11741186 <ANCHOR id="TpContact--capabilities" href="telepathy-glib/telepathy-glib-contact.html#TpContact--capabilities">
11751187 <ANCHOR id="TpContact--connection" href="telepathy-glib/telepathy-glib-contact.html#TpContact--connection">
15681580 <ANCHOR id="tp-cli-channel-interface-dtmf-call-stop-tone" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-stop-tone">
15691581 <ANCHOR id="tp-cli-channel-interface-dtmf-callback-for-start-tone" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-start-tone">
15701582 <ANCHOR id="tp-cli-channel-interface-dtmf-callback-for-stop-tone" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-stop-tone">
1583 <ANCHOR id="tp-cli-channel-interface-dtmf-call-multiple-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-multiple-tones">
1584 <ANCHOR id="tp-cli-channel-interface-dtmf-callback-for-multiple-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones">
1585 <ANCHOR id="tp-cli-channel-interface-dtmf-connect-to-sending-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-sending-tones">
1586 <ANCHOR id="tp-cli-channel-interface-dtmf-signal-callback-sending-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones">
1587 <ANCHOR id="tp-cli-channel-interface-dtmf-connect-to-stopped-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-stopped-tones">
1588 <ANCHOR id="tp-cli-channel-interface-dtmf-signal-callback-stopped-tones" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones">
15711589 <ANCHOR id="tp-cli-channel-interface-hold-callback-for-get-hold-state" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-callback-for-get-hold-state">
15721590 <ANCHOR id="tp-cli-channel-interface-hold-call-get-hold-state" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-call-get-hold-state">
15731591 <ANCHOR id="tp-cli-channel-interface-hold-run-get-hold-state" href="telepathy-glib/telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-run-get-hold-state">
18501868 <ANCHOR id="tp-account-set-connect-automatically-finish" href="telepathy-glib/telepathy-glib-account.html#tp-account-set-connect-automatically-finish">
18511869 <ANCHOR id="tp-account-get-has-been-online" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-has-been-online">
18521870 <ANCHOR id="tp-account-get-connection-status" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-connection-status">
1871 <ANCHOR id="tp-account-get-changing-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-changing-presence">
18531872 <ANCHOR id="tp-account-get-current-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-current-presence">
18541873 <ANCHOR id="tp-account-get-requested-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-requested-presence">
18551874 <ANCHOR id="tp-account-get-parameters" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-parameters">
18771896 <ANCHOR id="tp-cli-account-interface-avatar-signal-callback-avatar-changed" href="telepathy-glib/telepathy-glib-account.html#tp-cli-account-interface-avatar-signal-callback-avatar-changed">
18781897 <ANCHOR id="tp-cli-account-interface-avatar-connect-to-avatar-changed" href="telepathy-glib/telepathy-glib-account.html#tp-cli-account-interface-avatar-connect-to-avatar-changed">
18791898 <ANCHOR id="telepathy-glib-account.property-details" href="telepathy-glib/telepathy-glib-account.html#telepathy-glib-account.property-details">
1899 <ANCHOR id="TpAccount--changing-presence" href="telepathy-glib/telepathy-glib-account.html#TpAccount--changing-presence">
18801900 <ANCHOR id="TpAccount--connect-automatically" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connect-automatically">
18811901 <ANCHOR id="TpAccount--connection" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection">
18821902 <ANCHOR id="TpAccount--connection-manager" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-manager">
19341954 <ANCHOR id="tp-cli-channel-dispatch-operation-call-claim" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-claim">
19351955 <ANCHOR id="tp-cli-channel-dispatch-operation-callback-for-handle-with" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with">
19361956 <ANCHOR id="tp-cli-channel-dispatch-operation-call-handle-with" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with">
1957 <ANCHOR id="tp-cli-channel-dispatch-operation-callback-for-handle-with-time" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time">
1958 <ANCHOR id="tp-cli-channel-dispatch-operation-call-handle-with-time" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with-time">
19371959 <ANCHOR id="tp-cli-channel-dispatch-operation-signal-callback-channel-lost" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-channel-lost">
19381960 <ANCHOR id="tp-cli-channel-dispatch-operation-connect-to-channel-lost" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-connect-to-channel-lost">
19391961 <ANCHOR id="tp-cli-channel-dispatch-operation-signal-callback-finished" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-finished">
22392261 <ANCHOR id="tp-svc-channel-interface-call-state-return-from-get-call-states" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-call-state-return-from-get-call-states">
22402262 <ANCHOR id="TpSvcChannelInterfaceDTMF-struct" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-struct">
22412263 <ANCHOR id="TpSvcChannelInterfaceDTMFClass" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass">
2264 <ANCHOR id="tp-svc-channel-interface-dtmf-implement-multiple-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-multiple-tones">
22422265 <ANCHOR id="tp-svc-channel-interface-dtmf-implement-start-tone" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-start-tone">
22432266 <ANCHOR id="tp-svc-channel-interface-dtmf-implement-stop-tone" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-stop-tone">
2267 <ANCHOR id="tp-svc-channel-interface-dtmf-return-from-multiple-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-multiple-tones">
22442268 <ANCHOR id="tp-svc-channel-interface-dtmf-return-from-start-tone" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-start-tone">
22452269 <ANCHOR id="tp-svc-channel-interface-dtmf-return-from-stop-tone" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-stop-tone">
2270 <ANCHOR id="tp-svc-channel-interface-dtmf-multiple-tones-impl" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl">
22462271 <ANCHOR id="tp-svc-channel-interface-dtmf-start-tone-impl" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-start-tone-impl">
22472272 <ANCHOR id="tp-svc-channel-interface-dtmf-stop-tone-impl" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-stop-tone-impl">
2273 <ANCHOR id="tp-svc-channel-interface-dtmf-emit-sending-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-sending-tones">
2274 <ANCHOR id="tp-svc-channel-interface-dtmf-emit-stopped-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-stopped-tones">
22482275 <ANCHOR id="TpSvcChannelInterfaceHold-struct" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-struct">
22492276 <ANCHOR id="TpSvcChannelInterfaceHoldClass" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHoldClass">
22502277 <ANCHOR id="tp-svc-channel-interface-hold-get-hold-state-impl" href="telepathy-glib/telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-hold-get-hold-state-impl">
22672294 <ANCHOR id="TpSvcChannelTypeStreamedMedia-stream-removed" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-removed">
22682295 <ANCHOR id="TpSvcChannelTypeStreamedMedia-stream-state-changed" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-state-changed">
22692296 <ANCHOR id="TpSvcChannelInterfaceCallState-call-state-changed" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceCallState-call-state-changed">
2297 <ANCHOR id="TpSvcChannelInterfaceDTMF-sending-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-sending-tones">
2298 <ANCHOR id="TpSvcChannelInterfaceDTMF-stopped-tones" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-stopped-tones">
22702299 <ANCHOR id="TpSvcChannelInterfaceHold-hold-state-changed" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-hold-state-changed">
22712300 <ANCHOR id="TpSvcChannelInterfaceMediaSignalling-new-session-handler" href="telepathy-glib/telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceMediaSignalling-new-session-handler">
22722301 <ANCHOR id="telepathy-glib-svc-channel-file-transfer" href="telepathy-glib/telepathy-glib-svc-channel-file-transfer.html">
28252854 <ANCHOR id="tp-svc-channel-dispatch-operation-return-from-handle-with" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with">
28262855 <ANCHOR id="tp-svc-channel-dispatch-operation-handle-with-impl" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-impl">
28272856 <ANCHOR id="tp-svc-channel-dispatch-operation-implement-handle-with" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with">
2857 <ANCHOR id="tp-svc-channel-dispatch-operation-handle-with-time-impl" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl">
2858 <ANCHOR id="tp-svc-channel-dispatch-operation-implement-handle-with-time" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with-time">
2859 <ANCHOR id="tp-svc-channel-dispatch-operation-return-from-handle-with-time" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with-time">
28282860 <ANCHOR id="tp-svc-channel-dispatch-operation-emit-channel-lost" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-channel-lost">
28292861 <ANCHOR id="tp-svc-channel-dispatch-operation-emit-finished" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-finished">
28302862 <ANCHOR id="telepathy-glib-svc-channel-dispatch-operation.signal-details" href="telepathy-glib/telepathy-glib-svc-channel-dispatch-operation.html#telepathy-glib-svc-channel-dispatch-operation.signal-details">
32433275 <ANCHOR id="telepathy-glib-base-client.object-hierarchy" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.object-hierarchy">
32443276 <ANCHOR id="telepathy-glib-base-client.implemented-interfaces" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.implemented-interfaces">
32453277 <ANCHOR id="telepathy-glib-base-client.properties" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.properties">
3278 <ANCHOR id="telepathy-glib-base-client.signals" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.signals">
32463279 <ANCHOR id="telepathy-glib-base-client.description" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.description">
32473280 <ANCHOR id="telepathy-glib-base-client.details" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.details">
32483281 <ANCHOR id="TpBaseClient-struct" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient-struct">
32553288 <ANCHOR id="tp-base-client-take-approver-filter" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-take-approver-filter">
32563289 <ANCHOR id="TpBaseClientClassAddDispatchOperationImpl" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl">
32573290 <ANCHOR id="tp-base-client-implement-add-dispatch-operation" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-implement-add-dispatch-operation">
3291 <ANCHOR id="tp-base-client-add-handler-capabilities" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities">
3292 <ANCHOR id="tp-base-client-add-handler-capabilities-varargs" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities-varargs">
3293 <ANCHOR id="tp-base-client-add-handler-capability" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-add-handler-capability">
3294 <ANCHOR id="tp-base-client-add-handler-filter" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-add-handler-filter">
3295 <ANCHOR id="tp-base-client-be-a-handler" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-be-a-handler">
3296 <ANCHOR id="TpBaseClientClassHandleChannelsImpl" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl">
3297 <ANCHOR id="tp-base-client-implement-handle-channels" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-implement-handle-channels">
3298 <ANCHOR id="tp-base-client-get-handled-channels" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-handled-channels">
3299 <ANCHOR id="tp-base-client-get-pending-requests" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-pending-requests">
3300 <ANCHOR id="tp-base-client-set-handler-bypass-approval" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-set-handler-bypass-approval">
3301 <ANCHOR id="tp-base-client-set-handler-request-notification" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification">
3302 <ANCHOR id="tp-base-client-take-handler-filter" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-take-handler-filter">
32583303 <ANCHOR id="tp-base-client-register" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-register">
3304 <ANCHOR id="tp-base-client-unregister" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-unregister">
32593305 <ANCHOR id="tp-base-client-get-bus-name" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-bus-name">
32603306 <ANCHOR id="tp-base-client-get-object-path" href="telepathy-glib/telepathy-glib-base-client.html#tp-base-client-get-object-path">
32613307 <ANCHOR id="telepathy-glib-base-client.property-details" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.property-details">
32623308 <ANCHOR id="TpBaseClient--dbus-daemon" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient--dbus-daemon">
32633309 <ANCHOR id="TpBaseClient--name" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient--name">
32643310 <ANCHOR id="TpBaseClient--uniquify-name" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient--uniquify-name">
3311 <ANCHOR id="telepathy-glib-base-client.signal-details" href="telepathy-glib/telepathy-glib-base-client.html#telepathy-glib-base-client.signal-details">
3312 <ANCHOR id="TpBaseClient-request-added" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient-request-added">
3313 <ANCHOR id="TpBaseClient-request-removed" href="telepathy-glib/telepathy-glib-base-client.html#TpBaseClient-request-removed">
32653314 <ANCHOR id="telepathy-glib-observe-channels-context" href="telepathy-glib/telepathy-glib-observe-channels-context.html">
32663315 <ANCHOR id="telepathy-glib-observe-channels-context.synopsis" href="telepathy-glib/telepathy-glib-observe-channels-context.html#telepathy-glib-observe-channels-context.synopsis">
32673316 <ANCHOR id="TpObserveChannelsContext" href="telepathy-glib/telepathy-glib-observe-channels-context.html#TpObserveChannelsContext">
32993348 <ANCHOR id="TpAddDispatchOperationContext--connection" href="telepathy-glib/telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--connection">
33003349 <ANCHOR id="TpAddDispatchOperationContext--dbus-context" href="telepathy-glib/telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dbus-context">
33013350 <ANCHOR id="TpAddDispatchOperationContext--dispatch-operation" href="telepathy-glib/telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dispatch-operation">
3351 <ANCHOR id="telepathy-glib-handle-channels-context" href="telepathy-glib/telepathy-glib-handle-channels-context.html">
3352 <ANCHOR id="telepathy-glib-handle-channels-context.synopsis" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.synopsis">
3353 <ANCHOR id="TpHandleChannelsContext" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext">
3354 <ANCHOR id="telepathy-glib-handle-channels-context.object-hierarchy" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.object-hierarchy">
3355 <ANCHOR id="telepathy-glib-handle-channels-context.properties" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.properties">
3356 <ANCHOR id="telepathy-glib-handle-channels-context.signals" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.signals">
3357 <ANCHOR id="telepathy-glib-handle-channels-context.description" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.description">
3358 <ANCHOR id="telepathy-glib-handle-channels-context.details" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.details">
3359 <ANCHOR id="TpHandleChannelsContext-struct" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-struct">
3360 <ANCHOR id="tp-handle-channels-context-accept" href="telepathy-glib/telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept">
3361 <ANCHOR id="tp-handle-channels-context-delay" href="telepathy-glib/telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay">
3362 <ANCHOR id="tp-handle-channels-context-fail" href="telepathy-glib/telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail">
3363 <ANCHOR id="telepathy-glib-handle-channels-context.property-details" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.property-details">
3364 <ANCHOR id="TpHandleChannelsContext--account" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--account">
3365 <ANCHOR id="TpHandleChannelsContext--channels" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--channels">
3366 <ANCHOR id="TpHandleChannelsContext--connection" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--connection">
3367 <ANCHOR id="TpHandleChannelsContext--dbus-context" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--dbus-context">
3368 <ANCHOR id="TpHandleChannelsContext--handler-info" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--handler-info">
3369 <ANCHOR id="TpHandleChannelsContext--requests-satisfied" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--requests-satisfied">
3370 <ANCHOR id="TpHandleChannelsContext--user-action-time" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--user-action-time">
3371 <ANCHOR id="telepathy-glib-handle-channels-context.signal-details" href="telepathy-glib/telepathy-glib-handle-channels-context.html#telepathy-glib-handle-channels-context.signal-details">
3372 <ANCHOR id="TpHandleChannelsContext-done" href="telepathy-glib/telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-done">
33023373 <ANCHOR id="telepathy-glib-simple-observer" href="telepathy-glib/telepathy-glib-simple-observer.html">
33033374 <ANCHOR id="telepathy-glib-simple-observer.synopsis" href="telepathy-glib/telepathy-glib-simple-observer.html#telepathy-glib-simple-observer.synopsis">
33043375 <ANCHOR id="TpSimpleObserver" href="telepathy-glib/telepathy-glib-simple-observer.html#TpSimpleObserver">
33303401 <ANCHOR id="TpSimpleApprover--callback" href="telepathy-glib/telepathy-glib-simple-approver.html#TpSimpleApprover--callback">
33313402 <ANCHOR id="TpSimpleApprover--destroy" href="telepathy-glib/telepathy-glib-simple-approver.html#TpSimpleApprover--destroy">
33323403 <ANCHOR id="TpSimpleApprover--user-data" href="telepathy-glib/telepathy-glib-simple-approver.html#TpSimpleApprover--user-data">
3404 <ANCHOR id="telepathy-glib-simple-handler" href="telepathy-glib/telepathy-glib-simple-handler.html">
3405 <ANCHOR id="telepathy-glib-simple-handler.synopsis" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.synopsis">
3406 <ANCHOR id="TpSimpleHandler" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler">
3407 <ANCHOR id="telepathy-glib-simple-handler.object-hierarchy" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.object-hierarchy">
3408 <ANCHOR id="telepathy-glib-simple-handler.implemented-interfaces" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.implemented-interfaces">
3409 <ANCHOR id="telepathy-glib-simple-handler.properties" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.properties">
3410 <ANCHOR id="telepathy-glib-simple-handler.description" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.description">
3411 <ANCHOR id="telepathy-glib-simple-handler.details" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.details">
3412 <ANCHOR id="TpSimpleHandler-struct" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler-struct">
3413 <ANCHOR id="TpSimpleHandlerHandleChannelsImpl" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl">
3414 <ANCHOR id="tp-simple-handler-new" href="telepathy-glib/telepathy-glib-simple-handler.html#tp-simple-handler-new">
3415 <ANCHOR id="telepathy-glib-simple-handler.property-details" href="telepathy-glib/telepathy-glib-simple-handler.html#telepathy-glib-simple-handler.property-details">
3416 <ANCHOR id="TpSimpleHandler--bypass-approval" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler--bypass-approval">
3417 <ANCHOR id="TpSimpleHandler--callback" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler--callback">
3418 <ANCHOR id="TpSimpleHandler--destroy" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler--destroy">
3419 <ANCHOR id="TpSimpleHandler--requests" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler--requests">
3420 <ANCHOR id="TpSimpleHandler--user-data" href="telepathy-glib/telepathy-glib-simple-handler.html#TpSimpleHandler--user-data">
33333421 <ANCHOR id="telepathy-glib-handle-repo" href="telepathy-glib/telepathy-glib-handle-repo.html">
33343422 <ANCHOR id="telepathy-glib-handle-repo.synopsis" href="telepathy-glib/telepathy-glib-handle-repo.html#telepathy-glib-handle-repo.synopsis">
33353423 <ANCHOR id="TpHandleRepoIface" href="telepathy-glib/telepathy-glib-handle-repo.html#TpHandleRepoIface">
33573445 <ANCHOR id="tp-handle-ensure" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-ensure">
33583446 <ANCHOR id="tp-handle-lookup" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-lookup">
33593447 <ANCHOR id="TpHandleSet" href="telepathy-glib/telepathy-glib-handle-repo.html#TpHandleSet">
3448 <ANCHOR id="TP-TYPE-HANDLE-SET:CAPS" href="telepathy-glib/telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS">
33603449 <ANCHOR id="TpHandleSetMemberFunc" href="telepathy-glib/telepathy-glib-handle-repo.html#TpHandleSetMemberFunc">
33613450 <ANCHOR id="tp-handle-set-new" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-new">
3451 <ANCHOR id="tp-handle-set-copy" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-copy">
3452 <ANCHOR id="tp-handle-set-clear" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-clear">
33623453 <ANCHOR id="tp-handle-set-destroy" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-destroy">
33633454 <ANCHOR id="tp-handle-set-peek" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-peek">
33643455 <ANCHOR id="tp-handle-set-add" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-add">
33653456 <ANCHOR id="tp-handle-set-remove" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-remove">
33663457 <ANCHOR id="tp-handle-set-is-member" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-is-member">
33673458 <ANCHOR id="tp-handle-set-foreach" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-foreach">
3459 <ANCHOR id="tp-handle-set-is-empty" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-is-empty">
33683460 <ANCHOR id="tp-handle-set-size" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-size">
33693461 <ANCHOR id="tp-handle-set-to-array" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-to-array">
33703462 <ANCHOR id="tp-handle-set-update" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-update">
35153607 <ANCHOR id="tp-intset-foreach" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-foreach">
35163608 <ANCHOR id="tp-intset-to-array" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-to-array">
35173609 <ANCHOR id="tp-intset-from-array" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-from-array">
3610 <ANCHOR id="tp-intset-is-empty" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-is-empty">
35183611 <ANCHOR id="tp-intset-size" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-size">
35193612 <ANCHOR id="tp-intset-is-equal" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-is-equal">
35203613 <ANCHOR id="tp-intset-copy" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-copy">
35233616 <ANCHOR id="tp-intset-difference" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-difference">
35243617 <ANCHOR id="tp-intset-symmetric-difference" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-symmetric-difference">
35253618 <ANCHOR id="tp-intset-dump" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-dump">
3619 <ANCHOR id="TpIntSetFastIter" href="telepathy-glib/telepathy-glib-TpIntSet.html#TpIntSetFastIter">
3620 <ANCHOR id="tp-intset-fast-iter-init" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init">
3621 <ANCHOR id="tp-intset-fast-iter-next" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-fast-iter-next">
35263622 <ANCHOR id="TP-INTSET-ITER-INIT:CAPS" href="telepathy-glib/telepathy-glib-TpIntSet.html#TP-INTSET-ITER-INIT:CAPS">
35273623 <ANCHOR id="TpIntSetIter" href="telepathy-glib/telepathy-glib-TpIntSet.html#TpIntSetIter">
35283624 <ANCHOR id="tp-intset-iter-init" href="telepathy-glib/telepathy-glib-TpIntSet.html#tp-intset-iter-init">
204204 float: right;
205205 /* tango:aluminium 3 */
206206 color: #babdb6;
207 font-size: 80%;
208 font-weight: normal;
209 }
210
211 .annotation
212 {
213 /* tango:aluminium 5 */
214 color: #555753;
207215 font-size: 80%;
208216 font-weight: normal;
209217 }
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="TpChannelManager.html" title="TpChannelManager">
99 <link rel="next" href="telepathy-glib-dbus-properties-mixin.html" title="TpDBusPropertiesMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
370370 </div>
371371 <div class="footer">
372372 <hr>
373 Generated by GTK-Doc V1.14</div>
373 Generated by GTK-Doc V1.15</div>
374374 </body>
375375 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpPropertiesMixin.html" title="TpPropertiesMixin">
99 <link rel="next" href="telepathy-glib-TpTextMixin.html" title="TpTextMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
16441644 </div>
16451645 <div class="footer">
16461646 <hr>
1647 Generated by GTK-Doc V1.14</div>
1647 Generated by GTK-Doc V1.15</div>
16481648 </body>
16491649 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-TpIntSet.html" title="TpIntSet">
99 <link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
254254 </div>
255255 <div class="footer">
256256 <hr>
257 Generated by GTK-Doc V1.14</div>
257 Generated by GTK-Doc V1.15</div>
258258 </body>
259259 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-debug-sender.html" title="TpDebugSender">
99 <link rel="next" href="telepathy-glib-TpHeap.html" title="TpHeap">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
5959 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> userdata</code></em>);
6060 <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-to-array" title="tp_intset_to_array ()">tp_intset_to_array</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);
6161 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-from-array" title="tp_intset_from_array ()">tp_intset_from_array</a> (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *array</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-TpIntSet.html#tp-intset-is-empty" title="tp_intset_is_empty ()">tp_intset_is_empty</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);
6263 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-size" title="tp_intset_size ()">tp_intset_size</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);
6364 <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-TpIntSet.html#tp-intset-is-equal" title="tp_intset_is_equal ()">tp_intset_is_equal</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *left</code></em>,
6465 <em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *right</code></em>);
7273 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-symmetric-difference" title="tp_intset_symmetric_difference ()">tp_intset_symmetric_difference</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *left</code></em>,
7374 <em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *right</code></em>);
7475 <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-TpIntSet.html#tp-intset-dump" title="tp_intset_dump ()">tp_intset_dump</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);
76 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter">TpIntSetFastIter</a>;
77 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init" title="tp_intset_fast_iter_init ()">tp_intset_fast_iter_init</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> *iter</code></em>,
78 <em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);
79 <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-TpIntSet.html#tp-intset-fast-iter-next" title="tp_intset_fast_iter_next ()">tp_intset_fast_iter_next</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> *iter</code></em>,
80 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *output</code></em>);
7581 #define <a class="link" href="telepathy-glib-TpIntSet.html#TP-INTSET-ITER-INIT:CAPS" title="TP_INTSET_ITER_INIT()">TP_INTSET_ITER_INIT</a> (set)
7682 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetIter" title="TpIntSetIter">TpIntSetIter</a>;
7783 #define <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-iter-init" title="tp_intset_iter_init()">tp_intset_iter_init</a> (iter,
8490 <a name="telepathy-glib-TpIntSet.description"></a><h2>Description</h2>
8591 <p>
8692 A <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> is a set of unsigned integers, implemented as a
87 dynamically-allocated bitfield.
93 dynamically-allocated sparse bitfield.
8894 </p>
8995 </div>
9096 <div class="refsect1" title="Details">
135141 <a name="tp-intset-sized-new"></a><h3>tp_intset_sized_new ()</h3>
136142 <pre class="programlisting"><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * tp_intset_sized_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
137143 <p>
138 Allocate an integer set just large enough to store the given number of bits,
139 rounded up as necessary.
140 </p>
141 <p>
142 The set will still expand automatically if you store larger integers;
143 this is just an optimization to avoid wasting memory (if the set is too
144 large) or time (if the set is too small and needs reallocation).
144 Allocate a new integer set.
145145 </p>
146146 <div class="variablelist"><table border="0">
147147 <col align="left" valign="top">
148148 <tbody>
149149 <tr>
150150 <td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
151 <td>1 more than the largest integer you expect to store
151 <td>ignored (it was previously 1 more than the largest integer you
152 expect to store)
152153 </td>
153154 </tr>
154155 <tr>
164165 <a name="tp-intset-new"></a><h3>tp_intset_new ()</h3>
165166 <pre class="programlisting"><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * tp_intset_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
166167 <p>
167 Allocate a new integer set with a default memory allocation.
168 Allocate a new integer set.
168169 </p>
169170 <div class="variablelist"><table border="0">
170171 <col align="left" valign="top">
322323 <em class="parameter"><code><a class="link" href="telepathy-glib-TpIntSet.html#TpIntFunc" title="TpIntFunc ()"><span class="type">TpIntFunc</span></a> func</code></em>,
323324 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> userdata</code></em>);</pre>
324325 <p>
325 Call <em class="parameter"><code>func</code></em>(element, <em class="parameter"><code>userdata</code></em>) for each element of <em class="parameter"><code>set</code></em>.
326 Call <em class="parameter"><code>func</code></em>(element, <em class="parameter"><code>userdata</code></em>) for each element of <em class="parameter"><code>set</code></em>, in order.
326327 </p>
327328 <div class="variablelist"><table border="0">
328329 <col align="left" valign="top">
364365 <tr>
365366 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
366367 <td> a GArray of guint (which must be freed by the caller) containing
367 the same integers as <em class="parameter"><code>set</code></em>.
368 the same integers as <em class="parameter"><code>set</code></em>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
368369 </td>
369370 </tr>
370371 </tbody>
382383 <tbody>
383384 <tr>
384385 <td><p><span class="term"><em class="parameter"><code>array</code></em> :</span></p></td>
385 <td>An array of guint
386 <td> An array of guint. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
386387 </td>
387388 </tr>
388389 <tr>
392393 </tr>
393394 </tbody>
394395 </table></div>
396 </div>
397 <hr>
398 <div class="refsect2" title="tp_intset_is_empty ()">
399 <a name="tp-intset-is-empty"></a><h3>tp_intset_is_empty ()</h3>
400 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_intset_is_empty (<em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);</pre>
401 <p>
402 Return the same thing as <code class="code">(tp_intset_size (set) == 0)</code>,
403 but calculated more efficiently.
404 </p>
405 <div class="variablelist"><table border="0">
406 <col align="left" valign="top">
407 <tbody>
408 <tr>
409 <td><p><span class="term"><em class="parameter"><code>set</code></em> :</span></p></td>
410 <td>a set of integers
411 </td>
412 </tr>
413 <tr>
414 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
415 <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>set</code></em> is empty
416
417 </td>
418 </tr>
419 </tbody>
420 </table></div>
421 <p class="since">Since 0.11.6</p>
395422 </div>
396423 <hr>
397424 <div class="refsect2" title="tp_intset_size ()">
616643 </tr>
617644 </tbody>
618645 </table></div>
646 </div>
647 <hr>
648 <div class="refsect2" title="TpIntSetFastIter">
649 <a name="TpIntSetFastIter"></a><h3>TpIntSetFastIter</h3>
650 <pre class="programlisting">typedef struct {
651 } TpIntSetFastIter;
652 </pre>
653 <p>
654 An opaque structure representing iteration in undefined order over a set of
655 integers. Must be initialized with <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init" title="tp_intset_fast_iter_init ()"><code class="function">tp_intset_fast_iter_init()</code></a>.
656 </p>
657 <p>
658 Usage is similar to <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTableIter"><span class="type">GHashTableIter</span></a>:
659 </p>
660 <p>
661 </p>
662 <div class="informalexample">
663 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
664 <tbody>
665 <tr>
666 <td class="listing_lines" align="right"><pre>1
667 2
668 3
669 4
670 5
671 6
672 7
673 8
674 9</pre></td>
675 <td class="listing_code"><pre class="programlisting">TpIntSetFastIter iter<span class="symbol">;</span>
676 guint element<span class="symbol">;</span>
677
678 <span class="function"><a href="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init">tp_intset_fast_iter_init</a></span> <span class="symbol">(&amp;</span>iter<span class="symbol">,</span> intset<span class="symbol">);</span>
679
680 <span class="keyword">while</span> <span class="symbol">(</span><span class="function"><a href="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-next">tp_intset_fast_iter_next</a></span> <span class="symbol">(&amp;</span>iter<span class="symbol">, &amp;</span>element<span class="symbol">))</span>
681 <span class="symbol">{</span>
682 <span class="function">printf</span> <span class="symbol">(</span><span class="string">&quot;%u is in the intset</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="symbol">,</span> element<span class="symbol">);</span>
683 <span class="symbol">}</span></pre></td>
684 </tr>
685 </tbody>
686 </table>
687 </div>
688
689 <p>
690 </p>
691 <p class="since">Since 0.11.6</p>
692 </div>
693 <hr>
694 <div class="refsect2" title="tp_intset_fast_iter_init ()">
695 <a name="tp-intset-fast-iter-init"></a><h3>tp_intset_fast_iter_init ()</h3>
696 <pre class="programlisting"><span class="returnvalue">void</span> tp_intset_fast_iter_init (<em class="parameter"><code><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> *iter</code></em>,
697 <em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *set</code></em>);</pre>
698 <p>
699 Initialize <em class="parameter"><code>iter</code></em> to iterate over <em class="parameter"><code>set</code></em> in arbitrary order. <em class="parameter"><code>iter</code></em> will become
700 invalid if <em class="parameter"><code>set</code></em> is modified.
701 </p>
702 <div class="variablelist"><table border="0">
703 <col align="left" valign="top">
704 <tbody>
705 <tr>
706 <td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
707 <td>an iterator
708 </td>
709 </tr>
710 <tr>
711 <td><p><span class="term"><em class="parameter"><code>set</code></em> :</span></p></td>
712 <td>a set
713 </td>
714 </tr>
715 </tbody>
716 </table></div>
717 <p class="since">Since 0.11.6</p>
718 </div>
719 <hr>
720 <div class="refsect2" title="tp_intset_fast_iter_next ()">
721 <a name="tp-intset-fast-iter-next"></a><h3>tp_intset_fast_iter_next ()</h3>
722 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_intset_fast_iter_next (<em class="parameter"><code><a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> *iter</code></em>,
723 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *output</code></em>);</pre>
724 <p>
725 Advances <em class="parameter"><code>iter</code></em> and retrieves the integer it now points to. Iteration
726 is not necessarily in numerical order.
727 </p>
728 <div class="variablelist"><table border="0">
729 <col align="left" valign="top">
730 <tbody>
731 <tr>
732 <td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
733 <td>an iterator
734 </td>
735 </tr>
736 <tr>
737 <td><p><span class="term"><em class="parameter"><code>output</code></em> :</span></p></td>
738 <td>a location to store a new integer, in arbitrary order
739 </td>
740 </tr>
741 <tr>
742 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
743 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the end of the set has been reached
744
745 </td>
746 </tr>
747 </tbody>
748 </table></div>
749 <p class="since">Since 0.11.6</p>
619750 </div>
620751 <hr>
621752 <div class="refsect2" title="TP_INTSET_ITER_INIT()">
650781
651782 <p>
652783 </p>
784 <p>
785 Since 0.11.6, consider using <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> if iteration in
786 numerical order is not required.
787 </p>
653788 <div class="variablelist"><table border="0">
654789 <col align="left" valign="top">
655790 <tbody><tr>
670805 <p>
671806 A structure representing iteration over a set of integers. Must be
672807 initialized with either <a class="link" href="telepathy-glib-TpIntSet.html#TP-INTSET-ITER-INIT:CAPS" title="TP_INTSET_ITER_INIT()"><code class="function">TP_INTSET_ITER_INIT()</code></a> or <a class="link" href="telepathy-glib-TpIntSet.html#tp-intset-iter-init" title="tp_intset_iter_init()"><code class="function">tp_intset_iter_init()</code></a>.
808 </p>
809 <p>
810 Since 0.11.6, consider using <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> if iteration in
811 numerical order is not required.
673812 </p>
674813 <div class="variablelist"><table border="0">
675814 <col align="left" valign="top">
747886
748887 <p>
749888 </p>
889 <p>
890 Since 0.11.6, consider using <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSetFastIter" title="TpIntSetFastIter"><span class="type">TpIntSetFastIter</span></a> if iteration in
891 numerical order is not required.
892 </p>
750893 <div class="variablelist"><table border="0">
751894 <col align="left" valign="top">
752895 <tbody>
789932 </div>
790933 <div class="footer">
791934 <hr>
792 Generated by GTK-Doc V1.14</div>
935 Generated by GTK-Doc V1.15</div>
793936 </body>
794937 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpTextMixin.html" title="TpTextMixin">
99 <link rel="next" href="telepathy-glib-base-client.html" title="TpBaseClient">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14751475 </div>
14761476 <div class="footer">
14771477 <hr>
1478 Generated by GTK-Doc V1.14</div>
1478 Generated by GTK-Doc V1.15</div>
14791479 </body>
14801480 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="TpExportableChannel.html" title="TpExportableChannel">
99 <link rel="next" href="telepathy-glib-TpPropertiesMixin.html" title="TpPropertiesMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
783783 </div>
784784 <div class="footer">
785785 <hr>
786 Generated by GTK-Doc V1.14</div>
786 Generated by GTK-Doc V1.15</div>
787787 </body>
788788 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpPresenceMixin.html" title="TpPresenceMixin">
99 <link rel="next" href="telepathy-glib-TpGroupMixin.html" title="TpGroupMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
11171117 </div>
11181118 <div class="footer">
11191119 <hr>
1120 Generated by GTK-Doc V1.14</div>
1120 Generated by GTK-Doc V1.15</div>
11211121 </body>
11221122 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpGroupMixin.html" title="TpGroupMixin">
99 <link rel="next" href="telepathy-glib-TpMessageMixin.html" title="TpMessageMixin">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
623623 </div>
624624 <div class="footer">
625625 <hr>
626 Generated by GTK-Doc V1.14</div>
626 Generated by GTK-Doc V1.15</div>
627627 </body>
628628 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-media-interfaces.html" title="TpMediaSessionHandler, TpMediaStreamHandler">
99 <link rel="next" href="telepathy-glib-account.html" title="TpAccount">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
303303 <tr>
304304 <td><p><span class="term"><em class="parameter"><code>parameters</code></em> :</span></p></td>
305305 <td> parameters
306 for the new account. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value. </td>
306 for the new account. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value]</span>
307 </td>
307308 </tr>
308309 <tr>
309310 <td><p><span class="term"><em class="parameter"><code>properties</code></em> :</span></p></td>
310311 <td> properties
311 for the new account. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value. </td>
312 for the new account. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value]</span>
313 </td>
312314 </tr>
313315 <tr>
314316 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
360362 <tr>
361363 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
362364 <td> a new <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> which was just created on
363 success, otherwise <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
364 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
365 success, otherwise <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>
366 </td>
365367 </tr>
366368 </tbody>
367369 </table></div>
399401 </tr>
400402 <tr>
401403 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
402 <td> a new <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> at <em class="parameter"><code>path</code></em>
403 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
404 <td> a new <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> at <em class="parameter"><code>path</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
405 </td>
404406 </tr>
405407 </tbody>
406408 </table></div>
454456 </tr>
455457 <tr>
456458 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
457 <td> a newly allocated <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of valid accounts in <em class="parameter"><code>manager</code></em>
458 . <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Account. <acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym> TelepathyGLib.Account. </td>
459 <td> a newly allocated <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of valid accounts in <em class="parameter"><code>manager</code></em>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Account][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym> TelepathyGLib.Account]</span>
460 </td>
459461 </tr>
460462 </tbody>
461463 </table></div>
494496 </tr>
495497 <tr>
496498 <td><p><span class="term"><em class="parameter"><code>status</code></em> :</span></p></td>
497 <td> a string to fill with the actual status. <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>. </td>
499 <td> a string to fill with the actual status. <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>
500 </td>
498501 </tr>
499502 <tr>
500503 <td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
501504 <td> a string to fill with the actual status
502 message. <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>. </td>
505 message. <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>
506 </td>
503507 </tr>
504508 <tr>
505509 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
12561260 </div>
12571261 <div class="footer">
12581262 <hr>
1259 Generated by GTK-Doc V1.14</div>
1263 Generated by GTK-Doc V1.15</div>
12601264 </body>
12611265 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-account-manager.html" title="TpAccountManager">
99 <link rel="next" href="telepathy-glib-channel-dispatcher.html" title="TpChannelDispatcher">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
131131 <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-account.html#tp-account-get-has-been-online" title="tp_account_get_has_been_online ()">tp_account_get_has_been_online</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>);
132132 <a class="link" href="telepathy-glib-enums.html#TpConnectionStatus" title="enum TpConnectionStatus"><span class="returnvalue">TpConnectionStatus</span></a> <a class="link" href="telepathy-glib-account.html#tp-account-get-connection-status" title="tp_account_get_connection_status ()">tp_account_get_connection_status</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
133133 <em class="parameter"><code><a class="link" href="telepathy-glib-enums.html#TpConnectionStatusReason" title="enum TpConnectionStatusReason"><span class="type">TpConnectionStatusReason</span></a> *reason</code></em>);
134 <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-account.html#tp-account-get-changing-presence" title="tp_account_get_changing_presence ()">tp_account_get_changing_presence</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *self</code></em>);
134135 <a class="link" href="telepathy-glib-enums.html#TpConnectionPresenceType" title="enum TpConnectionPresenceType"><span class="returnvalue">TpConnectionPresenceType</span></a> <a class="link" href="telepathy-glib-account.html#tp-account-get-current-presence" title="tp_account_get_current_presence ()">tp_account_get_current_presence</a>
135136 (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
136137 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **status</code></em>,
261262 <div class="refsect1" title="Properties">
262263 <a name="telepathy-glib-account.properties"></a><h2>Properties</h2>
263264 <pre class="synopsis">
265 "<a class="link" href="telepathy-glib-account.html#TpAccount--changing-presence" title='The "changing-presence" property'>changing-presence</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
264266 "<a class="link" href="telepathy-glib-account.html#TpAccount--connect-automatically" title='The "connect-automatically" property'>connect-automatically</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read
265267 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection" title='The "connection" property'>connection</a>" <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>* : Read
266268 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection-manager" title='The "connection-manager" property'>connection-manager</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
408410 <tr>
409411 <td><p><span class="term"><em class="parameter"><code>cm</code></em> :</span></p></td>
410412 <td> location at which to store the account's
411 connection manager's name. <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>. </td>
413 connection manager's name. <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>
414 </td>
412415 </tr>
413416 <tr>
414417 <td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
415418 <td> location at which to store the account's
416 protocol. <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>. </td>
419 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>
420 </td>
417421 </tr>
418422 <tr>
419423 <td><p><span class="term"><em class="parameter"><code>account_id</code></em> :</span></p></td>
420424 <td> location at which to store the account's
421 unique identifier. <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>. </td>
425 unique identifier. <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>
426 </td>
422427 </tr>
423428 <tr>
424429 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
453458 </tr>
454459 <tr>
455460 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
456 <td> the same as the <a class="link" href="telepathy-glib-account.html#TpAccount--connection" title='The "connection" property'><span class="type">"connection"</span></a> property
457 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
461 <td> the same as the <a class="link" href="telepathy-glib-account.html#TpAccount--connection" title='The "connection" property'><span class="type">"connection"</span></a> property. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
462 </td>
458463 </tr>
459464 </tbody>
460465 </table></div>
491496 <tr>
492497 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
493498 <td> the connection of the account, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if either
494 the object path <em class="parameter"><code>path</code></em> is invalid or it is the null-value "/"
495 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
499 the object path <em class="parameter"><code>path</code></em> is invalid or it is the null-value "/". <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
500 </td>
496501 </tr>
497502 </tbody>
498503 </table></div>
818823 <tr>
819824 <td><p><span class="term"><em class="parameter"><code>parameters</code></em> :</span></p></td>
820825 <td> new
821 parameters to set on <em class="parameter"><code>account</code></em>. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value. </td>
826 parameters to set on <em class="parameter"><code>account</code></em>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value]</span>
827 </td>
822828 </tr>
823829 <tr>
824830 <td><p><span class="term"><em class="parameter"><code>unset_parameters</code></em> :</span></p></td>
865871 <tr>
866872 <td><p><span class="term"><em class="parameter"><code>reconnect_required</code></em> :</span></p></td>
867873 <td> a <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> to
868 fill with properties that need a reconnect to take effect. type GObject.Strv<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. </td>
874 fill with properties that need a reconnect to take effect. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][type GObject.Strv][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
875 </td>
869876 </tr>
870877 <tr>
871878 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
13421349 </tr>
13431350 <tr>
13441351 <td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
1345 <td> a <a class="link" href="telepathy-glib-enums.html#TpConnectionStatusReason" title="enum TpConnectionStatusReason"><span class="type">TpConnectionStatusReason</span></a> to fill, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>. </td>
1352 <td> a <a class="link" href="telepathy-glib-enums.html#TpConnectionStatusReason" title="enum TpConnectionStatusReason"><span class="type">TpConnectionStatusReason</span></a> to fill, 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="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
1353 </td>
13461354 </tr>
13471355 <tr>
13481356 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
13531361 </tbody>
13541362 </table></div>
13551363 <p class="since">Since 0.9.0</p>
1364 </div>
1365 <hr>
1366 <div class="refsect2" title="tp_account_get_changing_presence ()">
1367 <a name="tp-account-get-changing-presence"></a><h3>tp_account_get_changing_presence ()</h3>
1368 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_account_get_changing_presence (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *self</code></em>);</pre>
1369 <p>
1370
1371 </p>
1372 <div class="variablelist"><table border="0">
1373 <col align="left" valign="top">
1374 <tbody>
1375 <tr>
1376 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1377 <td>an account
1378 </td>
1379 </tr>
1380 <tr>
1381 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1382 <td> the same as the <a class="link" href="telepathy-glib-account.html#TpAccount--changing-presence" title='The "changing-presence" property'><span class="type">"changing-presence"</span></a> property
1383
1384 </td>
1385 </tr>
1386 </tbody>
1387 </table></div>
1388 <p class="since">Since 0.11.6</p>
13561389 </div>
13571390 <hr>
13581391 <div class="refsect2" title="tp_account_get_current_presence ()">
13761409 </tr>
13771410 <tr>
13781411 <td><p><span class="term"><em class="parameter"><code>status</code></em> :</span></p></td>
1379 <td> return location for the current status. <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>. </td>
1412 <td> return location for the current status. <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>
1413 </td>
13801414 </tr>
13811415 <tr>
13821416 <td><p><span class="term"><em class="parameter"><code>status_message</code></em> :</span></p></td>
13831417 <td> return location for the current
1384 status message. <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>. </td>
1418 status message. <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>
1419 </td>
13851420 </tr>
13861421 <tr>
13871422 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
14161451 </tr>
14171452 <tr>
14181453 <td><p><span class="term"><em class="parameter"><code>status</code></em> :</span></p></td>
1419 <td> return location for the requested status. <acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
1454 <td> return location for the requested status. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1455 </td>
14201456 </tr>
14211457 <tr>
14221458 <td><p><span class="term"><em class="parameter"><code>status_message</code></em> :</span></p></td>
14231459 <td> return location for the requested
1424 status message. <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>. </td>
1460 status message. <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>
1461 </td>
14251462 </tr>
14261463 <tr>
14271464 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
14631500 <tr>
14641501 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
14651502 <td> the hash table of
1466 parameters on <em class="parameter"><code>account</code></em>
1467 . <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. </td>
1503 parameters on <em class="parameter"><code>account</code></em>. <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>
1504 </td>
14681505 </tr>
14691506 </tbody>
14701507 </table></div>
16331670 </tr>
16341671 <tr>
16351672 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1636 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> containing the bytes of the account's avatar,
1637 or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure
1638
1673 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a>
1674 containing the bytes of the account's avatar, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8]</span>
16391675 </td>
16401676 </tr>
16411677 </tbody>
16701706 <tr>
16711707 <td><p><span class="term"><em class="parameter"><code>avatar</code></em> :</span></p></td>
16721708 <td> a new avatar to set; can be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
1673 only if <em class="parameter"><code>len</code></em> equals 0. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len. </td>
1709 only if <em class="parameter"><code>len</code></em> equals 0. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span>
1710 </td>
16741711 </tr>
16751712 <tr>
16761713 <td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
16801717 <tr>
16811718 <td><p><span class="term"><em class="parameter"><code>mime_type</code></em> :</span></p></td>
16821719 <td> the MIME type of the new avatar; can be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
1683 only if <em class="parameter"><code>len</code></em> equals 0. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
1720 only if <em class="parameter"><code>len</code></em> equals 0. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1721 </td>
16841722 </tr>
16851723 <tr>
16861724 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
25162554 </div>
25172555 <div class="refsect1" title="Property Details">
25182556 <a name="telepathy-glib-account.property-details"></a><h2>Property Details</h2>
2557 <div class="refsect2" title='The "changing-presence" property'>
2558 <a name="TpAccount--changing-presence"></a><h3>The <code class="literal">"changing-presence"</code> property</h3>
2559 <pre class="programlisting"> "changing-presence" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
2560 <p>
2561 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if an attempt is currently being made to change the account's
2562 presence (<a class="link" href="telepathy-glib-account.html#TpAccount--current-presence-type" title='The "current-presence-type" property'><span class="type">"current-presence-type"</span></a>, <a class="link" href="telepathy-glib-account.html#TpAccount--current-status" title='The "current-status" property'><span class="type">"current-status"</span></a>
2563 and <a class="link" href="telepathy-glib-account.html#TpAccount--current-status-message" title='The "current-status-message" property'><span class="type">"current-status-message"</span></a>) to match its requested presence
2564 (<a class="link" href="telepathy-glib-account.html#TpAccount--requested-presence-type" title='The "requested-presence-type" property'><span class="type">"requested-presence-type"</span></a>, <a class="link" href="telepathy-glib-account.html#TpAccount--requested-status" title='The "requested-status" property'><span class="type">"requested-status"</span></a>
2565 and <a class="link" href="telepathy-glib-account.html#TpAccount--requested-status-message" title='The "requested-status-message" property'><span class="type">"requested-status-message"</span></a>).
2566 </p>
2567 <p>
2568 One can receive change notifications on this property by connecting
2569 to the <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-notify"><span class="type">"notify"</span></a> signal and using this property as the signal
2570 detail.
2571 </p>
2572 <p>
2573 This is not guaranteed to have been retrieved until
2574 <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> has finished; until then, the value is
2575 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.
2576 </p>
2577 <p>Default value: FALSE</p>
2578 <p class="since">Since 0.11.6</p>
2579 </div>
2580 <hr>
25192581 <div class="refsect2" title='The "connect-automatically" property'>
25202582 <a name="TpAccount--connect-automatically"></a><h3>The <code class="literal">"connect-automatically"</code> property</h3>
25212583 <pre class="programlisting"> "connect-automatically" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
29543016 </div>
29553017 <div class="footer">
29563018 <hr>
2957 Generated by GTK-Doc V1.14</div>
3019 Generated by GTK-Doc V1.15</div>
29583020 </body>
29593021 </html>
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-observe-channels-context.html" title="TpObserveChannelsContext">
9 <link rel="next" href="telepathy-glib-simple-observer.html" title="TpSimpleObserver">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
9 <link rel="next" href="telepathy-glib-handle-channels-context.html" title="TpHandleChannelsContext">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
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="telepathy-glib-simple-observer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-handle-channels-context.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-add-dispatch-operation-context.synopsis" class="shortcut">Top</a>
8686 Data structure representing the context of a Approver.AddDispatchOperation()
8787 call.
8888 </p>
89 <p class="since">Since 0.11.UNRELEASED</p>
89 <p class="since">Since 0.11.5</p>
9090 </div>
9191 <hr>
9292 <div class="refsect2" title="tp_add_dispatch_operation_context_accept ()">
105105 </td>
106106 </tr></tbody>
107107 </table></div>
108 <p class="since">Since 0.11.UNRELEASED</p>
108 <p class="since">Since 0.11.5</p>
109109 </div>
110110 <hr>
111111 <div class="refsect2" title="tp_add_dispatch_operation_context_delay ()">
128128 </td>
129129 </tr></tbody>
130130 </table></div>
131 <p class="since">Since 0.11.UNRELEASED</p>
131 <p class="since">Since 0.11.5</p>
132132 </div>
133133 <hr>
134134 <div class="refsect2" title="tp_add_dispatch_operation_context_fail ()">
154154 </tr>
155155 </tbody>
156156 </table></div>
157 <p class="since">Since 0.11.UNRELEASED</p>
157 <p class="since">Since 0.11.5</p>
158158 </div>
159159 </div>
160160 <div class="refsect1" title="Property Details">
170170 <p>
171171 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
172172 </p>
173 <p class="since">Since 0.11.UNRELEASED</p>
173 <p class="since">Since 0.11.5</p>
174174 </div>
175175 <hr>
176176 <div class="refsect2" title='The "channels" property'>
184184 <p>
185185 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
186186 </p>
187 <p class="since">Since 0.11.UNRELEASED</p>
187 <p class="since">Since 0.11.5</p>
188188 </div>
189189 <hr>
190190 <div class="refsect2" title='The "connection" property'>
198198 <p>
199199 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
200200 </p>
201 <p class="since">Since 0.11.UNRELEASED</p>
201 <p class="since">Since 0.11.5</p>
202202 </div>
203203 <hr>
204204 <div class="refsect2" title='The "dbus-context" property'>
209209 AddDispatchOperation call.
210210 Can only be written during construction.
211211 </p>
212 <p class="since">Since 0.11.UNRELEASED</p>
212 <p class="since">Since 0.11.5</p>
213213 </div>
214214 <hr>
215215 <div class="refsect2" title='The "dispatch-operation" property'>
223223 <p>
224224 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
225225 </p>
226 <p class="since">Since 0.11.UNRELEASED</p>
226 <p class="since">Since 0.11.5</p>
227227 </div>
228228 </div>
229229 </div>
230230 <div class="footer">
231231 <hr>
232 Generated by GTK-Doc V1.14</div>
232 Generated by GTK-Doc V1.15</div>
233233 </body>
234234 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="telepathy-glib-dbus.html" title="D-Bus utilities">
99 <link rel="next" href="telepathy-glib-proxy-subclass.html" title="TpProxy subclasses and mixins">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
234234 <p>
235235 </p>
236236 <div class="example">
237 <a name="id521375"></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="id569298"></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>
14951495 </div>
14961496 <div class="footer">
14971497 <hr>
1498 Generated by GTK-Doc V1.14</div>
1498 Generated by GTK-Doc V1.15</div>
14991499 </body>
15001500 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpMessageMixin.html" title="TpMessageMixin">
99 <link rel="next" href="telepathy-glib-observe-channels-context.html" title="TpObserveChannelsContext">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
2929 <a href="#telepathy-glib-base-client.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
3030  | 
3131 <a href="#telepathy-glib-base-client.properties" class="shortcut">Properties</a>
32  | 
33 <a href="#telepathy-glib-base-client.signals" class="shortcut">Signals</a>
3234 </td></tr>
3335 </table>
3436 <div class="refentry" title="TpBaseClient">
7779 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-add-dispatch-operation" title="tp_base_client_implement_add_dispatch_operation ()">tp_base_client_implement_add_dispatch_operation</a>
7880 (<em class="parameter"><code><span class="type">TpBaseClientClass</span> *klass</code></em>,
7981 <em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" title="TpBaseClientClassAddDispatchOperationImpl ()"><span class="type">TpBaseClientClassAddDispatchOperationImpl</span></a> impl</code></em>);
82 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities" title="tp_base_client_add_handler_capabilities ()">tp_base_client_add_handler_capabilities</a>
83 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
84 <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 *tokens</code></em>);
85 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities-varargs" title="tp_base_client_add_handler_capabilities_varargs ()">tp_base_client_add_handler_capabilities_varargs</a>
86 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
87 <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_token</code></em>,
88 <em class="parameter"><code>...</code></em>);
89 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-capability" title="tp_base_client_add_handler_capability ()">tp_base_client_add_handler_capability</a>
90 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
91 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *token</code></em>);
92 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-filter" title="tp_base_client_add_handler_filter ()">tp_base_client_add_handler_filter</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
93 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *filter</code></em>);
94 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-be-a-handler" title="tp_base_client_be_a_handler ()">tp_base_client_be_a_handler</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
95 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl" title="TpBaseClientClassHandleChannelsImpl ()">*TpBaseClientClassHandleChannelsImpl</a>)
96 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *client</code></em>,
97 <em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
98 <em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *connection</code></em>,
99 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *channels</code></em>,
100 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *requests_satisfied</code></em>,
101 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> user_action_time</code></em>,
102 <em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *context</code></em>);
103 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()">tp_base_client_implement_handle_channels</a>
104 (<em class="parameter"><code><span class="type">TpBaseClientClass</span> *klass</code></em>,
105 <em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl" title="TpBaseClientClassHandleChannelsImpl ()"><span class="type">TpBaseClientClassHandleChannelsImpl</span></a> impl</code></em>);
106 <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-handled-channels" title="tp_base_client_get_handled_channels ()">tp_base_client_get_handled_channels</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
107 <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-pending-requests" title="tp_base_client_get_pending_requests ()">tp_base_client_get_pending_requests</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
108 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-bypass-approval" title="tp_base_client_set_handler_bypass_approval ()">tp_base_client_set_handler_bypass_approval</a>
109 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
110 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> bypass_approval</code></em>);
111 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" title="tp_base_client_set_handler_request_notification ()">tp_base_client_set_handler_request_notification</a>
112 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);
113 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-base-client.html#tp-base-client-take-handler-filter" title="tp_base_client_take_handler_filter ()">tp_base_client_take_handler_filter</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
114 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *filter</code></em>);
80115 <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-register" title="tp_base_client_register ()">tp_base_client_register</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
81116 <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>);
117 <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>);
82118 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>);
83119 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>);
84120 </pre>
89125 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
90126 +----TpBaseClient
91127 +----<a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a>
128 +----<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler">TpSimpleHandler</a>
92129 +----<a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>
93130 </pre>
94131 </div>
96133 <a name="telepathy-glib-base-client.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
97134 <p>
98135 TpBaseClient implements
99 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>.</p>
136 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientHandler">TpSvcClientHandler</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientInterfaceRequests">TpSvcClientInterfaceRequests</a>.</p>
100137 </div>
101138 <div class="refsect1" title="Properties">
102139 <a name="telepathy-glib-base-client.properties"></a><h2>Properties</h2>
106143 "<a class="link" href="telepathy-glib-base-client.html#TpBaseClient--uniquify-name" title='The "uniquify-name" property'>uniquify-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only
107144 </pre>
108145 </div>
146 <div class="refsect1" title="Signals">
147 <a name="telepathy-glib-base-client.signals"></a><h2>Signals</h2>
148 <pre class="synopsis">
149 "<a class="link" href="telepathy-glib-base-client.html#TpBaseClient-request-added" title='The "request-added" signal'>request-added</a>" : Run Last / Has Details
150 "<a class="link" href="telepathy-glib-base-client.html#TpBaseClient-request-removed" title='The "request-removed" signal'>request-removed</a>" : Run Last / Has Details
151 </pre>
152 </div>
109153 <div class="refsect1" title="Description">
110154 <a name="telepathy-glib-base-client.description"></a><h2>Description</h2>
111155 <p>
126170 <p>
127171 Data structure representing a generic <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient"><span class="type">TpSvcClient</span></a> implementation.
128172 </p>
129 <p class="since">Since 0.11.UNRELEASED</p>
173 <p class="since">Since 0.11.5</p>
130174 </div>
131175 <hr>
132176 <div class="refsect2" title="tp_base_client_add_observer_filter ()">
155199 <tr>
156200 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
157201 <td>
158 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>. <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. </td>
159 </tr>
160 </tbody>
161 </table></div>
162 <p class="since">Since 0.11.UNRELEASED</p>
202 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>. <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>
203 </td>
204 </tr>
205 </tbody>
206 </table></div>
207 <p class="since">Since 0.11.5</p>
163208 </div>
164209 <hr>
165210 <div class="refsect2" title="tp_base_client_take_observer_filter ()">
208253 <tr>
209254 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
210255 <td>
211 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>, ownership of which is taken by <em class="parameter"><code>self</code></em>. <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. </td>
212 </tr>
213 </tbody>
214 </table></div>
215 <p class="since">Since 0.11.UNRELEASED</p>
256 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>, ownership of which is taken by <em class="parameter"><code>self</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
257 </td>
258 </tr>
259 </tbody>
260 </table></div>
261 <p class="since">Since 0.11.5</p>
216262 </div>
217263 <hr>
218264 <div class="refsect2" title="tp_base_client_set_observer_recover ()">
255301 </tr>
256302 </tbody>
257303 </table></div>
258 <p class="since">Since 0.11.UNRELEASED</p>
304 <p class="since">Since 0.11.5</p>
259305 </div>
260306 <hr>
261307 <div class="refsect2" title="TpBaseClientClassObserveChannelsImpl ()">
298344 <tr>
299345 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
300346 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
301 all having <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> prepared if possible. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel. </td>
347 all having <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> prepared if possible. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
348 </td>
302349 </tr>
303350 <tr>
304351 <td><p><span class="term"><em class="parameter"><code>dispatch_operation</code></em> :</span></p></td>
305352 <td> a <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>;
306 the dispatch_operation is not guaranteed to be prepared. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
353 the dispatch_operation is not guaranteed to be prepared. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
354 </td>
307355 </tr>
308356 <tr>
309357 <td><p><span class="term"><em class="parameter"><code>requests</code></em> :</span></p></td>
310358 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
311359 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> having their object-path defined but are not guaranteed
312 to be prepared.. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest. </td>
360 to be prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest]</span>
361 </td>
313362 </tr>
314363 <tr>
315364 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
319368 </tr>
320369 </tbody>
321370 </table></div>
322 <p class="since">Since 0.11.UNRELEASED</p>
371 <p class="since">Since 0.11.5</p>
323372 </div>
324373 <hr>
325374 <div class="refsect2" title="tp_base_client_implement_observe_channels ()">
347396 </tr>
348397 </tbody>
349398 </table></div>
350 <p class="since">Since 0.11.UNRELEASED</p>
399 <p class="since">Since 0.11.5</p>
351400 </div>
352401 <hr>
353402 <div class="refsect2" title="tp_base_client_add_approver_filter ()">
376425 <tr>
377426 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
378427 <td>
379 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>. <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. </td>
380 </tr>
381 </tbody>
382 </table></div>
383 <p class="since">Since 0.11.UNRELEASED</p>
428 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>. <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>
429 </td>
430 </tr>
431 </tbody>
432 </table></div>
433 <p class="since">Since 0.11.5</p>
384434 </div>
385435 <hr>
386436 <div class="refsect2" title="tp_base_client_take_approver_filter ()">
429479 <tr>
430480 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
431481 <td>
432 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>, ownership of which is taken by <em class="parameter"><code>self</code></em>. <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. </td>
433 </tr>
434 </tbody>
435 </table></div>
436 <p class="since">Since 0.11.UNRELEASED</p>
482 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>, ownership of which is taken by <em class="parameter"><code>self</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
483 </td>
484 </tr>
485 </tbody>
486 </table></div>
487 <p class="since">Since 0.11.5</p>
437488 </div>
438489 <hr>
439490 <div class="refsect2" title="TpBaseClientClassAddDispatchOperationImpl ()">
481532 <tr>
482533 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
483534 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
484 all having <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> prepared if possible. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel. </td>
535 all having <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> prepared if possible. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
536 </td>
485537 </tr>
486538 <tr>
487539 <td><p><span class="term"><em class="parameter"><code>dispatch_operation</code></em> :</span></p></td>
497549 </tr>
498550 </tbody>
499551 </table></div>
500 <p class="since">Since 0.11.UNRELEASED</p>
552 <p class="since">Since 0.11.5</p>
501553 </div>
502554 <hr>
503555 <div class="refsect2" title="tp_base_client_implement_add_dispatch_operation ()">
525577 </tr>
526578 </tbody>
527579 </table></div>
528 <p class="since">Since 0.11.UNRELEASED</p>
580 <p class="since">Since 0.11.5</p>
581 </div>
582 <hr>
583 <div class="refsect2" title="tp_base_client_add_handler_capabilities ()">
584 <a name="tp-base-client-add-handler-capabilities"></a><h3>tp_base_client_add_handler_capabilities ()</h3>
585 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_add_handler_capabilities
586 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
587 <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 *tokens</code></em>);</pre>
588 <p>
589 Add several capability tokens to this client. These are used to signal
590 that Telepathy connection managers should advertise certain capabilities
591 to other contacts, such as the ability to receive audio/video calls using
592 particular streaming protocols and codecs.
593 </p>
594 <p>
595 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
596 called, and may only be called on objects whose class has called
597 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
598 </p>
599 <div class="variablelist"><table border="0">
600 <col align="left" valign="top">
601 <tbody>
602 <tr>
603 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
604 <td>a client, which must not have been registered with
605 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> yet
606 </td>
607 </tr>
608 <tr>
609 <td><p><span class="term"><em class="parameter"><code>tokens</code></em> :</span></p></td>
610 <td> capability
611 tokens as defined by the Telepathy D-Bus API Specification. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
612 </td>
613 </tr>
614 </tbody>
615 </table></div>
616 <p class="since">Since 0.11.6</p>
617 </div>
618 <hr>
619 <div class="refsect2" title="tp_base_client_add_handler_capabilities_varargs ()">
620 <a name="tp-base-client-add-handler-capabilities-varargs"></a><h3>tp_base_client_add_handler_capabilities_varargs ()</h3>
621 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_add_handler_capabilities_varargs
622 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
623 <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_token</code></em>,
624 <em class="parameter"><code>...</code></em>);</pre>
625 <p>
626 Convenience C API equivalent to calling
627 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-capability" title="tp_base_client_add_handler_capability ()"><code class="function">tp_base_client_add_handler_capability()</code></a> for each capability token.
628 </p>
629 <p>
630 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
631 called, and may only be called on objects whose class has called
632 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
633 </p>
634 <div class="variablelist"><table border="0">
635 <col align="left" valign="top">
636 <tbody>
637 <tr>
638 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
639 <td>a client, which must not have been registered with
640 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> yet
641 </td>
642 </tr>
643 <tr>
644 <td><p><span class="term"><em class="parameter"><code>first_token</code></em> :</span></p></td>
645 <td>a capability token from the Telepathy D-Bus API Specification
646 </td>
647 </tr>
648 <tr>
649 <td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
650 <td>more tokens, ending with <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
651 </td>
652 </tr>
653 </tbody>
654 </table></div>
655 <p class="since">Since 0.11.6</p>
656 </div>
657 <hr>
658 <div class="refsect2" title="tp_base_client_add_handler_capability ()">
659 <a name="tp-base-client-add-handler-capability"></a><h3>tp_base_client_add_handler_capability ()</h3>
660 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_add_handler_capability
661 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
662 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *token</code></em>);</pre>
663 <p>
664 Add one capability token to this client, as if via
665 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities" title="tp_base_client_add_handler_capabilities ()"><code class="function">tp_base_client_add_handler_capabilities()</code></a>.
666 </p>
667 <p>
668 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
669 called, and may only be called on objects whose class has called
670 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
671 </p>
672 <div class="variablelist"><table border="0">
673 <col align="left" valign="top">
674 <tbody>
675 <tr>
676 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
677 <td>a client, which must not have been registered with
678 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> yet
679 </td>
680 </tr>
681 <tr>
682 <td><p><span class="term"><em class="parameter"><code>token</code></em> :</span></p></td>
683 <td>a capability token as defined by the Telepathy D-Bus API
684 Specification
685 </td>
686 </tr>
687 </tbody>
688 </table></div>
689 <p class="since">Since 0.11.6</p>
690 </div>
691 <hr>
692 <div class="refsect2" title="tp_base_client_add_handler_filter ()">
693 <a name="tp-base-client-add-handler-filter"></a><h3>tp_base_client_add_handler_filter ()</h3>
694 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_add_handler_filter (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
695 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *filter</code></em>);</pre>
696 <p>
697 Register a new channel class as Handler.HandlerChannelFilter.
698 The <em class="parameter"><code>handle_channels</code></em> virtual method set up using
699 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a> will be called whenever
700 a new channel's properties match the ones in <em class="parameter"><code>filter</code></em>.
701 </p>
702 <p>
703 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
704 called, and may only be called on objects whose class has called
705 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
706 </p>
707 <div class="variablelist"><table border="0">
708 <col align="left" valign="top">
709 <tbody>
710 <tr>
711 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
712 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
713 </td>
714 </tr>
715 <tr>
716 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
717 <td>
718 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>. <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>
719 </td>
720 </tr>
721 </tbody>
722 </table></div>
723 <p class="since">Since 0.11.6</p>
724 </div>
725 <hr>
726 <div class="refsect2" title="tp_base_client_be_a_handler ()">
727 <a name="tp-base-client-be-a-handler"></a><h3>tp_base_client_be_a_handler ()</h3>
728 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_be_a_handler (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
729 <p>
730 Register <em class="parameter"><code>self</code></em> as a ChannelHandler with an empty list of filter.
731 This is useful if you want to create a client that only handle channels
732 for which it's the PreferredHandler.
733 </p>
734 <p>
735 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
736 called, and may only be called on objects whose class has called
737 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
738 </p>
739 <div class="variablelist"><table border="0">
740 <col align="left" valign="top">
741 <tbody><tr>
742 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
743 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
744 </td>
745 </tr></tbody>
746 </table></div>
747 <p class="since">Since 0.11.6</p>
748 </div>
749 <hr>
750 <div class="refsect2" title="TpBaseClientClassHandleChannelsImpl ()">
751 <a name="TpBaseClientClassHandleChannelsImpl"></a><h3>TpBaseClientClassHandleChannelsImpl ()</h3>
752 <pre class="programlisting"><span class="returnvalue">void</span> (*TpBaseClientClassHandleChannelsImpl)
753 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *client</code></em>,
754 <em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
755 <em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *connection</code></em>,
756 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *channels</code></em>,
757 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *requests_satisfied</code></em>,
758 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> user_action_time</code></em>,
759 <em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *context</code></em>);</pre>
760 <p>
761 Signature of the implementation of the HandleChannels method.
762 </p>
763 <p>
764 This function must call either <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept" title="tp_handle_channels_context_accept ()"><code class="function">tp_handle_channels_context_accept()</code></a>,
765 <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay" title="tp_handle_channels_context_delay ()"><code class="function">tp_handle_channels_context_delay()</code></a> or <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail" title="tp_handle_channels_context_fail ()"><code class="function">tp_handle_channels_context_fail()</code></a>
766 on <em class="parameter"><code>context</code></em> before it returns.
767 </p>
768 <div class="variablelist"><table border="0">
769 <col align="left" valign="top">
770 <tbody>
771 <tr>
772 <td><p><span class="term"><em class="parameter"><code>client</code></em> :</span></p></td>
773 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> instance
774 </td>
775 </tr>
776 <tr>
777 <td><p><span class="term"><em class="parameter"><code>account</code></em> :</span></p></td>
778 <td>a <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> having <a class="link" href="telepathy-glib-account.html#TP-ACCOUNT-FEATURE-CORE:CAPS" title="TP_ACCOUNT_FEATURE_CORE"><code class="literal">TP_ACCOUNT_FEATURE_CORE</code></a> prepared if possible
779 </td>
780 </tr>
781 <tr>
782 <td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
783 <td>a <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> having <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> prepared
784 if possible
785 </td>
786 </tr>
787 <tr>
788 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
789 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
790 all having <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> prepared if possible. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
791 </td>
792 </tr>
793 <tr>
794 <td><p><span class="term"><em class="parameter"><code>requests_satisfied</code></em> :</span></p></td>
795 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
796 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> having their object-path defined but are not guaranteed
797 to be prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest]</span>
798 </td>
799 </tr>
800 <tr>
801 <td><p><span class="term"><em class="parameter"><code>user_action_time</code></em> :</span></p></td>
802 <td>the time at which user action occurred, or 0 if this
803 channel is to be handled for some reason not involving user action.
804 </td>
805 </tr>
806 <tr>
807 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
808 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> representing the context of this
809 D-Bus call
810 </td>
811 </tr>
812 </tbody>
813 </table></div>
814 <p class="since">Since 0.11.6</p>
815 </div>
816 <hr>
817 <div class="refsect2" title="tp_base_client_implement_handle_channels ()">
818 <a name="tp-base-client-implement-handle-channels"></a><h3>tp_base_client_implement_handle_channels ()</h3>
819 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_implement_handle_channels
820 (<em class="parameter"><code><span class="type">TpBaseClientClass</span> *klass</code></em>,
821 <em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl" title="TpBaseClientClassHandleChannelsImpl ()"><span class="type">TpBaseClientClassHandleChannelsImpl</span></a> impl</code></em>);</pre>
822 <p>
823 Called by subclasses to define the actual implementation of the
824 <code class="function">HandleChannels()</code> D-Bus method.
825 </p>
826 <div class="variablelist"><table border="0">
827 <col align="left" valign="top">
828 <tbody>
829 <tr>
830 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
831 <td>the <span class="type">TpBaseClientClass</span> of the object
832 </td>
833 </tr>
834 <tr>
835 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
836 <td>the <a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl" title="TpBaseClientClassHandleChannelsImpl ()"><span class="type">TpBaseClientClassHandleChannelsImpl</span></a> function implementing
837 <code class="function">HandleCHannels()</code>
838 </td>
839 </tr>
840 </tbody>
841 </table></div>
842 <p class="since">Since 0.11.6</p>
843 </div>
844 <hr>
845 <div class="refsect2" title="tp_base_client_get_handled_channels ()">
846 <a name="tp-base-client-get-handled-channels"></a><h3>tp_base_client_get_handled_channels ()</h3>
847 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_base_client_get_handled_channels (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
848 <p>
849 Returns the set of channels currently handled by this base client or by any
850 other <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> with which it shares a unique name.
851 </p>
852 <div class="variablelist"><table border="0">
853 <col align="left" valign="top">
854 <tbody>
855 <tr>
856 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
857 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
858 </td>
859 </tr>
860 <tr>
861 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
862 <td> the handled
863 channels. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Tp.Channel]</span>
864 </td>
865 </tr>
866 </tbody>
867 </table></div>
868 <p class="since">Since 0.11.6</p>
869 </div>
870 <hr>
871 <div class="refsect2" title="tp_base_client_get_pending_requests ()">
872 <a name="tp-base-client-get-pending-requests"></a><h3>tp_base_client_get_pending_requests ()</h3>
873 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_base_client_get_pending_requests (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
874 <p>
875 Only works if <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" title="tp_base_client_set_handler_request_notification ()"><code class="function">tp_base_client_set_handler_request_notification()</code></a> has been
876 called.
877 Returns the list of requests <em class="parameter"><code>self</code></em> is likely be asked to handle.
878 </p>
879 <div class="variablelist"><table border="0">
880 <col align="left" valign="top">
881 <tbody>
882 <tr>
883 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
884 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
885 </td>
886 </tr>
887 <tr>
888 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
889 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a>
890 of <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a>. <span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Tp.ChannelRequest]</span>
891 </td>
892 </tr>
893 </tbody>
894 </table></div>
895 <p class="since">Since 0.11.6</p>
896 </div>
897 <hr>
898 <div class="refsect2" title="tp_base_client_set_handler_bypass_approval ()">
899 <a name="tp-base-client-set-handler-bypass-approval"></a><h3>tp_base_client_set_handler_bypass_approval ()</h3>
900 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_set_handler_bypass_approval
901 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
902 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> bypass_approval</code></em>);</pre>
903 <p>
904 Set whether the channels destined for this handler are automatically
905 handled, without invoking approvers.
906 (This is implemented by setting the value of its BypassApproval
907 D-Bus property.)
908 </p>
909 <p>
910 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
911 called, and may only be called on objects whose class has called
912 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
913 </p>
914 <div class="variablelist"><table border="0">
915 <col align="left" valign="top">
916 <tbody>
917 <tr>
918 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
919 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
920 </td>
921 </tr>
922 <tr>
923 <td><p><span class="term"><em class="parameter"><code>bypass_approval</code></em> :</span></p></td>
924 <td>the value of the Handler.BypassApproval property
925 </td>
926 </tr>
927 </tbody>
928 </table></div>
929 <p class="since">Since 0.11.6</p>
930 </div>
931 <hr>
932 <div class="refsect2" title="tp_base_client_set_handler_request_notification ()">
933 <a name="tp-base-client-set-handler-request-notification"></a><h3>tp_base_client_set_handler_request_notification ()</h3>
934 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_set_handler_request_notification
935 (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
936 <p>
937 Indicate that <em class="parameter"><code>self</code></em> is a Handler willing to be notified about requests for
938 channels that it is likely to be asked to handle.
939 That means the TpBaseClient::request-added and TpBaseClient::request-removed:
940 signals will be fired and <a class="link" href="telepathy-glib-base-client.html#tp-base-client-get-pending-requests" title="tp_base_client_get_pending_requests ()"><code class="function">tp_base_client_get_pending_requests()</code></a> will
941 return the list of pending requests.
942 </p>
943 <p>
944 This method may only be called before <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> is
945 called, and may only be called on objects whose class has called
946 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" title="tp_base_client_implement_handle_channels ()"><code class="function">tp_base_client_implement_handle_channels()</code></a>.
947 </p>
948 <div class="variablelist"><table border="0">
949 <col align="left" valign="top">
950 <tbody><tr>
951 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
952 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
953 </td>
954 </tr></tbody>
955 </table></div>
956 <p class="since">Since 0.11.6</p>
957 </div>
958 <hr>
959 <div class="refsect2" title="tp_base_client_take_handler_filter ()">
960 <a name="tp-base-client-take-handler-filter"></a><h3>tp_base_client_take_handler_filter ()</h3>
961 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_take_handler_filter (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>,
962 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *filter</code></em>);</pre>
963 <p>
964 The same as <a class="link" href="telepathy-glib-base-client.html#tp-base-client-add-handler-filter" title="tp_base_client_add_handler_filter ()"><code class="function">tp_base_client_add_handler_filter()</code></a>, but ownership of <em class="parameter"><code>filter</code></em>
965 is taken by <em class="parameter"><code>self</code></em>. This makes it convenient to call using <a class="link" href="telepathy-glib-asv.html#tp-asv-new" title="tp_asv_new ()"><code class="function">tp_asv_new()</code></a>:
966 </p>
967 <p>
968 </p>
969 <div class="informalexample">
970 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
971 <tbody>
972 <tr>
973 <td class="listing_lines" align="right"><pre>1
974 2
975 3
976 4
977 5
978 6
979 7</pre></td>
980 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="telepathy-glib-base-client.html#tp-base-client-take-handler-filter">tp_base_client_take_handler_filter</a></span> <span class="symbol">(</span>client<span class="symbol">,</span>
981 <span class="function"><a href="telepathy-glib-asv.html#tp-asv-new">tp_asv_new</a></span> <span class="symbol">(</span>
982 TP_PROP_CHANNEL_CHANNEL_TYPE<span class="symbol">,</span> G_TYPE_STRING<span class="symbol">,</span>
983 TP_IFACE_CHANNEL_TYPE_TEXT<span class="symbol">,</span>
984 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE<span class="symbol">,</span> G_TYPE_UINT<span class="symbol">,</span>
985 TP_HANDLE_TYPE_CONTACT<span class="symbol">,</span>
986 <span class="symbol">...));</span></pre></td>
987 </tr>
988 </tbody>
989 </table>
990 </div>
991
992 <p>
993 </p>
994 <div class="variablelist"><table border="0">
995 <col align="left" valign="top">
996 <tbody>
997 <tr>
998 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
999 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1000 </td>
1001 </tr>
1002 <tr>
1003 <td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
1004 <td>
1005 a <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CLASS:CAPS" title="TP_HASH_TYPE_CHANNEL_CLASS"><code class="literal">TP_HASH_TYPE_CHANNEL_CLASS</code></a>, ownership of which is taken by <em class="parameter"><code>self</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
1006 </td>
1007 </tr>
1008 </tbody>
1009 </table></div>
1010 <p class="since">Since 0.11.6</p>
5291011 </div>
5301012 <hr>
5311013 <div class="refsect2" title="tp_base_client_register ()">
5631045 </tr>
5641046 </tbody>
5651047 </table></div>
566 <p class="since">Since 0.11.UNRELEASED</p>
1048 <p class="since">Since 0.11.5</p>
1049 </div>
1050 <hr>
1051 <div class="refsect2" title="tp_base_client_unregister ()">
1052 <a name="tp-base-client-unregister"></a><h3>tp_base_client_unregister ()</h3>
1053 <pre class="programlisting"><span class="returnvalue">void</span> tp_base_client_unregister (<em class="parameter"><code><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self</code></em>);</pre>
1054 <p>
1055 Remove this client object from D-Bus, if <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a>
1056 has already been called.
1057 </p>
1058 <p>
1059 If the object is not registered, this method may be called, but has
1060 no effect.
1061 </p>
1062 <p>
1063 Releasing the last reference to the object also has the same effect
1064 as calling this method, but this method should be preferred, as it
1065 has more deterministic behaviour.
1066 </p>
1067 <p>
1068 If the object still exists, <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a> may be used to
1069 attempt to register it again.
1070 </p>
1071 <div class="variablelist"><table border="0">
1072 <col align="left" valign="top">
1073 <tbody><tr>
1074 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1075 <td>a client, which may already have been registered with
1076 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-register" title="tp_base_client_register ()"><code class="function">tp_base_client_register()</code></a>, or not
1077 </td>
1078 </tr></tbody>
1079 </table></div>
1080 <p class="since">Since 0.11.6</p>
5671081 </div>
5681082 <hr>
5691083 <div class="refsect2" title="tp_base_client_get_bus_name ()">
5901104 </tr>
5911105 </tbody>
5921106 </table></div>
593 <p class="since">Since 0.11.UNRELEASED</p>
1107 <p class="since">Since 0.11.5</p>
5941108 </div>
5951109 <hr>
5961110 <div class="refsect2" title="tp_base_client_get_object_path ()">
6171131 </tr>
6181132 </tbody>
6191133 </table></div>
620 <p class="since">Since 0.11.UNRELEASED</p>
1134 <p class="since">Since 0.11.5</p>
6211135 </div>
6221136 </div>
6231137 <div class="refsect1" title="Property Details">
6321146 <p>
6331147 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
6341148 </p>
635 <p class="since">Since 0.11.UNRELEASED</p>
1149 <p class="since">Since 0.11.5</p>
6361150 </div>
6371151 <hr>
6381152 <div class="refsect2" title='The "name" property'>
6461160 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
6471161 </p>
6481162 <p>Default value: NULL</p>
649 <p class="since">Since 0.11.UNRELEASED</p>
1163 <p class="since">Since 0.11.5</p>
6501164 </div>
6511165 <hr>
6521166 <div class="refsect2" title='The "uniquify-name" property'>
6571171 service bus name and object path to ensure they are unique.
6581172 </p>
6591173 <p>Default value: FALSE</p>
660 <p class="since">Since 0.11.UNRELEASED</p>
1174 <p class="since">Since 0.11.5</p>
1175 </div>
1176 </div>
1177 <div class="refsect1" title="Signal Details">
1178 <a name="telepathy-glib-base-client.signal-details"></a><h2>Signal Details</h2>
1179 <div class="refsect2" title='The "request-added" signal'>
1180 <a name="TpBaseClient-request-added"></a><h3>The <code class="literal">"request-added"</code> signal</h3>
1181 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self,
1182 <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account,
1183 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> *request,
1184 <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>
1185 <p>
1186 Emitted when a channels have been requested, and that if the
1187 request is successful, they will probably be handled by this Handler.
1188 </p>
1189 <p>
1190 This signal is only fired if
1191 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" title="tp_base_client_set_handler_request_notification ()"><code class="function">tp_base_client_set_handler_request_notification()</code></a> has been called
1192 on <em class="parameter"><code>self</code></em> previously.
1193 </p>
1194 <div class="variablelist"><table border="0">
1195 <col align="left" valign="top">
1196 <tbody>
1197 <tr>
1198 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1199 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1200 </td>
1201 </tr>
1202 <tr>
1203 <td><p><span class="term"><em class="parameter"><code>account</code></em> :</span></p></td>
1204 <td>the <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> on which the request was made
1205 having <a class="link" href="telepathy-glib-account.html#TP-ACCOUNT-FEATURE-CORE:CAPS" title="TP_ACCOUNT_FEATURE_CORE"><code class="literal">TP_ACCOUNT_FEATURE_CORE</code></a> prepared if possible
1206 </td>
1207 </tr>
1208 <tr>
1209 <td><p><span class="term"><em class="parameter"><code>request</code></em> :</span></p></td>
1210 <td>a <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> having its object-path defined but
1211 is not guaranteed to be prepared.
1212 </td>
1213 </tr>
1214 <tr>
1215 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1216 <td>user data set when the signal handler was connected.</td>
1217 </tr>
1218 </tbody>
1219 </table></div>
1220 <p class="since">Since 0.11.6</p>
1221 </div>
1222 <hr>
1223 <div class="refsect2" title='The "request-removed" signal'>
1224 <a name="TpBaseClient-request-removed"></a><h3>The <code class="literal">"request-removed"</code> signal</h3>
1225 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> *self,
1226 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> *request,
1227 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *error,
1228 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *message,
1229 <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>
1230 <p>
1231 Emitted when a request has failed and should be disregarded.
1232 </p>
1233 <p>
1234 This signal is only fired if
1235 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" title="tp_base_client_set_handler_request_notification ()"><code class="function">tp_base_client_set_handler_request_notification()</code></a> has been called
1236 on <em class="parameter"><code>self</code></em> previously.
1237 </p>
1238 <div class="variablelist"><table border="0">
1239 <col align="left" valign="top">
1240 <tbody>
1241 <tr>
1242 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1243 <td>a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>
1244 </td>
1245 </tr>
1246 <tr>
1247 <td><p><span class="term"><em class="parameter"><code>request</code></em> :</span></p></td>
1248 <td>the <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> being removed
1249 </td>
1250 </tr>
1251 <tr>
1252 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
1253 <td>the name of the D-Bus error with which the request failed.
1254 </td>
1255 </tr>
1256 <tr>
1257 <td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
1258 <td>any message supplied with the D-Bus error.
1259 </td>
1260 </tr>
1261 <tr>
1262 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1263 <td>user data set when the signal handler was connected.</td>
1264 </tr>
1265 </tbody>
1266 </table></div>
1267 <p class="since">Since 0.11.6</p>
6611268 </div>
6621269 </div>
6631270 </div>
6641271 <div class="footer">
6651272 <hr>
666 Generated by GTK-Doc V1.14</div>
1273 Generated by GTK-Doc V1.15</div>
6671274 </body>
6681275 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-contact.html" title="TpContact">
99 <link rel="next" href="telepathy-glib-connection-aliasing.html" title="Connection Aliasing interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
244244 </div>
245245 <div class="footer">
246246 <hr>
247 Generated by GTK-Doc V1.14</div>
247 Generated by GTK-Doc V1.15</div>
248248 </body>
249249 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-dispatcher.html" title="TpChannelDispatcher">
99 <link rel="next" href="telepathy-glib-channel-request.html" title="TpChannelRequest">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
7878 <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>,
7979 <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_Handler</code></em>,
8080 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with" title="tp_cli_channel_dispatch_operation_callback_for_handle_with ()"><span class="type">tp_cli_channel_dispatch_operation_callback_for_handle_with</span></a> callback</code></em>,
81 <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>,
82 <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>,
83 <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>);
84 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time" title="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()">*tp_cli_channel_dispatch_operation_callback_for_handle_with_time</a>)
85 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *proxy</code></em>,
86 <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>,
87 <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>,
88 <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>);
89 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with-time" title="tp_cli_channel_dispatch_operation_call_handle_with_time ()">tp_cli_channel_dispatch_operation_call_handle_with_time</a>
90 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *proxy</code></em>,
91 <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>,
92 <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_Handler</code></em>,
93 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> in_UserActionTime</code></em>,
94 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time" title="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()"><span class="type">tp_cli_channel_dispatch_operation_callback_for_handle_with_time</span></a> callback</code></em>,
8195 <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>,
8296 <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>,
8397 <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>);
525539 </table></div>
526540 </div>
527541 <hr>
542 <div class="refsect2" title="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()">
543 <a name="tp-cli-channel-dispatch-operation-callback-for-handle-with-time"></a><h3>tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()</h3>
544 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_dispatch_operation_callback_for_handle_with_time)
545 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *proxy</code></em>,
546 <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>,
547 <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>,
548 <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>
549 <p>
550 Signature of the callback called when a HandleWithTime method call
551 succeeds or fails.
552 </p>
553 <div class="variablelist"><table border="0">
554 <col align="left" valign="top">
555 <tbody>
556 <tr>
557 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
558 <td>the proxy on which the call was made
559 </td>
560 </tr>
561 <tr>
562 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
563 <td>
564 <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
565 </td>
566 </tr>
567 <tr>
568 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
569 <td>user-supplied data
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>user-supplied object
575 </td>
576 </tr>
577 </tbody>
578 </table></div>
579 </div>
580 <hr>
581 <div class="refsect2" title="tp_cli_channel_dispatch_operation_call_handle_with_time ()">
582 <a name="tp-cli-channel-dispatch-operation-call-handle-with-time"></a><h3>tp_cli_channel_dispatch_operation_call_handle_with_time ()</h3>
583 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_channel_dispatch_operation_call_handle_with_time
584 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *proxy</code></em>,
585 <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>,
586 <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_Handler</code></em>,
587 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> in_UserActionTime</code></em>,
588 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time" title="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()"><span class="type">tp_cli_channel_dispatch_operation_callback_for_handle_with_time</span></a> callback</code></em>,
589 <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>,
590 <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>,
591 <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>
592 <p>
593 Start a HandleWithTime method call.
594 </p>
595 <p>
596 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;A variant of &lt;tp:member-ref&gt;HandleWith&lt;/tp:member-ref&gt; allowing the approver to pass an user action time. This timestamp will be passed to the Handler when &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Client.Handler"&gt;HandleChannels&lt;/tp:dbus-ref&gt; is called.&lt;/p&gt;
597 </p>
598 <div class="variablelist"><table border="0">
599 <col align="left" valign="top">
600 <tbody>
601 <tr>
602 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
603 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
604 </td>
605 </tr>
606 <tr>
607 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
608 <td>the timeout in milliseconds, or -1 to use the
609 default
610 </td>
611 </tr>
612 <tr>
613 <td><p><span class="term"><em class="parameter"><code>in_Handler</code></em> :</span></p></td>
614 <td>Used to pass an 'in' argument: &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;The well-known bus name (starting with &lt;code&gt;org.freedesktop.Telepathy.Client.&lt;/code&gt;) of the channel handler that should handle the channel, or the empty string if the client has no preferred channel handler.&lt;/p&gt;
615 </td>
616 </tr>
617 <tr>
618 <td><p><span class="term"><em class="parameter"><code>in_UserActionTime</code></em> :</span></p></td>
619 <td>Used to pass an 'in' argument: &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;The time at which user action occurred.&lt;/p&gt;
620 </td>
621 </tr>
622 <tr>
623 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
624 <td>called when the method call succeeds or fails;
625 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
626 reply tracking
627 </td>
628 </tr>
629 <tr>
630 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
631 <td>user-supplied data passed to the callback;
632 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>
633 </td>
634 </tr>
635 <tr>
636 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
637 <td>called with the user_data as argument, after the
638 call has succeeded, failed or been cancelled;
639 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>
640 </td>
641 </tr>
642 <tr>
643 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
644 <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
645 weakly referenced; if it is destroyed, this call
646 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
647 <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>
648 </td>
649 </tr>
650 <tr>
651 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
652 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
653 progress. It is borrowed from the object, and will become
654 invalid when the callback is called, the call is
655 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
656 </td>
657 </tr>
658 </tbody>
659 </table></div>
660 </div>
661 <hr>
528662 <div class="refsect2" title="tp_cli_channel_dispatch_operation_signal_callback_channel_lost ()">
529663 <a name="tp-cli-channel-dispatch-operation-signal-callback-channel-lost"></a><h3>tp_cli_channel_dispatch_operation_signal_callback_channel_lost ()</h3>
530664 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_dispatch_operation_signal_callback_channel_lost)
769903 One can ask for a feature to be prepared using the
770904 <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.
771905 </p>
772 <p class="since">Since 0.11.UNRELEASED</p>
906 <p class="since">Since 0.11.5</p>
773907 </div>
774908 <hr>
775909 <div class="refsect2" title="tp_channel_dispatch_operation_borrow_account ()">
791925 </tr>
792926 <tr>
793927 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
794 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--account" title='The "account" property'><span class="type">"account"</span></a>
795 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
796 </tr>
797 </tbody>
798 </table></div>
799 <p class="since">Since 0.11.UNRELEASED</p>
928 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--account" title='The "account" property'><span class="type">"account"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
929 </td>
930 </tr>
931 </tbody>
932 </table></div>
933 <p class="since">Since 0.11.5</p>
800934 </div>
801935 <hr>
802936 <div class="refsect2" title="tp_channel_dispatch_operation_borrow_channels ()">
819953 </tr>
820954 <tr>
821955 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
822 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--channels" title='The "channels" property'><span class="type">"channels"</span></a>
823 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
824 </tr>
825 </tbody>
826 </table></div>
827 <p class="since">Since 0.11.UNRELEASED</p>
956 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--channels" title='The "channels" property'><span class="type">"channels"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
957 </td>
958 </tr>
959 </tbody>
960 </table></div>
961 <p class="since">Since 0.11.5</p>
828962 </div>
829963 <hr>
830964 <div class="refsect2" title="tp_channel_dispatch_operation_borrow_connection ()">
846980 </tr>
847981 <tr>
848982 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
849 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--connection" title='The "connection" property'><span class="type">"connection"</span></a>
850 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
851 </tr>
852 </tbody>
853 </table></div>
854 <p class="since">Since 0.11.UNRELEASED</p>
983 <td> the value of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--connection" title='The "connection" property'><span class="type">"connection"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
984 </td>
985 </tr>
986 </tbody>
987 </table></div>
988 <p class="since">Since 0.11.5</p>
855989 </div>
856990 <hr>
857991 <div class="refsect2" title="tp_channel_dispatch_operation_borrow_immutable_properties ()">
8741008 <tr>
8751009 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
8761010 <td> the value of
877 <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--cdo-properties" title='The "cdo-properties" property'><span class="type">"cdo-properties"</span></a>
878 . <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. </td>
879 </tr>
880 </tbody>
881 </table></div>
882 <p class="since">Since 0.11.UNRELEASED</p>
1011 <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--cdo-properties" title='The "cdo-properties" property'><span class="type">"cdo-properties"</span></a>. <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>
1012 </td>
1013 </tr>
1014 </tbody>
1015 </table></div>
1016 <p class="since">Since 0.11.5</p>
8831017 </div>
8841018 <hr>
8851019 <div class="refsect2" title="tp_channel_dispatch_operation_borrow_possible_handlers ()">
9031037 <tr>
9041038 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
9051039 <td> the value of
906 <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--possible-handlers" title='The "possible-handlers" property'><span class="type">"possible-handlers"</span></a>
907 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
908 </tr>
909 </tbody>
910 </table></div>
911 <p class="since">Since 0.11.UNRELEASED</p>
1040 <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--possible-handlers" title='The "possible-handlers" property'><span class="type">"possible-handlers"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1041 </td>
1042 </tr>
1043 </tbody>
1044 </table></div>
1045 <p class="since">Since 0.11.5</p>
9121046 </div>
9131047 <hr>
9141048 <div class="refsect2" title="tp_channel_dispatch_operation_handle_with_async ()">
9671101 </tr>
9681102 </tbody>
9691103 </table></div>
970 <p class="since">Since 0.11.UNRELEASED</p>
1104 <p class="since">Since 0.11.5</p>
9711105 </div>
9721106 <hr>
9731107 <div class="refsect2" title="tp_channel_dispatch_operation_handle_with_finish ()">
10051139 </tr>
10061140 </tbody>
10071141 </table></div>
1008 <p class="since">Since 0.11.UNRELEASED</p>
1142 <p class="since">Since 0.11.5</p>
10091143 </div>
10101144 <hr>
10111145 <div class="refsect2" title="tp_channel_dispatch_operation_claim_async ()">
10501184 </tr>
10511185 </tbody>
10521186 </table></div>
1053 <p class="since">Since 0.11.UNRELEASED</p>
1187 <p class="since">Since 0.11.5</p>
10541188 </div>
10551189 <hr>
10561190 <div class="refsect2" title="tp_channel_dispatch_operation_claim_finish ()">
10881222 </tr>
10891223 </tbody>
10901224 </table></div>
1091 <p class="since">Since 0.11.UNRELEASED</p>
1225 <p class="since">Since 0.11.5</p>
10921226 </div>
10931227 </div>
10941228 <div class="refsect1" title="Property Details">
11061240 This is not guaranteed to be set until <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> has
11071241 finished preparing <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" title="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE"><code class="literal">TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE</code></a>.
11081242 </p>
1109 <p class="since">Since 0.11.UNRELEASED</p>
1243 <p class="since">Since 0.11.5</p>
11101244 </div>
11111245 <hr>
11121246 <div class="refsect2" title='The "cdo-properties" property'>
11231257 <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> has finished preparing
11241258 <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" title="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE"><code class="literal">TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE</code></a>.
11251259 </p>
1126 <p class="since">Since 0.11.UNRELEASED</p>
1260 <p class="since">Since 0.11.5</p>
11271261 </div>
11281262 <hr>
11291263 <div class="refsect2" title='The "channels" property'>
11391273 This is not guaranteed to be set until <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> has
11401274 finished preparing <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" title="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE"><code class="literal">TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE</code></a>.
11411275 </p>
1142 <p class="since">Since 0.11.UNRELEASED</p>
1276 <p class="since">Since 0.11.5</p>
11431277 </div>
11441278 <hr>
11451279 <div class="refsect2" title='The "connection" property'>
11551289 This is not guaranteed to be set until <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> has
11561290 finished preparing <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" title="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE"><code class="literal">TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE</code></a>.
11571291 </p>
1158 <p class="since">Since 0.11.UNRELEASED</p>
1292 <p class="since">Since 0.11.5</p>
11591293 </div>
11601294 <hr>
11611295 <div class="refsect2" title='The "possible-handlers" property'>
11731307 This is not guaranteed to be set until <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> has
11741308 finished preparing <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" title="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE"><code class="literal">TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE</code></a>.
11751309 </p>
1176 <p class="since">Since 0.11.UNRELEASED</p>
1310 <p class="since">Since 0.11.5</p>
11771311 </div>
11781312 </div>
11791313 <div class="refsect1" title="Signal Details">
12231357 </tr>
12241358 </tbody>
12251359 </table></div>
1226 <p class="since">Since 0.11.UNRELEASED</p>
1360 <p class="since">Since 0.11.5</p>
12271361 </div>
12281362 </div>
12291363 <div class="refsect1" title="See Also">
12331367 </div>
12341368 <div class="footer">
12351369 <hr>
1236 Generated by GTK-Doc V1.14</div>
1370 Generated by GTK-Doc V1.15</div>
12371371 </body>
12381372 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-account.html" title="TpAccount">
99 <link rel="next" href="telepathy-glib-channel-dispatch-operation.html" title="TpChannelDispatchOperation">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
697697 </div>
698698 <div class="footer">
699699 <hr>
700 Generated by GTK-Doc V1.14</div>
700 Generated by GTK-Doc V1.15</div>
701701 </body>
702702 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-media.html" title="Media channels">
99 <link rel="next" href="telepathy-glib-channel-tubes.html" title="Tubes channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
904904 </div>
905905 <div class="footer">
906906 <hr>
907 Generated by GTK-Doc V1.14</div>
907 Generated by GTK-Doc V1.15</div>
908908 </body>
909909 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel.html" title="TpChannel">
99 <link rel="next" href="telepathy-glib-channel-text.html" title="Text channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
30923092 </div>
30933093 <div class="footer">
30943094 <hr>
3095 Generated by GTK-Doc V1.14</div>
3095 Generated by GTK-Doc V1.15</div>
30963096 </body>
30973097 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-text.html" title="Text channels">
99 <link rel="next" href="telepathy-glib-channel-file-transfer.html" title="File transfer">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
263263 <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>,
264264 <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>,
265265 <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>);
266 <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * <a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-multiple-tones" title="tp_cli_channel_interface_dtmf_call_multiple_tones ()">tp_cli_channel_interface_dtmf_call_multiple_tones</a>
267 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
268 <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>,
269 <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_Tones</code></em>,
270 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones" title="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()"><span class="type">tp_cli_channel_interface_dtmf_callback_for_multiple_tones</span></a> callback</code></em>,
271 <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>,
272 <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>,
273 <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>);
274 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones" title="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()">*tp_cli_channel_interface_dtmf_callback_for_multiple_tones</a>)
275 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
276 <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>,
277 <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>,
278 <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>);
279 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-sending-tones" title="tp_cli_channel_interface_dtmf_connect_to_sending_tones ()">tp_cli_channel_interface_dtmf_connect_to_sending_tones</a>
280 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
281 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones" title="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()"><span class="type">tp_cli_channel_interface_dtmf_signal_callback_sending_tones</span></a> callback</code></em>,
282 <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>,
283 <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>,
284 <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>,
285 <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>);
286 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones" title="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()">*tp_cli_channel_interface_dtmf_signal_callback_sending_tones</a>)
287 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
288 <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_Tones</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>,
290 <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>);
291 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-stopped-tones" title="tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()">tp_cli_channel_interface_dtmf_connect_to_stopped_tones</a>
292 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
293 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones" title="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()"><span class="type">tp_cli_channel_interface_dtmf_signal_callback_stopped_tones</span></a> callback</code></em>,
294 <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>,
295 <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>,
296 <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>,
297 <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>);
298 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones" title="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()">*tp_cli_channel_interface_dtmf_signal_callback_stopped_tones</a>)
299 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
300 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg_Cancelled</code></em>,
301 <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>,
302 <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>);
266303
267304 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-callback-for-get-hold-state" title="tp_cli_channel_interface_hold_callback_for_get_hold_state ()">*tp_cli_channel_interface_hold_callback_for_get_hold_state</a>)
268305 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
20062043 state.
20072044 </p>
20082045 <p>
2009 Start sending a DTMF tone on this stream. Where possible, the tone will continue until &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt; is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation may emit a fixed-length tone, and the StopTone method call should return NotAvailable.
2046 &lt;p&gt;Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt; is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable.&lt;/p&gt; &lt;tp:rationale&gt; The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly. &lt;/tp:rationale&gt; &lt;p&gt;Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.&lt;/p&gt;
20102047 </p>
20112048 <div class="variablelist"><table border="0">
20122049 <col align="left" valign="top">
20232060 </tr>
20242061 <tr>
20252062 <td><p><span class="term"><em class="parameter"><code>in_Stream_ID</code></em> :</span></p></td>
2026 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type.
2063 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the tone SHOULD be sent to all eligible streams in the channel.
20272064 </td>
20282065 </tr>
20292066 <tr>
20752112 state.
20762113 </p>
20772114 <p>
2078 Stop sending any DTMF tone which has been started using the &lt;tp:member-ref&gt;StartTone&lt;/tp:member-ref&gt; method. If there is no current tone, this method will do nothing.
2115 Stop sending any DTMF tones which have been started using the &lt;tp:member-ref&gt;StartTone&lt;/tp:member-ref&gt; or &lt;tp:member-ref&gt;MultipleTones&lt;/tp:member-ref&gt; methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. &lt;tp:rationale&gt; On some protocols it might be impossible to cancel queued tones immediately. &lt;/tp:rationale&gt;
20792116 </p>
20802117 <div class="variablelist"><table border="0">
20812118 <col align="left" valign="top">
20922129 </tr>
20932130 <tr>
20942131 <td><p><span class="term"><em class="parameter"><code>in_Stream_ID</code></em> :</span></p></td>
2095 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type.
2132 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the sending SHOULD be stoped in all eligible streams in the channel.
20962133 </td>
20972134 </tr>
20982135 <tr>
21342171 Start a StartTone method call.
21352172 </p>
21362173 <p>
2137 Start sending a DTMF tone on this stream. Where possible, the tone will continue until &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt; is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation may emit a fixed-length tone, and the StopTone method call should return NotAvailable.
2174 &lt;p&gt;Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt; is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable.&lt;/p&gt; &lt;tp:rationale&gt; The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly. &lt;/tp:rationale&gt; &lt;p&gt;Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.&lt;/p&gt;
21382175 </p>
21392176 <div class="variablelist"><table border="0">
21402177 <col align="left" valign="top">
21522189 </tr>
21532190 <tr>
21542191 <td><p><span class="term"><em class="parameter"><code>in_Stream_ID</code></em> :</span></p></td>
2155 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type.
2192 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the tone SHOULD be sent to all eligible streams in the channel.
21562193 </td>
21572194 </tr>
21582195 <tr>
22142251 Start a StopTone method call.
22152252 </p>
22162253 <p>
2217 Stop sending any DTMF tone which has been started using the &lt;tp:member-ref&gt;StartTone&lt;/tp:member-ref&gt; method. If there is no current tone, this method will do nothing.
2254 Stop sending any DTMF tones which have been started using the &lt;tp:member-ref&gt;StartTone&lt;/tp:member-ref&gt; or &lt;tp:member-ref&gt;MultipleTones&lt;/tp:member-ref&gt; methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. &lt;tp:rationale&gt; On some protocols it might be impossible to cancel queued tones immediately. &lt;/tp:rationale&gt;
22182255 </p>
22192256 <div class="variablelist"><table border="0">
22202257 <col align="left" valign="top">
22322269 </tr>
22332270 <tr>
22342271 <td><p><span class="term"><em class="parameter"><code>in_Stream_ID</code></em> :</span></p></td>
2235 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type.
2272 <td>Used to pass an 'in' argument: A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the sending SHOULD be stoped in all eligible streams in the channel.
22362273 </td>
22372274 </tr>
22382275 <tr>
23472384 <tr>
23482385 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
23492386 <td>user-supplied object
2387 </td>
2388 </tr>
2389 </tbody>
2390 </table></div>
2391 </div>
2392 <hr>
2393 <div class="refsect2" title="tp_cli_channel_interface_dtmf_call_multiple_tones ()">
2394 <a name="tp-cli-channel-interface-dtmf-call-multiple-tones"></a><h3>tp_cli_channel_interface_dtmf_call_multiple_tones ()</h3>
2395 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="returnvalue">TpProxyPendingCall</span></a> * tp_cli_channel_interface_dtmf_call_multiple_tones
2396 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2397 <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>,
2398 <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_Tones</code></em>,
2399 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones" title="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()"><span class="type">tp_cli_channel_interface_dtmf_callback_for_multiple_tones</span></a> callback</code></em>,
2400 <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>,
2401 <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>,
2402 <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>
2403 <p>
2404 Start a MultipleTones method call.
2405 </p>
2406 <p>
2407 &lt;p&gt;Send multiple DTMF events to all eligible streams in the channel. Each character in the Tones string must be a valid DTMF event (as defined by &lt;a href="http://www.rfc-editor.org/rfc/rfc4733.txt"&gt;RFC4733&lt;/a&gt;). Each tone will be played for a pre-defined number of milliseconds, followed by a pause before the next tone is played. The duration/pause is defined by the protocol or connection manager.&lt;/p&gt; &lt;tp:rationale&gt; In cases where the client knows in advance the tone sequence it wants to send, it's easier to use this method than manually start and stop each tone in the sequence. &lt;/tp:rationale&gt; &lt;p&gt;Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.&lt;/p&gt;
2408 </p>
2409 <div class="variablelist"><table border="0">
2410 <col align="left" valign="top">
2411 <tbody>
2412 <tr>
2413 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2414 <td>the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a>
2415 </td>
2416 </tr>
2417 <tr>
2418 <td><p><span class="term"><em class="parameter"><code>timeout_ms</code></em> :</span></p></td>
2419 <td>the timeout in milliseconds, or -1 to use the
2420 default
2421 </td>
2422 </tr>
2423 <tr>
2424 <td><p><span class="term"><em class="parameter"><code>in_Tones</code></em> :</span></p></td>
2425 <td>Used to pass an 'in' argument: A string representation of one or more DTMF events.
2426 </td>
2427 </tr>
2428 <tr>
2429 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
2430 <td>called when the method call succeeds or fails;
2431 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
2432 reply tracking
2433 </td>
2434 </tr>
2435 <tr>
2436 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2437 <td>user-supplied data passed to the callback;
2438 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>
2439 </td>
2440 </tr>
2441 <tr>
2442 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
2443 <td>called with the user_data as argument, after the
2444 call has succeeded, failed or been cancelled;
2445 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>
2446 </td>
2447 </tr>
2448 <tr>
2449 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2450 <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
2451 weakly referenced; if it is destroyed, this call
2452 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
2453 <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>
2454 </td>
2455 </tr>
2456 <tr>
2457 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2458 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxyPendingCall" title="TpProxyPendingCall"><span class="type">TpProxyPendingCall</span></a> representing the call in
2459 progress. It is borrowed from the object, and will become
2460 invalid when the callback is called, the call is
2461 cancelled or the <a class="link" href="telepathy-glib-proxy.html#TpProxy"><span class="type">TpProxy</span></a> becomes invalid.
2462 </td>
2463 </tr>
2464 </tbody>
2465 </table></div>
2466 </div>
2467 <hr>
2468 <div class="refsect2" title="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()">
2469 <a name="tp-cli-channel-interface-dtmf-callback-for-multiple-tones"></a><h3>tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()</h3>
2470 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_interface_dtmf_callback_for_multiple_tones)
2471 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2472 <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>,
2473 <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>,
2474 <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>
2475 <p>
2476 Signature of the callback called when a MultipleTones method call
2477 succeeds or fails.
2478 </p>
2479 <div class="variablelist"><table border="0">
2480 <col align="left" valign="top">
2481 <tbody>
2482 <tr>
2483 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2484 <td>the proxy on which the call was made
2485 </td>
2486 </tr>
2487 <tr>
2488 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
2489 <td>
2490 <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
2491 </td>
2492 </tr>
2493 <tr>
2494 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2495 <td>user-supplied data
2496 </td>
2497 </tr>
2498 <tr>
2499 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2500 <td>user-supplied object
2501 </td>
2502 </tr>
2503 </tbody>
2504 </table></div>
2505 </div>
2506 <hr>
2507 <div class="refsect2" title="tp_cli_channel_interface_dtmf_connect_to_sending_tones ()">
2508 <a name="tp-cli-channel-interface-dtmf-connect-to-sending-tones"></a><h3>tp_cli_channel_interface_dtmf_connect_to_sending_tones ()</h3>
2509 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_channel_interface_dtmf_connect_to_sending_tones
2510 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2511 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones" title="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()"><span class="type">tp_cli_channel_interface_dtmf_signal_callback_sending_tones</span></a> callback</code></em>,
2512 <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>,
2513 <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>,
2514 <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>,
2515 <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>
2516 <p>
2517 Connect a handler to the signal SendingTones.
2518 </p>
2519 <p>
2520 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;DTMF tone(s)are being sent to all eligible streams in the channel. The signal is provided to indicating the fact that the streams are currently being used to send one or more DTMF tones, so any other media input is not getting through to the audio stream. It also serves as a cue for the &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt; method.&lt;/p&gt;
2521 </p>
2522 <div class="variablelist"><table border="0">
2523 <col align="left" valign="top">
2524 <tbody>
2525 <tr>
2526 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2527 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
2528 </td>
2529 </tr>
2530 <tr>
2531 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
2532 <td>Callback to be called when the signal is
2533 received
2534 </td>
2535 </tr>
2536 <tr>
2537 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2538 <td>User-supplied data for the callback
2539 </td>
2540 </tr>
2541 <tr>
2542 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
2543 <td>Destructor for the user-supplied data, which
2544 will be called when this signal is disconnected, or
2545 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
2546 </td>
2547 </tr>
2548 <tr>
2549 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2550 <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;
2551 if it is destroyed, this callback will automatically be
2552 disconnected
2553 </td>
2554 </tr>
2555 <tr>
2556 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
2557 <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
2558 returned
2559 </td>
2560 </tr>
2561 <tr>
2562 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2563 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
2564 above, which can be used to disconnect the signal; or
2565 <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
2566 or has become invalid.
2567 </td>
2568 </tr>
2569 </tbody>
2570 </table></div>
2571 </div>
2572 <hr>
2573 <div class="refsect2" title="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()">
2574 <a name="tp-cli-channel-interface-dtmf-signal-callback-sending-tones"></a><h3>tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()</h3>
2575 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_interface_dtmf_signal_callback_sending_tones)
2576 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2577 <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_Tones</code></em>,
2578 <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>,
2579 <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>
2580 <p>
2581 Represents the signature of a callback for the signal SendingTones.
2582 </p>
2583 <div class="variablelist"><table border="0">
2584 <col align="left" valign="top">
2585 <tbody>
2586 <tr>
2587 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2588 <td>The proxy on which <a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-sending-tones" title="tp_cli_channel_interface_dtmf_connect_to_sending_tones ()"><code class="function">tp_cli_channel_interface_dtmf_connect_to_sending_tones()</code></a>
2589 was called
2590 </td>
2591 </tr>
2592 <tr>
2593 <td><p><span class="term"><em class="parameter"><code>arg_Tones</code></em> :</span></p></td>
2594 <td>DTMF string (one or more events) that is to be played.
2595 </td>
2596 </tr>
2597 <tr>
2598 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2599 <td>User-supplied data
2600 </td>
2601 </tr>
2602 <tr>
2603 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2604 <td>User-supplied weakly referenced object
2605 </td>
2606 </tr>
2607 </tbody>
2608 </table></div>
2609 </div>
2610 <hr>
2611 <div class="refsect2" title="tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()">
2612 <a name="tp-cli-channel-interface-dtmf-connect-to-stopped-tones"></a><h3>tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()</h3>
2613 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_channel_interface_dtmf_connect_to_stopped_tones
2614 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2615 <em class="parameter"><code><a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones" title="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()"><span class="type">tp_cli_channel_interface_dtmf_signal_callback_stopped_tones</span></a> callback</code></em>,
2616 <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>,
2617 <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>,
2618 <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>,
2619 <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>
2620 <p>
2621 Connect a handler to the signal StoppedTones.
2622 </p>
2623 <p>
2624 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;DTMF tones have finished playing on streams in this channel.&lt;/p&gt;
2625 </p>
2626 <div class="variablelist"><table border="0">
2627 <col align="left" valign="top">
2628 <tbody>
2629 <tr>
2630 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2631 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
2632 </td>
2633 </tr>
2634 <tr>
2635 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
2636 <td>Callback to be called when the signal is
2637 received
2638 </td>
2639 </tr>
2640 <tr>
2641 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2642 <td>User-supplied data for the callback
2643 </td>
2644 </tr>
2645 <tr>
2646 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
2647 <td>Destructor for the user-supplied data, which
2648 will be called when this signal is disconnected, or
2649 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
2650 </td>
2651 </tr>
2652 <tr>
2653 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2654 <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;
2655 if it is destroyed, this callback will automatically be
2656 disconnected
2657 </td>
2658 </tr>
2659 <tr>
2660 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
2661 <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
2662 returned
2663 </td>
2664 </tr>
2665 <tr>
2666 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2667 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
2668 above, which can be used to disconnect the signal; or
2669 <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
2670 or has become invalid.
2671 </td>
2672 </tr>
2673 </tbody>
2674 </table></div>
2675 </div>
2676 <hr>
2677 <div class="refsect2" title="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()">
2678 <a name="tp-cli-channel-interface-dtmf-signal-callback-stopped-tones"></a><h3>tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()</h3>
2679 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_interface_dtmf_signal_callback_stopped_tones)
2680 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
2681 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg_Cancelled</code></em>,
2682 <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>,
2683 <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>
2684 <p>
2685 Represents the signature of a callback for the signal StoppedTones.
2686 </p>
2687 <div class="variablelist"><table border="0">
2688 <col align="left" valign="top">
2689 <tbody>
2690 <tr>
2691 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
2692 <td>The proxy on which <a class="link" href="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-stopped-tones" title="tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()"><code class="function">tp_cli_channel_interface_dtmf_connect_to_stopped_tones()</code></a>
2693 was called
2694 </td>
2695 </tr>
2696 <tr>
2697 <td><p><span class="term"><em class="parameter"><code>arg_Cancelled</code></em> :</span></p></td>
2698 <td>True if the DTMF tones were actively cancelled via &lt;tp:member-ref&gt;StopTone&lt;/tp:member-ref&gt;.
2699 </td>
2700 </tr>
2701 <tr>
2702 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
2703 <td>User-supplied data
2704 </td>
2705 </tr>
2706 <tr>
2707 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
2708 <td>User-supplied weakly referenced object
23502709 </td>
23512710 </tr>
23522711 </tbody>
31263485 </div>
31273486 <div class="footer">
31283487 <hr>
3129 Generated by GTK-Doc V1.14</div>
3488 Generated by GTK-Doc V1.15</div>
31303489 </body>
31313490 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-dispatch-operation.html" title="TpChannelDispatchOperation">
99 <link rel="next" href="telepathy-glib-client.html" title="TpClient">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
701701 </div>
702702 <div class="footer">
703703 <hr>
704 Generated by GTK-Doc V1.14</div>
704 Generated by GTK-Doc V1.15</div>
705705 </body>
706706 </html>
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">
99 <link rel="next" href="telepathy-glib-media-interfaces.html" title="TpMediaSessionHandler, TpMediaStreamHandler">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
853853 </div>
854854 <div class="footer">
855855 <hr>
856 Generated by GTK-Doc V1.14</div>
856 Generated by GTK-Doc V1.15</div>
857857 </body>
858858 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-group.html" title="Group interface on Channels">
99 <link rel="next" href="telepathy-glib-channel-media.html" title="Media channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
30783078 </div>
30793079 <div class="footer">
30803080 <hr>
3081 Generated by GTK-Doc V1.14</div>
3081 Generated by GTK-Doc V1.15</div>
30823082 </body>
30833083 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-tubes.html" title="Tubes channels">
99 <link rel="next" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15881588 </div>
15891589 <div class="footer">
15901590 <hr>
1591 Generated by GTK-Doc V1.14</div>
1591 Generated by GTK-Doc V1.15</div>
15921592 </body>
15931593 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-file-transfer.html" title="File transfer">
99 <link rel="next" href="telepathy-glib-channel-tube.html" title="Tube channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
31063106 </div>
31073107 <div class="footer">
31083108 <hr>
3109 Generated by GTK-Doc V1.14</div>
3109 Generated by GTK-Doc V1.15</div>
31103110 </body>
31113111 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-presence.html" title="Connection Presence interface">
99 <link rel="next" href="telepathy-glib-channel-group.html" title="Group interface on Channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
384384 the immutable properties of the channel,
385385 as signalled by the NewChannel D-Bus signal or returned by the
386386 CreateChannel and EnsureChannel D-Bus methods: a mapping from
387 strings (D-Bus interface name + "." + property name) to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> instances. <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. </td>
387 strings (D-Bus interface name + "." + property name) to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> instances. <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>
388 </td>
388389 </tr>
389390 <tr>
390391 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
632633 </tr>
633634 <tr>
634635 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
635 <td> the value of <a class="link" href="telepathy-glib-channel.html#TpChannel--connection" title='The "connection" property'><span class="type">"connection"</span></a>. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
636 <td> the value of <a class="link" href="telepathy-glib-channel.html#TpChannel--connection" title='The "connection" property'><span class="type">"connection"</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
637 </td>
636638 </tr>
637639 </tbody>
638640 </table></div>
674676 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
675677 where the keys are strings,
676678 D-Bus interface name + "." + property name, and the values are <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>
677 instances. <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. </td>
679 instances. <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>
680 </td>
678681 </tr>
679682 </tbody>
680683 </table></div>
772775 </tr>
773776 <tr>
774777 <td><p><span class="term"><em class="parameter"><code>handle_type</code></em> :</span></p></td>
775 <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 the type of this handle. <acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>. </td>
778 <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 the type of this handle. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
779 </td>
776780 </tr>
777781 <tr>
778782 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
24762480 </tr>
24772481 <tr>
24782482 <td><p><span class="term"><em class="parameter"><code>added</code></em> :</span></p></td>
2479 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the full
2480 members added. type GLib.Array</td>
2483 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a>
2484 containing the full members added. <span class="annotation">[type GLib.Array][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
2485 </td>
24812486 </tr>
24822487 <tr>
24832488 <td><p><span class="term"><em class="parameter"><code>removed</code></em> :</span></p></td>
2484 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the members
2485 (full, local-pending or remote-pending) removed. type GLib.Array</td>
2489 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a>
2490 containing the members (full, local-pending or remote-pending) removed. <span class="annotation">[type GLib.Array][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
2491 </td>
24862492 </tr>
24872493 <tr>
24882494 <td><p><span class="term"><em class="parameter"><code>local_pending</code></em> :</span></p></td>
2489 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the
2490 local-pending members added. type GLib.Array</td>
2495 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of
2496 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the local-pending members added. <span class="annotation">[type GLib.Array][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
2497 </td>
24912498 </tr>
24922499 <tr>
24932500 <td><p><span class="term"><em class="parameter"><code>remote_pending</code></em> :</span></p></td>
2494 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the
2495 remote-pending members added. type GLib.Array</td>
2501 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="type">GArray</span></a> of
2502 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> containing the remote-pending members added. <span class="annotation">[type GLib.Array][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
2503 </td>
24962504 </tr>
24972505 <tr>
24982506 <td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
24992507 <td>
25002508 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
25012509 about the change, as described in the specification of the
2502 MembersChangedDetailed signal.. type GLib.HashTable): (element-type utf8 GObject.Value</td>
2510 MembersChangedDetailed signal. <span class="annotation">[type GLib.HashTable): (element-type utf8 GObject.Value]</span>
2511 </td>
25032512 </tr>
25042513 <tr>
25052514 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
25172526 </div>
25182527 <div class="footer">
25192528 <hr>
2520 Generated by GTK-Doc V1.14</div>
2529 Generated by GTK-Doc V1.15</div>
25212530 </body>
25222531 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-request.html" title="TpChannelRequest">
99 <link rel="next" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
294294 </tr>
295295 <tr>
296296 <td><p><span class="term"><em class="parameter"><code>in_Observer_Info</code></em> :</span></p></td>
297 <td>Used to pass an 'in' argument: &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Additional information about these channels. Currently defined keys are:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;&lt;code&gt;recovering&lt;/code&gt; - b&lt;/dt&gt; &lt;dd&gt;True if ObserveChannels was called on existing channel due to observer recovery, otherwise False. &lt;tp:rationale&gt; This allows observers to distinguish between new channels (the normal case), and existing channels that were given to the observer in order to catch up on previous events (perhaps after a previous instance of the same observer crashed). &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;All defined keys for this dictionary are optional; observers MAY safely ignore any entry in this dictionary.&lt;/p&gt;
297 <td>Used to pass an 'in' argument: &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Additional information about these channels. Currently defined keys are:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;&lt;code&gt;recovering&lt;/code&gt; - b&lt;/dt&gt; &lt;dd&gt;&lt;code&gt;True&lt;/code&gt; if ObserveChannels was called for an existing channel (due to the &lt;tp:member-ref&gt;Recover&lt;/tp:member-ref&gt; property being &lt;code&gt;True&lt;/code&gt;); &lt;code&gt;False&lt;/code&gt; or omitted otherwise. &lt;tp:rationale&gt; This allows observers to distinguish between new channels (the normal case), and existing channels that were given to the observer in order to catch up on previous events (perhaps after a previous instance of the same observer crashed). &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;All defined keys for this dictionary are optional; observers MAY safely ignore any entry in this dictionary.&lt;/p&gt;
298298 </td>
299299 </tr>
300300 <tr>
433433 </tr>
434434 <tr>
435435 <td><p><span class="term"><em class="parameter"><code>in_User_Action_Time</code></em> :</span></p></td>
436 <td>Used to pass an 'in' argument: The time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers SHOULD use this for focus-stealing prevention, if applicable.
436 <td>Used to pass an 'in' argument: The time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers SHOULD use this for focus-stealing prevention, if applicable. This property has the same semantic as &lt;tp:type&gt;User_Action_Timestamp&lt;/tp:type&gt; but is unsigned for historical reasons.
437437 </td>
438438 </tr>
439439 <tr>
558558 </tr>
559559 <tr>
560560 <td><p><span class="term"><em class="parameter"><code>in_Properties</code></em> :</span></p></td>
561 <td>Used to pass an 'in' argument: &lt;p&gt;Some of the properties of the ChannelRequest. To avoid race conditions, this dictionary MUST NOT include properties whose values could subsequently change. It SHOULD include as many properties as possible, given that constraint.&lt;/p&gt; &lt;p&gt;In particular, the properties &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ChannelRequest"&gt;Requests&lt;/tp:dbus-ref&gt; and &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ChannelRequest"&gt;UserActionTime&lt;/tp:dbus-ref&gt; MUST be included.&lt;/p&gt;
561 <td>Used to pass an 'in' argument: &lt;p&gt;Some of the properties of the ChannelRequest. To avoid race conditions, this dictionary MUST NOT include properties whose values could subsequently change. It SHOULD include as many properties as possible, given that constraint.&lt;/p&gt; &lt;p&gt;In particular, the properties &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ChannelRequest"&gt;Requests&lt;/tp:dbus-ref&gt;, &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ChannelRequest"&gt;UserActionTime&lt;/tp:dbus-ref&gt; and &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.ChannelRequest"&gt;Account&lt;/tp:dbus-ref&gt; MUST be included.&lt;/p&gt;
562562 </td>
563563 </tr>
564564 <tr>
856856 </div>
857857 <div class="footer">
858858 <hr>
859 Generated by GTK-Doc V1.14</div>
859 Generated by GTK-Doc V1.15</div>
860860 </body>
861861 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-capabilities.html" title="TpCapabilities">
99 <link rel="next" href="telepathy-glib-connection-avatars.html" title="Connection Avatars interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
990990 </div>
991991 <div class="footer">
992992 <hr>
993 Generated by GTK-Doc V1.14</div>
993 Generated by GTK-Doc V1.15</div>
994994 </body>
995995 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-aliasing.html" title="Connection Aliasing interface">
99 <link rel="next" href="telepathy-glib-connection-balance.html" title="Connection Balance interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
18671867 </div>
18681868 <div class="footer">
18691869 <hr>
1870 Generated by GTK-Doc V1.14</div>
1870 Generated by GTK-Doc V1.15</div>
18711871 </body>
18721872 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-avatars.html" title="Connection Avatars interface">
99 <link rel="next" href="telepathy-glib-connection-contacts.html" title="Connection Contacts interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
178178 </div>
179179 <div class="footer">
180180 <hr>
181 Generated by GTK-Doc V1.14</div>
181 Generated by GTK-Doc V1.15</div>
182182 </body>
183183 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-contact-info.html" title="Connection ContactInfo interface">
99 <link rel="next" href="telepathy-glib-connection-location.html" title="Connection Location interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
838838 </div>
839839 <div class="footer">
840840 <hr>
841 Generated by GTK-Doc V1.14</div>
841 Generated by GTK-Doc V1.15</div>
842842 </body>
843843 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-contacts.html" title="Connection Contacts interface">
99 <link rel="next" href="telepathy-glib-connection-caps.html" title="Connection ContactCapabilities and Capabilities interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
10021002 </div>
10031003 <div class="footer">
10041004 <hr>
1005 Generated by GTK-Doc V1.14</div>
1005 Generated by GTK-Doc V1.15</div>
10061006 </body>
10071007 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-balance.html" title="Connection Balance interface">
99 <link rel="next" href="telepathy-glib-connection-contact-info.html" title="Connection ContactInfo interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
300300 </div>
301301 <div class="footer">
302302 <hr>
303 Generated by GTK-Doc V1.14</div>
303 Generated by GTK-Doc V1.15</div>
304304 </body>
305305 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-caps.html" title="Connection ContactCapabilities and Capabilities interfaces">
99 <link rel="next" href="telepathy-glib-connection-requests.html" title="Connection Requests interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
580580 </div>
581581 <div class="footer">
582582 <hr>
583 Generated by GTK-Doc V1.14</div>
583 Generated by GTK-Doc V1.15</div>
584584 </body>
585585 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="ch-client.html" title="Client-side proxies">
99 <link rel="next" href="telepathy-glib-connection.html" title="TpConnection">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
271271 <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager"><span class="type">TpConnectionManager</span></a> (the objects will
272272 be unreferenced and the array will be freed after the callback returns,
273273 so the callback must reference any CMs it stores a pointer to),
274 or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1. </td>
274 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="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
275 </td>
275276 </tr>
276277 <tr>
277278 <td><p><span class="term"><em class="parameter"><code>n_cms</code></em> :</span></p></td>
346347 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
347348 <td> if not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, will be weakly
348349 referenced; the callback will not be called, and the call will be
349 cancelled, if the object has vanished. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
350 cancelled, if the object has vanished. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
351 </td>
350352 </tr>
351353 </tbody>
352354 </table></div>
487489 <tr>
488490 <td><p><span class="term"><em class="parameter"><code>manager_filename</code></em> :</span></p></td>
489491 <td> The <a class="link" href="telepathy-glib-connection-manager.html#TpConnectionManager--manager-file" title='The "manager-file" property'><span class="type">"manager-file"</span></a>
490 property, which may (and generally should) be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
492 property, which may (and generally should) be <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="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
493 </td>
491494 </tr>
492495 <tr>
493496 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
694697 supported protocols.
695698 </p>
696699 <p>
697 Since 0.11.UNRELEASED, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
700 Since 0.11.5, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
698701 <a class="link" href="telepathy-glib-connection-manager.html#TP-TYPE-CM-INFO-SOURCE:CAPS" title="TP_TYPE_CM_INFO_SOURCE"><code class="literal">TP_TYPE_CM_INFO_SOURCE</code></a>.
699702 </p>
700703 <div class="variablelist"><table border="0">
727730 <p>
728731 The <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type of a <a class="link" href="telepathy-glib-connection-manager.html#TpCMInfoSource" title="enum TpCMInfoSource"><span class="type">TpCMInfoSource</span></a>.
729732 </p>
730 <p class="since">Since 0.11.UNRELEASED</p>
733 <p class="since">Since 0.11.5</p>
731734 </div>
732735 <hr>
733736 <div class="refsect2" title="tp_connection_manager_get_info_source ()">
860863 </tr>
861864 <tr>
862865 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
863 <td> a <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> of protocol names. type GObject.Strv<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. </td>
866 <td> a <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> of protocol names. <span class="annotation">[type GObject.Strv][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
867 </td>
864868 </tr>
865869 </tbody>
866870 </table></div>
938942 </tr>
939943 <tr>
940944 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
941 <td> a structure representing the protocol. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
945 <td> a structure representing the protocol. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
946 </td>
942947 </tr>
943948 </tbody>
944949 </table></div>
10231028 </tr>
10241029 <tr>
10251030 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1026 <td> a <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> of protocol names. type GObject.Strv<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. </td>
1031 <td> a <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> of protocol names. <span class="annotation">[type GObject.Strv][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
1032 </td>
10271033 </tr>
10281034 </tbody>
10291035 </table></div>
23392345 </div>
23402346 <div class="footer">
23412347 <hr>
2342 Generated by GTK-Doc V1.14</div>
2348 Generated by GTK-Doc V1.15</div>
23432349 </body>
23442350 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-simple-presence.html" title="Connection SimplePresence interface">
99 <link rel="next" href="telepathy-glib-channel.html" title="TpChannel">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
17691769 </div>
17701770 <div class="footer">
17711771 <hr>
1772 Generated by GTK-Doc V1.14</div>
1772 Generated by GTK-Doc V1.15</div>
17731773 </body>
17741774 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-location.html" title="Connection Location interface">
99 <link rel="next" href="telepathy-glib-connection-simple-presence.html" title="Connection SimplePresence interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
758758 </div>
759759 <div class="footer">
760760 <hr>
761 Generated by GTK-Doc V1.14</div>
761 Generated by GTK-Doc V1.15</div>
762762 </body>
763763 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-requests.html" title="Connection Requests interface">
99 <link rel="next" href="telepathy-glib-connection-presence.html" title="Connection Presence interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
601601 </div>
602602 <div class="footer">
603603 <hr>
604 Generated by GTK-Doc V1.14</div>
604 Generated by GTK-Doc V1.15</div>
605605 </body>
606606 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection-manager.html" title="TpConnectionManager">
99 <link rel="next" href="telepathy-glib-contact.html" title="TpContact">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
503503 <tr>
504504 <td><p><span class="term"><em class="parameter"><code>names</code></em> :</span></p></td>
505505 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of <em class="parameter"><code>n</code></em>
506 connection bus names, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1. </td>
506 connection bus names, 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="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
507 </td>
507508 </tr>
508509 <tr>
509510 <td><p><span class="term"><em class="parameter"><code>n</code></em> :</span></p></td>
514515 <td><p><span class="term"><em class="parameter"><code>cms</code></em> :</span></p></td>
515516 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of <em class="parameter"><code>n</code></em>
516517 connection manager names (e.g. "gabble") in the same order as <em class="parameter"><code>names</code></em>, or
517 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1. </td>
518 <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="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
519 </td>
518520 </tr>
519521 <tr>
520522 <td><p><span class="term"><em class="parameter"><code>protocols</code></em> :</span></p></td>
521523 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of
522524 <em class="parameter"><code>n</code></em> protocol names as defined in the Telepathy spec (e.g. "jabber") in the
523 same order as <em class="parameter"><code>names</code></em>, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1. </td>
525 same order as <em class="parameter"><code>names</code></em>, 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="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
526 </td>
524527 </tr>
525528 <tr>
526529 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
589592 <tr>
590593 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
591594 <td> if not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, will be weakly referenced; the callback will
592 not be called if the object has vanished. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
595 not be called if the object has vanished. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
596 </td>
593597 </tr>
594598 </tbody>
595599 </table></div>
657661 <td> the well-known or unique name of the connection
658662 process; if well-known, this function will make a blocking call to the bus
659663 daemon to resolve the unique name. May 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>object_path</code></em> is not, in
660 which case a well-known name will be derived from <em class="parameter"><code>object_path</code></em>.. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
664 which case a well-known name will be derived from <em class="parameter"><code>object_path</code></em>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
665 </td>
661666 </tr>
662667 <tr>
663668 <td><p><span class="term"><em class="parameter"><code>object_path</code></em> :</span></p></td>
664669 <td> the object path of the connection process.
665670 May 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>bus_name</code></em> is a well-known name, in which case the object
666 path will be derived from <em class="parameter"><code>bus_name</code></em>.. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
671 path will be derived from <em class="parameter"><code>bus_name</code></em>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
672 </td>
667673 </tr>
668674 <tr>
669675 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
991997 </tr>
992998 <tr>
993999 <td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
994 <td> a TpConnectionStatusReason, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>. </td>
1000 <td> a TpConnectionStatusReason, 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="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
1001 </td>
9951002 </tr>
9961003 <tr>
9971004 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
10861093 </tr>
10871094 <tr>
10881095 <td><p><span class="term"><em class="parameter"><code>handles</code></em> :</span></p></td>
1089 <td> the <em class="parameter"><code>n_handles</code></em> handles corresponding to
1090 <em class="parameter"><code>ids</code></em>, in the same order, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles. </td>
1096 <td> the <em class="parameter"><code>n_handles</code></em>
1097 handles corresponding to <em class="parameter"><code>ids</code></em>, in the same order, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles]</span>
1098 </td>
10911099 </tr>
10921100 <tr>
10931101 <td><p><span class="term"><em class="parameter"><code>ids</code></em> :</span></p></td>
11571165 <tr>
11581166 <td><p><span class="term"><em class="parameter"><code>ids</code></em> :</span></p></td>
11591167 <td> an array of string identifiers for which
1160 handles are required, terminated by <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (must not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or empty). <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1. </td>
1168 handles are required, terminated by <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (must not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or empty). <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span>
1169 </td>
11611170 </tr>
11621171 <tr>
11631172 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
13151324 </tr>
13161325 <tr>
13171326 <td><p><span class="term"><em class="parameter"><code>handles</code></em> :</span></p></td>
1318 <td> an array of handles. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles. </td>
1327 <td> an array of handles. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles]</span>
1328 </td>
13191329 </tr>
13201330 <tr>
13211331 <td><p><span class="term"><em class="parameter"><code>interfaces</code></em> :</span></p></td>
13301340 <tr>
13311341 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
13321342 <td> called on success or
1333 failure (unless <em class="parameter"><code>weak_object</code></em> has become unreferenced). type GObject.Callback</td>
1343 failure (unless <em class="parameter"><code>weak_object</code></em> has become unreferenced). <span class="annotation">[type GObject.Callback]</span>
1344 </td>
13341345 </tr>
13351346 <tr>
13361347 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
14041415 </tr>
14051416 <tr>
14061417 <td><p><span class="term"><em class="parameter"><code>handles</code></em> :</span></p></td>
1407 <td> an array of handles. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles. </td>
1418 <td> an array of handles. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles]</span>
1419 </td>
14081420 </tr>
14091421 <tr>
14101422 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
14791491 </tr>
14801492 <tr>
14811493 <td><p><span class="term"><em class="parameter"><code>handles</code></em> :</span></p></td>
1482 <td> an array of <em class="parameter"><code>n_handles</code></em> handles. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles. </td>
1494 <td> an array of <em class="parameter"><code>n_handles</code></em> handles. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles]</span>
1495 </td>
14831496 </tr>
14841497 </tbody>
14851498 </table></div>
15571570 <tr>
15581571 <td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
15591572 <td> If not NULL, used to return the protocol
1560 of the connection. <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>. </td>
1573 of the connection. <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>
1574 </td>
15611575 </tr>
15621576 <tr>
15631577 <td><p><span class="term"><em class="parameter"><code>cm_name</code></em> :</span></p></td>
15641578 <td> If not NULL, used to return the connection
1565 manager name of the connection. <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>. </td>
1579 manager name of the connection. <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>
1580 </td>
15661581 </tr>
15671582 <tr>
15681583 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
16231638 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
16241639 <td> a <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> struct, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
16251640 feature is not yet prepared or the connection doesn't have the necessary
1626 properties.. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
1641 properties. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1642 </td>
16271643 </tr>
16281644 </tbody>
16291645 </table></div>
16841700 <td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
16851701 <td>
16861702 optionally used to return 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
1687 modified or destroyed by the caller. <acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value. </td>
1703 modified or destroyed by the caller. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value]</span>
1704 </td>
16881705 </tr>
16891706 <tr>
16901707 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1691 <td> a D-Bus error name, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
1692 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
1708 <td> a D-Bus error name, 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>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1709 </td>
16931710 </tr>
16941711 </tbody>
16951712 </table></div>
46874704 </div>
46884705 <div class="footer">
46894706 <hr>
4690 Generated by GTK-Doc V1.14</div>
4707 Generated by GTK-Doc V1.15</div>
46914708 </body>
46924709 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-connection.html" title="TpConnection">
99 <link rel="next" href="telepathy-glib-capabilities.html" title="TpCapabilities">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
9898 <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>);
9999 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-contact.html#tp-contact-get-alias" title="tp_contact_get_alias ()">tp_contact_get_alias</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
100100 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-contact.html#tp-contact-get-avatar-token" title="tp_contact_get_avatar_token ()">tp_contact_get_avatar_token</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
101 <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="returnvalue">GFile</span></a> * <a class="link" href="telepathy-glib-contact.html#tp-contact-get-avatar-file" title="tp_contact_get_avatar_file ()">tp_contact_get_avatar_file</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
102 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-contact.html#tp-contact-get-avatar-mime-type" title="tp_contact_get_avatar_mime_type ()">tp_contact_get_avatar_mime_type</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
101103 <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="returnvalue">TpConnection</span></a> * <a class="link" href="telepathy-glib-contact.html#tp-contact-get-connection" title="tp_contact_get_connection ()">tp_contact_get_connection</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
102104 <a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="returnvalue">TpHandle</span></a> <a class="link" href="telepathy-glib-contact.html#tp-contact-get-handle" title="tp_contact_get_handle ()">tp_contact_get_handle</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
103105 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-contact.html#tp-contact-get-identifier" title="tp_contact_get_identifier ()">tp_contact_get_identifier</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
121123 <a name="telepathy-glib-contact.properties"></a><h2>Properties</h2>
122124 <pre class="synopsis">
123125 "<a class="link" href="telepathy-glib-contact.html#TpContact--alias" title='The "alias" property'>alias</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
126 "<a class="link" href="telepathy-glib-contact.html#TpContact--avatar-file" title='The "avatar-file" property'>avatar-file</a>" <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="type">GFile</span></a>* : Read
127 "<a class="link" href="telepathy-glib-contact.html#TpContact--avatar-mime-type" title='The "avatar-mime-type" property'>avatar-mime-type</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
124128 "<a class="link" href="telepathy-glib-contact.html#TpContact--avatar-token" title='The "avatar-token" property'>avatar-token</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
125129 "<a class="link" href="telepathy-glib-contact.html#TpContact--capabilities" title='The "capabilities" property'>capabilities</a>" <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="type">TpCapabilities</span></a>* : Read
126130 "<a class="link" href="telepathy-glib-contact.html#TpContact--connection" title='The "connection" property'>connection</a>" <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>* : Read
179183 TP_CONTACT_FEATURE_PRESENCE,
180184 TP_CONTACT_FEATURE_LOCATION,
181185 TP_CONTACT_FEATURE_CAPABILITIES,
182 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_CAPABILITIES + 1)
186 TP_CONTACT_FEATURE_AVATAR_DATA,
187 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_AVATAR_DATA + 1)
183188 } TpContactFeature;
184189 </pre>
185190 <p>
189194 avoid unwanted D-Bus round-trips and signal connections.
190195 </p>
191196 <p>
192 Since 0.11.UNRELEASED, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
197 Since 0.11.5, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
193198 <a class="link" href="telepathy-glib-contact.html#TP-TYPE-CONTACT-FEATURE:CAPS" title="TP_TYPE_CONTACT_FEATURE"><code class="literal">TP_TYPE_CONTACT_FEATURE</code></a>.
194199 </p>
195200 <div class="variablelist"><table border="0">
227232 (available since 0.11.3)
228233 </td>
229234 </tr>
235 <tr>
236 <td><p><a name="TP-CONTACT-FEATURE-AVATAR-DATA:CAPS"></a><span class="term"><code class="literal">TP_CONTACT_FEATURE_AVATAR_DATA</code></span></p></td>
237 <td>
238 <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-file" title='The "avatar-file" property'><span class="type">"avatar-file"</span></a> and
239 <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-mime-type" title='The "avatar-mime-type" property'><span class="type">"avatar-mime-type"</span></a>. Implies <a class="link" href="telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-TOKEN:CAPS"><code class="literal">TP_CONTACT_FEATURE_AVATAR_TOKEN</code></a>
240 (available since 0.11.6)
241 </td>
242 </tr>
230243 </tbody>
231244 </table></div>
232245 <p class="since">Since 0.7.18</p>
239252 <p>
240253 The <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type of a <a class="link" href="telepathy-glib-contact.html#TpContactFeature" title="enum TpContactFeature"><span class="type">TpContactFeature</span></a>.
241254 </p>
242 <p class="since">Since 0.11.UNRELEASED</p>
255 <p class="since">Since 0.11.5</p>
243256 </div>
244257 <hr>
245258 <div class="refsect2" title="TpConnectionContactsByHandleCb ()">
288301 <td> An array of <em class="parameter"><code>n_contacts</code></em> TpContact
289302 objects (this callback is not given a reference to any of these objects,
290303 and must call <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> on any that it will keep), or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on
291 unrecoverable errors. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts. </td>
304 unrecoverable errors. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts]</span>
305 </td>
292306 </tr>
293307 <tr>
294308 <td><p><span class="term"><em class="parameter"><code>n_failed</code></em> :</span></p></td>
301315 <td><p><span class="term"><em class="parameter"><code>failed</code></em> :</span></p></td>
302316 <td> An array of <em class="parameter"><code>n_failed</code></em> handles that were
303317 passed to <a class="link" href="telepathy-glib-contact.html#tp-connection-get-contacts-by-handle" title="tp_connection_get_contacts_by_handle ()"><code class="function">tp_connection_get_contacts_by_handle()</code></a> but turned out to be
304 invalid (or on unrecoverable errors, all the handles that were given). <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_failed. </td>
318 invalid (or on unrecoverable errors, all the handles that were given). <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_failed]</span>
319 </td>
305320 </tr>
306321 <tr>
307322 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
367382 <tr>
368383 <td><p><span class="term"><em class="parameter"><code>handles</code></em> :</span></p></td>
369384 <td> An array of handles
370 of type <a class="link" href="telepathy-glib-enums.html#TP-HANDLE-TYPE-CONTACT:CAPS"><code class="literal">TP_HANDLE_TYPE_CONTACT</code></a> representing the desired contacts. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint. </td>
385 of type <a class="link" href="telepathy-glib-enums.html#TP-HANDLE-TYPE-CONTACT:CAPS"><code class="literal">TP_HANDLE_TYPE_CONTACT</code></a> representing the desired contacts. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_handles][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
386 </td>
371387 </tr>
372388 <tr>
373389 <td><p><span class="term"><em class="parameter"><code>n_features</code></em> :</span></p></td>
378394 <td><p><span class="term"><em class="parameter"><code>features</code></em> :</span></p></td>
379395 <td> An array of features that
380396 must be ready for use (if supported) before the callback is called (may
381 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>n_features</code></em> is 0). <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> length=n_features. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint. </td>
397 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>n_features</code></em> is 0). <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> length=n_features][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint]</span>
398 </td>
382399 </tr>
383400 <tr>
384401 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
400417 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
401418 <td> An object to pass to the callback, which will be
402419 weakly referenced; if this object is destroyed, the operation will be
403 cancelled. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
420 cancelled. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
421 </td>
404422 </tr>
405423 </tbody>
406424 </table></div>
463481 <td> An array of <em class="parameter"><code>n_contacts</code></em> TpContact
464482 objects (this callback is
465483 not given a reference to any of these objects, and must call
466 <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> on any that it will keep), or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on unrecoverable errors. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts. </td>
484 <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> on any that it will keep), or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on unrecoverable errors. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts]</span>
485 </td>
467486 </tr>
468487 <tr>
469488 <td><p><span class="term"><em class="parameter"><code>requested_ids</code></em> :</span></p></td>
470489 <td> An array of <em class="parameter"><code>n_contacts</code></em> valid IDs
471490 (JIDs, SIP URIs etc.)
472491 that were passed to <a class="link" href="telepathy-glib-contact.html#tp-connection-get-contacts-by-id" title="tp_connection_get_contacts_by_id ()"><code class="function">tp_connection_get_contacts_by_id()</code></a>, in an order
473 corresponding to <em class="parameter"><code>contacts</code></em>, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on unrecoverable errors. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts. </td>
492 corresponding to <em class="parameter"><code>contacts</code></em>, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on unrecoverable errors. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts]</span>
493 </td>
474494 </tr>
475495 <tr>
476496 <td><p><span class="term"><em class="parameter"><code>failed_id_errors</code></em> :</span></p></td>
477497 <td> A hash table in which
478 the keys are IDs and the values are errors (<a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>). <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.Error. </td>
498 the keys are IDs and the values are errors (<a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>). <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.Error]</span>
499 </td>
479500 </tr>
480501 <tr>
481502 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
542563 <td> An array of strings representing
543564 the desired contacts by their
544565 identifiers in the IM protocol (XMPP JIDs, SIP URIs, MSN Passports,
545 AOL screen-names etc.). <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_ids. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> length=n_ids. </td>
566 AOL screen-names etc.). <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_ids][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> length=n_ids]</span>
567 </td>
546568 </tr>
547569 <tr>
548570 <td><p><span class="term"><em class="parameter"><code>n_features</code></em> :</span></p></td>
553575 <td><p><span class="term"><em class="parameter"><code>features</code></em> :</span></p></td>
554576 <td> An array of features
555577 that must be ready for use (if supported)
556 before the callback is called (may 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>n_features</code></em> is 0). <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> length=n_features. </td>
578 before the callback is called (may 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>n_features</code></em> is 0). <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> length=n_features]</span>
579 </td>
557580 </tr>
558581 <tr>
559582 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
575598 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
576599 <td> An object to pass to the callback, which will
577600 be weakly referenced; if this object is destroyed, the operation will be
578 cancelled. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
601 cancelled. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
602 </td>
579603 </tr>
580604 </tbody>
581605 </table></div>
681705 <tr>
682706 <td><p><span class="term"><em class="parameter"><code>contacts</code></em> :</span></p></td>
683707 <td> An array of <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> objects
684 associated with <em class="parameter"><code>self</code></em>. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts. </td>
708 associated with <em class="parameter"><code>self</code></em>. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_contacts]</span>
709 </td>
685710 </tr>
686711 <tr>
687712 <td><p><span class="term"><em class="parameter"><code>n_features</code></em> :</span></p></td>
691716 <tr>
692717 <td><p><span class="term"><em class="parameter"><code>features</code></em> :</span></p></td>
693718 <td> An array of features that must be
694 ready for use (if supported) before the callback is called. <acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features. </td>
719 ready for use (if supported) before the callback is called. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_features]</span>
720 </td>
695721 </tr>
696722 <tr>
697723 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
713739 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
714740 <td> An object to pass to the callback, which will be
715741 weakly referenced; if this object is destroyed, the operation will be
716 cancelled. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
742 cancelled. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
743 </td>
717744 </tr>
718745 </tbody>
719746 </table></div>
775802 <p class="since">Since 0.7.18</p>
776803 </div>
777804 <hr>
805 <div class="refsect2" title="tp_contact_get_avatar_file ()">
806 <a name="tp-contact-get-avatar-file"></a><h3>tp_contact_get_avatar_file ()</h3>
807 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="returnvalue">GFile</span></a> * tp_contact_get_avatar_file (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);</pre>
808 <p>
809 Return the contact's avatar file. This remains valid until the main loop
810 is re-entered; if the caller requires a <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="type">GFile</span></a> that will persist for
811 longer than that, it must be reffed 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>.
812 </p>
813 <div class="variablelist"><table border="0">
814 <col align="left" valign="top">
815 <tbody>
816 <tr>
817 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
818 <td>a contact
819 </td>
820 </tr>
821 <tr>
822 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
823 <td> the same <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="type">GFile</span></a> as the <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-file" title='The "avatar-file" property'><span class="type">"avatar-file"</span></a> property
824 (possibly <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>
825 </td>
826 </tr>
827 </tbody>
828 </table></div>
829 <p class="since">Since 0.11.6</p>
830 </div>
831 <hr>
832 <div class="refsect2" title="tp_contact_get_avatar_mime_type ()">
833 <a name="tp-contact-get-avatar-mime-type"></a><h3>tp_contact_get_avatar_mime_type ()</h3>
834 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_contact_get_avatar_mime_type (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);</pre>
835 <p>
836 Return the contact's avatar MIME type. This remains valid until the main loop
837 is re-entered; if the caller requires a string that will persist for
838 longer than that, it must be copied with <a href="/usr/share/gtk-doc/html/glib/glib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a>.
839 </p>
840 <div class="variablelist"><table border="0">
841 <col align="left" valign="top">
842 <tbody>
843 <tr>
844 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
845 <td>a contact
846 </td>
847 </tr>
848 <tr>
849 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
850 <td> the same MIME type as the <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-mime-type" title='The "avatar-mime-type" property'><span class="type">"avatar-mime-type"</span></a> property
851 (possibly <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>)
852
853 </td>
854 </tr>
855 </tbody>
856 </table></div>
857 <p class="since">Since 0.11.6</p>
858 </div>
859 <hr>
778860 <div class="refsect2" title="tp_contact_get_connection ()">
779861 <a name="tp-contact-get-connection"></a><h3>tp_contact_get_connection ()</h3>
780862 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="returnvalue">TpConnection</span></a> * tp_contact_get_connection (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);</pre>
793875 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
794876 <td> a borrowed reference to the <a class="link" href="telepathy-glib-contact.html#TpContact--connection" title='The "connection" property'><span class="type">"connection"</span></a>
795877 (it must be referenced with g_object_ref if it must remain valid
796 longer than the contact)
797 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
878 longer than the contact). <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
879 </td>
798880 </tr>
799881 </tbody>
800882 </table></div>
9721054 <tr>
9731055 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
9741056 <td> the same
975 <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> (or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>) as the <a class="link" href="telepathy-glib-contact.html#TpContact--location" title='The "location" property'><span class="type">"location"</span></a> property
976 . <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value. <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value. </td>
1057 <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> (or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>) as the <a class="link" href="telepathy-glib-contact.html#TpContact--location" title='The "location" property'><span class="type">"location"</span></a> property. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym> utf8 GObject.Value]</span>
1058 </td>
9771059 </tr>
9781060 </tbody>
9791061 </table></div>
10591141 <p>Default value: NULL</p>
10601142 </div>
10611143 <hr>
1144 <div class="refsect2" title='The "avatar-file" property'>
1145 <a name="TpContact--avatar-file"></a><h3>The <code class="literal">"avatar-file"</code> property</h3>
1146 <pre class="programlisting"> "avatar-file" <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="type">GFile</span></a>* : Read</pre>
1147 <p>
1148 <a href="/usr/share/gtk-doc/html/gio/GFile.html"><span class="type">GFile</span></a> to the latest cached avatar image, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this contact has
1149 no avatar, or if the avatar data is not yet retrieved.
1150 </p>
1151 <p>
1152 When <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-token" title='The "avatar-token" property'><span class="type">"avatar-token"</span></a> changes, this property is not updated
1153 immediately, but will be updated when the new avatar data is retrieved and
1154 stored in cache. Until then, the file will keep its old value of the latest
1155 cached avatar image.
1156 </p>
1157 <p>
1158 This is set to <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-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS"><code class="literal">TP_CONTACT_FEATURE_AVATAR_DATA</code></a> is not set on this
1159 contact. Note that setting <a class="link" href="telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS"><code class="literal">TP_CONTACT_FEATURE_AVATAR_DATA</code></a> will also
1160 implicitly set <a class="link" href="telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-TOKEN:CAPS"><code class="literal">TP_CONTACT_FEATURE_AVATAR_TOKEN</code></a>.
1161 </p>
1162 <p class="since">Since 0.11.6</p>
1163 </div>
1164 <hr>
1165 <div class="refsect2" title='The "avatar-mime-type" property'>
1166 <a name="TpContact--avatar-mime-type"></a><h3>The <code class="literal">"avatar-mime-type"</code> property</h3>
1167 <pre class="programlisting"> "avatar-mime-type" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
1168 <p>
1169 MIME type of the latest cached avatar image, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this contact has
1170 no avatar, or if the avatar data is not yet retrieved.
1171 </p>
1172 <p>
1173 This is always the MIME type of the image given by <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-file" title='The "avatar-file" property'><span class="type">"avatar-file"</span></a>.
1174 </p>
1175 <p>Default value: NULL</p>
1176 <p class="since">Since 0.11.6</p>
1177 </div>
1178 <hr>
10621179 <div class="refsect2" title='The "avatar-token" property'>
10631180 <a name="TpContact--avatar-token"></a><h3>The <code class="literal">"avatar-token"</code> property</h3>
10641181 <pre class="programlisting"> "avatar-token" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
12131330 </div>
12141331 <div class="footer">
12151332 <hr>
1216 Generated by GTK-Doc V1.14</div>
1333 Generated by GTK-Doc V1.15</div>
12171334 </body>
12181335 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-TpContactsMixin.html" title="TpContactsMixin">
99 <link rel="next" href="TpExportableChannel.html" title="TpExportableChannel">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
137137 Bitfield representing allowed access to a property.
138138 </p>
139139 <p>
140 Since 0.11.UNRELEASED, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type,
140 Since 0.11.5, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type,
141141 <a class="link" href="telepathy-glib-dbus-properties-mixin.html#TP-TYPE-DBUS-PROPERTIES-MIXIN-FLAGS:CAPS" title="TP_TYPE_DBUS_PROPERTIES_MIXIN_FLAGS"><code class="literal">TP_TYPE_DBUS_PROPERTIES_MIXIN_FLAGS</code></a>.
142142 </p>
143143 <div class="variablelist"><table border="0">
166166 <p>
167167 The <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type of <a class="link" href="telepathy-glib-dbus-properties-mixin.html#TpDBusPropertiesMixinFlags" title="enum TpDBusPropertiesMixinFlags"><span class="type">TpDBusPropertiesMixinFlags</span></a>.
168168 </p>
169 <p class="since">Since 0.11.UNRELEASED</p>
169 <p class="since">Since 0.11.5</p>
170170 </div>
171171 <hr>
172172 <div class="refsect2" title="TpDBusPropertiesMixinIfaceInfo">
878878 </div>
879879 <div class="footer">
880880 <hr>
881 Generated by GTK-Doc V1.14</div>
881 Generated by GTK-Doc V1.15</div>
882882 </body>
883883 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="telepathy-glib-proxy-tp-properties.html" title="TpProxy Telepathy Properties">
99 <link rel="next" href="telepathy-glib-asv.html" title="Manipulating a{sv} mappings">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
572572 the bitwise-or of other appropriate types, for convenience.
573573 </p>
574574 <p>
575 Since 0.11.UNRELEASED, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type,
575 Since 0.11.5, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type,
576576 <a class="link" href="telepathy-glib-dbus.html#TP-TYPE-DBUS-NAME-TYPE:CAPS" title="TP_TYPE_DBUS_NAME_TYPE"><code class="literal">TP_TYPE_DBUS_NAME_TYPE</code></a>.
577577 </p>
578578 <div class="variablelist"><table border="0">
620620 <p>
621621 The <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GFlagsClass"><span class="type">GFlagsClass</span></a> type of a <a class="link" href="telepathy-glib-dbus.html#TpDBusNameType" title="enum TpDBusNameType"><span class="type">TpDBusNameType</span></a> or a set of name types.
622622 </p>
623 <p class="since">Since 0.11.UNRELEASED</p>
623 <p class="since">Since 0.11.5</p>
624624 </div>
625625 <hr>
626626 <div class="refsect2" title="tp_dbus_check_valid_bus_name ()">
14381438 </tr>
14391439 <tr>
14401440 <td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
1441 <td> an object to export. type Object<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
1441 <td> an object to export. <span class="annotation">[type Object][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1442 </td>
14421443 </tr>
14431444 </tbody>
14441445 </table></div>
14641465 <tr>
14651466 <td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
14661467 <td> an object previously exported with
1467 <a class="link" href="telepathy-glib-dbus.html#tp-dbus-daemon-register-object" title="tp_dbus_daemon_register_object ()"><code class="function">tp_dbus_daemon_register_object()</code></a>. type Object<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
1468 <a class="link" href="telepathy-glib-dbus.html#tp-dbus-daemon-register-object" title="tp_dbus_daemon_register_object ()"><code class="function">tp_dbus_daemon_register_object()</code></a>. <span class="annotation">[type Object][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
1469 </td>
14681470 </tr>
14691471 </tbody>
14701472 </table></div>
47704772 </div>
47714773 <div class="footer">
47724774 <hr>
4773 Generated by GTK-Doc V1.14</div>
4775 Generated by GTK-Doc V1.15</div>
47744776 </body>
47754777 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-gnio-util.html" title="GNIO Utilities">
99 <link rel="next" href="telepathy-glib-debug.html" title="Common debug support">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
243243 </div>
244244 <div class="footer">
245245 <hr>
246 Generated by GTK-Doc V1.14</div>
246 Generated by GTK-Doc V1.15</div>
247247 </body>
248248 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-debug.html" title="Common debug support">
99 <link rel="next" href="telepathy-glib-TpIntSet.html" title="TpIntSet">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
298298 </div>
299299 <div class="footer">
300300 <hr>
301 Generated by GTK-Doc V1.14</div>
301 Generated by GTK-Doc V1.15</div>
302302 </body>
303303 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-debug-ansi.html" title="ANSI codes for debug messages">
99 <link rel="next" href="telepathy-glib-debug-sender.html" title="TpDebugSender">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
335335 </div>
336336 <div class="footer">
337337 <hr>
338 Generated by GTK-Doc V1.14</div>
338 Generated by GTK-Doc V1.15</div>
339339 </body>
340340 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="ch-protocol.html" title="The Telepathy protocol">
99 <link rel="next" href="telepathy-glib-handle.html" title="TpHandle">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
174174 </div>
175175 <div class="footer">
176176 <hr>
177 Generated by GTK-Doc V1.14</div>
177 Generated by GTK-Doc V1.15</div>
178178 </body>
179179 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-interfaces.html" title="Telepathy protocol interface and property names">
99 <link rel="next" href="telepathy-glib-errors.html" title="Telepathy protocol errors">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
110110 #define <a class="link" href="telepathy-glib-enums.html#NUM-TP-DEBUG-LEVELS:CAPS" title="NUM_TP_DEBUG_LEVELS">NUM_TP_DEBUG_LEVELS</a>
111111 enum <a class="link" href="telepathy-glib-enums.html#TpContactInfoFlags" title="enum TpContactInfoFlags">TpContactInfoFlags</a>;
112112 enum <a class="link" href="telepathy-glib-enums.html#TpContactInfoFieldFlags" title="enum TpContactInfoFieldFlags">TpContactInfoFieldFlags</a>;
113 enum <a class="link" href="telepathy-glib-enums.html#TpLocationFeatures" title="enum TpLocationFeatures">TpLocationFeatures</a>;
113114 </pre>
114115 </div>
115116 <div class="refsect1" title="Description">
22752276 </tr></tbody>
22762277 </table></div>
22772278 </div>
2279 <hr>
2280 <div class="refsect2" title="enum TpLocationFeatures">
2281 <a name="TpLocationFeatures"></a><h3>enum TpLocationFeatures</h3>
2282 <pre class="programlisting">typedef enum {
2283 TP_LOCATION_FEATURE_CAN_SET = 1,
2284 } TpLocationFeatures;
2285 </pre>
2286 <p>
2287 Flags describing the Location features which may be supported on any given connection.
2288 </p>
2289 <p>
2290 Bitfield/set of flags generated from the Telepathy specification.
2291 </p>
2292 <div class="variablelist"><table border="0">
2293 <col align="left" valign="top">
2294 <tbody><tr>
2295 <td><p><a name="TP-LOCATION-FEATURE-CAN-SET:CAPS"></a><span class="term"><code class="literal">TP_LOCATION_FEATURE_CAN_SET</code></span></p></td>
2296 <td> Indicates that setting your own location with SetLocation is supported on this connection.
2297 </td>
2298 </tr></tbody>
2299 </table></div>
2300 </div>
22782301 </div>
22792302 </div>
22802303 <div class="footer">
22812304 <hr>
2282 Generated by GTK-Doc V1.14</div>
2305 Generated by GTK-Doc V1.15</div>
22832306 </body>
22842307 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-enums.html" title="Telepathy protocol enumerations">
99 <link rel="next" href="telepathy-glib-gtypes.html" title="GType factory functions">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
999999 </div>
10001000 <div class="footer">
10011001 <hr>
1002 Generated by GTK-Doc V1.14</div>
1002 Generated by GTK-Doc V1.15</div>
10031003 </body>
10041004 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="telepathy-glib-util.html" title="Utilities">
99 <link rel="next" href="telepathy-glib-debug-ansi.html" title="ANSI codes for debug messages">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
144144 </div>
145145 <div class="footer">
146146 <hr>
147 Generated by GTK-Doc V1.14</div>
147 Generated by GTK-Doc V1.15</div>
148148 </body>
149149 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-errors.html" title="Telepathy protocol errors">
99 <link rel="next" href="TpChannelIface.html" title="TpChannelIface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
18821882 <pre class="programlisting">#define TP_HASH_TYPE_MESSAGE_PART (tp_type_dbus_hash_sv ())
18831883 </pre>
18841884 <p>
1885 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Part of a message's content. In practice, this mapping never appears in isolation - messages are represented by a list of &lt;tp:type&gt;Message_Part&lt;/tp:type&gt; mappings.&lt;/p&gt; &lt;p&gt;An example of how a rich-text message, with an embedded image, might look, in a Python-like syntax:&lt;/p&gt; &lt;pre&gt; [ { 'message-token': '9de9546a-3400-4419-a505-3ea270cb834c', 'message-sender': 42, 'message-sent': 1210067943, 'message-received': 1210067947, 'message-type': 0, # = Channel_Text_Message_Type_Normal 'pending-message-id': 437, }, { 'alternative': 'main', 'content-type': 'text/html', 'content': 'Here is a photo of my cat:&amp;lt;br /&amp;gt;' + '&amp;lt;img src=&amp;quot;cid:catphoto&amp;quot; alt=&amp;quot;lol!&amp;quot; /&amp;gt;' + '&amp;lt;br /&amp;gt;Isn't it cute?', }, { 'alternative': 'main', 'content-type': 'text/plain', 'content': 'Here is a photo of my cat:\n[IMG: lol!]\nIsn't it cute?', }, { 'identifier': 'catphoto', 'content-type': 'image/jpeg', 'size': 101000, 'needs-retrieval': True, }, ]&lt;/pre&gt; &lt;p&gt;An example of how a non-text message — in particular, a vCard sent via SMS as implemented by telepathy-ring on Nokia's Maemo 5 — looks:&lt;/p&gt; &lt;pre&gt; [ { 'message-token': '9de9546a-3400-4419-a505-3ea270cb834c', 'message-sender': 42, 'message-sent': 1210067943, 'message-received': 1210067947, 'message-type': 0, # = Channel_Text_Message_Type_Normal 'pending-message-id': 437, }, { 'content-type': 'text/x-vcard', 'content': [ 0x66, 0x69, 0x71, ...], # vCard data as an array of bytes }, ]&lt;/pre&gt; &lt;div&gt; &lt;p&gt;The first part of the message contains &amp;quot;headers&amp;quot; which refer to the entire message.&lt;/p&gt; &lt;p&gt;It is an error for a connection manager to put keys referring to the message as a whole in the second or subsequent Message_Part, but clients MUST recover from this error by ignoring these keys in the second and subsequent parts.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Instead of representing messages as aa{sv} where the first dictionary is special (a dictionary of headers), we could have used a signature like (a{sv}aa{sv}) to separate out the headers and the body parts.&lt;/p&gt; &lt;p&gt;However, this would make access to the messages more awkward. In Python, the syntax for access to a header field would remain &lt;code&gt;message[0]['message-type']&lt;/code&gt;, but access to a body field in the second body part would change from message[2]['content'] to message[1][1]['content']. In GLib, the message would change from being a GPtrArray(GHashTable) to being a GValueArray(GHashTable, GPtrArray(GHashTable)) which is rather inconvenient to dereference.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Well-known keys for the message as a whole, and the corresponding value types, include:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;message-token (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An opaque, globally-unique identifier for the entire message. This MAY be treated as if it were a MIME Message-ID, e.g. for the mid: and cid: URI schemes. If omitted, there is no suitable token; the protocol-token key SHOULD be provided if the protocol identifies messages in some less unique way.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;protocol-token (s - &lt;tp:type&gt;Protocol_Message_Token&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An opaque token for the entire message, with whatever uniqueness guarantee is provided by the underlying protocol. As described for the Protocol_Message_Token type, this token is &lt;em&gt;not&lt;/em&gt; guaranteed to be unique between contacts, or even within the scope of a Channel.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;In practice, in most protocols there is no token with the uniqueness guarantees demanded for message-token; the definition of message-token was inappropriate, but must now be preserved for the benefit of clients that rely on it, at least until Telepathy breaks backwards compatibility.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;The message-token and protocol-token SHOULD NOT both be present; clients requiring an identifier with the semantics of the protocol-token SHOULD look for the message-token first, falling back to the protocol-token.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;This is for compatibility with CMs older than the protocol-token key.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;message-sent (x - &lt;tp:type&gt;Unix_Timestamp64&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The time the message was sent (if unavailable, the time it arrived at a central server MAY be used). Omitted if no reasonable approximation is available; SHOULD always be present on outgoing messages.&lt;/dd&gt; &lt;dt&gt;message-received (x - &lt;tp:type&gt;Unix_Timestamp64&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The time the message was received locally. SHOULD always be present.&lt;/dd&gt; &lt;dt&gt;message-sender (u - &lt;tp:type&gt;Contact_Handle&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The contact who sent the message. If 0 or omitted, the contact who sent the message could not be determined.&lt;/dd&gt; &lt;dt&gt;message-type (u - &lt;tp:type&gt;Channel_Text_Message_Type&lt;/tp:type&gt;) &lt;/dt&gt; &lt;dd&gt;The type of message; if omitted, Channel_Text_Message_Type_Normal MUST be assumed. MAY be omitted for normal chat messages.&lt;/dd&gt; &lt;dt&gt;pending-message-id (u - &lt;tp:type&gt;Message_ID&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The incoming message ID. This MUST NOT be present on outgoing messages. Clients SHOULD NOT store this key - it is only valid for as long as the message remains unacknowledged.&lt;/dd&gt; &lt;dt&gt;interface (s - &lt;tp:type&gt;DBus_Interface&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;This message is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the second and subsequent parts, where it indicates that that part (only) should be ignored if unsupported.)&lt;/dd&gt; &lt;dt&gt;scrollback (b)&lt;/dt&gt; &lt;dd&gt;If present and true, the incoming message was part of a replay of message history (this matches the Scrollback flag in &lt;tp:type&gt;Channel_Text_Message_Flags&lt;/tp:type&gt;). This flag does not make sense on outgoing messages and SHOULD NOT appear there.&lt;/dd&gt; &lt;dt&gt;rescued (b)&lt;/dt&gt; &lt;dd&gt;If present and true, the incoming message has been seen in a previous channel during the lifetime of the Connection, but had not been acknowledged when that channel closed, causing an identical channel (in which the message now appears) to open. This matches the Rescued flag in &lt;tp:type&gt;Channel_Text_Message_Flags&lt;/tp:type&gt;; it does not make sense on outgoing messages, and SHOULD NOT appear there.&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;The second and subsequent parts contain the message's content, including plain text, formatted text and/or attached files.&lt;/p&gt; &lt;p&gt;It is an error for a connection manager to put keys referring to the message body in the first Message_Part; clients MUST recover from this error by ignoring these keys in first part.&lt;/p&gt; &lt;p&gt;In any group of parts with the same non-empty value for the &amp;quot;alternative&amp;quot; key (which represent alternative versions of the same content), more faithful versions of the intended message MUST come before less faithful versions (note that this order is the opposite of MIME &amp;quot;multipart/alternative&amp;quot; parts). Clients SHOULD display the first alternative that they understand.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Specifying the preference order means that if the underlying protocol doesn't support alternatives, the CM can safely delete everything apart from the first supported alternative when sending messages.&lt;/p&gt; &lt;p&gt;The order is the reverse of MIME because MIME's rationale for placing the &amp;quot;plainest&amp;quot; part first (legibility in pre-MIME UAs) does not apply to us, and placing the most preferred part first simplifies display (a client can iterate the message in order, display the first alternative that it understands, and skip displaying all subsequent parts with the same &amp;quot;alternative&amp;quot; key).&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Clients SHOULD present all parts that are not redundant alternatives in the order they appear in this array, possibly excluding parts that are referenced by another displayed part. It is implementation-specific how the parts are presented to the user.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;This allows CMs to assume that all parts are actually shown to the user, even if they are not explicitly referenced - we do not yet recommend formatted text, and there is no way for plain text to reference an attachment since it has no concept of markup or references. This also forces clients to do something sensible with messages that consist entirely of &amp;quot;attachments&amp;quot;, with no &amp;quot;body&amp;quot; at all.&lt;/p&gt; &lt;p&gt;For instance, when displaying the above example, a client that understands the HTML part should display the JPEG image once, between the two lines &amp;quot;Here is a photo of my cat:&amp;quot; and &amp;quot;Isn't it cute?&amp;quot;; it may additionally present the image in some way for a second time, after &amp;quot;Isn't it cute?&amp;quot;, or may choose not to.&lt;/p&gt; &lt;p&gt;A client that does not understand HTML, displaying the same message, should display the plain-text part, followed by the JPEG image.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Well-known keys for the second and subsequent parts, and the corresponding value types, include:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;identifier (s)&lt;/dt&gt; &lt;dd&gt;An opaque identifier for this part. Parts of a message MAY reference other parts by treating this identifier as if it were a MIME Content-ID and using the cid: URI scheme.&lt;/dd&gt; &lt;dt&gt;alternative (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;If present, this part of the message is an alternative for all other parts with the same value for &amp;quot;alternative&amp;quot;. Clients SHOULD only display one of them (this is expected to be used for XHTML messages in a future version of this specification).&lt;/p&gt; &lt;p&gt;If omitted, this part is not an alternative for any other part.&lt;/p&gt; &lt;p&gt;Parts of a message MAY reference the group of alternatives as a whole (i.e. a reference to whichever of them is chosen) by treating this identifier as if it were the MIME Content-ID of a multipart/alternative part, and using the cid: URI scheme.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;content-type (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;The MIME type of this part. See the documentation for ReceivedMessage for notes on the special status of &amp;quot;text/plain&amp;quot; parts.&lt;/p&gt; &lt;p&gt;Connection managers MUST NOT signal parts without a 'content-type' key; if a protocol provides no way to determine the MIME type, the connection manager is responsible for guessing it, but MAY fall back to &amp;quot;text/plain&amp;quot; for text and &amp;quot;application/octet-stream&amp;quot; for non-text.&lt;/p&gt; &lt;p&gt;Clients MUST ignore parts without a 'content-type' key, which are reserved for future expansion.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;lang (s)&lt;/dt&gt; &lt;dd&gt;The natural language of this part, identified by a RFC 3066 language tag. &lt;tp:rationale&gt; XMPP allows alternative-selection by language as well as by content-type. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;size (u)&lt;/dt&gt; &lt;dd&gt;The size in bytes (if needs-retrieval is true, this MAY be an estimated or approximate size). SHOULD be omitted if 'content' is provided. &lt;tp:rationale&gt; There's no point in providing the size if you're already providing all the content. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;thumbnail (b)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;This part is a thumbnail. To represent an image together with its thumbnail in a single message, there should be one part for the full image followed by a part for the thumbnail (following the “more complete versions first” requirement), with the same 'alternative' value. For example:&lt;/p&gt; &lt;pre&gt; [ ... , { 'alternative': 'catphoto', 'content-type': 'image/jpeg', 'size': 150000, 'content': [0xFF, 0xD8, ... 0xFF 0xD9], }, { 'alternative': 'catphoto', 'content-type': 'image/jpeg' 'size': 1024, 'thumbnail': True, 'content': [0xFF, 0xD8, ... 0xFF 0xD9], }, ... ] &lt;/pre&gt; &lt;/dd&gt; &lt;dt&gt;needs-retrieval (b)&lt;/dt&gt; &lt;dd&gt;If false or omitted, the connection manager already holds this part in memory. If present and true, this part will be retrieved on demand (like MIME's message/external-body), so clients should expect retrieval to take time; if this specification is later extended to provide a streaming version of GetPendingMessageContent, clients should use it for parts with this flag.&lt;/dd&gt; &lt;dt&gt;truncated (b)&lt;/dt&gt; &lt;dd&gt;The content available via the 'content' key or GetPendingMessageContent has been truncated by the server or connection manager (equivalent to Channel_Text_Message_Flag_Truncated in the Text interface). &lt;/dd&gt; &lt;dt&gt;content (s or ay)&lt;/dt&gt; &lt;dd&gt;The part's content, if it is available and sufficiently small to include here (implies that 'needs-retrieval' is false or omitted). Otherwise, omitted. If the part is human-readable text or HTML, the value for this key MUST be a UTF-8 string (D-Bus signature 's'). If the part is not text, the value MUST be a byte-array (D-Bus signature 'ay'). If the part is a text-based format that is not the main body of the message (e.g. an iCalendar or an attached XML document), the value SHOULD be a UTF-8 string, transcoding from another charset to UTF-8 if necessary, but MAY be a byte-array (of unspecified character set) if transcoding fails or the source charset is not known.&lt;/dd&gt; &lt;!-- FIXME: "sufficiently small to include" is not currently defined; we should add some API so clients can tell the CM how large a message it should emit in the signal.--&gt; &lt;dt&gt;interface (s - &lt;tp:type&gt;DBus_Interface&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;This part is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the first part, where it indicates that the entire message should be ignored if unsupported.)&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;Delivery reports are also represented as messages, of type Channel_Text_Message_Type_Delivery_Report, with the Non_Text_Content flag in the Text interface.&lt;/p&gt; &lt;p&gt;Whenever a message of type Channel_Text_Message_Type_Delivery_Report is signalled for a delivery error report, Channel.Type.Text.SendError SHOULD also be emitted; whenever Channel.Type.Text.SendError is emitted by a channel which supports this interface, a message of type Channel_Text_Message_Type_Delivery_Report MUST also be emitted.&lt;/p&gt; &lt;p&gt;The corresponding message in the Messages interface MUST contain &amp;quot;headers&amp;quot; for the delivery report, as specified below, in its first Message_Part.&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;message-sender (u - Contact_Handle as defined above)&lt;/dt&gt; &lt;dd&gt;MUST be the intended recipient of the original message, if available (zero or omitted if the intended recipient is unavailable or is not a contact, e.g. a chatroom), even if the delivery report actually came from an intermediate server.&lt;/dd&gt; &lt;dt&gt;message-type (u - Channel_Text_Message_Type as defined above)&lt;/dt&gt; &lt;dd&gt;MUST be Channel_Text_Message_Type_Delivery_Report.&lt;/dd&gt; &lt;dt&gt;delivery-status (u - Delivery_Status)&lt;/dt&gt; &lt;dd&gt;The status of the message. All delivery reports MUST contain this key in the first Message_Part.&lt;/dd&gt; &lt;dt&gt;delivery-token (s - &lt;tp:type&gt;Protocol_Message_Token&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An identifier for the message to which this delivery report refers. MUST NOT be an empty string. Omitted if not available.&lt;/p&gt; &lt;p&gt;Clients may match this against the token produced by the SendMessage method and MessageSent signal. A status report with no token could match any sent message, and a sent message with an empty token could match any status report. If multiple sent messages match, clients SHOULD use some reasonable heuristic.&lt;/p&gt; &lt;tp:rationale&gt; In an ideal world, we could unambiguously match reports against messages; however, deployed protocols are not ideal, and not all reports and messages can be matched. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;delivery-error (u - Channel_Text_Send_Error)&lt;/dt&gt; &lt;dd&gt; The reason for the failure. MUST be omitted if this was a successful delivery; SHOULD be omitted if it would be Channel_Text_Send_Error_Unknown. &lt;/dd&gt; &lt;dt&gt;delivery-dbus-error (s - DBus_Error_Name)&lt;/dt&gt; &lt;dd&gt; The reason for the failure, specified as a (possibly implementation-specific) D-Bus error. MUST be omitted if this was a successful delivery. If set, the 'delivery-error' key SHOULD be set to the closest available value. &lt;/dd&gt; &lt;dt&gt;delivery-error-message (s)&lt;/dt&gt; &lt;dd&gt; Debugging information on why the message could not be delivered. MUST be omitted if this was a successful delivery; MAY always be omitted. &lt;/dd&gt; &lt;dt&gt;delivery-echo (aa{sv} - Message_Part[])&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;The message content, as defined by the Messages interface. Omitted if no content is available. Content MAY have been truncated, message parts MAY have been removed, and message parts MAY have had their content removed (i.e. the message part metadata is present, but the 'content' key is not).&lt;/p&gt; &lt;tp:rationale&gt; Some protocols, like XMPP, echo the failing message back to the sender. This is sometimes the only way to match it against the sent message, so we include it here. &lt;/tp:rationale&gt; &lt;p&gt;Unlike in the Messages interface, content not visible in the value for this key cannot be retrieved by another means, so the connection manager SHOULD be more aggressive about including (possibly truncated) message content in the 'content' key.&lt;/p&gt; &lt;tp:rationale&gt; The Messages interface needs to allow all content to be retrieved, but in this interface, the content we provide is merely a hint; so some is better than none, and it doesn't seem worth providing an API as complex as Messages' GetPendingMessageContent for the echoed message. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;The second and subsequent Message_Part dictionaries, if present, are a human-readable report from the IM service.&lt;/p&gt; &lt;p&gt;Clients MUST NOT attempt to send delivery reports using the SendMessage method in the Messages API, and connection managers MUST NOT allow this to be done. If support for sending delivery reports is later added, it will be part of this interface.&lt;/p&gt; &lt;p&gt;Some example delivery reports in a Python-like syntax (in which arrays are indicated by [a, b] and dictionaries by {k1: v1, k2: v2}) follow.&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;A minimal delivery report indicating permanent failure of the sent message whose token was &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt; for an unknown reason&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Permanently_Failed, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', } # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A delivery report where the failed message is echoed back to the sender rather than being referenced by ID, and the failure reason is that this protocol cannot send messages to offline contacts such as the contact with handle 123&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Temporarily_Failed, 'delivery-error': Channel_Text_Send_Error_Offline, 'delivery-echo': [{ # header of original message 'message-sender': 1, 'message-sent': 1210067943, }, { # body of original message 'content-type': 'text/plain', 'content': 'Hello, world!', }] ], # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A maximally complex delivery report: the server reports a bilingual human-readable failure message because the user sent a message &amp;quot;Hello, world!&amp;quot; with token &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt; to a contact with handle 123, but that handle represents a contact who does not actually exist&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Permanently_Failed, 'delivery-error': Channel_Text_Send_Error_Invalid_Contact, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', 'delivery-echo': [{ # header of original message 'message-sender': 1, 'message-sent': 1210067943, }, { # body of original message 'content-type': 'text/plain', 'content': 'Hello, world!', }] ], }, { # message from server (alternative in English) 'alternative': '404', 'content-type': 'text/plain', 'lang': 'en', 'content': 'I have no contact with that name', }, { # message from server (alternative in German) 'alternative': '404'. 'content-type': 'text/plain', 'lang': 'de', 'content', 'Ich habe keinen Kontakt mit diesem Namen', } ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A minimal delivery report indicating successful delivery of the sent message whose token was &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt;&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Delivered, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', } # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt;
1885 &lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;Part of a message's content. In practice, this mapping never appears in isolation - messages are represented by a list of &lt;tp:type&gt;Message_Part&lt;/tp:type&gt; mappings.&lt;/p&gt; &lt;p&gt;An example of how a rich-text message, with an embedded image, might look, in a Python-like syntax:&lt;/p&gt; &lt;pre&gt; [ { 'message-token': '9de9546a-3400-4419-a505-3ea270cb834c', 'message-sender': 42, 'message-sent': 1210067943, 'message-received': 1210067947, 'message-type': 0, # = Channel_Text_Message_Type_Normal 'pending-message-id': 437, }, { 'alternative': 'main', 'content-type': 'text/html', 'content': 'Here is a photo of my cat:&amp;lt;br /&amp;gt;' + '&amp;lt;img src=&amp;quot;cid:catphoto&amp;quot; alt=&amp;quot;lol!&amp;quot; /&amp;gt;' + '&amp;lt;br /&amp;gt;Isn't it cute?', }, { 'alternative': 'main', 'content-type': 'text/plain', 'content': 'Here is a photo of my cat:\n[IMG: lol!]\nIsn't it cute?', }, { 'identifier': 'catphoto', 'content-type': 'image/jpeg', 'size': 101000, 'needs-retrieval': True, }, ]&lt;/pre&gt; &lt;p&gt;An example of how a non-text message — in particular, a vCard sent via SMS as implemented by telepathy-ring on Nokia's Maemo 5 — looks:&lt;/p&gt; &lt;pre&gt; [ { 'message-token': '9de9546a-3400-4419-a505-3ea270cb834c', 'message-sender': 42, 'message-sent': 1210067943, 'message-received': 1210067947, 'message-type': 0, # = Channel_Text_Message_Type_Normal 'pending-message-id': 437, }, { 'content-type': 'text/x-vcard', 'content': [ 0x66, 0x69, 0x71, ...], # vCard data as an array of bytes }, ]&lt;/pre&gt; &lt;div&gt; &lt;p&gt;The first part of the message contains &amp;quot;headers&amp;quot; which refer to the entire message.&lt;/p&gt; &lt;p&gt;It is an error for a connection manager to put keys referring to the message as a whole in the second or subsequent Message_Part, but clients MUST recover from this error by ignoring these keys in the second and subsequent parts.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Instead of representing messages as aa{sv} where the first dictionary is special (a dictionary of headers), we could have used a signature like (a{sv}aa{sv}) to separate out the headers and the body parts.&lt;/p&gt; &lt;p&gt;However, this would make access to the messages more awkward. In Python, the syntax for access to a header field would remain &lt;code&gt;message[0]['message-type']&lt;/code&gt;, but access to a body field in the second body part would change from message[2]['content'] to message[1][1]['content']. In GLib, the message would change from being a GPtrArray(GHashTable) to being a GValueArray(GHashTable, GPtrArray(GHashTable)) which is rather inconvenient to dereference.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Well-known keys for the message as a whole, and the corresponding value types, include:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;message-token (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An opaque, globally-unique identifier for the entire message. This MAY be treated as if it were a MIME Message-ID, e.g. for the mid: and cid: URI schemes. If omitted, there is no suitable token; the protocol-token key SHOULD be provided if the protocol identifies messages in some less unique way.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;protocol-token (s - &lt;tp:type&gt;Protocol_Message_Token&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An opaque token for the entire message, with whatever uniqueness guarantee is provided by the underlying protocol. As described for the Protocol_Message_Token type, this token is &lt;em&gt;not&lt;/em&gt; guaranteed to be unique between contacts, or even within the scope of a Channel.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;In practice, in most protocols there is no token with the uniqueness guarantees demanded for message-token; the definition of message-token was inappropriate, but must now be preserved for the benefit of clients that rely on it, at least until Telepathy breaks backwards compatibility.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;The message-token and protocol-token SHOULD NOT both be present; clients requiring an identifier with the semantics of the protocol-token SHOULD look for the message-token first, falling back to the protocol-token.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;This is for compatibility with CMs older than the protocol-token key.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;message-sent (x - &lt;tp:type&gt;Unix_Timestamp64&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The time the message was sent (if unavailable, the time it arrived at a central server MAY be used). Omitted if no reasonable approximation is available; SHOULD always be present on outgoing messages.&lt;/dd&gt; &lt;dt&gt;message-received (x - &lt;tp:type&gt;Unix_Timestamp64&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The time the message was received locally. SHOULD always be present.&lt;/dd&gt; &lt;dt&gt;message-sender (u - &lt;tp:type&gt;Contact_Handle&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The contact who sent the message. If 0 or omitted, the contact who sent the message could not be determined.&lt;/dd&gt; &lt;dt&gt;sender-nickname (s)&lt;/dt&gt; &lt;dd&gt;The nickname chosen by the sender of the message, which can be different for each message in a conversation.&lt;/dd&gt; &lt;dt&gt;message-type (u - &lt;tp:type&gt;Channel_Text_Message_Type&lt;/tp:type&gt;) &lt;/dt&gt; &lt;dd&gt;The type of message; if omitted, Channel_Text_Message_Type_Normal MUST be assumed. MAY be omitted for normal chat messages.&lt;/dd&gt; &lt;dt&gt;pending-message-id (u - &lt;tp:type&gt;Message_ID&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;The incoming message ID. This MUST NOT be present on outgoing messages. Clients SHOULD NOT store this key - it is only valid for as long as the message remains unacknowledged.&lt;/dd&gt; &lt;dt&gt;interface (s - &lt;tp:type&gt;DBus_Interface&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;This message is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the second and subsequent parts, where it indicates that that part (only) should be ignored if unsupported.)&lt;/dd&gt; &lt;dt&gt;scrollback (b)&lt;/dt&gt; &lt;dd&gt;If present and true, the incoming message was part of a replay of message history (this matches the Scrollback flag in &lt;tp:type&gt;Channel_Text_Message_Flags&lt;/tp:type&gt;). This flag does not make sense on outgoing messages and SHOULD NOT appear there.&lt;/dd&gt; &lt;dt&gt;rescued (b)&lt;/dt&gt; &lt;dd&gt;If present and true, the incoming message has been seen in a previous channel during the lifetime of the Connection, but had not been acknowledged when that channel closed, causing an identical channel (in which the message now appears) to open. This matches the Rescued flag in &lt;tp:type&gt;Channel_Text_Message_Flags&lt;/tp:type&gt;; it does not make sense on outgoing messages, and SHOULD NOT appear there.&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;The second and subsequent parts contain the message's content, including plain text, formatted text and/or attached files.&lt;/p&gt; &lt;p&gt;It is an error for a connection manager to put keys referring to the message body in the first Message_Part; clients MUST recover from this error by ignoring these keys in first part.&lt;/p&gt; &lt;p&gt;In any group of parts with the same non-empty value for the &amp;quot;alternative&amp;quot; key (which represent alternative versions of the same content), more faithful versions of the intended message MUST come before less faithful versions (note that this order is the opposite of MIME &amp;quot;multipart/alternative&amp;quot; parts). Clients SHOULD display the first alternative that they understand.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;Specifying the preference order means that if the underlying protocol doesn't support alternatives, the CM can safely delete everything apart from the first supported alternative when sending messages.&lt;/p&gt; &lt;p&gt;The order is the reverse of MIME because MIME's rationale for placing the &amp;quot;plainest&amp;quot; part first (legibility in pre-MIME UAs) does not apply to us, and placing the most preferred part first simplifies display (a client can iterate the message in order, display the first alternative that it understands, and skip displaying all subsequent parts with the same &amp;quot;alternative&amp;quot; key).&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Clients SHOULD present all parts that are not redundant alternatives in the order they appear in this array, possibly excluding parts that are referenced by another displayed part. It is implementation-specific how the parts are presented to the user.&lt;/p&gt; &lt;tp:rationale&gt; &lt;p&gt;This allows CMs to assume that all parts are actually shown to the user, even if they are not explicitly referenced - we do not yet recommend formatted text, and there is no way for plain text to reference an attachment since it has no concept of markup or references. This also forces clients to do something sensible with messages that consist entirely of &amp;quot;attachments&amp;quot;, with no &amp;quot;body&amp;quot; at all.&lt;/p&gt; &lt;p&gt;For instance, when displaying the above example, a client that understands the HTML part should display the JPEG image once, between the two lines &amp;quot;Here is a photo of my cat:&amp;quot; and &amp;quot;Isn't it cute?&amp;quot;; it may additionally present the image in some way for a second time, after &amp;quot;Isn't it cute?&amp;quot;, or may choose not to.&lt;/p&gt; &lt;p&gt;A client that does not understand HTML, displaying the same message, should display the plain-text part, followed by the JPEG image.&lt;/p&gt; &lt;/tp:rationale&gt; &lt;p&gt;Well-known keys for the second and subsequent parts, and the corresponding value types, include:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;identifier (s)&lt;/dt&gt; &lt;dd&gt;An opaque identifier for this part. Parts of a message MAY reference other parts by treating this identifier as if it were a MIME Content-ID and using the cid: URI scheme.&lt;/dd&gt; &lt;dt&gt;alternative (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;If present, this part of the message is an alternative for all other parts with the same value for &amp;quot;alternative&amp;quot;. Clients SHOULD only display one of them (this is expected to be used for XHTML messages in a future version of this specification).&lt;/p&gt; &lt;p&gt;If omitted, this part is not an alternative for any other part.&lt;/p&gt; &lt;p&gt;Parts of a message MAY reference the group of alternatives as a whole (i.e. a reference to whichever of them is chosen) by treating this identifier as if it were the MIME Content-ID of a multipart/alternative part, and using the cid: URI scheme.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;content-type (s)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;The MIME type of this part. See the documentation for ReceivedMessage for notes on the special status of &amp;quot;text/plain&amp;quot; parts.&lt;/p&gt; &lt;p&gt;Connection managers MUST NOT signal parts without a 'content-type' key; if a protocol provides no way to determine the MIME type, the connection manager is responsible for guessing it, but MAY fall back to &amp;quot;text/plain&amp;quot; for text and &amp;quot;application/octet-stream&amp;quot; for non-text.&lt;/p&gt; &lt;p&gt;Clients MUST ignore parts without a 'content-type' key, which are reserved for future expansion.&lt;/p&gt; &lt;/dd&gt; &lt;dt&gt;lang (s)&lt;/dt&gt; &lt;dd&gt;The natural language of this part, identified by a RFC 3066 language tag. &lt;tp:rationale&gt; XMPP allows alternative-selection by language as well as by content-type. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;size (u)&lt;/dt&gt; &lt;dd&gt;The size in bytes (if needs-retrieval is true, this MAY be an estimated or approximate size). SHOULD be omitted if 'content' is provided. &lt;tp:rationale&gt; There's no point in providing the size if you're already providing all the content. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;thumbnail (b)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;This part is a thumbnail. To represent an image together with its thumbnail in a single message, there should be one part for the full image followed by a part for the thumbnail (following the “more complete versions first” requirement), with the same 'alternative' value. For example:&lt;/p&gt; &lt;pre&gt; [ ... , { 'alternative': 'catphoto', 'content-type': 'image/jpeg', 'size': 150000, 'content': [0xFF, 0xD8, ... 0xFF 0xD9], }, { 'alternative': 'catphoto', 'content-type': 'image/jpeg' 'size': 1024, 'thumbnail': True, 'content': [0xFF, 0xD8, ... 0xFF 0xD9], }, ... ] &lt;/pre&gt; &lt;/dd&gt; &lt;dt&gt;needs-retrieval (b)&lt;/dt&gt; &lt;dd&gt;If false or omitted, the connection manager already holds this part in memory. If present and true, this part will be retrieved on demand (like MIME's message/external-body), so clients should expect retrieval to take time; if this specification is later extended to provide a streaming version of GetPendingMessageContent, clients should use it for parts with this flag.&lt;/dd&gt; &lt;dt&gt;truncated (b)&lt;/dt&gt; &lt;dd&gt;The content available via the 'content' key or GetPendingMessageContent has been truncated by the server or connection manager (equivalent to Channel_Text_Message_Flag_Truncated in the Text interface). &lt;/dd&gt; &lt;dt&gt;content (s or ay)&lt;/dt&gt; &lt;dd&gt;The part's content, if it is available and sufficiently small to include here (implies that 'needs-retrieval' is false or omitted). Otherwise, omitted. If the part is human-readable text or HTML, the value for this key MUST be a UTF-8 string (D-Bus signature 's'). If the part is not text, the value MUST be a byte-array (D-Bus signature 'ay'). If the part is a text-based format that is not the main body of the message (e.g. an iCalendar or an attached XML document), the value SHOULD be a UTF-8 string, transcoding from another charset to UTF-8 if necessary, but MAY be a byte-array (of unspecified character set) if transcoding fails or the source charset is not known.&lt;/dd&gt; &lt;!-- FIXME: "sufficiently small to include" is not currently defined; we should add some API so clients can tell the CM how large a message it should emit in the signal.--&gt; &lt;dt&gt;interface (s - &lt;tp:type&gt;DBus_Interface&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt;This part is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the first part, where it indicates that the entire message should be ignored if unsupported.)&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt; &lt;div&gt; &lt;p&gt;Delivery reports are also represented as messages, of type Channel_Text_Message_Type_Delivery_Report, with the Non_Text_Content flag in the Text interface.&lt;/p&gt; &lt;p&gt;Whenever a message of type Channel_Text_Message_Type_Delivery_Report is signalled for a delivery error report, Channel.Type.Text.SendError SHOULD also be emitted; whenever Channel.Type.Text.SendError is emitted by a channel which supports this interface, a message of type Channel_Text_Message_Type_Delivery_Report MUST also be emitted.&lt;/p&gt; &lt;p&gt;The corresponding message in the Messages interface MUST contain &amp;quot;headers&amp;quot; for the delivery report, as specified below, in its first Message_Part.&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;message-sender (u - Contact_Handle as defined above)&lt;/dt&gt; &lt;dd&gt;MUST be the intended recipient of the original message, if available (zero or omitted if the intended recipient is unavailable or is not a contact, e.g. a chatroom), even if the delivery report actually came from an intermediate server.&lt;/dd&gt; &lt;dt&gt;message-type (u - Channel_Text_Message_Type as defined above)&lt;/dt&gt; &lt;dd&gt;MUST be Channel_Text_Message_Type_Delivery_Report.&lt;/dd&gt; &lt;dt&gt;delivery-status (u - Delivery_Status)&lt;/dt&gt; &lt;dd&gt;The status of the message. All delivery reports MUST contain this key in the first Message_Part.&lt;/dd&gt; &lt;dt&gt;delivery-token (s - &lt;tp:type&gt;Protocol_Message_Token&lt;/tp:type&gt;)&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;An identifier for the message to which this delivery report refers. MUST NOT be an empty string. Omitted if not available.&lt;/p&gt; &lt;p&gt;Clients may match this against the token produced by the SendMessage method and MessageSent signal. A status report with no token could match any sent message, and a sent message with an empty token could match any status report. If multiple sent messages match, clients SHOULD use some reasonable heuristic.&lt;/p&gt; &lt;tp:rationale&gt; In an ideal world, we could unambiguously match reports against messages; however, deployed protocols are not ideal, and not all reports and messages can be matched. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;dt&gt;delivery-error (u - Channel_Text_Send_Error)&lt;/dt&gt; &lt;dd&gt; The reason for the failure. MUST be omitted if this was a successful delivery; SHOULD be omitted if it would be Channel_Text_Send_Error_Unknown. &lt;/dd&gt; &lt;dt&gt;delivery-dbus-error (s - DBus_Error_Name)&lt;/dt&gt; &lt;dd&gt; The reason for the failure, specified as a (possibly implementation-specific) D-Bus error. MUST be omitted if this was a successful delivery. If set, the 'delivery-error' key SHOULD be set to the closest available value. &lt;/dd&gt; &lt;dt&gt;delivery-error-message (s)&lt;/dt&gt; &lt;dd&gt; Debugging information on why the message could not be delivered. MUST be omitted if this was a successful delivery; MAY always be omitted. &lt;/dd&gt; &lt;dt&gt;delivery-echo (aa{sv} - Message_Part[])&lt;/dt&gt; &lt;dd&gt; &lt;p&gt;The message content, as defined by the Messages interface. Omitted if no content is available. Content MAY have been truncated, message parts MAY have been removed, and message parts MAY have had their content removed (i.e. the message part metadata is present, but the 'content' key is not).&lt;/p&gt; &lt;tp:rationale&gt; Some protocols, like XMPP, echo the failing message back to the sender. This is sometimes the only way to match it against the sent message, so we include it here. &lt;/tp:rationale&gt; &lt;p&gt;Unlike in the Messages interface, content not visible in the value for this key cannot be retrieved by another means, so the connection manager SHOULD be more aggressive about including (possibly truncated) message content in the 'content' key.&lt;/p&gt; &lt;tp:rationale&gt; The Messages interface needs to allow all content to be retrieved, but in this interface, the content we provide is merely a hint; so some is better than none, and it doesn't seem worth providing an API as complex as Messages' GetPendingMessageContent for the echoed message. &lt;/tp:rationale&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;The second and subsequent Message_Part dictionaries, if present, are a human-readable report from the IM service.&lt;/p&gt; &lt;p&gt;Clients MUST NOT attempt to send delivery reports using the SendMessage method in the Messages API, and connection managers MUST NOT allow this to be done. If support for sending delivery reports is later added, it will be part of this interface.&lt;/p&gt; &lt;p&gt;Some example delivery reports in a Python-like syntax (in which arrays are indicated by [a, b] and dictionaries by {k1: v1, k2: v2}) follow.&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;A minimal delivery report indicating permanent failure of the sent message whose token was &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt; for an unknown reason&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Permanently_Failed, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', } # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A delivery report where the failed message is echoed back to the sender rather than being referenced by ID, and the failure reason is that this protocol cannot send messages to offline contacts such as the contact with handle 123&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Temporarily_Failed, 'delivery-error': Channel_Text_Send_Error_Offline, 'delivery-echo': [{ # header of original message 'message-sender': 1, 'message-sent': 1210067943, }, { # body of original message 'content-type': 'text/plain', 'content': 'Hello, world!', }] ], # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A maximally complex delivery report: the server reports a bilingual human-readable failure message because the user sent a message &amp;quot;Hello, world!&amp;quot; with token &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt; to a contact with handle 123, but that handle represents a contact who does not actually exist&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Permanently_Failed, 'delivery-error': Channel_Text_Send_Error_Invalid_Contact, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', 'delivery-echo': [{ # header of original message 'message-sender': 1, 'message-sent': 1210067943, }, { # body of original message 'content-type': 'text/plain', 'content': 'Hello, world!', }] ], }, { # message from server (alternative in English) 'alternative': '404', 'content-type': 'text/plain', 'lang': 'en', 'content': 'I have no contact with that name', }, { # message from server (alternative in German) 'alternative': '404'. 'content-type': 'text/plain', 'lang': 'de', 'content', 'Ich habe keinen Kontakt mit diesem Namen', } ] &lt;/pre&gt;&lt;/dd&gt; &lt;dt&gt;A minimal delivery report indicating successful delivery of the sent message whose token was &lt;code&gt;b9a991bd-8845-4d7f-a704-215186f43bb4&lt;/code&gt;&lt;/dt&gt; &lt;dd&gt;&lt;pre&gt; [{ # header 'message-sender': 123, 'message-type': Channel_Text_Message_Type_Delivery_Report, 'delivery-status': Delivery_Status_Delivered, 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4', } # no body ] &lt;/pre&gt;&lt;/dd&gt; &lt;/dl&gt; &lt;/div&gt;
18861886 </p>
18871887 <p>
18881888 This macro expands to a call to a function
27072707 </div>
27082708 <div class="footer">
27092709 <hr>
2710 Generated by GTK-Doc V1.14</div>
2710 Generated by GTK-Doc V1.15</div>
27112711 </body>
27122712 </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>TpHandleChannelsContext</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="telepathy-glib-add-dispatch-operation-context.html" title="TpAddDispatchOperationContext">
9 <link rel="next" href="telepathy-glib-simple-observer.html" title="TpSimpleObserver">
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-add-dispatch-operation-context.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="telepathy-glib-simple-observer.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-handle-channels-context.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-handle-channels-context.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-handle-channels-context.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-handle-channels-context.properties" class="shortcut">Properties</a>
30  | 
31 <a href="#telepathy-glib-handle-channels-context.signals" class="shortcut">Signals</a>
32 </td></tr>
33 </table>
34 <div class="refentry" title="TpHandleChannelsContext">
35 <a name="telepathy-glib-handle-channels-context"></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-handle-channels-context.top_of_page"></a>TpHandleChannelsContext</span></h2>
39 <p>TpHandleChannelsContext — context of a Handler.HandleChannels() call</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-handle-channels-context.synopsis"></a><h2>Synopsis</h2>
45 <a name="TpHandleChannelsContext"></a><pre class="synopsis">
46 #include &lt;telepathy-glib/handle-channels-context.h&gt;
47
48 <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-struct" title="TpHandleChannelsContext">TpHandleChannelsContext</a>;
49 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept" title="tp_handle_channels_context_accept ()">tp_handle_channels_context_accept</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>);
50 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay" title="tp_handle_channels_context_delay ()">tp_handle_channels_context_delay</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>);
51 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail" title="tp_handle_channels_context_fail ()">tp_handle_channels_context_fail</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>,
52 <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>);
53 </pre>
54 </div>
55 <div class="refsect1" title="Object Hierarchy">
56 <a name="telepathy-glib-handle-channels-context.object-hierarchy"></a><h2>Object Hierarchy</h2>
57 <pre class="synopsis">
58 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
59 +----TpHandleChannelsContext
60 </pre>
61 </div>
62 <div class="refsect1" title="Properties">
63 <a name="telepathy-glib-handle-channels-context.properties"></a><h2>Properties</h2>
64 <pre class="synopsis">
65 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--account" title='The "account" property'>account</a>" <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a>* : Read / Write / Construct Only
66 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--channels" title='The "channels" property'>channels</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write / Construct Only
67 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--connection" title='The "connection" property'>connection</a>" <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>* : Read / Write / Construct Only
68 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--dbus-context" title='The "dbus-context" property'>dbus-context</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only
69 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--handler-info" title='The "handler-info" property'>handler-info</a>" <span class="type">GHashTable_gchararray+GValue_*</span> : Read / Write / Construct Only
70 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--requests-satisfied" title='The "requests-satisfied" property'>requests-satisfied</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write / Construct Only
71 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--user-action-time" title='The "user-action-time" property'>user-action-time</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct Only
72 </pre>
73 </div>
74 <div class="refsect1" title="Signals">
75 <a name="telepathy-glib-handle-channels-context.signals"></a><h2>Signals</h2>
76 <pre class="synopsis">
77 "<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-done" title='The "done" signal'>done</a>" : Run Last / Has Details
78 </pre>
79 </div>
80 <div class="refsect1" title="Description">
81 <a name="telepathy-glib-handle-channels-context.description"></a><h2>Description</h2>
82 <p>
83 Object used to represent the context of a Handler.HandleChannels()
84 D-Bus call on a <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a>.
85 </p>
86 </div>
87 <div class="refsect1" title="Details">
88 <a name="telepathy-glib-handle-channels-context.details"></a><h2>Details</h2>
89 <div class="refsect2" title="TpHandleChannelsContext">
90 <a name="TpHandleChannelsContext-struct"></a><h3>TpHandleChannelsContext</h3>
91 <pre class="programlisting">typedef struct _TpHandleChannelsContext TpHandleChannelsContext;</pre>
92 <p>
93 Data structure representing the context of a Handler.HandleChannels()
94 call.
95 </p>
96 <p class="since">Since 0.11.6</p>
97 </div>
98 <hr>
99 <div class="refsect2" title="tp_handle_channels_context_accept ()">
100 <a name="tp-handle-channels-context-accept"></a><h3>tp_handle_channels_context_accept ()</h3>
101 <pre class="programlisting"><span class="returnvalue">void</span> tp_handle_channels_context_accept (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>);</pre>
102 <p>
103 Called by <a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" title="TpBaseClientClassAddDispatchOperationImpl ()"><span class="type">TpBaseClientClassAddDispatchOperationImpl</span></a> when it's done so
104 the D-Bus method can return.
105 </p>
106 <div class="variablelist"><table border="0">
107 <col align="left" valign="top">
108 <tbody><tr>
109 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
110 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a>
111 </td>
112 </tr></tbody>
113 </table></div>
114 <p class="since">Since 0.11.6</p>
115 </div>
116 <hr>
117 <div class="refsect2" title="tp_handle_channels_context_delay ()">
118 <a name="tp-handle-channels-context-delay"></a><h3>tp_handle_channels_context_delay ()</h3>
119 <pre class="programlisting"><span class="returnvalue">void</span> tp_handle_channels_context_delay (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>);</pre>
120 <p>
121 Called by <a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" title="TpBaseClientClassAddDispatchOperationImpl ()"><span class="type">TpBaseClientClassAddDispatchOperationImpl</span></a> to indicate that it
122 implements the method in an async way. The caller must take a reference
123 to the <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> before calling this function, and
124 is responsible for calling either
125 <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept" title="tp_handle_channels_context_accept ()"><code class="function">tp_handle_channels_context_accept()</code></a> or
126 <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail" title="tp_handle_channels_context_fail ()"><code class="function">tp_handle_channels_context_fail()</code></a> later.
127 </p>
128 <div class="variablelist"><table border="0">
129 <col align="left" valign="top">
130 <tbody><tr>
131 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
132 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a>
133 </td>
134 </tr></tbody>
135 </table></div>
136 <p class="since">Since 0.11.6</p>
137 </div>
138 <hr>
139 <div class="refsect2" title="tp_handle_channels_context_fail ()">
140 <a name="tp-handle-channels-context-fail"></a><h3>tp_handle_channels_context_fail ()</h3>
141 <pre class="programlisting"><span class="returnvalue">void</span> tp_handle_channels_context_fail (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self</code></em>,
142 <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>);</pre>
143 <p>
144 Called by <a class="link" href="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" title="TpBaseClientClassAddDispatchOperationImpl ()"><span class="type">TpBaseClientClassAddDispatchOperationImpl</span></a> to raise a D-Bus error.
145 </p>
146 <div class="variablelist"><table border="0">
147 <col align="left" valign="top">
148 <tbody>
149 <tr>
150 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
151 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a>
152 </td>
153 </tr>
154 <tr>
155 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
156 <td>the error to return from the method
157 </td>
158 </tr>
159 </tbody>
160 </table></div>
161 <p class="since">Since 0.11.6</p>
162 </div>
163 </div>
164 <div class="refsect1" title="Property Details">
165 <a name="telepathy-glib-handle-channels-context.property-details"></a><h2>Property Details</h2>
166 <div class="refsect2" title='The "account" property'>
167 <a name="TpHandleChannelsContext--account"></a><h3>The <code class="literal">"account"</code> property</h3>
168 <pre class="programlisting"> "account" <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a>* : Read / Write / Construct Only</pre>
169 <p>
170 A <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> object representing the Account of the DispatchOperation
171 that has been passed to HandleChannels.
172 Read-only except during construction.
173 </p>
174 <p>
175 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
176 </p>
177 <p class="since">Since 0.11.6</p>
178 </div>
179 <hr>
180 <div class="refsect2" title='The "channels" property'>
181 <a name="TpHandleChannelsContext--channels"></a><h3>The <code class="literal">"channels"</code> property</h3>
182 <pre class="programlisting"> "channels" <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write / Construct Only</pre>
183 <p>
184 A <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> objects representing the channels
185 that have been passed to HandleChannels.
186 Read-only except during construction.
187 </p>
188 <p>
189 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
190 </p>
191 <p class="since">Since 0.11.6</p>
192 </div>
193 <hr>
194 <div class="refsect2" title='The "connection" property'>
195 <a name="TpHandleChannelsContext--connection"></a><h3>The <code class="literal">"connection"</code> property</h3>
196 <pre class="programlisting"> "connection" <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>* : Read / Write / Construct Only</pre>
197 <p>
198 A <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> object representing the Connection of the DispatchOperation
199 that has been passed to HandleChannels.
200 Read-only except during construction.
201 </p>
202 <p>
203 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
204 </p>
205 <p class="since">Since 0.11.6</p>
206 </div>
207 <hr>
208 <div class="refsect2" title='The "dbus-context" property'>
209 <a name="TpHandleChannelsContext--dbus-context"></a><h3>The <code class="literal">"dbus-context"</code> property</h3>
210 <pre class="programlisting"> "dbus-context" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only</pre>
211 <p>
212 The <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGMethod.html#DBusGMethodInvocation"><span class="type">DBusGMethodInvocation</span></a> representing the D-Bus context of the
213 HandleChannels call.
214 Can only be written during construction.
215 </p>
216 <p class="since">Since 0.11.6</p>
217 </div>
218 <hr>
219 <div class="refsect2" title='The "handler-info" property'>
220 <a name="TpHandleChannelsContext--handler-info"></a><h3>The <code class="literal">"handler-info"</code> property</h3>
221 <pre class="programlisting"> "handler-info" <span class="type">GHashTable_gchararray+GValue_*</span> : Read / Write / Construct Only</pre>
222 <p>
223 A <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> where the keys are string and values are GValue instances.
224 It represents the Handler_info hash table that has been passed to
225 HandleChannels.
226 </p>
227 <p>
228 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
229 </p>
230 <p class="since">Since 0.11.6</p>
231 </div>
232 <hr>
233 <div class="refsect2" title='The "requests-satisfied" property'>
234 <a name="TpHandleChannelsContext--requests-satisfied"></a><h3>The <code class="literal">"requests-satisfied"</code> property</h3>
235 <pre class="programlisting"> "requests-satisfied" <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write / Construct Only</pre>
236 <p>
237 A <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> objects representing the
238 requests that have been passed to HandleChannels.
239 Read-only except during construction.
240 </p>
241 <p>
242 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
243 </p>
244 <p class="since">Since 0.11.6</p>
245 </div>
246 <hr>
247 <div class="refsect2" title='The "user-action-time" property'>
248 <a name="TpHandleChannelsContext--user-action-time"></a><h3>The <code class="literal">"user-action-time"</code> property</h3>
249 <pre class="programlisting"> "user-action-time" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct Only</pre>
250 <p>
251 The User_Action_Time that have been passed to HandleChannels.
252 Read-only except during construction.
253 </p>
254 <p>
255 If 0, the action doesn't involve any user action. Clients
256 SHOULD avoid stealing focus when presenting the channel.
257 </p>
258 <p>
259 If <a href="/usr/share/gtk-doc/html/glib/glib-Limits-of-Basic-Types.html#G-MAXINT64:CAPS"><span class="type">G_MAXINT64</span></a>: clients SHOULD behave as though the user
260 action happened at the current time, e.g. a client MAY
261 request that its window gains focus.
262 </p>
263 <p>Allowed values: &gt;= 0</p>
264 <p>Default value: 0</p>
265 <p class="since">Since 0.11.6</p>
266 </div>
267 </div>
268 <div class="refsect1" title="Signal Details">
269 <a name="telepathy-glib-handle-channels-context.signal-details"></a><h2>Signal Details</h2>
270 <div class="refsect2" title='The "done" signal'>
271 <a name="TpHandleChannelsContext-done"></a><h3>The <code class="literal">"done"</code> signal</h3>
272 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *self,
273 <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>
274 <p>
275 Emitted when tp_handle_channels_context_accept has been called on <em class="parameter"><code>self</code></em>.
276 </p>
277 <div class="variablelist"><table border="0">
278 <col align="left" valign="top">
279 <tbody>
280 <tr>
281 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
282 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a>
283 </td>
284 </tr>
285 <tr>
286 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
287 <td>user data set when the signal handler was connected.</td>
288 </tr>
289 </tbody>
290 </table></div>
291 <p class="since">Since 0.11.6</p>
292 </div>
293 </div>
294 </div>
295 <div class="footer">
296 <hr>
297 Generated by GTK-Doc V1.15</div>
298 </body>
299 </html>
77 <link rel="up" href="ch-service-handles.html" title="Service-side handle repositories">
88 <link rel="prev" href="ch-service-handles.html" title="Service-side handle repositories">
99 <link rel="next" href="TpStaticHandleRepo.html" title="TpStaticHandleRepo">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
104104
105105
106106 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet">TpHandleSet</a>;
107 #define <a class="link" href="telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS" title="TP_TYPE_HANDLE_SET">TP_TYPE_HANDLE_SET</a>
107108 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc" title="TpHandleSetMemberFunc ()">*TpHandleSetMemberFunc</a>) (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
108109 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>,
109110 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> userdata</code></em>);
110111 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="returnvalue">TpHandleSet</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-new" title="tp_handle_set_new ()">tp_handle_set_new</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleRepoIface"><span class="type">TpHandleRepoIface</span></a> *repo</code></em>);
112 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="returnvalue">TpHandleSet</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-copy" title="tp_handle_set_copy ()">tp_handle_set_copy</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *other</code></em>);
113 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-clear" title="tp_handle_set_clear ()">tp_handle_set_clear</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
111114 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-destroy" title="tp_handle_set_destroy ()">tp_handle_set_destroy</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
112115 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-peek" title="tp_handle_set_peek ()">tp_handle_set_peek</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
113116 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-add" title="tp_handle_set_add ()">tp_handle_set_add</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
114117 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>);
115118 <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-handle-repo.html#tp-handle-set-remove" title="tp_handle_set_remove ()">tp_handle_set_remove</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
116119 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>);
117 <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-handle-repo.html#tp-handle-set-is-member" title="tp_handle_set_is_member ()">tp_handle_set_is_member</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
120 <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-handle-repo.html#tp-handle-set-is-member" title="tp_handle_set_is_member ()">tp_handle_set_is_member</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
118121 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>);
119122 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-foreach" title="tp_handle_set_foreach ()">tp_handle_set_foreach</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
120123 <em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc" title="TpHandleSetMemberFunc ()"><span class="type">TpHandleSetMemberFunc</span></a> func</code></em>,
121124 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> userdata</code></em>);
122 <a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-size" title="tp_handle_set_size ()">tp_handle_set_size</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
123 <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-to-array" title="tp_handle_set_to_array ()">tp_handle_set_to_array</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
125 <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-handle-repo.html#tp-handle-set-is-empty" title="tp_handle_set_is_empty ()">tp_handle_set_is_empty</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
126 <a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a> <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-size" title="tp_handle_set_size ()">tp_handle_set_size</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
127 <a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-to-array" title="tp_handle_set_to_array ()">tp_handle_set_to_array</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);
124128 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-update" title="tp_handle_set_update ()">tp_handle_set_update</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
125129 <em class="parameter"><code>const <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="type">TpIntSet</span></a> *add</code></em>);
126130 <a class="link" href="telepathy-glib-TpIntSet.html#TpIntSet" title="TpIntSet"><span class="returnvalue">TpIntSet</span></a> * <a class="link" href="telepathy-glib-handle-repo.html#tp-handle-set-difference-update" title="tp_handle_set_difference_update ()">tp_handle_set_difference_update</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
831835 </p>
832836 </div>
833837 <hr>
838 <div class="refsect2" title="TP_TYPE_HANDLE_SET">
839 <a name="TP-TYPE-HANDLE-SET:CAPS"></a><h3>TP_TYPE_HANDLE_SET</h3>
840 <pre class="programlisting">#define TP_TYPE_HANDLE_SET (tp_handle_set_get_type ())
841 </pre>
842 <p>
843 The boxed type of a <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a>.
844 </p>
845 <p class="since">Since 0.11.6</p>
846 </div>
847 <hr>
834848 <div class="refsect2" title="TpHandleSetMemberFunc ()">
835849 <a name="TpHandleSetMemberFunc"></a><h3>TpHandleSetMemberFunc ()</h3>
836850 <pre class="programlisting"><span class="returnvalue">void</span> (*TpHandleSetMemberFunc) (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
886900 </table></div>
887901 </div>
888902 <hr>
903 <div class="refsect2" title="tp_handle_set_copy ()">
904 <a name="tp-handle-set-copy"></a><h3>tp_handle_set_copy ()</h3>
905 <pre class="programlisting"><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="returnvalue">TpHandleSet</span></a> * tp_handle_set_copy (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *other</code></em>);</pre>
906 <p>
907 Creates a new <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> with the same contents as <em class="parameter"><code>other</code></em>.
908 </p>
909 <div class="variablelist"><table border="0">
910 <col align="left" valign="top">
911 <tbody>
912 <tr>
913 <td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
914 <td>another handle set
915 </td>
916 </tr>
917 <tr>
918 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
919 <td> a new set
920
921 </td>
922 </tr>
923 </tbody>
924 </table></div>
925 <p class="since">Since 0.11.6</p>
926 </div>
927 <hr>
928 <div class="refsect2" title="tp_handle_set_clear ()">
929 <a name="tp-handle-set-clear"></a><h3>tp_handle_set_clear ()</h3>
930 <pre class="programlisting"><span class="returnvalue">void</span> tp_handle_set_clear (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
931 <p>
932 Remove every handle from <em class="parameter"><code>set</code></em>, releasing the references it holds.
933 </p>
934 <div class="variablelist"><table border="0">
935 <col align="left" valign="top">
936 <tbody><tr>
937 <td><p><span class="term"><em class="parameter"><code>set</code></em> :</span></p></td>
938 <td>
939 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> to clear
940 </td>
941 </tr></tbody>
942 </table></div>
943 <p class="since">Since 0.11.6</p>
944 </div>
945 <hr>
889946 <div class="refsect2" title="tp_handle_set_destroy ()">
890947 <a name="tp-handle-set-destroy"></a><h3>tp_handle_set_destroy ()</h3>
891948 <pre class="programlisting"><span class="returnvalue">void</span> tp_handle_set_destroy (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
9861043 <hr>
9871044 <div class="refsect2" title="tp_handle_set_is_member ()">
9881045 <a name="tp-handle-set-is-member"></a><h3>tp_handle_set_is_member ()</h3>
989 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_handle_set_is_member (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
1046 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_handle_set_is_member (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>,
9901047 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>);</pre>
9911048 <p>
9921049 Check if the handle is in this set
10441101 </table></div>
10451102 </div>
10461103 <hr>
1104 <div class="refsect2" title="tp_handle_set_is_empty ()">
1105 <a name="tp-handle-set-is-empty"></a><h3>tp_handle_set_is_empty ()</h3>
1106 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_handle_set_is_empty (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
1107 <p>
1108 Return the same thing as <code class="code">(tp_handle_set_size (set) == 0)</code>,
1109 but calculated more efficiently.
1110 </p>
1111 <div class="variablelist"><table border="0">
1112 <col align="left" valign="top">
1113 <tbody>
1114 <tr>
1115 <td><p><span class="term"><em class="parameter"><code>set</code></em> :</span></p></td>
1116 <td>
1117 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> to check
1118 </td>
1119 </tr>
1120 <tr>
1121 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1122 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the set has no members
1123
1124 </td>
1125 </tr>
1126 </tbody>
1127 </table></div>
1128 <p class="since">Since 0.11.6</p>
1129 </div>
1130 <hr>
10471131 <div class="refsect2" title="tp_handle_set_size ()">
10481132 <a name="tp-handle-set-size"></a><h3>tp_handle_set_size ()</h3>
1049 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a> tp_handle_set_size (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
1133 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a> tp_handle_set_size (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
10501134 <p>
10511135
10521136 </p>
10691153 <hr>
10701154 <div class="refsect2" title="tp_handle_set_to_array ()">
10711155 <a name="tp-handle-set-to-array"></a><h3>tp_handle_set_to_array ()</h3>
1072 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * tp_handle_set_to_array (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
1156 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Arrays.html#GArray"><span class="returnvalue">GArray</span></a> * tp_handle_set_to_array (<em class="parameter"><code>const <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a> *set</code></em>);</pre>
10731157 <p>
10741158
10751159 </p>
11751259 </div>
11761260 <div class="footer">
11771261 <hr>
1178 Generated by GTK-Doc V1.14</div>
1262 Generated by GTK-Doc V1.15</div>
11791263 </body>
11801264 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-defs.html" title="Miscellaneous definitions">
99 <link rel="next" href="telepathy-glib-interfaces.html" title="Telepathy protocol interface and property names">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
154154 </div>
155155 <div class="footer">
156156 <hr>
157 Generated by GTK-Doc V1.14</div>
157 Generated by GTK-Doc V1.15</div>
158158 </body>
159159 </html>
77 <link rel="up" href="ch-protocol.html" title="The Telepathy protocol">
88 <link rel="prev" href="telepathy-glib-handle.html" title="TpHandle">
99 <link rel="next" href="telepathy-glib-enums.html" title="Telepathy protocol enumerations">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
145145 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CLIENT-INTERFACE-REQUESTS:CAPS" title="TP_IFACE_CLIENT_INTERFACE_REQUESTS">TP_IFACE_CLIENT_INTERFACE_REQUESTS</a>
146146 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CLIENT-INTERFACE-REQUESTS:CAPS" title="TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS">TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS</a>
147147 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS" title="TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE">TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE</a>
148 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS" title="TP_PROP_ACCOUNT_CHANGING_PRESENCE">TP_PROP_ACCOUNT_CHANGING_PRESENCE</a>
148149 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS" title="TP_PROP_ACCOUNT_CONNECTION">TP_PROP_ACCOUNT_CONNECTION</a>
149150 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS" title="TP_PROP_ACCOUNT_CONNECTION_STATUS">TP_PROP_ACCOUNT_CONNECTION_STATUS</a>
150151 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS" title="TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON">TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON</a>
176177 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS" title="TP_PROP_CHANNEL_INITIATOR_HANDLE">TP_PROP_CHANNEL_INITIATOR_HANDLE</a>
177178 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS" title="TP_PROP_CHANNEL_INITIATOR_ID">TP_PROP_CHANNEL_INITIATOR_ID</a>
178179 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS" title="TP_PROP_CHANNEL_INTERFACES">TP_PROP_CHANNEL_INTERFACES</a>
180 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES">TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES</a>
181 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES">TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES</a>
179182 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS" title="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS">TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS</a>
180183 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-HANDLE-OWNERS:CAPS" title="TP_PROP_CHANNEL_INTERFACE_GROUP_HANDLE_OWNERS">TP_PROP_CHANNEL_INTERFACE_GROUP_HANDLE_OWNERS</a>
181184 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-LOCAL-PENDING-MEMBERS:CAPS" title="TP_PROP_CHANNEL_INTERFACE_GROUP_LOCAL_PENDING_MEMBERS">TP_PROP_CHANNEL_INTERFACE_GROUP_LOCAL_PENDING_MEMBERS</a>
239242 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-CONTACT-INFO-SUPPORTED-FIELDS:CAPS" title="TP_PROP_CONNECTION_INTERFACE_CONTACT_INFO_SUPPORTED_FIELDS">TP_PROP_CONNECTION_INTERFACE_CONTACT_INFO_SUPPORTED_FIELDS</a>
240243 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL:CAPS" title="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL">TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL</a>
241244 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL-TYPES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL_TYPES">TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL_TYPES</a>
245 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES">TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES</a>
242246 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS" title="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS">TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS</a>
243247 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES">TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES</a>
244248 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES">TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES</a>
256260 #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>
257261 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CAPABILITIES-CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_CAPABILITIES_CAPS">TP_TOKEN_CONNECTION_INTERFACE_CAPABILITIES_CAPS</a>
258262 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-CAPABILITIES-CAPABILITIES:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES">TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES</a>
263 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO">TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO</a>
259264 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE">TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE</a>
260265 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-LOCATION-LOCATION:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_LOCATION_LOCATION">TP_TOKEN_CONNECTION_INTERFACE_LOCATION_LOCATION</a>
261266 #define <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CHANNEL-INTERFACE-MEDIA-SIGNALLING-GTALK-P2P:CAPS" title="TP_TOKEN_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GTALK_P2P">TP_TOKEN_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GTALK_P2P</a>
283288 <code class="literal">org.freedesktop.Telepathy.Channel.Interface.Group.GroupFlags</code>.
284289 </p>
285290 <p>
286 Since 0.11.UNRELEASED it also provides cpp defines like
291 Since 0.11.5 it also provides cpp defines like
287292 <a class="link" href="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-ALIASING-ALIAS:CAPS" title="TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS"><code class="literal">TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS</code></a> for contact attributes like
288293 "org.freedesktop.Telepathy.Connection.Interface.Aliasing/alias",
289294 and defines like
11351140 </p>
11361141 </div>
11371142 <hr>
1143 <div class="refsect2" title="TP_PROP_ACCOUNT_CHANGING_PRESENCE">
1144 <a name="TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS"></a><h3>TP_PROP_ACCOUNT_CHANGING_PRESENCE</h3>
1145 <pre class="programlisting">#define TP_PROP_ACCOUNT_CHANGING_PRESENCE</pre>
1146 <p>
1147 The fully-qualified property name "org.freedesktop.Telepathy.Account.ChangingPresence"
1148 </p>
1149 </div>
1150 <hr>
11381151 <div class="refsect2" title="TP_PROP_ACCOUNT_CONNECTION">
11391152 <a name="TP-PROP-ACCOUNT-CONNECTION:CAPS"></a><h3>TP_PROP_ACCOUNT_CONNECTION</h3>
11401153 <pre class="programlisting">#define TP_PROP_ACCOUNT_CONNECTION</pre>
13831396 </p>
13841397 </div>
13851398 <hr>
1399 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES">
1400 <a name="TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES</h3>
1401 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES</pre>
1402 <p>
1403 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.DTMF.CurrentlySendingTones"
1404 </p>
1405 </div>
1406 <hr>
1407 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES">
1408 <a name="TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES</h3>
1409 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES</pre>
1410 <p>
1411 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.DTMF.InitialTones"
1412 </p>
1413 </div>
1414 <hr>
13861415 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS">
13871416 <a name="TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS</h3>
13881417 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS</pre>
18871916 </p>
18881917 </div>
18891918 <hr>
1919 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES">
1920 <a name="TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES</h3>
1921 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES</pre>
1922 <p>
1923 The fully-qualified property name "org.freedesktop.Telepathy.Connection.Interface.Location.SupportedLocationFeatures"
1924 </p>
1925 </div>
1926 <hr>
18901927 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS">
18911928 <a name="TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS</h3>
18921929 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS</pre>
20232060 </p>
20242061 </div>
20252062 <hr>
2063 <div class="refsect2" title="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO">
2064 <a name="TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS"></a><h3>TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO</h3>
2065 <pre class="programlisting">#define TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO</pre>
2066 <p>
2067 The fully-qualified contact attribute token name "org.freedesktop.Telepathy.Connection.Interface.ContactInfo/info"
2068 </p>
2069 </div>
2070 <hr>
20262071 <div class="refsect2" title="TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE">
20272072 <a name="TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS"></a><h3>TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE</h3>
20282073 <pre class="programlisting">#define TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE</pre>
20742119 </div>
20752120 <div class="footer">
20762121 <hr>
2077 Generated by GTK-Doc V1.14</div>
2122 Generated by GTK-Doc V1.15</div>
20782123 </body>
20792124 </html>
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
99 <link rel="next" href="telepathy-glib-account-manager.html" title="TpAccountManager">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
44404440 </div>
44414441 <div class="footer">
44424442 <hr>
4443 Generated by GTK-Doc V1.14</div>
4443 Generated by GTK-Doc V1.15</div>
44444444 </body>
44454445 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="telepathy-glib-base-client.html" title="TpBaseClient">
99 <link rel="next" href="telepathy-glib-add-dispatch-operation-context.html" title="TpAddDispatchOperationContext">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
8787 Data structure representing the context of a Observer.ObserveChannels()
8888 call.
8989 </p>
90 <p class="since">Since 0.11.UNRELEASED</p>
90 <p class="since">Since 0.11.5</p>
9191 </div>
9292 <hr>
9393 <div class="refsect2" title="tp_observe_channels_context_accept ()">
105105 </td>
106106 </tr></tbody>
107107 </table></div>
108 <p class="since">Since 0.11.UNRELEASED</p>
108 <p class="since">Since 0.11.5</p>
109109 </div>
110110 <hr>
111111 <div class="refsect2" title="tp_observe_channels_context_delay ()">
126126 </td>
127127 </tr></tbody>
128128 </table></div>
129 <p class="since">Since 0.11.UNRELEASED</p>
129 <p class="since">Since 0.11.5</p>
130130 </div>
131131 <hr>
132132 <div class="refsect2" title="tp_observe_channels_context_fail ()">
151151 </tr>
152152 </tbody>
153153 </table></div>
154 <p class="since">Since 0.11.UNRELEASED</p>
154 <p class="since">Since 0.11.5</p>
155155 </div>
156156 <hr>
157157 <div class="refsect2" title="tp_observe_channels_context_is_recovering ()">
182182 </tr>
183183 </tbody>
184184 </table></div>
185 <p class="since">Since 0.11.UNRELEASED</p>
185 <p class="since">Since 0.11.5</p>
186186 </div>
187187 </div>
188188 <div class="refsect1" title="Property Details">
198198 <p>
199199 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
200200 </p>
201 <p class="since">Since 0.11.UNRELEASED</p>
201 <p class="since">Since 0.11.5</p>
202202 </div>
203203 <hr>
204204 <div class="refsect2" title='The "channels" property'>
212212 <p>
213213 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
214214 </p>
215 <p class="since">Since 0.11.UNRELEASED</p>
215 <p class="since">Since 0.11.5</p>
216216 </div>
217217 <hr>
218218 <div class="refsect2" title='The "connection" property'>
226226 <p>
227227 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
228228 </p>
229 <p class="since">Since 0.11.UNRELEASED</p>
229 <p class="since">Since 0.11.5</p>
230230 </div>
231231 <hr>
232232 <div class="refsect2" title='The "dbus-context" property'>
237237 ObserveChannels call.
238238 Can only be written during construction.
239239 </p>
240 <p class="since">Since 0.11.UNRELEASED</p>
240 <p class="since">Since 0.11.5</p>
241241 </div>
242242 <hr>
243243 <div class="refsect2" title='The "dispatch-operation" property'>
249249 or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none has been passed.
250250 Read-only except during construction.
251251 </p>
252 <p class="since">Since 0.11.UNRELEASED</p>
252 <p class="since">Since 0.11.5</p>
253253 </div>
254254 <hr>
255255 <div class="refsect2" title='The "observer-info" property'>
265265 <p>
266266 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
267267 </p>
268 <p class="since">Since 0.11.UNRELEASED</p>
268 <p class="since">Since 0.11.5</p>
269269 </div>
270270 <hr>
271271 <div class="refsect2" title='The "requests" property'>
279279 <p>
280280 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
281281 </p>
282 <p class="since">Since 0.11.UNRELEASED</p>
282 <p class="since">Since 0.11.5</p>
283283 </div>
284284 </div>
285285 </div>
286286 <div class="footer">
287287 <hr>
288 Generated by GTK-Doc V1.14</div>
288 Generated by GTK-Doc V1.15</div>
289289 </body>
290290 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="telepathy-glib-proxy.html" title="TpProxy">
99 <link rel="next" href="telepathy-glib-proxy-tp-properties.html" title="TpProxy Telepathy Properties">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
12791279 </div>
12801280 <div class="footer">
12811281 <hr>
1282 Generated by GTK-Doc V1.14</div>
1282 Generated by GTK-Doc V1.15</div>
12831283 </body>
12841284 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="telepathy-glib-asv.html" title="Manipulating a{sv} mappings">
99 <link rel="next" href="ch-protocol.html" title="The Telepathy protocol">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
843843 </div>
844844 <div class="footer">
845845 <hr>
846 Generated by GTK-Doc V1.14</div>
846 Generated by GTK-Doc V1.15</div>
847847 </body>
848848 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="telepathy-glib-proxy-dbus-core.html" title="TpProxy D-Bus core methods">
99 <link rel="next" href="telepathy-glib-dbus.html" title="D-Bus utilities">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
899899 </div>
900900 <div class="footer">
901901 <hr>
902 Generated by GTK-Doc V1.14</div>
902 Generated by GTK-Doc V1.15</div>
903903 </body>
904904 </html>
77 <link rel="up" href="ch-dbus.html" title="General D-Bus support">
88 <link rel="prev" href="ch-dbus.html" title="General D-Bus support">
99 <link rel="next" href="telepathy-glib-proxy-dbus-core.html" title="TpProxy D-Bus core methods">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
432432 <td><p><span class="term"><em class="parameter"><code>features</code></em> :</span></p></td>
433433 <td> an array
434434 of desired features, ending with 0; <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is equivalent to an array
435 containing only 0. <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. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> zero-terminated=1. </td>
435 containing only 0. <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][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym> zero-terminated=1]</span>
436 </td>
436437 </tr>
437438 <tr>
438439 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
581582 <td> a borrowed reference to the <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> for
582583 this object, if any; always <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this object is itself a
583584 <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a>. The caller must reference the returned object with
584 <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.
585 . <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
585 <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. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
586 </td>
586587 </tr>
587588 </tbody>
588589 </table></div>
772773 <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> codes for use with the <a class="link" href="telepathy-glib-proxy.html#TP-DBUS-ERRORS:CAPS" title="TP_DBUS_ERRORS"><code class="literal">TP_DBUS_ERRORS</code></a> domain.
773774 </p>
774775 <p>
775 Since 0.11.UNRELEASED, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
776 Since 0.11.5, there is a corresponding <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type,
776777 <a class="link" href="telepathy-glib-proxy.html#TP-TYPE-DBUS-ERROR:CAPS" title="TP_TYPE_DBUS_ERROR"><code class="literal">TP_TYPE_DBUS_ERROR</code></a>.
777778 </p>
778779 <div class="variablelist"><table border="0">
860861 <p>
861862 The <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html#GEnumClass"><span class="type">GEnumClass</span></a> type of a <a class="link" href="telepathy-glib-proxy.html#TpDBusError" title="enum TpDBusError"><span class="type">TpDBusError</span></a>.
862863 </p>
863 <p class="since">Since 0.11.UNRELEASED</p>
864 <p class="since">Since 0.11.5</p>
864865 </div>
865866 </div>
866867 <div class="refsect1" title="Property Details">
10041005 </div>
10051006 <div class="footer">
10061007 <hr>
1007 Generated by GTK-Doc V1.14</div>
1008 Generated by GTK-Doc V1.15</div>
10081009 </body>
10091010 </html>
77 <link rel="up" href="ch-service-base.html" title="Service-side implementation">
88 <link rel="prev" href="ch-service-base.html" title="Service-side implementation">
99 <link rel="next" href="TpBaseConnectionManager.html" title="TpBaseConnectionManager">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
117117 </div>
118118 <div class="footer">
119119 <hr>
120 Generated by GTK-Doc V1.14</div>
120 Generated by GTK-Doc V1.15</div>
121121 </body>
122122 </html>
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-simple-observer.html" title="TpSimpleObserver">
9 <link rel="next" href="ch-service-handles.html" title="Service-side handle repositories">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
9 <link rel="next" href="telepathy-glib-simple-handler.html" title="TpSimpleHandler">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
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="ch-service-handles.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-simple-handler.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-simple-approver.synopsis" class="shortcut">Top</a>
7575 <a name="telepathy-glib-simple-approver.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
7676 <p>
7777 TpSimpleApprover implements
78 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>.</p>
78 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientHandler">TpSvcClientHandler</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientInterfaceRequests">TpSvcClientInterfaceRequests</a>.</p>
7979 </div>
8080 <div class="refsect1" title="Properties">
8181 <a name="telepathy-glib-simple-approver.properties"></a><h2>Properties</h2>
161161 <p>
162162 Data structure representing a simple Approver implementation.
163163 </p>
164 <p class="since">Since 0.11.UNRELEASED</p>
164 <p class="since">Since 0.11.5</p>
165165 </div>
166166 <hr>
167167 <div class="refsect2" title="TpSimpleApproverAddDispatchOperationImpl ()">
204204 <tr>
205205 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
206206 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
207 all having <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> prepared. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel. </td>
207 all having <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> prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
208 </td>
208209 </tr>
209210 <tr>
210211 <td><p><span class="term"><em class="parameter"><code>dispatch_operation</code></em> :</span></p></td>
211212 <td> a <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>;
212 the dispatch_operation is not guaranteed to be prepared. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
213 the dispatch_operation is not guaranteed to be prepared. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
214 </td>
213215 </tr>
214216 <tr>
215217 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
224226 </tr>
225227 </tbody>
226228 </table></div>
227 <p class="since">Since 0.11.UNRELEASED</p>
229 <p class="since">Since 0.11.5</p>
228230 </div>
229231 <hr>
230232 <div class="refsect2" title="tp_simple_approver_new ()">
274276 </tr>
275277 <tr>
276278 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
277 <td> a new <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover"><span class="type">TpSimpleApprover</span></a>
278 . type TelepathyGLib.SimpleApprover</td>
279 <td> a new <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover"><span class="type">TpSimpleApprover</span></a>. <span class="annotation">[type TelepathyGLib.SimpleApprover]</span>
280 </td>
279281 </tr>
280282 </tbody>
281283 </table></div>
282 <p class="since">Since 0.11.UNRELEASED</p>
284 <p class="since">Since 0.11.5</p>
283285 </div>
284286 </div>
285287 <div class="refsect1" title="Property Details">
294296 <p>
295297 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
296298 </p>
297 <p class="since">Since 0.11.UNRELEASED</p>
299 <p class="since">Since 0.11.5</p>
298300 </div>
299301 <hr>
300302 <div class="refsect2" title='The "destroy" property'>
304306 The <a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> function called to free the user-data pointer when
305307 the <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover"><span class="type">TpSimpleApprover</span></a> is destroyed.
306308 </p>
307 <p class="since">Since 0.11.UNRELEASED</p>
309 <p class="since">Since 0.11.5</p>
308310 </div>
309311 <hr>
310312 <div class="refsect2" title='The "user-data" property'>
314316 The user-data pointer passed to the callback implementing the
315317 ApproverChannels D-Bus method.
316318 </p>
317 <p class="since">Since 0.11.UNRELEASED</p>
319 <p class="since">Since 0.11.5</p>
318320 </div>
319321 </div>
320322 </div>
321323 <div class="footer">
322324 <hr>
323 Generated by GTK-Doc V1.14</div>
325 Generated by GTK-Doc V1.15</div>
324326 </body>
325327 </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>TpSimpleHandler</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="telepathy-glib-simple-approver.html" title="TpSimpleApprover">
9 <link rel="next" href="ch-service-handles.html" title="Service-side handle repositories">
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-simple-approver.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="ch-service-handles.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-simple-handler.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-simple-handler.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-simple-handler.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-simple-handler.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
30  | 
31 <a href="#telepathy-glib-simple-handler.properties" class="shortcut">Properties</a>
32 </td></tr>
33 </table>
34 <div class="refentry" title="TpSimpleHandler">
35 <a name="telepathy-glib-simple-handler"></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-simple-handler.top_of_page"></a>TpSimpleHandler</span></h2>
39 <p>TpSimpleHandler — a subclass of <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="type">TpBaseClient</span></a> implementing
40 a simple Handler</p>
41 </td>
42 <td valign="top" align="right"></td>
43 </tr></table></div>
44 <div class="refsynopsisdiv" title="Synopsis">
45 <a name="telepathy-glib-simple-handler.synopsis"></a><h2>Synopsis</h2>
46 <a name="TpSimpleHandler"></a><pre class="synopsis">
47 #include &lt;telepathy-glib/simple-handler.h&gt;
48
49 <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler-struct" title="TpSimpleHandler">TpSimpleHandler</a>;
50 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl" title="TpSimpleHandlerHandleChannelsImpl ()">*TpSimpleHandlerHandleChannelsImpl</a>)
51 (<em class="parameter"><code><a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a> *self</code></em>,
52 <em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
53 <em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *connection</code></em>,
54 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *channels</code></em>,
55 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *requests_satisfied</code></em>,
56 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> user_action_time</code></em>,
57 <em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *context</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 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="returnvalue">TpBaseClient</span></a> * <a class="link" href="telepathy-glib-simple-handler.html#tp-simple-handler-new" title="tp_simple_handler_new ()">tp_simple_handler_new</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> *dbus</code></em>,
60 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> bypass_approval</code></em>,
61 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> requests</code></em>,
62 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
63 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> unique</code></em>,
64 <em class="parameter"><code><a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl" title="TpSimpleHandlerHandleChannelsImpl ()"><span class="type">TpSimpleHandlerHandleChannelsImpl</span></a> callback</code></em>,
65 <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>,
66 <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>);
67 </pre>
68 </div>
69 <div class="refsect1" title="Object Hierarchy">
70 <a name="telepathy-glib-simple-handler.object-hierarchy"></a><h2>Object Hierarchy</h2>
71 <pre class="synopsis">
72 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
73 +----<a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>
74 +----TpSimpleHandler
75 </pre>
76 </div>
77 <div class="refsect1" title="Implemented Interfaces">
78 <a name="telepathy-glib-simple-handler.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
79 <p>
80 TpSimpleHandler implements
81 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientHandler">TpSvcClientHandler</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientInterfaceRequests">TpSvcClientInterfaceRequests</a>.</p>
82 </div>
83 <div class="refsect1" title="Properties">
84 <a name="telepathy-glib-simple-handler.properties"></a><h2>Properties</h2>
85 <pre class="synopsis">
86 "<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler--bypass-approval" title='The "bypass-approval" property'>bypass-approval</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write / Construct Only
87 "<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler--callback" title='The "callback" property'>callback</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only
88 "<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler--destroy" title='The "destroy" property'>destroy</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only
89 "<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler--requests" title='The "requests" property'>requests</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write / Construct Only
90 "<a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler--user-data" title='The "user-data" property'>user-data</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only
91 </pre>
92 </div>
93 <div class="refsect1" title="Description">
94 <a name="telepathy-glib-simple-handler.description"></a><h2>Description</h2>
95 <p>
96 This class makes it easier to write <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient"><span class="type">TpSvcClient</span></a> implementing the
97 TpSvcClientHandler interface.
98 </p>
99 <p>
100 A typical simple handler would look liks this:
101 </p>
102 <div class="informalexample">
103 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
104 <tbody>
105 <tr>
106 <td class="listing_lines" align="right"><pre>1
107 2
108 3
109 4
110 5
111 6
112 7
113 8
114 9
115 10
116 11
117 12
118 13
119 14
120 15
121 16
122 17
123 18
124 19
125 20
126 21
127 22
128 23
129 24
130 25</pre></td>
131 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
132 <span class="function">my_handle_channels</span> <span class="symbol">(</span>TpSimpleHandler <span class="symbol">*</span>self<span class="symbol">,</span>
133 TpAccount <span class="symbol">*</span>account<span class="symbol">,</span>
134 TpConnection <span class="symbol">*</span>connection<span class="symbol">,</span>
135 GList <span class="symbol">*</span>channels<span class="symbol">,</span>
136 GList <span class="symbol">*</span>requests_satisfied<span class="symbol">,</span>
137 gint64 user_action_time<span class="symbol">,</span>
138 GList <span class="symbol">*</span>requests<span class="symbol">,</span>
139 TpHandleChannelsContext <span class="symbol">*</span>context<span class="symbol">,</span>
140 gpointer user_data<span class="symbol">)</span>
141 <span class="symbol">{</span>
142 <span class="comment">/* start handling the channels here */</span>
143
144 <span class="function"><a href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept">tp_handle_channels_context_accept</a></span> <span class="symbol">(</span>context<span class="symbol">);</span>
145 <span class="symbol">}</span>
146
147 client <span class="symbol">=</span> <span class="function"><a href="telepathy-glib-simple-handler.html#tp-simple-handler-new">tp_simple_handler_new</a></span> <span class="symbol">(</span>dbus<span class="symbol">,</span> FALSE<span class="symbol">,</span> FALSE<span class="symbol">,</span> <span class="string">&quot;MyHandler&quot;</span><span class="symbol">,</span> FALSE<span class="symbol">,</span>
148 my_handle_channels<span class="symbol">,</span> user_data<span class="symbol">);</span>
149
150 <span class="function"><a href="telepathy-glib-base-client.html#tp-base-client-take-handler-filter">tp_base_client_take_handler_filter</a></span> <span class="symbol">(</span>client<span class="symbol">,</span> <span class="function"><a href="telepathy-glib-asv.html#tp-asv-new">tp_asv_new</a></span> <span class="symbol">(</span>
151 TP_PROP_CHANNEL_CHANNEL_TYPE<span class="symbol">,</span> G_TYPE_STRING<span class="symbol">,</span> TP_IFACE_CHANNEL_TYPE_TEXT<span class="symbol">,</span>
152 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE<span class="symbol">,</span> G_TYPE_UINT<span class="symbol">,</span> TP_HANDLE_TYPE_CONTACT<span class="symbol">,</span>
153 NULL<span class="symbol">));</span>
154
155 <span class="function"><a href="telepathy-glib-base-client.html#tp-base-client-register">tp_base_client_register</a></span> <span class="symbol">(</span>client<span class="symbol">,</span> NULL<span class="symbol">);</span></pre></td>
156 </tr>
157 </tbody>
158 </table>
159 </div>
160
161 <p>
162 </p>
163 <p>
164 See examples/client/text-handler.c for a complete example.
165 </p>
166 </div>
167 <div class="refsect1" title="Details">
168 <a name="telepathy-glib-simple-handler.details"></a><h2>Details</h2>
169 <div class="refsect2" title="TpSimpleHandler">
170 <a name="TpSimpleHandler-struct"></a><h3>TpSimpleHandler</h3>
171 <pre class="programlisting">typedef struct _TpSimpleHandler TpSimpleHandler;</pre>
172 <p>
173 Data structure representing a simple Handler implementation.
174 </p>
175 <p class="since">Since 0.11.6</p>
176 </div>
177 <hr>
178 <div class="refsect2" title="TpSimpleHandlerHandleChannelsImpl ()">
179 <a name="TpSimpleHandlerHandleChannelsImpl"></a><h3>TpSimpleHandlerHandleChannelsImpl ()</h3>
180 <pre class="programlisting"><span class="returnvalue">void</span> (*TpSimpleHandlerHandleChannelsImpl)
181 (<em class="parameter"><code><a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a> *self</code></em>,
182 <em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
183 <em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *connection</code></em>,
184 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *channels</code></em>,
185 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *requests_satisfied</code></em>,
186 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> user_action_time</code></em>,
187 <em class="parameter"><code><a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> *context</code></em>,
188 <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>
189 <p>
190 Signature of the implementation of the HandleChannels method.
191 </p>
192 <p>
193 This function must call either <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept" title="tp_handle_channels_context_accept ()"><code class="function">tp_handle_channels_context_accept()</code></a>,
194 <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay" title="tp_handle_channels_context_delay ()"><code class="function">tp_handle_channels_context_delay()</code></a> or <a class="link" href="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail" title="tp_handle_channels_context_fail ()"><code class="function">tp_handle_channels_context_fail()</code></a>
195 on <em class="parameter"><code>context</code></em> before it returns.
196 </p>
197 <div class="variablelist"><table border="0">
198 <col align="left" valign="top">
199 <tbody>
200 <tr>
201 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
202 <td>a <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a> instance
203 </td>
204 </tr>
205 <tr>
206 <td><p><span class="term"><em class="parameter"><code>account</code></em> :</span></p></td>
207 <td>a <a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> having <a class="link" href="telepathy-glib-account.html#TP-ACCOUNT-FEATURE-CORE:CAPS" title="TP_ACCOUNT_FEATURE_CORE"><code class="literal">TP_ACCOUNT_FEATURE_CORE</code></a> prepared if possible
208 </td>
209 </tr>
210 <tr>
211 <td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
212 <td>a <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> having <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> prepared
213 if possible
214 </td>
215 </tr>
216 <tr>
217 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
218 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
219 all having <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> prepared if possible. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
220 </td>
221 </tr>
222 <tr>
223 <td><p><span class="term"><em class="parameter"><code>requests_satisfied</code></em> :</span></p></td>
224 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
225 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a> having their object-path defined but are not guaranteed
226 to be prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest]</span>
227 </td>
228 </tr>
229 <tr>
230 <td><p><span class="term"><em class="parameter"><code>user_action_time</code></em> :</span></p></td>
231 <td>the time at which user action occurred, or 0 if this
232 channel is to be handled for some reason not involving user action.
233 </td>
234 </tr>
235 <tr>
236 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
237 <td>a <a class="link" href="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext"><span class="type">TpHandleChannelsContext</span></a> representing the context of this
238 D-Bus call
239 </td>
240 </tr>
241 <tr>
242 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
243 <td>arbitrary user-supplied data passed to <a class="link" href="telepathy-glib-simple-handler.html#tp-simple-handler-new" title="tp_simple_handler_new ()"><code class="function">tp_simple_handler_new()</code></a>
244 </td>
245 </tr>
246 </tbody>
247 </table></div>
248 <p class="since">Since 0.11.6</p>
249 </div>
250 <hr>
251 <div class="refsect2" title="tp_simple_handler_new ()">
252 <a name="tp-simple-handler-new"></a><h3>tp_simple_handler_new ()</h3>
253 <pre class="programlisting"><a class="link" href="telepathy-glib-base-client.html#TpBaseClient"><span class="returnvalue">TpBaseClient</span></a> * tp_simple_handler_new (<em class="parameter"><code><a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> *dbus</code></em>,
254 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> bypass_approval</code></em>,
255 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> requests</code></em>,
256 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
257 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> unique</code></em>,
258 <em class="parameter"><code><a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl" title="TpSimpleHandlerHandleChannelsImpl ()"><span class="type">TpSimpleHandlerHandleChannelsImpl</span></a> callback</code></em>,
259 <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>,
260 <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>);</pre>
261 <p>
262 Convenient function to create a new <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a> instance.
263 </p>
264 <div class="variablelist"><table border="0">
265 <col align="left" valign="top">
266 <tbody>
267 <tr>
268 <td><p><span class="term"><em class="parameter"><code>dbus</code></em> :</span></p></td>
269 <td>a <a class="link" href="telepathy-glib-dbus.html#TpDBusDaemon"><span class="type">TpDBusDaemon</span></a> object, may not be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
270 </td>
271 </tr>
272 <tr>
273 <td><p><span class="term"><em class="parameter"><code>bypass_approval</code></em> :</span></p></td>
274 <td>the value of the Handler.BypassApproval D-Bus property
275 (see <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-bypass-approval" title="tp_base_client_set_handler_bypass_approval ()"><code class="function">tp_base_client_set_handler_bypass_approval()</code></a> for details)
276 </td>
277 </tr>
278 <tr>
279 <td><p><span class="term"><em class="parameter"><code>requests</code></em> :</span></p></td>
280 <td>if this handler implement Requests (see
281 <a class="link" href="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" title="tp_base_client_set_handler_request_notification ()"><code class="function">tp_base_client_set_handler_request_notification()</code></a> for details)
282 </td>
283 </tr>
284 <tr>
285 <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
286 <td>the name of the Handler (see <a class="link" href="telepathy-glib-base-client.html#TpBaseClient--name" title='The "name" property'><span class="type">"name"</span></a>: for details)
287 </td>
288 </tr>
289 <tr>
290 <td><p><span class="term"><em class="parameter"><code>unique</code></em> :</span></p></td>
291 <td>the value of the TpBaseClient:uniquify-name: property
292 </td>
293 </tr>
294 <tr>
295 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
296 <td>the function called when HandleChannels is called
297 </td>
298 </tr>
299 <tr>
300 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
301 <td>arbitrary user-supplied data passed to <em class="parameter"><code>callback</code></em>
302 </td>
303 </tr>
304 <tr>
305 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
306 <td>called with the user_data as argument, when the <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a>
307 is destroyed
308 </td>
309 </tr>
310 <tr>
311 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
312 <td> a new <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a>. <span class="annotation">[type TelepathyGLib.SimpleHandler]</span>
313 </td>
314 </tr>
315 </tbody>
316 </table></div>
317 <p class="since">Since 0.11.6</p>
318 </div>
319 </div>
320 <div class="refsect1" title="Property Details">
321 <a name="telepathy-glib-simple-handler.property-details"></a><h2>Property Details</h2>
322 <div class="refsect2" title='The "bypass-approval" property'>
323 <a name="TpSimpleHandler--bypass-approval"></a><h3>The <code class="literal">"bypass-approval"</code> property</h3>
324 <pre class="programlisting"> "bypass-approval" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write / Construct Only</pre>
325 <p>
326 The value of the Handler.BypassApproval D-Bus property.
327 </p>
328 <p>Default value: FALSE</p>
329 <p class="since">Since 0.11.6</p>
330 </div>
331 <hr>
332 <div class="refsect2" title='The "callback" property'>
333 <a name="TpSimpleHandler--callback"></a><h3>The <code class="literal">"callback"</code> property</h3>
334 <pre class="programlisting"> "callback" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only</pre>
335 <p>
336 The TpSimpleHandlerHandleChannelsImpl callback implementing the
337 HandleChannels D-Bus method.
338 </p>
339 <p>
340 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
341 </p>
342 <p class="since">Since 0.11.6</p>
343 </div>
344 <hr>
345 <div class="refsect2" title='The "destroy" property'>
346 <a name="TpSimpleHandler--destroy"></a><h3>The <code class="literal">"destroy"</code> property</h3>
347 <pre class="programlisting"> "destroy" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only</pre>
348 <p>
349 The <a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> function called to free the user-data pointer when
350 the <a class="link" href="telepathy-glib-simple-handler.html#TpSimpleHandler"><span class="type">TpSimpleHandler</span></a> is destroyed.
351 </p>
352 <p class="since">Since 0.11.6</p>
353 </div>
354 <hr>
355 <div class="refsect2" title='The "requests" property'>
356 <a name="TpSimpleHandler--requests"></a><h3>The <code class="literal">"requests"</code> property</h3>
357 <pre class="programlisting"> "requests" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write / Construct Only</pre>
358 <p>
359 If <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the Handler will implement the Requests interface
360 </p>
361 <p>Default value: FALSE</p>
362 <p class="since">Since 0.11.6</p>
363 </div>
364 <hr>
365 <div class="refsect2" title='The "user-data" property'>
366 <a name="TpSimpleHandler--user-data"></a><h3>The <code class="literal">"user-data"</code> property</h3>
367 <pre class="programlisting"> "user-data" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Write / Construct Only</pre>
368 <p>
369 The user-data pointer passed to the callback implementing the
370 HandleChannels D-Bus method.
371 </p>
372 <p class="since">Since 0.11.6</p>
373 </div>
374 </div>
375 </div>
376 <div class="footer">
377 <hr>
378 Generated by GTK-Doc V1.15</div>
379 </body>
380 </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-base.html" title="Service-side implementation">
8 <link rel="prev" href="telepathy-glib-add-dispatch-operation-context.html" title="TpAddDispatchOperationContext">
8 <link rel="prev" href="telepathy-glib-handle-channels-context.html" title="TpHandleChannelsContext">
99 <link rel="next" href="telepathy-glib-simple-approver.html" title="TpSimpleApprover">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
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-add-dispatch-operation-context.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-handle-channels-context.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>
7777 <a name="telepathy-glib-simple-observer.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
7878 <p>
7979 TpSimpleObserver implements
80 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>.</p>
80 <a class="link" href="telepathy-glib-svc-generic.html#TpSvcDBusProperties">TpSvcDBusProperties</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClient">TpSvcClient</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientObserver">TpSvcClientObserver</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientApprover">TpSvcClientApprover</a>, <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientHandler">TpSvcClientHandler</a> and <a class="link" href="telepathy-glib-svc-client.html#TpSvcClientInterfaceRequests">TpSvcClientInterfaceRequests</a>.</p>
8181 </div>
8282 <div class="refsect1" title="Properties">
8383 <a name="telepathy-glib-simple-observer.properties"></a><h2>Properties</h2>
168168 <p>
169169 Data structure representing a simple Observer implementation.
170170 </p>
171 <p class="since">Since 0.11.UNRELEASED</p>
171 <p class="since">Since 0.11.5</p>
172172 </div>
173173 <hr>
174174 <div class="refsect2" title="TpSimpleObserverObserveChannelsImpl ()">
212212 <tr>
213213 <td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
214214 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>,
215 all having <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> prepared if possible. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel. </td>
215 all having <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> prepared if possible. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.Channel]</span>
216 </td>
216217 </tr>
217218 <tr>
218219 <td><p><span class="term"><em class="parameter"><code>dispatch_operation</code></em> :</span></p></td>
219220 <td> a <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>;
220 the dispatch_operation is not guaranteed to be prepared. <acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>. </td>
221 the dispatch_operation is not guaranteed to be prepared. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
222 </td>
221223 </tr>
222224 <tr>
223225 <td><p><span class="term"><em class="parameter"><code>requests</code></em> :</span></p></td>
224226 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
225227 <a class="link" href="telepathy-glib-channel-request.html#TpChannelRequest"><span class="type">TpChannelRequest</span></a>, all having their object-path defined but are not
226 guaranteed to be prepared.. <acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest. </td>
228 guaranteed to be prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ChannelRequest]</span>
229 </td>
227230 </tr>
228231 <tr>
229232 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
238241 </tr>
239242 </tbody>
240243 </table></div>
241 <p class="since">Since 0.11.UNRELEASED</p>
244 <p class="since">Since 0.11.5</p>
242245 </div>
243246 <hr>
244247 <div class="refsect2" title="tp_simple_observer_new ()">
294297 </tr>
295298 <tr>
296299 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
297 <td> a new <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver"><span class="type">TpSimpleObserver</span></a>
298 . type TelepathyGLib.SimpleObserver</td>
300 <td> a new <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver"><span class="type">TpSimpleObserver</span></a>. <span class="annotation">[type TelepathyGLib.SimpleObserver]</span>
301 </td>
299302 </tr>
300303 </tbody>
301304 </table></div>
302 <p class="since">Since 0.11.UNRELEASED</p>
305 <p class="since">Since 0.11.5</p>
303306 </div>
304307 </div>
305308 <div class="refsect1" title="Property Details">
314317 <p>
315318 This property can't be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
316319 </p>
317 <p class="since">Since 0.11.UNRELEASED</p>
320 <p class="since">Since 0.11.5</p>
318321 </div>
319322 <hr>
320323 <div class="refsect2" title='The "destroy" property'>
324327 The <a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> function called to free the user-data pointer when
325328 the <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver"><span class="type">TpSimpleObserver</span></a> is destroyed.
326329 </p>
327 <p class="since">Since 0.11.UNRELEASED</p>
330 <p class="since">Since 0.11.5</p>
328331 </div>
329332 <hr>
330333 <div class="refsect2" title='The "recover" property'>
334337 The value of the Observer.Recover D-Bus property.
335338 </p>
336339 <p>Default value: FALSE</p>
337 <p class="since">Since 0.11.UNRELEASED</p>
340 <p class="since">Since 0.11.5</p>
338341 </div>
339342 <hr>
340343 <div class="refsect2" title='The "user-data" property'>
344347 The user-data pointer passed to the callback implementing the
345348 ObserverChannels D-Bus method.
346349 </p>
347 <p class="since">Since 0.11.UNRELEASED</p>
350 <p class="since">Since 0.11.5</p>
348351 </div>
349352 </div>
350353 </div>
351354 <div class="footer">
352355 <hr>
353 Generated by GTK-Doc V1.14</div>
356 Generated by GTK-Doc V1.15</div>
354357 </body>
355358 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-connection-manager.html" title="Service-side Connection Manager interface">
99 <link rel="next" href="telepathy-glib-svc-account.html" title="Service-side Account interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
360360 </div>
361361 <div class="footer">
362362 <hr>
363 Generated by GTK-Doc V1.14</div>
363 Generated by GTK-Doc V1.15</div>
364364 </body>
365365 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-account-manager.html" title="Service-side Account Manager interface">
99 <link rel="next" href="telepathy-glib-svc-channel-dispatcher.html" title="Service-side Channel Dispatcher interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
521521 </div>
522522 <div class="footer">
523523 <hr>
524 Generated by GTK-Doc V1.14</div>
524 Generated by GTK-Doc V1.15</div>
525525 </body>
526526 </html>
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">
99 <link rel="next" href="telepathy-glib-svc-channel-text.html" title="Text channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
8989 </div>
9090 <div class="footer">
9191 <hr>
92 Generated by GTK-Doc V1.14</div>
92 Generated by GTK-Doc V1.15</div>
9393 </body>
9494 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-dispatcher.html" title="Service-side Channel Dispatcher interface">
99 <link rel="next" href="telepathy-glib-svc-channel-request.html" title="Service-side Channel Request interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
6262 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with" title="tp_svc_channel_dispatch_operation_implement_handle_with ()">tp_svc_channel_dispatch_operation_implement_handle_with</a>
6363 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperationClass" title="TpSvcChannelDispatchOperationClass"><span class="type">TpSvcChannelDispatchOperationClass</span></a> *klass</code></em>,
6464 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-impl" title="tp_svc_channel_dispatch_operation_handle_with_impl ()"><span class="type">tp_svc_channel_dispatch_operation_handle_with_impl</span></a> impl</code></em>);
65 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl" title="tp_svc_channel_dispatch_operation_handle_with_time_impl ()">*tp_svc_channel_dispatch_operation_handle_with_time_impl</a>)
66 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperation"><span class="type">TpSvcChannelDispatchOperation</span></a> *self</code></em>,
67 <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_Handler</code></em>,
68 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> in_UserActionTime</code></em>,
69 <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>);
70 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with-time" title="tp_svc_channel_dispatch_operation_implement_handle_with_time ()">tp_svc_channel_dispatch_operation_implement_handle_with_time</a>
71 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperationClass" title="TpSvcChannelDispatchOperationClass"><span class="type">TpSvcChannelDispatchOperationClass</span></a> *klass</code></em>,
72 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl" title="tp_svc_channel_dispatch_operation_handle_with_time_impl ()"><span class="type">tp_svc_channel_dispatch_operation_handle_with_time_impl</span></a> impl</code></em>);
73 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with-time" title="tp_svc_channel_dispatch_operation_return_from_handle_with_time ()">tp_svc_channel_dispatch_operation_return_from_handle_with_time</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>);
6575 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-channel-lost" title="tp_svc_channel_dispatch_operation_emit_channel_lost ()">tp_svc_channel_dispatch_operation_emit_channel_lost</a>
6676 (<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>,
6777 <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_Channel</code></em>,
131141 klass, my_object_##x)
132142 IMPLEMENT (handle_with);
133143 IMPLEMENT (claim);
144 IMPLEMENT (handle_with_time);
134145 #undef IMPLEMENT
135146 }
136147 </pre>
283294 </td>
284295 </tr>
285296 </tbody>
297 </table></div>
298 </div>
299 <hr>
300 <div class="refsect2" title="tp_svc_channel_dispatch_operation_handle_with_time_impl ()">
301 <a name="tp-svc-channel-dispatch-operation-handle-with-time-impl"></a><h3>tp_svc_channel_dispatch_operation_handle_with_time_impl ()</h3>
302 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_channel_dispatch_operation_handle_with_time_impl)
303 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperation"><span class="type">TpSvcChannelDispatchOperation</span></a> *self</code></em>,
304 <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_Handler</code></em>,
305 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> in_UserActionTime</code></em>,
306 <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>
307 <p>
308 The signature of an implementation of the D-Bus method
309 HandleWithTime on interface org.freedesktop.Telepathy.ChannelDispatchOperation.
310 </p>
311 <div class="variablelist"><table border="0">
312 <col align="left" valign="top">
313 <tbody>
314 <tr>
315 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
316 <td>The object implementing this interface
317 </td>
318 </tr>
319 <tr>
320 <td><p><span class="term"><em class="parameter"><code>in_Handler</code></em> :</span></p></td>
321 <td>const gchar * (FIXME, generate documentation)
322 </td>
323 </tr>
324 <tr>
325 <td><p><span class="term"><em class="parameter"><code>in_UserActionTime</code></em> :</span></p></td>
326 <td>gint64 (FIXME, generate documentation)
327 </td>
328 </tr>
329 <tr>
330 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
331 <td>Used to return values or throw an error
332 </td>
333 </tr>
334 </tbody>
335 </table></div>
336 </div>
337 <hr>
338 <div class="refsect2" title="tp_svc_channel_dispatch_operation_implement_handle_with_time ()">
339 <a name="tp-svc-channel-dispatch-operation-implement-handle-with-time"></a><h3>tp_svc_channel_dispatch_operation_implement_handle_with_time ()</h3>
340 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_dispatch_operation_implement_handle_with_time
341 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperationClass" title="TpSvcChannelDispatchOperationClass"><span class="type">TpSvcChannelDispatchOperationClass</span></a> *klass</code></em>,
342 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl" title="tp_svc_channel_dispatch_operation_handle_with_time_impl ()"><span class="type">tp_svc_channel_dispatch_operation_handle_with_time_impl</span></a> impl</code></em>);</pre>
343 <p>
344 Register an implementation for the HandleWithTime method in the vtable
345 of an implementation of this interface. To be called from
346 the interface init function.
347 </p>
348 <div class="variablelist"><table border="0">
349 <col align="left" valign="top">
350 <tbody>
351 <tr>
352 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
353 <td>A class whose instances implement this interface
354 </td>
355 </tr>
356 <tr>
357 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
358 <td>A callback used to implement the HandleWithTime D-Bus method
359 </td>
360 </tr>
361 </tbody>
362 </table></div>
363 </div>
364 <hr>
365 <div class="refsect2" title="tp_svc_channel_dispatch_operation_return_from_handle_with_time ()">
366 <a name="tp-svc-channel-dispatch-operation-return-from-handle-with-time"></a><h3>tp_svc_channel_dispatch_operation_return_from_handle_with_time ()</h3>
367 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_dispatch_operation_return_from_handle_with_time
368 (<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>
369 <p>
370 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>.
371 This inline function exists only to provide type-safety.
372 </p>
373 <div class="variablelist"><table border="0">
374 <col align="left" valign="top">
375 <tbody><tr>
376 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
377 <td>The D-Bus method invocation context
378 </td>
379 </tr></tbody>
286380 </table></div>
287381 </div>
288382 <hr>
399493 </div>
400494 <div class="footer">
401495 <hr>
402 Generated by GTK-Doc V1.14</div>
496 Generated by GTK-Doc V1.15</div>
403497 </body>
404498 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-account.html" title="Service-side Account interfaces">
99 <link rel="next" href="telepathy-glib-svc-channel-dispatch-operation.html" title="Service-side Channel Dispatch Operation interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
500500 </div>
501501 <div class="footer">
502502 <hr>
503 Generated by GTK-Doc V1.14</div>
503 Generated by GTK-Doc V1.15</div>
504504 </body>
505505 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-media.html" title="Media channels">
99 <link rel="next" href="telepathy-glib-svc-channel-tubes.html" title="Tubes channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
511511 </div>
512512 <div class="footer">
513513 <hr>
514 Generated by GTK-Doc V1.14</div>
514 Generated by GTK-Doc V1.15</div>
515515 </body>
516516 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel.html" title="Service-side Channel base interface">
99 <link rel="next" href="telepathy-glib-svc-channel-contactlist.html" title="Contact List channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15851585 </div>
15861586 <div class="footer">
15871587 <hr>
1588 Generated by GTK-Doc V1.14</div>
1588 Generated by GTK-Doc V1.15</div>
15891589 </body>
15901590 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-text.html" title="Text channels">
99 <link rel="next" href="telepathy-glib-svc-channel-file-transfer.html" title="File Transfer channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
128128
129129 <a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-struct" title="TpSvcChannelInterfaceDTMF">TpSvcChannelInterfaceDTMF</a>;
130130 <a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass" title="TpSvcChannelInterfaceDTMFClass">TpSvcChannelInterfaceDTMFClass</a>;
131 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-multiple-tones" title="tp_svc_channel_interface_dtmf_implement_multiple_tones ()">tp_svc_channel_interface_dtmf_implement_multiple_tones</a>
132 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass" title="TpSvcChannelInterfaceDTMFClass"><span class="type">TpSvcChannelInterfaceDTMFClass</span></a> *klass</code></em>,
133 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl" title="tp_svc_channel_interface_dtmf_multiple_tones_impl ()"><span class="type">tp_svc_channel_interface_dtmf_multiple_tones_impl</span></a> impl</code></em>);
131134 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-start-tone" title="tp_svc_channel_interface_dtmf_implement_start_tone ()">tp_svc_channel_interface_dtmf_implement_start_tone</a>
132135 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass" title="TpSvcChannelInterfaceDTMFClass"><span class="type">TpSvcChannelInterfaceDTMFClass</span></a> *klass</code></em>,
133136 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-start-tone-impl" title="tp_svc_channel_interface_dtmf_start_tone_impl ()"><span class="type">tp_svc_channel_interface_dtmf_start_tone_impl</span></a> impl</code></em>);
134137 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-stop-tone" title="tp_svc_channel_interface_dtmf_implement_stop_tone ()">tp_svc_channel_interface_dtmf_implement_stop_tone</a>
135138 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass" title="TpSvcChannelInterfaceDTMFClass"><span class="type">TpSvcChannelInterfaceDTMFClass</span></a> *klass</code></em>,
136139 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-stop-tone-impl" title="tp_svc_channel_interface_dtmf_stop_tone_impl ()"><span class="type">tp_svc_channel_interface_dtmf_stop_tone_impl</span></a> impl</code></em>);
140 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-multiple-tones" title="tp_svc_channel_interface_dtmf_return_from_multiple_tones ()">tp_svc_channel_interface_dtmf_return_from_multiple_tones</a>
141 (<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>);
137142 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-start-tone" title="tp_svc_channel_interface_dtmf_return_from_start_tone ()">tp_svc_channel_interface_dtmf_return_from_start_tone</a>
138143 (<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>);
139144 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-stop-tone" title="tp_svc_channel_interface_dtmf_return_from_stop_tone ()">tp_svc_channel_interface_dtmf_return_from_stop_tone</a>
140145 (<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>);
146 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl" title="tp_svc_channel_interface_dtmf_multiple_tones_impl ()">*tp_svc_channel_interface_dtmf_multiple_tones_impl</a>)
147 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *self</code></em>,
148 <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_Tones</code></em>,
149 <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>);
141150 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-start-tone-impl" title="tp_svc_channel_interface_dtmf_start_tone_impl ()">*tp_svc_channel_interface_dtmf_start_tone_impl</a>)
142151 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *self</code></em>,
143152 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> in_Stream_ID</code></em>,
147156 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *self</code></em>,
148157 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> in_Stream_ID</code></em>,
149158 <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>);
159 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-sending-tones" title="tp_svc_channel_interface_dtmf_emit_sending_tones ()">tp_svc_channel_interface_dtmf_emit_sending_tones</a>
160 (<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>,
161 <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_Tones</code></em>);
162 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-stopped-tones" title="tp_svc_channel_interface_dtmf_emit_stopped_tones ()">tp_svc_channel_interface_dtmf_emit_stopped_tones</a>
163 (<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>,
164 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg_Cancelled</code></em>);
150165
151166
152167 <a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-struct" title="TpSvcChannelInterfaceHold">TpSvcChannelInterfaceHold</a>;
225240 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-removed" title='The "stream-removed" signal'>stream-removed</a>" : Run Last / Has Details
226241 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-state-changed" title='The "stream-state-changed" signal'>stream-state-changed</a>" : Run Last / Has Details
227242 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceCallState-call-state-changed" title='The "call-state-changed" signal'>call-state-changed</a>" : Run Last / Has Details
243 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-sending-tones" title='The "sending-tones" signal'>sending-tones</a>" : Run Last / Has Details
244 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-stopped-tones" title='The "stopped-tones" signal'>stopped-tones</a>" : Run Last / Has Details
228245 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-hold-state-changed" title='The "hold-state-changed" signal'>hold-state-changed</a>" : Run Last / Has Details
229246 "<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceMediaSignalling-new-session-handler" title='The "new-session-handler" signal'>new-session-handler</a>" : Run Last / Has Details
230247 </pre>
982999 klass, my_object_##x)
9831000 IMPLEMENT (start_tone);
9841001 IMPLEMENT (stop_tone);
1002 IMPLEMENT (multiple_tones);
9851003 #undef IMPLEMENT
9861004 }
9871005 </pre>
9881006 <p>
9891007 </p>
1008 </div>
1009 <hr>
1010 <div class="refsect2" title="tp_svc_channel_interface_dtmf_implement_multiple_tones ()">
1011 <a name="tp-svc-channel-interface-dtmf-implement-multiple-tones"></a><h3>tp_svc_channel_interface_dtmf_implement_multiple_tones ()</h3>
1012 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_dtmf_implement_multiple_tones
1013 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass" title="TpSvcChannelInterfaceDTMFClass"><span class="type">TpSvcChannelInterfaceDTMFClass</span></a> *klass</code></em>,
1014 <em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl" title="tp_svc_channel_interface_dtmf_multiple_tones_impl ()"><span class="type">tp_svc_channel_interface_dtmf_multiple_tones_impl</span></a> impl</code></em>);</pre>
1015 <p>
1016 Register an implementation for the MultipleTones method in the vtable
1017 of an implementation of this interface. To be called from
1018 the interface init function.
1019 </p>
1020 <div class="variablelist"><table border="0">
1021 <col align="left" valign="top">
1022 <tbody>
1023 <tr>
1024 <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
1025 <td>A class whose instances implement this interface
1026 </td>
1027 </tr>
1028 <tr>
1029 <td><p><span class="term"><em class="parameter"><code>impl</code></em> :</span></p></td>
1030 <td>A callback used to implement the MultipleTones D-Bus method
1031 </td>
1032 </tr>
1033 </tbody>
1034 </table></div>
9901035 </div>
9911036 <hr>
9921037 <div class="refsect2" title="tp_svc_channel_interface_dtmf_implement_start_tone ()">
10431088 </table></div>
10441089 </div>
10451090 <hr>
1091 <div class="refsect2" title="tp_svc_channel_interface_dtmf_return_from_multiple_tones ()">
1092 <a name="tp-svc-channel-interface-dtmf-return-from-multiple-tones"></a><h3>tp_svc_channel_interface_dtmf_return_from_multiple_tones ()</h3>
1093 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_dtmf_return_from_multiple_tones
1094 (<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>
1095 <p>
1096 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>.
1097 This inline function exists only to provide type-safety.
1098 </p>
1099 <div class="variablelist"><table border="0">
1100 <col align="left" valign="top">
1101 <tbody><tr>
1102 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
1103 <td>The D-Bus method invocation context
1104 </td>
1105 </tr></tbody>
1106 </table></div>
1107 </div>
1108 <hr>
10461109 <div class="refsect2" title="tp_svc_channel_interface_dtmf_return_from_start_tone ()">
10471110 <a name="tp-svc-channel-interface-dtmf-return-from-start-tone"></a><h3>tp_svc_channel_interface_dtmf_return_from_start_tone ()</h3>
10481111 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_dtmf_return_from_start_tone
10761139 <td>The D-Bus method invocation context
10771140 </td>
10781141 </tr></tbody>
1142 </table></div>
1143 </div>
1144 <hr>
1145 <div class="refsect2" title="tp_svc_channel_interface_dtmf_multiple_tones_impl ()">
1146 <a name="tp-svc-channel-interface-dtmf-multiple-tones-impl"></a><h3>tp_svc_channel_interface_dtmf_multiple_tones_impl ()</h3>
1147 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_svc_channel_interface_dtmf_multiple_tones_impl)
1148 (<em class="parameter"><code><a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *self</code></em>,
1149 <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_Tones</code></em>,
1150 <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>
1151 <p>
1152 The signature of an implementation of the D-Bus method
1153 MultipleTones on interface org.freedesktop.Telepathy.Channel.Interface.DTMF.
1154 </p>
1155 <div class="variablelist"><table border="0">
1156 <col align="left" valign="top">
1157 <tbody>
1158 <tr>
1159 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1160 <td>The object implementing this interface
1161 </td>
1162 </tr>
1163 <tr>
1164 <td><p><span class="term"><em class="parameter"><code>in_Tones</code></em> :</span></p></td>
1165 <td>const gchar * (FIXME, generate documentation)
1166 </td>
1167 </tr>
1168 <tr>
1169 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
1170 <td>Used to return values or throw an error
1171 </td>
1172 </tr>
1173 </tbody>
10791174 </table></div>
10801175 </div>
10811176 <hr>
11431238 <tr>
11441239 <td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
11451240 <td>Used to return values or throw an error
1241 </td>
1242 </tr>
1243 </tbody>
1244 </table></div>
1245 </div>
1246 <hr>
1247 <div class="refsect2" title="tp_svc_channel_interface_dtmf_emit_sending_tones ()">
1248 <a name="tp-svc-channel-interface-dtmf-emit-sending-tones"></a><h3>tp_svc_channel_interface_dtmf_emit_sending_tones ()</h3>
1249 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_dtmf_emit_sending_tones
1250 (<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>,
1251 <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_Tones</code></em>);</pre>
1252 <p>
1253 Type-safe wrapper around g_signal_emit to emit the
1254 SendingTones signal on interface org.freedesktop.Telepathy.Channel.Interface.DTMF.
1255 </p>
1256 <div class="variablelist"><table border="0">
1257 <col align="left" valign="top">
1258 <tbody>
1259 <tr>
1260 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
1261 <td>The object implementing this interface
1262 </td>
1263 </tr>
1264 <tr>
1265 <td><p><span class="term"><em class="parameter"><code>arg_Tones</code></em> :</span></p></td>
1266 <td>const gchar * (FIXME, generate documentation)
1267 </td>
1268 </tr>
1269 </tbody>
1270 </table></div>
1271 </div>
1272 <hr>
1273 <div class="refsect2" title="tp_svc_channel_interface_dtmf_emit_stopped_tones ()">
1274 <a name="tp-svc-channel-interface-dtmf-emit-stopped-tones"></a><h3>tp_svc_channel_interface_dtmf_emit_stopped_tones ()</h3>
1275 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_dtmf_emit_stopped_tones
1276 (<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>,
1277 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg_Cancelled</code></em>);</pre>
1278 <p>
1279 Type-safe wrapper around g_signal_emit to emit the
1280 StoppedTones signal on interface org.freedesktop.Telepathy.Channel.Interface.DTMF.
1281 </p>
1282 <div class="variablelist"><table border="0">
1283 <col align="left" valign="top">
1284 <tbody>
1285 <tr>
1286 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
1287 <td>The object implementing this interface
1288 </td>
1289 </tr>
1290 <tr>
1291 <td><p><span class="term"><em class="parameter"><code>arg_Cancelled</code></em> :</span></p></td>
1292 <td>gboolean (FIXME, generate documentation)
11461293 </td>
11471294 </tr>
11481295 </tbody>
17231870 </table></div>
17241871 </div>
17251872 <hr>
1873 <div class="refsect2" title='The "sending-tones" signal'>
1874 <a name="TpSvcChannelInterfaceDTMF-sending-tones"></a><h3>The <code class="literal">"sending-tones"</code> signal</h3>
1875 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *arg_Tones,
1876 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1,
1877 <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>
1878 <p>
1879 The SendingTones D-Bus signal is emitted whenever this GObject signal is.
1880 </p>
1881 <div class="variablelist"><table border="0">
1882 <col align="left" valign="top">
1883 <tbody>
1884 <tr>
1885 <td><p><span class="term"><em class="parameter"><code>arg_Tones</code></em> :</span></p></td>
1886 <td>const gchar * (FIXME, generate documentation)
1887 </td>
1888 </tr>
1889 <tr>
1890 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1891 <td>user data set when the signal handler was connected.</td>
1892 </tr>
1893 </tbody>
1894 </table></div>
1895 </div>
1896 <hr>
1897 <div class="refsect2" title='The "stopped-tones" signal'>
1898 <a name="TpSvcChannelInterfaceDTMF-stopped-tones"></a><h3>The <code class="literal">"stopped-tones"</code> signal</h3>
1899 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF"><span class="type">TpSvcChannelInterfaceDTMF</span></a> *arg_Cancelled,
1900 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg1,
1901 <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>
1902 <p>
1903 The StoppedTones D-Bus signal is emitted whenever this GObject signal is.
1904 </p>
1905 <div class="variablelist"><table border="0">
1906 <col align="left" valign="top">
1907 <tbody>
1908 <tr>
1909 <td><p><span class="term"><em class="parameter"><code>arg_Cancelled</code></em> :</span></p></td>
1910 <td>gboolean (FIXME, generate documentation)
1911 </td>
1912 </tr>
1913 <tr>
1914 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1915 <td>user data set when the signal handler was connected.</td>
1916 </tr>
1917 </tbody>
1918 </table></div>
1919 </div>
1920 <hr>
17261921 <div class="refsect2" title='The "hold-state-changed" signal'>
17271922 <a name="TpSvcChannelInterfaceHold-hold-state-changed"></a><h3>The <code class="literal">"hold-state-changed"</code> signal</h3>
17281923 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold"><span class="type">TpSvcChannelInterfaceHold</span></a> *arg_HoldState,
17861981 </div>
17871982 <div class="footer">
17881983 <hr>
1789 Generated by GTK-Doc V1.14</div>
1984 Generated by GTK-Doc V1.15</div>
17901985 </body>
17911986 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-dispatch-operation.html" title="Service-side Channel Dispatch Operation interface">
99 <link rel="next" href="telepathy-glib-svc-client.html" title="Service-side Client interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
377377 </div>
378378 <div class="footer">
379379 <hr>
380 Generated by GTK-Doc V1.14</div>
380 Generated by GTK-Doc V1.15</div>
381381 </body>
382382 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-tube.html" title="Tube channels">
99 <link rel="next" href="telepathy-glib-svc-debug.html" title="Service-side Debug base interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
466466 </div>
467467 <div class="footer">
468468 <hr>
469 Generated by GTK-Doc V1.14</div>
469 Generated by GTK-Doc V1.15</div>
470470 </body>
471471 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-contactlist.html" title="Contact List channels">
99 <link rel="next" href="telepathy-glib-svc-channel-media.html" title="Media channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
17411741 </div>
17421742 <div class="footer">
17431743 <hr>
1744 Generated by GTK-Doc V1.14</div>
1744 Generated by GTK-Doc V1.15</div>
17451745 </body>
17461746 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-tubes.html" title="Tubes channels">
99 <link rel="next" href="telepathy-glib-svc-channel-roomlist.html" title="Room List channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
930930 </div>
931931 <div class="footer">
932932 <hr>
933 Generated by GTK-Doc V1.14</div>
933 Generated by GTK-Doc V1.15</div>
934934 </body>
935935 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-file-transfer.html" title="File Transfer channels">
99 <link rel="next" href="telepathy-glib-svc-channel-tube.html" title="Tube channels">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15911591 </div>
15921592 <div class="footer">
15931593 <hr>
1594 Generated by GTK-Doc V1.14</div>
1594 Generated by GTK-Doc V1.15</div>
15951595 </body>
15961596 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-generic.html" title="Generic service-side interfaces">
99 <link rel="next" href="telepathy-glib-svc-channel-group.html" title="Service-side Channel Group interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
623623 </div>
624624 <div class="footer">
625625 <hr>
626 Generated by GTK-Doc V1.14</div>
626 Generated by GTK-Doc V1.15</div>
627627 </body>
628628 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-request.html" title="Service-side Channel Request interface">
99 <link rel="next" href="ch-service-base.html" title="Service-side implementation">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
145145 <a name="telepathy-glib-svc-client.implementations"></a><h2>Known Implementations</h2>
146146 <p>
147147 TpSvcClient is implemented by
148 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>, <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a> and <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>.</p>
148 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</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>
149149 <p>
150150 TpSvcClientApprover is implemented by
151 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>, <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a> and <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>.</p>
151 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</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>
152 <p>
153 TpSvcClientHandler is implemented by
154 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</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>
155 <p>
156 TpSvcClientInterfaceRequests is implemented by
157 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</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>
152158 <p>
153159 TpSvcClientObserver is implemented by
154 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</a>, <a class="link" href="telepathy-glib-simple-approver.html#TpSimpleApprover">TpSimpleApprover</a> and <a class="link" href="telepathy-glib-simple-observer.html#TpSimpleObserver">TpSimpleObserver</a>.</p>
160 <a class="link" href="telepathy-glib-base-client.html#TpBaseClient">TpBaseClient</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>
155161 </div>
156162 <div class="refsect1" title="Description">
157163 <a name="telepathy-glib-svc-client.description"></a><h2>Description</h2>
814820 </div>
815821 <div class="footer">
816822 <hr>
817 Generated by GTK-Doc V1.14</div>
823 Generated by GTK-Doc V1.15</div>
818824 </body>
819825 </html>
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">
99 <link rel="next" href="telepathy-glib-svc-account-manager.html" title="Service-side Account Manager interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
498498 </div>
499499 <div class="footer">
500500 <hr>
501 Generated by GTK-Doc V1.14</div>
501 Generated by GTK-Doc V1.15</div>
502502 </body>
503503 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-debug.html" title="Service-side Debug base interface">
99 <link rel="next" href="telepathy-glib-svc-media-interfaces.html" title="Service-side media streaming helper interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
60186018 </div>
60196019 <div class="footer">
60206020 <hr>
6021 Generated by GTK-Doc V1.14</div>
6021 Generated by GTK-Doc V1.15</div>
60226022 </body>
60236023 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-channel-roomlist.html" title="Room List channels">
99 <link rel="next" href="telepathy-glib-svc-connection.html" title="Service-side Connection interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
296296 </div>
297297 <div class="footer">
298298 <hr>
299 Generated by GTK-Doc V1.14</div>
299 Generated by GTK-Doc V1.15</div>
300300 </body>
301301 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc.html" title="The TpSvc* interfaces">
99 <link rel="next" href="telepathy-glib-svc-channel.html" title="Service-side Channel base interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
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> 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="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>
980980 </div>
981981 <div class="footer">
982982 <hr>
983 Generated by GTK-Doc V1.14</div>
983 Generated by GTK-Doc V1.15</div>
984984 </body>
985985 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-connection.html" title="Service-side Connection interfaces">
99 <link rel="next" href="telepathy-glib-svc-connection-manager.html" title="Service-side Connection Manager interface">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
20602060 </div>
20612061 <div class="footer">
20622062 <hr>
2063 Generated by GTK-Doc V1.14</div>
2063 Generated by GTK-Doc V1.15</div>
20642064 </body>
20652065 </html>
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
99 <link rel="next" href="telepathy-glib-svc-generic.html" title="Generic service-side interfaces">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
363363 </div>
364364 <div class="footer">
365365 <hr>
366 Generated by GTK-Doc V1.14</div>
366 Generated by GTK-Doc V1.15</div>
367367 </body>
368368 </html>
77 <link rel="up" href="ch-utilities.html" title="Utilities">
88 <link rel="prev" href="ch-utilities.html" title="Utilities">
99 <link rel="next" href="telepathy-glib-gnio-util.html" title="GNIO Utilities">
10 <meta name="generator" content="GTK-Doc V1.14 (XML mode)">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
731731 <tbody>
732732 <tr>
733733 <td><p><span class="term"><em class="parameter"><code>s</code></em> :</span></p></td>
734 <td> a string. type utf8<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>. </td>
735 </tr>
736 <tr>
737 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
738 <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>s</code></em> is either <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or ""
739 . type boolean</td>
734 <td> a string. <span class="annotation">[type utf8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
735 </td>
736 </tr>
737 <tr>
738 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
739 <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>s</code></em> is either <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or "". <span class="annotation">[type boolean]</span>
740 </td>
740741 </tr>
741742 </tbody>
742743 </table></div>
11231124 <p>
11241125 </p>
11251126 <div class="example">
1126 <a name="id1006840"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
1127 <a name="id1067127"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
11271128 <div class="example-contents">
11281129 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
11291130 <tbody>
11891190 <p>
11901191 </p>
11911192 <div class="example">
1192 <a name="id1007019"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
1193 <a name="id1067306"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
11931194 <div class="example-contents">
11941195 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
11951196 <tbody>
12711272 <tbody>
12721273 <tr>
12731274 <td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
1274 <td> an object to which to take a weak reference. type Object</td>
1275 <td> an object to which to take a weak reference. <span class="annotation">[type Object]</span>
1276 </td>
12751277 </tr>
12761278 <tr>
12771279 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
13141316 </tr>
13151317 <tr>
13161318 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1317 <td> a new reference, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
1318 . type Object<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>. </td>
1319 <td> a new reference, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[type Object][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
1320 </td>
13191321 </tr>
13201322 </tbody>
13211323 </table></div>
13701372 </div>
13711373 <div class="footer">
13721374 <hr>
1373 Generated by GTK-Doc V1.14</div>
1375 Generated by GTK-Doc V1.15</div>
13741376 </body>
13751377 </html>
8989 <sub name="TpBaseClient" link="telepathy-glib-base-client.html"/>
9090 <sub name="TpObserveChannelsContext" link="telepathy-glib-observe-channels-context.html"/>
9191 <sub name="TpAddDispatchOperationContext" link="telepathy-glib-add-dispatch-operation-context.html"/>
92 <sub name="TpHandleChannelsContext" link="telepathy-glib-handle-channels-context.html"/>
9293 <sub name="TpSimpleObserver" link="telepathy-glib-simple-observer.html"/>
9394 <sub name="TpSimpleApprover" link="telepathy-glib-simple-approver.html"/>
95 <sub name="TpSimpleHandler" link="telepathy-glib-simple-handler.html"/>
9496 </sub>
9597 <sub name="Service-side handle repositories" link="ch-service-handles.html">
9698 <sub name="TpHandleRepoIface" link="telepathy-glib-handle-repo.html"/>
422424 <function name="TP_IFACE_CLIENT_INTERFACE_REQUESTS" link="telepathy-glib-interfaces.html#TP-IFACE-CLIENT-INTERFACE-REQUESTS:CAPS"/>
423425 <function name="TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CLIENT-INTERFACE-REQUESTS:CAPS"/>
424426 <function name="TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS"/>
427 <function name="TP_PROP_ACCOUNT_CHANGING_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS"/>
425428 <function name="TP_PROP_ACCOUNT_CONNECTION" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS"/>
426429 <function name="TP_PROP_ACCOUNT_CONNECTION_STATUS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS"/>
427430 <function name="TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS"/>
453456 <function name="TP_PROP_CHANNEL_INITIATOR_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS"/>
454457 <function name="TP_PROP_CHANNEL_INITIATOR_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS"/>
455458 <function name="TP_PROP_CHANNEL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS"/>
459 <function name="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS"/>
460 <function name="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS"/>
456461 <function name="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS"/>
457462 <function name="TP_PROP_CHANNEL_INTERFACE_GROUP_HANDLE_OWNERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-HANDLE-OWNERS:CAPS"/>
458463 <function name="TP_PROP_CHANNEL_INTERFACE_GROUP_LOCAL_PENDING_MEMBERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-LOCAL-PENDING-MEMBERS:CAPS"/>
516521 <function name="TP_PROP_CONNECTION_INTERFACE_CONTACT_INFO_SUPPORTED_FIELDS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-CONTACT-INFO-SUPPORTED-FIELDS:CAPS"/>
517522 <function name="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL:CAPS"/>
518523 <function name="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL_TYPES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL-TYPES:CAPS"/>
524 <function name="TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS"/>
519525 <function name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS"/>
520526 <function name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS"/>
521527 <function name="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS"/>
533539 <function name="TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS"/>
534540 <function name="TP_TOKEN_CONNECTION_INTERFACE_CAPABILITIES_CAPS" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CAPABILITIES-CAPS"/>
535541 <function name="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-CAPABILITIES-CAPABILITIES:CAPS"/>
542 <function name="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS"/>
536543 <function name="TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS"/>
537544 <function name="TP_TOKEN_CONNECTION_INTERFACE_LOCATION_LOCATION" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-LOCATION-LOCATION:CAPS"/>
538545 <function name="TP_TOKEN_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GTALK_P2P" link="telepathy-glib-interfaces.html#TP-TOKEN-CHANNEL-INTERFACE-MEDIA-SIGNALLING-GTALK-P2P:CAPS"/>
610617 <function name="NUM_TP_DEBUG_LEVELS" link="telepathy-glib-enums.html#NUM-TP-DEBUG-LEVELS:CAPS"/>
611618 <function name="enum TpContactInfoFlags" link="telepathy-glib-enums.html#TpContactInfoFlags"/>
612619 <function name="enum TpContactInfoFieldFlags" link="telepathy-glib-enums.html#TpContactInfoFieldFlags"/>
620 <function name="enum TpLocationFeatures" link="telepathy-glib-enums.html#TpLocationFeatures"/>
613621 <function name="TP_ERROR_PREFIX" link="telepathy-glib-errors.html#TP-ERROR-PREFIX:CAPS"/>
614622 <function name="TP_ERRORS" link="telepathy-glib-errors.html#TP-ERRORS:CAPS"/>
615623 <function name="TP_TYPE_ERROR" link="telepathy-glib-errors.html#TP-TYPE-ERROR:CAPS"/>
910918 <function name="tp_connection_upgrade_contacts ()" link="telepathy-glib-contact.html#tp-connection-upgrade-contacts"/>
911919 <function name="tp_contact_get_alias ()" link="telepathy-glib-contact.html#tp-contact-get-alias"/>
912920 <function name="tp_contact_get_avatar_token ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-token"/>
921 <function name="tp_contact_get_avatar_file ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-file"/>
922 <function name="tp_contact_get_avatar_mime_type ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-mime-type"/>
913923 <function name="tp_contact_get_connection ()" link="telepathy-glib-contact.html#tp-contact-get-connection"/>
914924 <function name="tp_contact_get_handle ()" link="telepathy-glib-contact.html#tp-contact-get-handle"/>
915925 <function name="tp_contact_get_identifier ()" link="telepathy-glib-contact.html#tp-contact-get-identifier"/>
920930 <function name="tp_contact_get_capabilities ()" link="telepathy-glib-contact.html#tp-contact-get-capabilities"/>
921931 <function name="tp_contact_has_feature ()" link="telepathy-glib-contact.html#tp-contact-has-feature"/>
922932 <function name="The &quot;alias&quot; property" link="telepathy-glib-contact.html#TpContact--alias"/>
933 <function name="The &quot;avatar-file&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-file"/>
934 <function name="The &quot;avatar-mime-type&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-mime-type"/>
923935 <function name="The &quot;avatar-token&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-token"/>
924936 <function name="The &quot;capabilities&quot; property" link="telepathy-glib-contact.html#TpContact--capabilities"/>
925937 <function name="The &quot;connection&quot; property" link="telepathy-glib-contact.html#TpContact--connection"/>
12331245 <function name="tp_cli_channel_interface_dtmf_call_stop_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-stop-tone"/>
12341246 <function name="tp_cli_channel_interface_dtmf_callback_for_start_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-start-tone"/>
12351247 <function name="tp_cli_channel_interface_dtmf_callback_for_stop_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-stop-tone"/>
1248 <function name="tp_cli_channel_interface_dtmf_call_multiple_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-multiple-tones"/>
1249 <function name="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones"/>
1250 <function name="tp_cli_channel_interface_dtmf_connect_to_sending_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-sending-tones"/>
1251 <function name="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones"/>
1252 <function name="tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-stopped-tones"/>
1253 <function name="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones"/>
12361254 <function name="tp_cli_channel_interface_hold_callback_for_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-callback-for-get-hold-state"/>
12371255 <function name="tp_cli_channel_interface_hold_call_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-call-get-hold-state"/>
12381256 <function name="tp_cli_channel_interface_hold_run_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-run-get-hold-state"/>
14691487 <function name="tp_account_set_connect_automatically_finish ()" link="telepathy-glib-account.html#tp-account-set-connect-automatically-finish"/>
14701488 <function name="tp_account_get_has_been_online ()" link="telepathy-glib-account.html#tp-account-get-has-been-online"/>
14711489 <function name="tp_account_get_connection_status ()" link="telepathy-glib-account.html#tp-account-get-connection-status"/>
1490 <function name="tp_account_get_changing_presence ()" link="telepathy-glib-account.html#tp-account-get-changing-presence"/>
14721491 <function name="tp_account_get_current_presence ()" link="telepathy-glib-account.html#tp-account-get-current-presence"/>
14731492 <function name="tp_account_get_requested_presence ()" link="telepathy-glib-account.html#tp-account-get-requested-presence"/>
14741493 <function name="tp_account_get_parameters ()" link="telepathy-glib-account.html#tp-account-get-parameters"/>
14951514 <function name="tp_cli_account_connect_to_removed ()" link="telepathy-glib-account.html#tp-cli-account-connect-to-removed"/>
14961515 <function name="tp_cli_account_interface_avatar_signal_callback_avatar_changed ()" link="telepathy-glib-account.html#tp-cli-account-interface-avatar-signal-callback-avatar-changed"/>
14971516 <function name="tp_cli_account_interface_avatar_connect_to_avatar_changed ()" link="telepathy-glib-account.html#tp-cli-account-interface-avatar-connect-to-avatar-changed"/>
1517 <function name="The &quot;changing-presence&quot; property" link="telepathy-glib-account.html#TpAccount--changing-presence"/>
14981518 <function name="The &quot;connect-automatically&quot; property" link="telepathy-glib-account.html#TpAccount--connect-automatically"/>
14991519 <function name="The &quot;connection&quot; property" link="telepathy-glib-account.html#TpAccount--connection"/>
15001520 <function name="The &quot;connection-manager&quot; property" link="telepathy-glib-account.html#TpAccount--connection-manager"/>
15351555 <function name="tp_cli_channel_dispatch_operation_call_claim ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-claim"/>
15361556 <function name="tp_cli_channel_dispatch_operation_callback_for_handle_with ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with"/>
15371557 <function name="tp_cli_channel_dispatch_operation_call_handle_with ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with"/>
1558 <function name="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time"/>
1559 <function name="tp_cli_channel_dispatch_operation_call_handle_with_time ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with-time"/>
15381560 <function name="tp_cli_channel_dispatch_operation_signal_callback_channel_lost ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-channel-lost"/>
15391561 <function name="tp_cli_channel_dispatch_operation_connect_to_channel_lost ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-connect-to-channel-lost"/>
15401562 <function name="tp_cli_channel_dispatch_operation_signal_callback_finished ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-finished"/>
17601782 <function name="tp_svc_channel_interface_call_state_return_from_get_call_states ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-call-state-return-from-get-call-states"/>
17611783 <function name="TpSvcChannelInterfaceDTMF" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-struct"/>
17621784 <function name="TpSvcChannelInterfaceDTMFClass" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass"/>
1785 <function name="tp_svc_channel_interface_dtmf_implement_multiple_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-multiple-tones"/>
17631786 <function name="tp_svc_channel_interface_dtmf_implement_start_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-start-tone"/>
17641787 <function name="tp_svc_channel_interface_dtmf_implement_stop_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-stop-tone"/>
1788 <function name="tp_svc_channel_interface_dtmf_return_from_multiple_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-multiple-tones"/>
17651789 <function name="tp_svc_channel_interface_dtmf_return_from_start_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-start-tone"/>
17661790 <function name="tp_svc_channel_interface_dtmf_return_from_stop_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-stop-tone"/>
1791 <function name="tp_svc_channel_interface_dtmf_multiple_tones_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl"/>
17671792 <function name="tp_svc_channel_interface_dtmf_start_tone_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-start-tone-impl"/>
17681793 <function name="tp_svc_channel_interface_dtmf_stop_tone_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-stop-tone-impl"/>
1794 <function name="tp_svc_channel_interface_dtmf_emit_sending_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-sending-tones"/>
1795 <function name="tp_svc_channel_interface_dtmf_emit_stopped_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-stopped-tones"/>
17691796 <function name="TpSvcChannelInterfaceHold" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-struct"/>
17701797 <function name="TpSvcChannelInterfaceHoldClass" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHoldClass"/>
17711798 <function name="tp_svc_channel_interface_hold_get_hold_state_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-hold-get-hold-state-impl"/>
17871814 <function name="The &quot;stream-removed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-removed"/>
17881815 <function name="The &quot;stream-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-state-changed"/>
17891816 <function name="The &quot;call-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceCallState-call-state-changed"/>
1817 <function name="The &quot;sending-tones&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-sending-tones"/>
1818 <function name="The &quot;stopped-tones&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-stopped-tones"/>
17901819 <function name="The &quot;hold-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-hold-state-changed"/>
17911820 <function name="The &quot;new-session-handler&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceMediaSignalling-new-session-handler"/>
17921821 <function name="TpSvcChannelTypeFileTransfer" link="telepathy-glib-svc-channel-file-transfer.html#TpSvcChannelTypeFileTransfer-struct"/>
22282257 <function name="tp_svc_channel_dispatch_operation_return_from_handle_with ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with"/>
22292258 <function name="tp_svc_channel_dispatch_operation_handle_with_impl ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-impl"/>
22302259 <function name="tp_svc_channel_dispatch_operation_implement_handle_with ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with"/>
2260 <function name="tp_svc_channel_dispatch_operation_handle_with_time_impl ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl"/>
2261 <function name="tp_svc_channel_dispatch_operation_implement_handle_with_time ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with-time"/>
2262 <function name="tp_svc_channel_dispatch_operation_return_from_handle_with_time ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with-time"/>
22312263 <function name="tp_svc_channel_dispatch_operation_emit_channel_lost ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-channel-lost"/>
22322264 <function name="tp_svc_channel_dispatch_operation_emit_finished ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-finished"/>
22332265 <function name="The &quot;channel-lost&quot; signal" link="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperation-channel-lost"/>
25352567 <function name="tp_base_client_take_approver_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-approver-filter"/>
25362568 <function name="TpBaseClientClassAddDispatchOperationImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl"/>
25372569 <function name="tp_base_client_implement_add_dispatch_operation ()" link="telepathy-glib-base-client.html#tp-base-client-implement-add-dispatch-operation"/>
2570 <function name="tp_base_client_add_handler_capabilities ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities"/>
2571 <function name="tp_base_client_add_handler_capabilities_varargs ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities-varargs"/>
2572 <function name="tp_base_client_add_handler_capability ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capability"/>
2573 <function name="tp_base_client_add_handler_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-filter"/>
2574 <function name="tp_base_client_be_a_handler ()" link="telepathy-glib-base-client.html#tp-base-client-be-a-handler"/>
2575 <function name="TpBaseClientClassHandleChannelsImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl"/>
2576 <function name="tp_base_client_implement_handle_channels ()" link="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels"/>
2577 <function name="tp_base_client_get_handled_channels ()" link="telepathy-glib-base-client.html#tp-base-client-get-handled-channels"/>
2578 <function name="tp_base_client_get_pending_requests ()" link="telepathy-glib-base-client.html#tp-base-client-get-pending-requests"/>
2579 <function name="tp_base_client_set_handler_bypass_approval ()" link="telepathy-glib-base-client.html#tp-base-client-set-handler-bypass-approval"/>
2580 <function name="tp_base_client_set_handler_request_notification ()" link="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification"/>
2581 <function name="tp_base_client_take_handler_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-handler-filter"/>
25382582 <function name="tp_base_client_register ()" link="telepathy-glib-base-client.html#tp-base-client-register"/>
2583 <function name="tp_base_client_unregister ()" link="telepathy-glib-base-client.html#tp-base-client-unregister"/>
25392584 <function name="tp_base_client_get_bus_name ()" link="telepathy-glib-base-client.html#tp-base-client-get-bus-name"/>
25402585 <function name="tp_base_client_get_object_path ()" link="telepathy-glib-base-client.html#tp-base-client-get-object-path"/>
25412586 <function name="The &quot;dbus-daemon&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon"/>
25422587 <function name="The &quot;name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--name"/>
25432588 <function name="The &quot;uniquify-name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--uniquify-name"/>
2589 <function name="The &quot;request-added&quot; signal" link="telepathy-glib-base-client.html#TpBaseClient-request-added"/>
2590 <function name="The &quot;request-removed&quot; signal" link="telepathy-glib-base-client.html#TpBaseClient-request-removed"/>
25442591 <function name="TpObserveChannelsContext" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext-struct"/>
25452592 <function name="tp_observe_channels_context_accept ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-accept"/>
25462593 <function name="tp_observe_channels_context_delay ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-delay"/>
25622609 <function name="The &quot;connection&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--connection"/>
25632610 <function name="The &quot;dbus-context&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dbus-context"/>
25642611 <function name="The &quot;dispatch-operation&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dispatch-operation"/>
2612 <function name="TpHandleChannelsContext" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-struct"/>
2613 <function name="tp_handle_channels_context_accept ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept"/>
2614 <function name="tp_handle_channels_context_delay ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay"/>
2615 <function name="tp_handle_channels_context_fail ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail"/>
2616 <function name="The &quot;account&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--account"/>
2617 <function name="The &quot;channels&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--channels"/>
2618 <function name="The &quot;connection&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--connection"/>
2619 <function name="The &quot;dbus-context&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--dbus-context"/>
2620 <function name="The &quot;handler-info&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--handler-info"/>
2621 <function name="The &quot;requests-satisfied&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--requests-satisfied"/>
2622 <function name="The &quot;user-action-time&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--user-action-time"/>
2623 <function name="The &quot;done&quot; signal" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-done"/>
25652624 <function name="TpSimpleObserver" link="telepathy-glib-simple-observer.html#TpSimpleObserver-struct"/>
25662625 <function name="TpSimpleObserverObserveChannelsImpl ()" link="telepathy-glib-simple-observer.html#TpSimpleObserverObserveChannelsImpl"/>
25672626 <function name="tp_simple_observer_new ()" link="telepathy-glib-simple-observer.html#tp-simple-observer-new"/>
25752634 <function name="The &quot;callback&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--callback"/>
25762635 <function name="The &quot;destroy&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--destroy"/>
25772636 <function name="The &quot;user-data&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--user-data"/>
2637 <function name="TpSimpleHandler" link="telepathy-glib-simple-handler.html#TpSimpleHandler-struct"/>
2638 <function name="TpSimpleHandlerHandleChannelsImpl ()" link="telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl"/>
2639 <function name="tp_simple_handler_new ()" link="telepathy-glib-simple-handler.html#tp-simple-handler-new"/>
2640 <function name="The &quot;bypass-approval&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--bypass-approval"/>
2641 <function name="The &quot;callback&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--callback"/>
2642 <function name="The &quot;destroy&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--destroy"/>
2643 <function name="The &quot;requests&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--requests"/>
2644 <function name="The &quot;user-data&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--user-data"/>
25782645 <function name="TpHandleRepoIface" link="telepathy-glib-handle-repo.html#TpHandleRepoIface-struct"/>
25792646 <function name="TpHandleRepoIfaceClass" link="telepathy-glib-handle-repo.html#TpHandleRepoIfaceClass"/>
25802647 <function name="tp_handle_is_valid ()" link="telepathy-glib-handle-repo.html#tp-handle-is-valid"/>
25942661 <function name="tp_handle_ensure ()" link="telepathy-glib-handle-repo.html#tp-handle-ensure"/>
25952662 <function name="tp_handle_lookup ()" link="telepathy-glib-handle-repo.html#tp-handle-lookup"/>
25962663 <function name="TpHandleSet" link="telepathy-glib-handle-repo.html#TpHandleSet"/>
2664 <function name="TP_TYPE_HANDLE_SET" link="telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS"/>
25972665 <function name="TpHandleSetMemberFunc ()" link="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc"/>
25982666 <function name="tp_handle_set_new ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new"/>
2667 <function name="tp_handle_set_copy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-copy"/>
2668 <function name="tp_handle_set_clear ()" link="telepathy-glib-handle-repo.html#tp-handle-set-clear"/>
25992669 <function name="tp_handle_set_destroy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-destroy"/>
26002670 <function name="tp_handle_set_peek ()" link="telepathy-glib-handle-repo.html#tp-handle-set-peek"/>
26012671 <function name="tp_handle_set_add ()" link="telepathy-glib-handle-repo.html#tp-handle-set-add"/>
26022672 <function name="tp_handle_set_remove ()" link="telepathy-glib-handle-repo.html#tp-handle-set-remove"/>
26032673 <function name="tp_handle_set_is_member ()" link="telepathy-glib-handle-repo.html#tp-handle-set-is-member"/>
26042674 <function name="tp_handle_set_foreach ()" link="telepathy-glib-handle-repo.html#tp-handle-set-foreach"/>
2675 <function name="tp_handle_set_is_empty ()" link="telepathy-glib-handle-repo.html#tp-handle-set-is-empty"/>
26052676 <function name="tp_handle_set_size ()" link="telepathy-glib-handle-repo.html#tp-handle-set-size"/>
26062677 <function name="tp_handle_set_to_array ()" link="telepathy-glib-handle-repo.html#tp-handle-set-to-array"/>
26072678 <function name="tp_handle_set_update ()" link="telepathy-glib-handle-repo.html#tp-handle-set-update"/>
27032774 <function name="tp_intset_foreach ()" link="telepathy-glib-TpIntSet.html#tp-intset-foreach"/>
27042775 <function name="tp_intset_to_array ()" link="telepathy-glib-TpIntSet.html#tp-intset-to-array"/>
27052776 <function name="tp_intset_from_array ()" link="telepathy-glib-TpIntSet.html#tp-intset-from-array"/>
2777 <function name="tp_intset_is_empty ()" link="telepathy-glib-TpIntSet.html#tp-intset-is-empty"/>
27062778 <function name="tp_intset_size ()" link="telepathy-glib-TpIntSet.html#tp-intset-size"/>
27072779 <function name="tp_intset_is_equal ()" link="telepathy-glib-TpIntSet.html#tp-intset-is-equal"/>
27082780 <function name="tp_intset_copy ()" link="telepathy-glib-TpIntSet.html#tp-intset-copy"/>
27112783 <function name="tp_intset_difference ()" link="telepathy-glib-TpIntSet.html#tp-intset-difference"/>
27122784 <function name="tp_intset_symmetric_difference ()" link="telepathy-glib-TpIntSet.html#tp-intset-symmetric-difference"/>
27132785 <function name="tp_intset_dump ()" link="telepathy-glib-TpIntSet.html#tp-intset-dump"/>
2786 <function name="TpIntSetFastIter" link="telepathy-glib-TpIntSet.html#TpIntSetFastIter"/>
2787 <function name="tp_intset_fast_iter_init ()" link="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init"/>
2788 <function name="tp_intset_fast_iter_next ()" link="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-next"/>
27142789 <function name="TP_INTSET_ITER_INIT()" link="telepathy-glib-TpIntSet.html#TP-INTSET-ITER-INIT:CAPS"/>
27152790 <function name="TpIntSetIter" link="telepathy-glib-TpIntSet.html#TpIntSetIter"/>
27162791 <function name="tp_intset_iter_init()" link="telepathy-glib-TpIntSet.html#tp-intset-iter-init"/>
8989 <sub name="TpBaseClient" link="telepathy-glib-base-client.html"/>
9090 <sub name="TpObserveChannelsContext" link="telepathy-glib-observe-channels-context.html"/>
9191 <sub name="TpAddDispatchOperationContext" link="telepathy-glib-add-dispatch-operation-context.html"/>
92 <sub name="TpHandleChannelsContext" link="telepathy-glib-handle-channels-context.html"/>
9293 <sub name="TpSimpleObserver" link="telepathy-glib-simple-observer.html"/>
9394 <sub name="TpSimpleApprover" link="telepathy-glib-simple-approver.html"/>
95 <sub name="TpSimpleHandler" link="telepathy-glib-simple-handler.html"/>
9496 </sub>
9597 <sub name="Service-side handle repositories" link="ch-service-handles.html">
9698 <sub name="TpHandleRepoIface" link="telepathy-glib-handle-repo.html"/>
130132 <keyword type="function" name="tp_proxy_dbus_error_to_gerror ()" link="telepathy-glib-proxy.html#tp-proxy-dbus-error-to-gerror" since="0.7.24"/>
131133 <keyword type="macro" name="TP_DBUS_ERRORS" link="telepathy-glib-proxy.html#TP-DBUS-ERRORS:CAPS" since="0.7.1"/>
132134 <keyword type="enum" name="enum TpDBusError" link="telepathy-glib-proxy.html#TpDBusError" since="0.7.1"/>
133 <keyword type="macro" name="TP_TYPE_DBUS_ERROR" link="telepathy-glib-proxy.html#TP-TYPE-DBUS-ERROR:CAPS" since="0.11.UNRELEASED"/>
135 <keyword type="macro" name="TP_TYPE_DBUS_ERROR" link="telepathy-glib-proxy.html#TP-TYPE-DBUS-ERROR:CAPS" since="0.11.5"/>
134136 <keyword type="property" name="The &quot;bus-name&quot; property" link="telepathy-glib-proxy.html#TpProxy--bus-name"/>
135137 <keyword type="property" name="The &quot;dbus-connection&quot; property" link="telepathy-glib-proxy.html#TpProxy--dbus-connection"/>
136138 <keyword type="property" name="The &quot;dbus-daemon&quot; property" link="telepathy-glib-proxy.html#TpProxy--dbus-daemon"/>
173175 <keyword type="function" name="tp_get_bus ()" link="telepathy-glib-dbus.html#tp-get-bus"/>
174176 <keyword type="function" name="tp_get_bus_proxy ()" link="telepathy-glib-dbus.html#tp-get-bus-proxy" deprecated="0.7.26: Use tp_dbus_daemon_dup() in new code."/>
175177 <keyword type="enum" name="enum TpDBusNameType" link="telepathy-glib-dbus.html#TpDBusNameType" since="0.7.1"/>
176 <keyword type="macro" name="TP_TYPE_DBUS_NAME_TYPE" link="telepathy-glib-dbus.html#TP-TYPE-DBUS-NAME-TYPE:CAPS" since="0.11.UNRELEASED"/>
178 <keyword type="macro" name="TP_TYPE_DBUS_NAME_TYPE" link="telepathy-glib-dbus.html#TP-TYPE-DBUS-NAME-TYPE:CAPS" since="0.11.5"/>
177179 <keyword type="function" name="tp_dbus_check_valid_bus_name ()" link="telepathy-glib-dbus.html#tp-dbus-check-valid-bus-name" since="0.7.1"/>
178180 <keyword type="function" name="tp_dbus_check_valid_interface_name ()" link="telepathy-glib-dbus.html#tp-dbus-check-valid-interface-name" since="0.7.1"/>
179181 <keyword type="function" name="tp_dbus_check_valid_member_name ()" link="telepathy-glib-dbus.html#tp-dbus-check-valid-member-name" since="0.7.1"/>
422424 <keyword type="macro" name="TP_IFACE_CLIENT_INTERFACE_REQUESTS" link="telepathy-glib-interfaces.html#TP-IFACE-CLIENT-INTERFACE-REQUESTS:CAPS"/>
423425 <keyword type="macro" name="TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CLIENT-INTERFACE-REQUESTS:CAPS"/>
424426 <keyword type="macro" name="TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS"/>
427 <keyword type="macro" name="TP_PROP_ACCOUNT_CHANGING_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS"/>
425428 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS"/>
426429 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_STATUS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS"/>
427430 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS"/>
453456 <keyword type="macro" name="TP_PROP_CHANNEL_INITIATOR_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS"/>
454457 <keyword type="macro" name="TP_PROP_CHANNEL_INITIATOR_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS"/>
455458 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS"/>
459 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS"/>
460 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS"/>
456461 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS"/>
457462 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_GROUP_HANDLE_OWNERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-HANDLE-OWNERS:CAPS"/>
458463 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_GROUP_LOCAL_PENDING_MEMBERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-LOCAL-PENDING-MEMBERS:CAPS"/>
516521 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_CONTACT_INFO_SUPPORTED_FIELDS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-CONTACT-INFO-SUPPORTED-FIELDS:CAPS"/>
517522 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL:CAPS"/>
518523 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL_TYPES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-LOCATION-ACCESS-CONTROL-TYPES:CAPS"/>
524 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS"/>
519525 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS"/>
520526 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS"/>
521527 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS"/>
533539 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-AVATARS-TOKEN:CAPS"/>
534540 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_CAPABILITIES_CAPS" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CAPABILITIES-CAPS"/>
535541 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-CAPABILITIES-CAPABILITIES:CAPS"/>
542 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-CONTACT-INFO-INFO:CAPS"/>
536543 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-SIMPLE-PRESENCE-PRESENCE:CAPS"/>
537544 <keyword type="macro" name="TP_TOKEN_CONNECTION_INTERFACE_LOCATION_LOCATION" link="telepathy-glib-interfaces.html#TP-TOKEN-CONNECTION-INTERFACE-LOCATION-LOCATION:CAPS"/>
538545 <keyword type="macro" name="TP_TOKEN_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GTALK_P2P" link="telepathy-glib-interfaces.html#TP-TOKEN-CHANNEL-INTERFACE-MEDIA-SIGNALLING-GTALK-P2P:CAPS"/>
610617 <keyword type="macro" name="NUM_TP_DEBUG_LEVELS" link="telepathy-glib-enums.html#NUM-TP-DEBUG-LEVELS:CAPS"/>
611618 <keyword type="enum" name="enum TpContactInfoFlags" link="telepathy-glib-enums.html#TpContactInfoFlags"/>
612619 <keyword type="enum" name="enum TpContactInfoFieldFlags" link="telepathy-glib-enums.html#TpContactInfoFieldFlags"/>
620 <keyword type="enum" name="enum TpLocationFeatures" link="telepathy-glib-enums.html#TpLocationFeatures"/>
613621 <keyword type="macro" name="TP_ERROR_PREFIX" link="telepathy-glib-errors.html#TP-ERROR-PREFIX:CAPS" since="0.7.1"/>
614622 <keyword type="macro" name="TP_ERRORS" link="telepathy-glib-errors.html#TP-ERRORS:CAPS"/>
615623 <keyword type="macro" name="TP_TYPE_ERROR" link="telepathy-glib-errors.html#TP-TYPE-ERROR:CAPS"/>
771779 <keyword type="function" name="tp_connection_manager_call_when_ready ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-call-when-ready" since="0.7.26"/>
772780 <keyword type="function" name="tp_connection_manager_is_ready ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-is-ready" since="0.7.26"/>
773781 <keyword type="enum" name="enum TpCMInfoSource" link="telepathy-glib-connection-manager.html#TpCMInfoSource" since="0.7.1"/>
774 <keyword type="macro" name="TP_TYPE_CM_INFO_SOURCE" link="telepathy-glib-connection-manager.html#TP-TYPE-CM-INFO-SOURCE:CAPS" since="0.11.UNRELEASED"/>
782 <keyword type="macro" name="TP_TYPE_CM_INFO_SOURCE" link="telepathy-glib-connection-manager.html#TP-TYPE-CM-INFO-SOURCE:CAPS" since="0.11.5"/>
775783 <keyword type="function" name="tp_connection_manager_get_info_source ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-get-info-source" since="0.7.26"/>
776784 <keyword type="function" name="tp_connection_manager_activate ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-activate" since="0.7.1"/>
777785 <keyword type="function" name="tp_connection_manager_is_running ()" link="telepathy-glib-connection-manager.html#tp-connection-manager-is-running" since="0.7.26"/>
901909 <keyword type="property" name="The &quot;status-reason&quot; property" link="telepathy-glib-connection.html#TpConnection--status-reason"/>
902910 <keyword type="struct" name="TpContact" link="telepathy-glib-contact.html#TpContact-struct"/>
903911 <keyword type="enum" name="enum TpContactFeature" link="telepathy-glib-contact.html#TpContactFeature" since="0.7.18"/>
904 <keyword type="macro" name="TP_TYPE_CONTACT_FEATURE" link="telepathy-glib-contact.html#TP-TYPE-CONTACT-FEATURE:CAPS" since="0.11.UNRELEASED"/>
912 <keyword type="macro" name="TP_TYPE_CONTACT_FEATURE" link="telepathy-glib-contact.html#TP-TYPE-CONTACT-FEATURE:CAPS" since="0.11.5"/>
905913 <keyword type="function" name="TpConnectionContactsByHandleCb ()" link="telepathy-glib-contact.html#TpConnectionContactsByHandleCb" since="0.7.18"/>
906914 <keyword type="function" name="tp_connection_get_contacts_by_handle ()" link="telepathy-glib-contact.html#tp-connection-get-contacts-by-handle" since="0.7.18"/>
907915 <keyword type="function" name="TpConnectionContactsByIdCb ()" link="telepathy-glib-contact.html#TpConnectionContactsByIdCb" since="0.7.18"/>
910918 <keyword type="function" name="tp_connection_upgrade_contacts ()" link="telepathy-glib-contact.html#tp-connection-upgrade-contacts" since="0.7.18"/>
911919 <keyword type="function" name="tp_contact_get_alias ()" link="telepathy-glib-contact.html#tp-contact-get-alias" since="0.7.18"/>
912920 <keyword type="function" name="tp_contact_get_avatar_token ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-token" since="0.7.18"/>
921 <keyword type="function" name="tp_contact_get_avatar_file ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-file" since="0.11.6"/>
922 <keyword type="function" name="tp_contact_get_avatar_mime_type ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-mime-type" since="0.11.6"/>
913923 <keyword type="function" name="tp_contact_get_connection ()" link="telepathy-glib-contact.html#tp-contact-get-connection" since="0.7.18"/>
914924 <keyword type="function" name="tp_contact_get_handle ()" link="telepathy-glib-contact.html#tp-contact-get-handle" since="0.7.18"/>
915925 <keyword type="function" name="tp_contact_get_identifier ()" link="telepathy-glib-contact.html#tp-contact-get-identifier" since="0.7.18"/>
920930 <keyword type="function" name="tp_contact_get_capabilities ()" link="telepathy-glib-contact.html#tp-contact-get-capabilities" since="0.11.3"/>
921931 <keyword type="function" name="tp_contact_has_feature ()" link="telepathy-glib-contact.html#tp-contact-has-feature" since="0.7.18"/>
922932 <keyword type="property" name="The &quot;alias&quot; property" link="telepathy-glib-contact.html#TpContact--alias"/>
933 <keyword type="property" name="The &quot;avatar-file&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-file"/>
934 <keyword type="property" name="The &quot;avatar-mime-type&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-mime-type"/>
923935 <keyword type="property" name="The &quot;avatar-token&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-token"/>
924936 <keyword type="property" name="The &quot;capabilities&quot; property" link="telepathy-glib-contact.html#TpContact--capabilities"/>
925937 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-contact.html#TpContact--connection"/>
12331245 <keyword type="function" name="tp_cli_channel_interface_dtmf_call_stop_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-stop-tone"/>
12341246 <keyword type="function" name="tp_cli_channel_interface_dtmf_callback_for_start_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-start-tone"/>
12351247 <keyword type="function" name="tp_cli_channel_interface_dtmf_callback_for_stop_tone ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-stop-tone"/>
1248 <keyword type="function" name="tp_cli_channel_interface_dtmf_call_multiple_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-call-multiple-tones"/>
1249 <keyword type="function" name="tp_cli_channel_interface_dtmf_callback_for_multiple_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-callback-for-multiple-tones"/>
1250 <keyword type="function" name="tp_cli_channel_interface_dtmf_connect_to_sending_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-sending-tones"/>
1251 <keyword type="function" name="tp_cli_channel_interface_dtmf_signal_callback_sending_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-sending-tones"/>
1252 <keyword type="function" name="tp_cli_channel_interface_dtmf_connect_to_stopped_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-connect-to-stopped-tones"/>
1253 <keyword type="function" name="tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-dtmf-signal-callback-stopped-tones"/>
12361254 <keyword type="function" name="tp_cli_channel_interface_hold_callback_for_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-callback-for-get-hold-state"/>
12371255 <keyword type="function" name="tp_cli_channel_interface_hold_call_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-call-get-hold-state"/>
12381256 <keyword type="function" name="tp_cli_channel_interface_hold_run_get_hold_state ()" link="telepathy-glib-channel-media.html#tp-cli-channel-interface-hold-run-get-hold-state" deprecated=""/>
14691487 <keyword type="function" name="tp_account_set_connect_automatically_finish ()" link="telepathy-glib-account.html#tp-account-set-connect-automatically-finish" since="0.9.0"/>
14701488 <keyword type="function" name="tp_account_get_has_been_online ()" link="telepathy-glib-account.html#tp-account-get-has-been-online" since="0.9.0"/>
14711489 <keyword type="function" name="tp_account_get_connection_status ()" link="telepathy-glib-account.html#tp-account-get-connection-status" since="0.9.0"/>
1490 <keyword type="function" name="tp_account_get_changing_presence ()" link="telepathy-glib-account.html#tp-account-get-changing-presence" since="0.11.6"/>
14721491 <keyword type="function" name="tp_account_get_current_presence ()" link="telepathy-glib-account.html#tp-account-get-current-presence" since="0.9.0"/>
14731492 <keyword type="function" name="tp_account_get_requested_presence ()" link="telepathy-glib-account.html#tp-account-get-requested-presence" since="0.9.0"/>
14741493 <keyword type="function" name="tp_account_get_parameters ()" link="telepathy-glib-account.html#tp-account-get-parameters" since="0.9.0"/>
14951514 <keyword type="function" name="tp_cli_account_connect_to_removed ()" link="telepathy-glib-account.html#tp-cli-account-connect-to-removed"/>
14961515 <keyword type="function" name="tp_cli_account_interface_avatar_signal_callback_avatar_changed ()" link="telepathy-glib-account.html#tp-cli-account-interface-avatar-signal-callback-avatar-changed"/>
14971516 <keyword type="function" name="tp_cli_account_interface_avatar_connect_to_avatar_changed ()" link="telepathy-glib-account.html#tp-cli-account-interface-avatar-connect-to-avatar-changed"/>
1517 <keyword type="property" name="The &quot;changing-presence&quot; property" link="telepathy-glib-account.html#TpAccount--changing-presence"/>
14981518 <keyword type="property" name="The &quot;connect-automatically&quot; property" link="telepathy-glib-account.html#TpAccount--connect-automatically"/>
14991519 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-account.html#TpAccount--connection"/>
15001520 <keyword type="property" name="The &quot;connection-manager&quot; property" link="telepathy-glib-account.html#TpAccount--connection-manager"/>
15351555 <keyword type="function" name="tp_cli_channel_dispatch_operation_call_claim ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-claim"/>
15361556 <keyword type="function" name="tp_cli_channel_dispatch_operation_callback_for_handle_with ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with"/>
15371557 <keyword type="function" name="tp_cli_channel_dispatch_operation_call_handle_with ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with"/>
1558 <keyword type="function" name="tp_cli_channel_dispatch_operation_callback_for_handle_with_time ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-callback-for-handle-with-time"/>
1559 <keyword type="function" name="tp_cli_channel_dispatch_operation_call_handle_with_time ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-call-handle-with-time"/>
15381560 <keyword type="function" name="tp_cli_channel_dispatch_operation_signal_callback_channel_lost ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-channel-lost"/>
15391561 <keyword type="function" name="tp_cli_channel_dispatch_operation_connect_to_channel_lost ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-connect-to-channel-lost"/>
15401562 <keyword type="function" name="tp_cli_channel_dispatch_operation_signal_callback_finished ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-signal-callback-finished"/>
15411563 <keyword type="function" name="tp_cli_channel_dispatch_operation_connect_to_finished ()" link="telepathy-glib-channel-dispatch-operation.html#tp-cli-channel-dispatch-operation-connect-to-finished"/>
1542 <keyword type="macro" name="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE" link="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" since="0.11.UNRELEASED"/>
1543 <keyword type="function" name="tp_channel_dispatch_operation_borrow_account ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-account" since="0.11.UNRELEASED"/>
1544 <keyword type="function" name="tp_channel_dispatch_operation_borrow_channels ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-channels" since="0.11.UNRELEASED"/>
1545 <keyword type="function" name="tp_channel_dispatch_operation_borrow_connection ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-connection" since="0.11.UNRELEASED"/>
1546 <keyword type="function" name="tp_channel_dispatch_operation_borrow_immutable_properties ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-immutable-properties" since="0.11.UNRELEASED"/>
1547 <keyword type="function" name="tp_channel_dispatch_operation_borrow_possible_handlers ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-possible-handlers" since="0.11.UNRELEASED"/>
1548 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-async" since="0.11.UNRELEASED"/>
1549 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-finish" since="0.11.UNRELEASED"/>
1550 <keyword type="function" name="tp_channel_dispatch_operation_claim_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-async" since="0.11.UNRELEASED"/>
1551 <keyword type="function" name="tp_channel_dispatch_operation_claim_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-finish" since="0.11.UNRELEASED"/>
1564 <keyword type="macro" name="TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE" link="telepathy-glib-channel-dispatch-operation.html#TP-CHANNEL-DISPATCH-OPERATION-FEATURE-CORE:CAPS" since="0.11.5"/>
1565 <keyword type="function" name="tp_channel_dispatch_operation_borrow_account ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-account" since="0.11.5"/>
1566 <keyword type="function" name="tp_channel_dispatch_operation_borrow_channels ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-channels" since="0.11.5"/>
1567 <keyword type="function" name="tp_channel_dispatch_operation_borrow_connection ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-connection" since="0.11.5"/>
1568 <keyword type="function" name="tp_channel_dispatch_operation_borrow_immutable_properties ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-immutable-properties" since="0.11.5"/>
1569 <keyword type="function" name="tp_channel_dispatch_operation_borrow_possible_handlers ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-possible-handlers" since="0.11.5"/>
1570 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-async" since="0.11.5"/>
1571 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-finish" since="0.11.5"/>
1572 <keyword type="function" name="tp_channel_dispatch_operation_claim_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-async" since="0.11.5"/>
1573 <keyword type="function" name="tp_channel_dispatch_operation_claim_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-finish" since="0.11.5"/>
15521574 <keyword type="property" name="The &quot;account&quot; property" link="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--account"/>
15531575 <keyword type="property" name="The &quot;cdo-properties&quot; property" link="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--cdo-properties"/>
15541576 <keyword type="property" name="The &quot;channels&quot; property" link="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--channels"/>
17601782 <keyword type="function" name="tp_svc_channel_interface_call_state_return_from_get_call_states ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-call-state-return-from-get-call-states"/>
17611783 <keyword type="struct" name="TpSvcChannelInterfaceDTMF" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-struct"/>
17621784 <keyword type="struct" name="TpSvcChannelInterfaceDTMFClass" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMFClass"/>
1785 <keyword type="function" name="tp_svc_channel_interface_dtmf_implement_multiple_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-multiple-tones"/>
17631786 <keyword type="function" name="tp_svc_channel_interface_dtmf_implement_start_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-start-tone"/>
17641787 <keyword type="function" name="tp_svc_channel_interface_dtmf_implement_stop_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-implement-stop-tone"/>
1788 <keyword type="function" name="tp_svc_channel_interface_dtmf_return_from_multiple_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-multiple-tones"/>
17651789 <keyword type="function" name="tp_svc_channel_interface_dtmf_return_from_start_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-start-tone"/>
17661790 <keyword type="function" name="tp_svc_channel_interface_dtmf_return_from_stop_tone ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-return-from-stop-tone"/>
1791 <keyword type="function" name="tp_svc_channel_interface_dtmf_multiple_tones_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-multiple-tones-impl"/>
17671792 <keyword type="function" name="tp_svc_channel_interface_dtmf_start_tone_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-start-tone-impl"/>
17681793 <keyword type="function" name="tp_svc_channel_interface_dtmf_stop_tone_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-stop-tone-impl"/>
1794 <keyword type="function" name="tp_svc_channel_interface_dtmf_emit_sending_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-sending-tones"/>
1795 <keyword type="function" name="tp_svc_channel_interface_dtmf_emit_stopped_tones ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-dtmf-emit-stopped-tones"/>
17691796 <keyword type="struct" name="TpSvcChannelInterfaceHold" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-struct"/>
17701797 <keyword type="struct" name="TpSvcChannelInterfaceHoldClass" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHoldClass"/>
17711798 <keyword type="function" name="tp_svc_channel_interface_hold_get_hold_state_impl ()" link="telepathy-glib-svc-channel-media.html#tp-svc-channel-interface-hold-get-hold-state-impl"/>
17871814 <keyword type="signal" name="The &quot;stream-removed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-removed"/>
17881815 <keyword type="signal" name="The &quot;stream-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelTypeStreamedMedia-stream-state-changed"/>
17891816 <keyword type="signal" name="The &quot;call-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceCallState-call-state-changed"/>
1817 <keyword type="signal" name="The &quot;sending-tones&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-sending-tones"/>
1818 <keyword type="signal" name="The &quot;stopped-tones&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceDTMF-stopped-tones"/>
17901819 <keyword type="signal" name="The &quot;hold-state-changed&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceHold-hold-state-changed"/>
17911820 <keyword type="signal" name="The &quot;new-session-handler&quot; signal" link="telepathy-glib-svc-channel-media.html#TpSvcChannelInterfaceMediaSignalling-new-session-handler"/>
17921821 <keyword type="struct" name="TpSvcChannelTypeFileTransfer" link="telepathy-glib-svc-channel-file-transfer.html#TpSvcChannelTypeFileTransfer-struct"/>
22282257 <keyword type="function" name="tp_svc_channel_dispatch_operation_return_from_handle_with ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with"/>
22292258 <keyword type="function" name="tp_svc_channel_dispatch_operation_handle_with_impl ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-impl"/>
22302259 <keyword type="function" name="tp_svc_channel_dispatch_operation_implement_handle_with ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with"/>
2260 <keyword type="function" name="tp_svc_channel_dispatch_operation_handle_with_time_impl ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-handle-with-time-impl"/>
2261 <keyword type="function" name="tp_svc_channel_dispatch_operation_implement_handle_with_time ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-implement-handle-with-time"/>
2262 <keyword type="function" name="tp_svc_channel_dispatch_operation_return_from_handle_with_time ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-return-from-handle-with-time"/>
22312263 <keyword type="function" name="tp_svc_channel_dispatch_operation_emit_channel_lost ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-channel-lost"/>
22322264 <keyword type="function" name="tp_svc_channel_dispatch_operation_emit_finished ()" link="telepathy-glib-svc-channel-dispatch-operation.html#tp-svc-channel-dispatch-operation-emit-finished"/>
22332265 <keyword type="signal" name="The &quot;channel-lost&quot; signal" link="telepathy-glib-svc-channel-dispatch-operation.html#TpSvcChannelDispatchOperation-channel-lost"/>
23632395 <keyword type="function" name="tp_contacts_mixin_set_contact_attribute ()" link="telepathy-glib-TpContactsMixin.html#tp-contacts-mixin-set-contact-attribute" since="0.7.14"/>
23642396 <keyword type="function" name="TpContactsMixinFillContactAttributesFunc ()" link="telepathy-glib-TpContactsMixin.html#TpContactsMixinFillContactAttributesFunc"/>
23652397 <keyword type="enum" name="enum TpDBusPropertiesMixinFlags" link="telepathy-glib-dbus-properties-mixin.html#TpDBusPropertiesMixinFlags" since="0.7.3"/>
2366 <keyword type="macro" name="TP_TYPE_DBUS_PROPERTIES_MIXIN_FLAGS" link="telepathy-glib-dbus-properties-mixin.html#TP-TYPE-DBUS-PROPERTIES-MIXIN-FLAGS:CAPS" since="0.11.UNRELEASED"/>
2398 <keyword type="macro" name="TP_TYPE_DBUS_PROPERTIES_MIXIN_FLAGS" link="telepathy-glib-dbus-properties-mixin.html#TP-TYPE-DBUS-PROPERTIES-MIXIN-FLAGS:CAPS" since="0.11.5"/>
23672399 <keyword type="struct" name="TpDBusPropertiesMixinIfaceInfo" link="telepathy-glib-dbus-properties-mixin.html#TpDBusPropertiesMixinIfaceInfo" since="0.7.3"/>
23682400 <keyword type="struct" name="TpDBusPropertiesMixinPropInfo" link="telepathy-glib-dbus-properties-mixin.html#TpDBusPropertiesMixinPropInfo" since="0.7.3"/>
23692401 <keyword type="function" name="tp_svc_interface_set_dbus_properties_info ()" link="telepathy-glib-dbus-properties-mixin.html#tp-svc-interface-set-dbus-properties-info" since="0.7.3"/>
25262558 <keyword type="function" name="tp_message_mixin_clear ()" link="telepathy-glib-TpMessageMixin.html#tp-message-mixin-clear"/>
25272559 <keyword type="function" name="tp_message_mixin_text_iface_init ()" link="telepathy-glib-TpMessageMixin.html#tp-message-mixin-text-iface-init"/>
25282560 <keyword type="struct" name="TpBaseClient" link="telepathy-glib-base-client.html#TpBaseClient-struct"/>
2529 <keyword type="function" name="tp_base_client_add_observer_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-observer-filter" since="0.11.UNRELEASED"/>
2530 <keyword type="function" name="tp_base_client_take_observer_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-observer-filter" since="0.11.UNRELEASED"/>
2531 <keyword type="function" name="tp_base_client_set_observer_recover ()" link="telepathy-glib-base-client.html#tp-base-client-set-observer-recover" since="0.11.UNRELEASED"/>
2532 <keyword type="function" name="TpBaseClientClassObserveChannelsImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassObserveChannelsImpl" since="0.11.UNRELEASED"/>
2533 <keyword type="function" name="tp_base_client_implement_observe_channels ()" link="telepathy-glib-base-client.html#tp-base-client-implement-observe-channels" since="0.11.UNRELEASED"/>
2534 <keyword type="function" name="tp_base_client_add_approver_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-approver-filter" since="0.11.UNRELEASED"/>
2535 <keyword type="function" name="tp_base_client_take_approver_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-approver-filter" since="0.11.UNRELEASED"/>
2536 <keyword type="function" name="TpBaseClientClassAddDispatchOperationImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" since="0.11.UNRELEASED"/>
2537 <keyword type="function" name="tp_base_client_implement_add_dispatch_operation ()" link="telepathy-glib-base-client.html#tp-base-client-implement-add-dispatch-operation" since="0.11.UNRELEASED"/>
2538 <keyword type="function" name="tp_base_client_register ()" link="telepathy-glib-base-client.html#tp-base-client-register" since="0.11.UNRELEASED"/>
2539 <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.UNRELEASED"/>
2540 <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.UNRELEASED"/>
2561 <keyword type="function" name="tp_base_client_add_observer_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-observer-filter" since="0.11.5"/>
2562 <keyword type="function" name="tp_base_client_take_observer_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-observer-filter" since="0.11.5"/>
2563 <keyword type="function" name="tp_base_client_set_observer_recover ()" link="telepathy-glib-base-client.html#tp-base-client-set-observer-recover" since="0.11.5"/>
2564 <keyword type="function" name="TpBaseClientClassObserveChannelsImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassObserveChannelsImpl" since="0.11.5"/>
2565 <keyword type="function" name="tp_base_client_implement_observe_channels ()" link="telepathy-glib-base-client.html#tp-base-client-implement-observe-channels" since="0.11.5"/>
2566 <keyword type="function" name="tp_base_client_add_approver_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-approver-filter" since="0.11.5"/>
2567 <keyword type="function" name="tp_base_client_take_approver_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-approver-filter" since="0.11.5"/>
2568 <keyword type="function" name="TpBaseClientClassAddDispatchOperationImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassAddDispatchOperationImpl" since="0.11.5"/>
2569 <keyword type="function" name="tp_base_client_implement_add_dispatch_operation ()" link="telepathy-glib-base-client.html#tp-base-client-implement-add-dispatch-operation" since="0.11.5"/>
2570 <keyword type="function" name="tp_base_client_add_handler_capabilities ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities" since="0.11.6"/>
2571 <keyword type="function" name="tp_base_client_add_handler_capabilities_varargs ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capabilities-varargs" since="0.11.6"/>
2572 <keyword type="function" name="tp_base_client_add_handler_capability ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-capability" since="0.11.6"/>
2573 <keyword type="function" name="tp_base_client_add_handler_filter ()" link="telepathy-glib-base-client.html#tp-base-client-add-handler-filter" since="0.11.6"/>
2574 <keyword type="function" name="tp_base_client_be_a_handler ()" link="telepathy-glib-base-client.html#tp-base-client-be-a-handler" since="0.11.6"/>
2575 <keyword type="function" name="TpBaseClientClassHandleChannelsImpl ()" link="telepathy-glib-base-client.html#TpBaseClientClassHandleChannelsImpl" since="0.11.6"/>
2576 <keyword type="function" name="tp_base_client_implement_handle_channels ()" link="telepathy-glib-base-client.html#tp-base-client-implement-handle-channels" since="0.11.6"/>
2577 <keyword type="function" name="tp_base_client_get_handled_channels ()" link="telepathy-glib-base-client.html#tp-base-client-get-handled-channels" since="0.11.6"/>
2578 <keyword type="function" name="tp_base_client_get_pending_requests ()" link="telepathy-glib-base-client.html#tp-base-client-get-pending-requests" since="0.11.6"/>
2579 <keyword type="function" name="tp_base_client_set_handler_bypass_approval ()" link="telepathy-glib-base-client.html#tp-base-client-set-handler-bypass-approval" since="0.11.6"/>
2580 <keyword type="function" name="tp_base_client_set_handler_request_notification ()" link="telepathy-glib-base-client.html#tp-base-client-set-handler-request-notification" since="0.11.6"/>
2581 <keyword type="function" name="tp_base_client_take_handler_filter ()" link="telepathy-glib-base-client.html#tp-base-client-take-handler-filter" since="0.11.6"/>
2582 <keyword type="function" name="tp_base_client_register ()" link="telepathy-glib-base-client.html#tp-base-client-register" since="0.11.5"/>
2583 <keyword type="function" name="tp_base_client_unregister ()" link="telepathy-glib-base-client.html#tp-base-client-unregister" since="0.11.6"/>
2584 <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"/>
2585 <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"/>
25412586 <keyword type="property" name="The &quot;dbus-daemon&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--dbus-daemon"/>
25422587 <keyword type="property" name="The &quot;name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--name"/>
25432588 <keyword type="property" name="The &quot;uniquify-name&quot; property" link="telepathy-glib-base-client.html#TpBaseClient--uniquify-name"/>
2589 <keyword type="signal" name="The &quot;request-added&quot; signal" link="telepathy-glib-base-client.html#TpBaseClient-request-added"/>
2590 <keyword type="signal" name="The &quot;request-removed&quot; signal" link="telepathy-glib-base-client.html#TpBaseClient-request-removed"/>
25442591 <keyword type="struct" name="TpObserveChannelsContext" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext-struct"/>
2545 <keyword type="function" name="tp_observe_channels_context_accept ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-accept" since="0.11.UNRELEASED"/>
2546 <keyword type="function" name="tp_observe_channels_context_delay ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-delay" since="0.11.UNRELEASED"/>
2547 <keyword type="function" name="tp_observe_channels_context_fail ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-fail" since="0.11.UNRELEASED"/>
2548 <keyword type="function" name="tp_observe_channels_context_is_recovering ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-is-recovering" since="0.11.UNRELEASED"/>
2592 <keyword type="function" name="tp_observe_channels_context_accept ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-accept" since="0.11.5"/>
2593 <keyword type="function" name="tp_observe_channels_context_delay ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-delay" since="0.11.5"/>
2594 <keyword type="function" name="tp_observe_channels_context_fail ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-fail" since="0.11.5"/>
2595 <keyword type="function" name="tp_observe_channels_context_is_recovering ()" link="telepathy-glib-observe-channels-context.html#tp-observe-channels-context-is-recovering" since="0.11.5"/>
25492596 <keyword type="property" name="The &quot;account&quot; property" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext--account"/>
25502597 <keyword type="property" name="The &quot;channels&quot; property" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext--channels"/>
25512598 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext--connection"/>
25542601 <keyword type="property" name="The &quot;observer-info&quot; property" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext--observer-info"/>
25552602 <keyword type="property" name="The &quot;requests&quot; property" link="telepathy-glib-observe-channels-context.html#TpObserveChannelsContext--requests"/>
25562603 <keyword type="struct" name="TpAddDispatchOperationContext" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext-struct"/>
2557 <keyword type="function" name="tp_add_dispatch_operation_context_accept ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-accept" since="0.11.UNRELEASED"/>
2558 <keyword type="function" name="tp_add_dispatch_operation_context_delay ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-delay" since="0.11.UNRELEASED"/>
2559 <keyword type="function" name="tp_add_dispatch_operation_context_fail ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-fail" since="0.11.UNRELEASED"/>
2604 <keyword type="function" name="tp_add_dispatch_operation_context_accept ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-accept" since="0.11.5"/>
2605 <keyword type="function" name="tp_add_dispatch_operation_context_delay ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-delay" since="0.11.5"/>
2606 <keyword type="function" name="tp_add_dispatch_operation_context_fail ()" link="telepathy-glib-add-dispatch-operation-context.html#tp-add-dispatch-operation-context-fail" since="0.11.5"/>
25602607 <keyword type="property" name="The &quot;account&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--account"/>
25612608 <keyword type="property" name="The &quot;channels&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--channels"/>
25622609 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--connection"/>
25632610 <keyword type="property" name="The &quot;dbus-context&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dbus-context"/>
25642611 <keyword type="property" name="The &quot;dispatch-operation&quot; property" link="telepathy-glib-add-dispatch-operation-context.html#TpAddDispatchOperationContext--dispatch-operation"/>
2612 <keyword type="struct" name="TpHandleChannelsContext" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-struct"/>
2613 <keyword type="function" name="tp_handle_channels_context_accept ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-accept" since="0.11.6"/>
2614 <keyword type="function" name="tp_handle_channels_context_delay ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-delay" since="0.11.6"/>
2615 <keyword type="function" name="tp_handle_channels_context_fail ()" link="telepathy-glib-handle-channels-context.html#tp-handle-channels-context-fail" since="0.11.6"/>
2616 <keyword type="property" name="The &quot;account&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--account"/>
2617 <keyword type="property" name="The &quot;channels&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--channels"/>
2618 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--connection"/>
2619 <keyword type="property" name="The &quot;dbus-context&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--dbus-context"/>
2620 <keyword type="property" name="The &quot;handler-info&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--handler-info"/>
2621 <keyword type="property" name="The &quot;requests-satisfied&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--requests-satisfied"/>
2622 <keyword type="property" name="The &quot;user-action-time&quot; property" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext--user-action-time"/>
2623 <keyword type="signal" name="The &quot;done&quot; signal" link="telepathy-glib-handle-channels-context.html#TpHandleChannelsContext-done"/>
25652624 <keyword type="struct" name="TpSimpleObserver" link="telepathy-glib-simple-observer.html#TpSimpleObserver-struct"/>
2566 <keyword type="function" name="TpSimpleObserverObserveChannelsImpl ()" link="telepathy-glib-simple-observer.html#TpSimpleObserverObserveChannelsImpl" since="0.11.UNRELEASED"/>
2567 <keyword type="function" name="tp_simple_observer_new ()" link="telepathy-glib-simple-observer.html#tp-simple-observer-new" since="0.11.UNRELEASED"/>
2625 <keyword type="function" name="TpSimpleObserverObserveChannelsImpl ()" link="telepathy-glib-simple-observer.html#TpSimpleObserverObserveChannelsImpl" since="0.11.5"/>
2626 <keyword type="function" name="tp_simple_observer_new ()" link="telepathy-glib-simple-observer.html#tp-simple-observer-new" since="0.11.5"/>
25682627 <keyword type="property" name="The &quot;callback&quot; property" link="telepathy-glib-simple-observer.html#TpSimpleObserver--callback"/>
25692628 <keyword type="property" name="The &quot;destroy&quot; property" link="telepathy-glib-simple-observer.html#TpSimpleObserver--destroy"/>
25702629 <keyword type="property" name="The &quot;recover&quot; property" link="telepathy-glib-simple-observer.html#TpSimpleObserver--recover"/>
25712630 <keyword type="property" name="The &quot;user-data&quot; property" link="telepathy-glib-simple-observer.html#TpSimpleObserver--user-data"/>
25722631 <keyword type="struct" name="TpSimpleApprover" link="telepathy-glib-simple-approver.html#TpSimpleApprover-struct"/>
2573 <keyword type="function" name="TpSimpleApproverAddDispatchOperationImpl ()" link="telepathy-glib-simple-approver.html#TpSimpleApproverAddDispatchOperationImpl" since="0.11.UNRELEASED"/>
2574 <keyword type="function" name="tp_simple_approver_new ()" link="telepathy-glib-simple-approver.html#tp-simple-approver-new" since="0.11.UNRELEASED"/>
2632 <keyword type="function" name="TpSimpleApproverAddDispatchOperationImpl ()" link="telepathy-glib-simple-approver.html#TpSimpleApproverAddDispatchOperationImpl" since="0.11.5"/>
2633 <keyword type="function" name="tp_simple_approver_new ()" link="telepathy-glib-simple-approver.html#tp-simple-approver-new" since="0.11.5"/>
25752634 <keyword type="property" name="The &quot;callback&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--callback"/>
25762635 <keyword type="property" name="The &quot;destroy&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--destroy"/>
25772636 <keyword type="property" name="The &quot;user-data&quot; property" link="telepathy-glib-simple-approver.html#TpSimpleApprover--user-data"/>
2637 <keyword type="struct" name="TpSimpleHandler" link="telepathy-glib-simple-handler.html#TpSimpleHandler-struct"/>
2638 <keyword type="function" name="TpSimpleHandlerHandleChannelsImpl ()" link="telepathy-glib-simple-handler.html#TpSimpleHandlerHandleChannelsImpl" since="0.11.6"/>
2639 <keyword type="function" name="tp_simple_handler_new ()" link="telepathy-glib-simple-handler.html#tp-simple-handler-new" since="0.11.6"/>
2640 <keyword type="property" name="The &quot;bypass-approval&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--bypass-approval"/>
2641 <keyword type="property" name="The &quot;callback&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--callback"/>
2642 <keyword type="property" name="The &quot;destroy&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--destroy"/>
2643 <keyword type="property" name="The &quot;requests&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--requests"/>
2644 <keyword type="property" name="The &quot;user-data&quot; property" link="telepathy-glib-simple-handler.html#TpSimpleHandler--user-data"/>
25782645 <keyword type="struct" name="TpHandleRepoIface" link="telepathy-glib-handle-repo.html#TpHandleRepoIface-struct"/>
25792646 <keyword type="struct" name="TpHandleRepoIfaceClass" link="telepathy-glib-handle-repo.html#TpHandleRepoIfaceClass"/>
25802647 <keyword type="function" name="tp_handle_is_valid ()" link="telepathy-glib-handle-repo.html#tp-handle-is-valid"/>
25942661 <keyword type="function" name="tp_handle_ensure ()" link="telepathy-glib-handle-repo.html#tp-handle-ensure"/>
25952662 <keyword type="function" name="tp_handle_lookup ()" link="telepathy-glib-handle-repo.html#tp-handle-lookup"/>
25962663 <keyword type="struct" name="TpHandleSet" link="telepathy-glib-handle-repo.html#TpHandleSet"/>
2664 <keyword type="macro" name="TP_TYPE_HANDLE_SET" link="telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS" since="0.11.6"/>
25972665 <keyword type="function" name="TpHandleSetMemberFunc ()" link="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc"/>
25982666 <keyword type="function" name="tp_handle_set_new ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new"/>
2667 <keyword type="function" name="tp_handle_set_copy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-copy" since="0.11.6"/>
2668 <keyword type="function" name="tp_handle_set_clear ()" link="telepathy-glib-handle-repo.html#tp-handle-set-clear" since="0.11.6"/>
25992669 <keyword type="function" name="tp_handle_set_destroy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-destroy"/>
26002670 <keyword type="function" name="tp_handle_set_peek ()" link="telepathy-glib-handle-repo.html#tp-handle-set-peek"/>
26012671 <keyword type="function" name="tp_handle_set_add ()" link="telepathy-glib-handle-repo.html#tp-handle-set-add"/>
26022672 <keyword type="function" name="tp_handle_set_remove ()" link="telepathy-glib-handle-repo.html#tp-handle-set-remove"/>
26032673 <keyword type="function" name="tp_handle_set_is_member ()" link="telepathy-glib-handle-repo.html#tp-handle-set-is-member"/>
26042674 <keyword type="function" name="tp_handle_set_foreach ()" link="telepathy-glib-handle-repo.html#tp-handle-set-foreach"/>
2675 <keyword type="function" name="tp_handle_set_is_empty ()" link="telepathy-glib-handle-repo.html#tp-handle-set-is-empty" since="0.11.6"/>
26052676 <keyword type="function" name="tp_handle_set_size ()" link="telepathy-glib-handle-repo.html#tp-handle-set-size"/>
26062677 <keyword type="function" name="tp_handle_set_to_array ()" link="telepathy-glib-handle-repo.html#tp-handle-set-to-array"/>
26072678 <keyword type="function" name="tp_handle_set_update ()" link="telepathy-glib-handle-repo.html#tp-handle-set-update"/>
27032774 <keyword type="function" name="tp_intset_foreach ()" link="telepathy-glib-TpIntSet.html#tp-intset-foreach"/>
27042775 <keyword type="function" name="tp_intset_to_array ()" link="telepathy-glib-TpIntSet.html#tp-intset-to-array"/>
27052776 <keyword type="function" name="tp_intset_from_array ()" link="telepathy-glib-TpIntSet.html#tp-intset-from-array"/>
2777 <keyword type="function" name="tp_intset_is_empty ()" link="telepathy-glib-TpIntSet.html#tp-intset-is-empty" since="0.11.6"/>
27062778 <keyword type="function" name="tp_intset_size ()" link="telepathy-glib-TpIntSet.html#tp-intset-size"/>
27072779 <keyword type="function" name="tp_intset_is_equal ()" link="telepathy-glib-TpIntSet.html#tp-intset-is-equal"/>
27082780 <keyword type="function" name="tp_intset_copy ()" link="telepathy-glib-TpIntSet.html#tp-intset-copy"/>
27112783 <keyword type="function" name="tp_intset_difference ()" link="telepathy-glib-TpIntSet.html#tp-intset-difference"/>
27122784 <keyword type="function" name="tp_intset_symmetric_difference ()" link="telepathy-glib-TpIntSet.html#tp-intset-symmetric-difference"/>
27132785 <keyword type="function" name="tp_intset_dump ()" link="telepathy-glib-TpIntSet.html#tp-intset-dump"/>
2786 <keyword type="struct" name="TpIntSetFastIter" link="telepathy-glib-TpIntSet.html#TpIntSetFastIter" since="0.11.6"/>
2787 <keyword type="function" name="tp_intset_fast_iter_init ()" link="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-init" since="0.11.6"/>
2788 <keyword type="function" name="tp_intset_fast_iter_next ()" link="telepathy-glib-TpIntSet.html#tp-intset-fast-iter-next" since="0.11.6"/>
27142789 <keyword type="macro" name="TP_INTSET_ITER_INIT()" link="telepathy-glib-TpIntSet.html#TP-INTSET-ITER-INIT:CAPS"/>
27152790 <keyword type="struct" name="TpIntSetIter" link="telepathy-glib-TpIntSet.html#TpIntSetIter"/>
27162791 <keyword type="macro" name="tp_intset_iter_init()" link="telepathy-glib-TpIntSet.html#tp-intset-iter-init"/>
29433018 <keyword type="constant" name="TP_CONTACT_INFO_FLAG_CAN_SET" link="telepathy-glib-enums.html#TP-CONTACT-INFO-FLAG-CAN-SET:CAPS"/>
29443019 <keyword type="constant" name="TP_CONTACT_INFO_FLAG_PUSH" link="telepathy-glib-enums.html#TP-CONTACT-INFO-FLAG-PUSH:CAPS"/>
29453020 <keyword type="constant" name="TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT" link="telepathy-glib-enums.html#TP-CONTACT-INFO-FIELD-FLAG-PARAMETERS-EXACT:CAPS"/>
3021 <keyword type="constant" name="TP_LOCATION_FEATURE_CAN_SET" link="telepathy-glib-enums.html#TP-LOCATION-FEATURE-CAN-SET:CAPS"/>
29463022 <keyword type="constant" name="TP_ERROR_NETWORK_ERROR" link="telepathy-glib-errors.html#TP-ERROR-NETWORK-ERROR:CAPS"/>
29473023 <keyword type="constant" name="TP_ERROR_NOT_IMPLEMENTED" link="telepathy-glib-errors.html#TP-ERROR-NOT-IMPLEMENTED:CAPS"/>
29483024 <keyword type="constant" name="TP_ERROR_INVALID_ARGUMENT" link="telepathy-glib-errors.html#TP-ERROR-INVALID-ARGUMENT:CAPS"/>
29893065 <keyword type="constant" name="TP_CONTACT_FEATURE_PRESENCE" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-PRESENCE:CAPS"/>
29903066 <keyword type="constant" name="TP_CONTACT_FEATURE_LOCATION" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-LOCATION:CAPS"/>
29913067 <keyword type="constant" name="TP_CONTACT_FEATURE_CAPABILITIES" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-CAPABILITIES:CAPS"/>
3068 <keyword type="constant" name="TP_CONTACT_FEATURE_AVATAR_DATA" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS"/>
29923069 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_IMPLEMENTED" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-NOT-IMPLEMENTED:CAPS"/>
29933070 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_AVAILABLE" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-NOT-AVAILABLE:CAPS"/>
29943071 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_INVALID_HANDLE" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-INVALID-HANDLE:CAPS"/>
9999 <xi:include href="xml/base-client.xml"/>
100100 <xi:include href="xml/observe-channels-context.xml"/>
101101 <xi:include href="xml/add-dispatch-operation-context.xml"/>
102 <xi:include href="xml/handle-channels-context.xml"/>
102103 <xi:include href="xml/simple-observer.xml"/>
103104 <xi:include href="xml/simple-approver.xml"/>
105 <xi:include href="xml/simple-handler.xml"/>
104106 </chapter>
105107 <chapter id="ch-service-handles">
106108 <title>Service-side handle repositories</title>
197197 TP_TYPE_HANDLE_REPO_IFACE
198198 tp_handle_repo_iface_get_type
199199 TP_HANDLE_REPO_IFACE_GET_CLASS
200 tp_handle_set_get_type
200201 <SUBSECTION>
201202 TpHandleSet
203 TP_TYPE_HANDLE_SET
202204 TpHandleSetMemberFunc
203205 tp_handle_set_new
206 tp_handle_set_copy
207 tp_handle_set_clear
204208 tp_handle_set_destroy
205209 tp_handle_set_peek
206210 tp_handle_set_add
207211 tp_handle_set_remove
208212 tp_handle_set_is_member
209213 tp_handle_set_foreach
214 tp_handle_set_is_empty
210215 tp_handle_set_size
211216 tp_handle_set_to_array
212217 tp_handle_set_update
672677 <SUBSECTION>
673678 TpSvcChannelInterfaceDTMF
674679 TpSvcChannelInterfaceDTMFClass
680 tp_svc_channel_interface_dtmf_implement_multiple_tones
675681 tp_svc_channel_interface_dtmf_implement_start_tone
676682 tp_svc_channel_interface_dtmf_implement_stop_tone
683 tp_svc_channel_interface_dtmf_return_from_multiple_tones
677684 tp_svc_channel_interface_dtmf_return_from_start_tone
678685 tp_svc_channel_interface_dtmf_return_from_stop_tone
686 tp_svc_channel_interface_dtmf_multiple_tones_impl
679687 tp_svc_channel_interface_dtmf_start_tone_impl
680688 tp_svc_channel_interface_dtmf_stop_tone_impl
689 tp_svc_channel_interface_dtmf_emit_sending_tones
690 tp_svc_channel_interface_dtmf_emit_stopped_tones
681691 <SUBSECTION Standard>
682692 TP_SVC_CHANNEL_INTERFACE_DTMF
683693 TP_IS_SVC_CHANNEL_INTERFACE_DTMF
16121622 tp_intset_foreach
16131623 tp_intset_to_array
16141624 tp_intset_from_array
1625 tp_intset_is_empty
16151626 tp_intset_size
16161627 tp_intset_is_equal
16171628 tp_intset_copy
16201631 tp_intset_difference
16211632 tp_intset_symmetric_difference
16221633 tp_intset_dump
1634 TpIntSetFastIter
1635 tp_intset_fast_iter_init
1636 tp_intset_fast_iter_next
16231637 TP_INTSET_ITER_INIT
16241638 TpIntSetIter
16251639 tp_intset_iter_init
20172031 NUM_TP_DEBUG_LEVELS
20182032 TpContactInfoFlags
20192033 TpContactInfoFieldFlags
2034 TpLocationFeatures
20202035 </SECTION>
20212036
20222037 <SECTION>
21282143 TP_IFACE_CLIENT_INTERFACE_REQUESTS
21292144 TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS
21302145 TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE
2146 TP_PROP_ACCOUNT_CHANGING_PRESENCE
21312147 TP_PROP_ACCOUNT_CONNECTION
21322148 TP_PROP_ACCOUNT_CONNECTION_STATUS
21332149 TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON
21592175 TP_PROP_CHANNEL_INITIATOR_HANDLE
21602176 TP_PROP_CHANNEL_INITIATOR_ID
21612177 TP_PROP_CHANNEL_INTERFACES
2178 TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES
2179 TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES
21622180 TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS
21632181 TP_PROP_CHANNEL_INTERFACE_GROUP_HANDLE_OWNERS
21642182 TP_PROP_CHANNEL_INTERFACE_GROUP_LOCAL_PENDING_MEMBERS
22222240 TP_PROP_CONNECTION_INTERFACE_CONTACT_INFO_SUPPORTED_FIELDS
22232241 TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL
22242242 TP_PROP_CONNECTION_INTERFACE_LOCATION_LOCATION_ACCESS_CONTROL_TYPES
2243 TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES
22252244 TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS
22262245 TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES
22272246 TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES
22392258 TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN
22402259 TP_TOKEN_CONNECTION_INTERFACE_CAPABILITIES_CAPS
22412260 TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES
2261 TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO
22422262 TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE
22432263 TP_TOKEN_CONNECTION_INTERFACE_LOCATION_LOCATION
22442264 TP_TOKEN_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GTALK_P2P
26332653 tp_cli_channel_interface_dtmf_call_stop_tone
26342654 tp_cli_channel_interface_dtmf_callback_for_start_tone
26352655 tp_cli_channel_interface_dtmf_callback_for_stop_tone
2656 tp_cli_channel_interface_dtmf_call_multiple_tones
2657 tp_cli_channel_interface_dtmf_callback_for_multiple_tones
2658 tp_cli_channel_interface_dtmf_connect_to_sending_tones
2659 tp_cli_channel_interface_dtmf_signal_callback_sending_tones
2660 tp_cli_channel_interface_dtmf_connect_to_stopped_tones
2661 tp_cli_channel_interface_dtmf_signal_callback_stopped_tones
26362662 <SUBSECTION>
26372663 tp_cli_channel_interface_hold_callback_for_get_hold_state
26382664 tp_cli_channel_interface_hold_call_get_hold_state
26482674 tp_cli_channel_interface_media_signalling_callback_for_get_session_handlers
26492675 tp_cli_channel_interface_media_signalling_connect_to_new_session_handler
26502676 tp_cli_channel_interface_media_signalling_signal_callback_new_session_handler
2677 <SUBSECTION Private>
2678 tp_cli_channel_interface_dtmf_run_multiple_tones
26512679 </SECTION>
26522680
26532681 <SECTION>
32273255 tp_connection_upgrade_contacts
32283256 tp_contact_get_alias
32293257 tp_contact_get_avatar_token
3258 tp_contact_get_avatar_file
3259 tp_contact_get_avatar_mime_type
32303260 tp_contact_get_connection
32313261 tp_contact_get_handle
32323262 tp_contact_get_identifier
33603390 tp_account_set_connect_automatically_finish
33613391 tp_account_get_has_been_online
33623392 tp_account_get_connection_status
3393 tp_account_get_changing_presence
33633394 tp_account_get_current_presence
33643395 tp_account_get_requested_presence
33653396 tp_account_get_parameters
35183549 tp_cli_channel_dispatch_operation_call_claim
35193550 tp_cli_channel_dispatch_operation_callback_for_handle_with
35203551 tp_cli_channel_dispatch_operation_call_handle_with
3552 tp_cli_channel_dispatch_operation_callback_for_handle_with_time
3553 tp_cli_channel_dispatch_operation_call_handle_with_time
35213554 tp_cli_channel_dispatch_operation_signal_callback_channel_lost
35223555 tp_cli_channel_dispatch_operation_connect_to_channel_lost
35233556 tp_cli_channel_dispatch_operation_signal_callback_finished
35853618 tp_svc_channel_dispatch_operation_return_from_handle_with
35863619 tp_svc_channel_dispatch_operation_handle_with_impl
35873620 tp_svc_channel_dispatch_operation_implement_handle_with
3621 tp_svc_channel_dispatch_operation_handle_with_time_impl
3622 tp_svc_channel_dispatch_operation_implement_handle_with_time
3623 tp_svc_channel_dispatch_operation_return_from_handle_with_time
35883624 tp_svc_channel_dispatch_operation_emit_channel_lost
35893625 tp_svc_channel_dispatch_operation_emit_finished
35903626 <SUBSECTION Standard>
37623798 tp_base_client_take_approver_filter
37633799 TpBaseClientClassAddDispatchOperationImpl
37643800 tp_base_client_implement_add_dispatch_operation
3801 tp_base_client_add_handler_capabilities
3802 tp_base_client_add_handler_capabilities_varargs
3803 tp_base_client_add_handler_capability
3804 tp_base_client_add_handler_filter
3805 tp_base_client_be_a_handler
3806 TpBaseClientClassHandleChannelsImpl
3807 tp_base_client_implement_handle_channels
3808 tp_base_client_get_handled_channels
3809 tp_base_client_get_pending_requests
3810 tp_base_client_set_handler_bypass_approval
3811 tp_base_client_set_handler_request_notification
3812 tp_base_client_take_handler_filter
37653813 tp_base_client_register
3814 tp_base_client_unregister
37663815 tp_base_client_get_bus_name
37673816 tp_base_client_get_object_path
37683817 <SUBSECTION Standard>
38573906 TpSimpleApproverPrivate
38583907 </SECTION>
38593908
3909 <SECTION>
3910 <INCLUDE>telepathy-glib/handle-channels-context.h</INCLUDE>
3911 <FILE>handle-channels-context</FILE>
3912 <TITLE>handle-channels-context</TITLE>
3913 TpHandleChannelsContext
3914 tp_handle_channels_context_accept
3915 tp_handle_channels_context_delay
3916 tp_handle_channels_context_fail
3917 <SUBSECTION Standard>
3918 tp_handle_channels_context_get_type
3919 TP_HANDLE_CHANNELS_CONTEXT
3920 TP_HANDLE_CHANNELS_CONTEXT_CLASS
3921 TP_HANDLE_CHANNELS_CONTEXT_GET_CLASS
3922 TP_IS_HANDLE_CHANNELS_CONTEXT
3923 TP_IS_HANDLE_CHANNELS_CONTEXT_CLASS
3924 TpHandleChannelsContextClass
3925 TpHandleChannelsContextPrivate
3926 TP_TYPE_HANDLE_CHANNELS_CONTEXT
3927 </SECTION>
3928
3929 <SECTION>
3930 <INCLUDE>telepathy-glib/simple-handler.h</INCLUDE>
3931 <FILE>simple-handler</FILE>
3932 <TITLE>simple-handler</TITLE>
3933 TpSimpleHandler
3934 TpSimpleHandlerHandleChannelsImpl
3935 tp_simple_handler_new
3936 <SUBSECTION Standard>
3937 tp_simple_handler_get_type
3938 TP_TYPE_SIMPLE_HANDLER
3939 TP_SIMPLE_HANDLER
3940 TP_SIMPLE_HANDLER_CLASS
3941 TP_SIMPLE_HANDLER_GET_CLASS
3942 TP_IS_SIMPLE_HANDLER
3943 TP_IS_SIMPLE_HANDLER_CLASS
3944 TpSimpleHandlerClass
3945 TpSimpleHandlerPrivate
3946 </SECTION>
2828 tp_dynamic_handle_repo_get_type
2929 tp_error_get_type
3030 tp_exportable_channel_get_type
31 tp_handle_channels_context_get_type
3132 tp_handle_repo_iface_get_type
33 tp_handle_set_get_type
3234 tp_intset_get_type
3335 tp_media_session_handler_get_type
3436 tp_media_stream_handler_get_type
3537 tp_observe_channels_context_get_type
3638 tp_proxy_get_type
3739 tp_simple_approver_get_type
40 tp_simple_handler_get_type
3841 tp_simple_observer_get_type
3942 tp_static_handle_repo_get_type
4043 tp_svc_account_get_type
4747 @arg4:
4848 @arg5:
4949
50 <!-- ##### ARG TpAccount:changing-presence ##### -->
51 <para>
52
53 </para>
54
5055 <!-- ##### ARG TpAccount:connect-automatically ##### -->
5156 <para>
5257
454459 @Returns:
455460
456461
462 <!-- ##### FUNCTION tp_account_get_changing_presence ##### -->
463 <para>
464
465 </para>
466
467 @self:
468 @Returns:
469
470
457471 <!-- ##### FUNCTION tp_account_get_current_presence ##### -->
458472 <para>
459473
88
99 </para>
1010
11
1211 <!-- ##### SECTION See_Also ##### -->
1312 <para>
1413
1514 </para>
16
1715
1816 <!-- ##### SECTION Stability_Level ##### -->
1917
2424
2525 </para>
2626
27
28 <!-- ##### SIGNAL TpBaseClient::request-added ##### -->
29 <para>
30
31 </para>
32
33 @tpbaseclient: the object which received the signal.
34 @arg1:
35 @arg2:
36
37 <!-- ##### SIGNAL TpBaseClient::request-removed ##### -->
38 <para>
39
40 </para>
41
42 @tpbaseclient: the object which received the signal.
43 @arg1:
44 @arg2:
45 @arg3:
2746
2847 <!-- ##### ARG TpBaseClient:dbus-daemon ##### -->
2948 <para>
130149 @impl:
131150
132151
152 <!-- ##### FUNCTION tp_base_client_add_handler_capabilities ##### -->
153 <para>
154
155 </para>
156
157 @self:
158 @tokens:
159
160
161 <!-- ##### FUNCTION tp_base_client_add_handler_capabilities_varargs ##### -->
162 <para>
163
164 </para>
165
166 @self:
167 @first_token:
168 @Varargs:
169
170
171 <!-- ##### FUNCTION tp_base_client_add_handler_capability ##### -->
172 <para>
173
174 </para>
175
176 @self:
177 @token:
178
179
180 <!-- ##### FUNCTION tp_base_client_add_handler_filter ##### -->
181 <para>
182
183 </para>
184
185 @self:
186 @filter:
187
188
189 <!-- ##### FUNCTION tp_base_client_be_a_handler ##### -->
190 <para>
191
192 </para>
193
194 @self:
195
196
197 <!-- ##### USER_FUNCTION TpBaseClientClassHandleChannelsImpl ##### -->
198 <para>
199
200 </para>
201
202 @client:
203 @account:
204 @connection:
205 @channels:
206 @requests_satisfied:
207 @user_action_time:
208 @context:
209
210
211 <!-- ##### FUNCTION tp_base_client_implement_handle_channels ##### -->
212 <para>
213
214 </para>
215
216 @klass:
217 @impl:
218
219
220 <!-- ##### FUNCTION tp_base_client_get_handled_channels ##### -->
221 <para>
222
223 </para>
224
225 @self:
226 @Returns:
227
228
229 <!-- ##### FUNCTION tp_base_client_get_pending_requests ##### -->
230 <para>
231
232 </para>
233
234 @self:
235 @Returns:
236
237
238 <!-- ##### FUNCTION tp_base_client_set_handler_bypass_approval ##### -->
239 <para>
240
241 </para>
242
243 @self:
244 @bypass_approval:
245
246
247 <!-- ##### FUNCTION tp_base_client_set_handler_request_notification ##### -->
248 <para>
249
250 </para>
251
252 @self:
253
254
255 <!-- ##### FUNCTION tp_base_client_take_handler_filter ##### -->
256 <para>
257
258 </para>
259
260 @self:
261 @filter:
262
263
133264 <!-- ##### FUNCTION tp_base_client_register ##### -->
134265 <para>
135266
140271 @Returns:
141272
142273
274 <!-- ##### FUNCTION tp_base_client_unregister ##### -->
275 <para>
276
277 </para>
278
279 @self:
280
281
143282 <!-- ##### FUNCTION tp_base_client_get_bus_name ##### -->
144283 <para>
145284
138138 @Returns:
139139
140140
141 <!-- ##### USER_FUNCTION tp_cli_channel_dispatch_operation_callback_for_handle_with_time ##### -->
142 <para>
143
144 </para>
145
146 @proxy:
147 @error:
148 @user_data:
149 @weak_object:
150
151
152 <!-- ##### FUNCTION tp_cli_channel_dispatch_operation_call_handle_with_time ##### -->
153 <para>
154
155 </para>
156
157 @proxy:
158 @timeout_ms:
159 @in_Handler:
160 @in_UserActionTime:
161 @callback:
162 @user_data:
163 @destroy:
164 @weak_object:
165 @Returns:
166
167
141168 <!-- ##### USER_FUNCTION tp_cli_channel_dispatch_operation_signal_callback_channel_lost ##### -->
142169 <para>
143170
458458 @weak_object:
459459
460460
461 <!-- ##### FUNCTION tp_cli_channel_interface_dtmf_call_multiple_tones ##### -->
462 <para>
463
464 </para>
465
466 @proxy:
467 @timeout_ms:
468 @in_Tones:
469 @callback:
470 @user_data:
471 @destroy:
472 @weak_object:
473 @Returns:
474
475
476 <!-- ##### USER_FUNCTION tp_cli_channel_interface_dtmf_callback_for_multiple_tones ##### -->
477 <para>
478
479 </para>
480
481 @proxy:
482 @error:
483 @user_data:
484 @weak_object:
485
486
487 <!-- ##### FUNCTION tp_cli_channel_interface_dtmf_connect_to_sending_tones ##### -->
488 <para>
489
490 </para>
491
492 @proxy:
493 @callback:
494 @user_data:
495 @destroy:
496 @weak_object:
497 @error:
498 @Returns:
499
500
501 <!-- ##### USER_FUNCTION tp_cli_channel_interface_dtmf_signal_callback_sending_tones ##### -->
502 <para>
503
504 </para>
505
506 @proxy:
507 @arg_Tones:
508 @user_data:
509 @weak_object:
510
511
512 <!-- ##### FUNCTION tp_cli_channel_interface_dtmf_connect_to_stopped_tones ##### -->
513 <para>
514
515 </para>
516
517 @proxy:
518 @callback:
519 @user_data:
520 @destroy:
521 @weak_object:
522 @error:
523 @Returns:
524
525
526 <!-- ##### USER_FUNCTION tp_cli_channel_interface_dtmf_signal_callback_stopped_tones ##### -->
527 <para>
528
529 </para>
530
531 @proxy:
532 @arg_Cancelled:
533 @user_data:
534 @weak_object:
535
536
461537 <!-- ##### USER_FUNCTION tp_cli_channel_interface_hold_callback_for_get_hold_state ##### -->
462538 <para>
463539
0 <!-- ##### SECTION Title ##### -->
1 contact-list-manager
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 TpContactListManager ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpContactListManager:connection ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### STRUCT TpContactListManagerClass ##### -->
34 <para>
35
36 </para>
37
38
39 <!-- ##### ENUM TpPresenceState ##### -->
40 <para>
41
42 </para>
43
44 @TP_PRESENCE_STATE_NO:
45 @TP_PRESENCE_STATE_ASK:
46 @TP_PRESENCE_STATE_YES:
47
48 <!-- ##### FUNCTION tp_contact_list_manager_set_list_received ##### -->
49 <para>
50
51 </para>
52
53 @self:
54
55
56 <!-- ##### FUNCTION tp_contact_list_manager_contacts_changed ##### -->
57 <para>
58
59 </para>
60
61 @self:
62 @changed:
63 @removed:
64
65
66 <!-- ##### USER_FUNCTION TpContactListManagerBooleanFunc ##### -->
67 <para>
68
69 </para>
70
71 @self:
72 @Returns:
73
74
75 <!-- ##### FUNCTION tp_contact_list_manager_false_func ##### -->
76 <para>
77
78 </para>
79
80 @self:
81 @Returns:
82
83
84 <!-- ##### FUNCTION tp_contact_list_manager_true_func ##### -->
85 <para>
86
87 </para>
88
89 @self:
90 @Returns:
91
92
93 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_can_change_subscriptions ##### -->
94 <para>
95
96 </para>
97
98 @cls:
99 @check:
100
101
102 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_request_uses_message ##### -->
103 <para>
104
105 </para>
106
107 @cls:
108 @check:
109
110
111 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_subscriptions_persist ##### -->
112 <para>
113
114 </para>
115
116 @cls:
117 @check:
118
119
120 <!-- ##### USER_FUNCTION TpContactListManagerGetContactsFunc ##### -->
121 <para>
122
123 </para>
124
125 @self:
126 @Returns:
127
128
129 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contacts ##### -->
130 <para>
131
132 </para>
133
134 @cls:
135 @impl:
136
137
138 <!-- ##### USER_FUNCTION TpContactListManagerGetPresenceStatesFunc ##### -->
139 <para>
140
141 </para>
142
143 @self:
144 @contact:
145 @subscribe:
146 @publish:
147 @publish_request:
148
149
150 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_states ##### -->
151 <para>
152
153 </para>
154
155 @cls:
156 @impl:
157
158
159 <!-- ##### USER_FUNCTION TpContactListManagerRequestSubscriptionFunc ##### -->
160 <para>
161
162 </para>
163
164 @self:
165 @contacts:
166 @message:
167 @error:
168 @Returns:
169
170
171 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_request_subscription ##### -->
172 <para>
173
174 </para>
175
176 @cls:
177 @impl:
178
179
180 <!-- ##### USER_FUNCTION TpContactListManagerActOnContactsFunc ##### -->
181 <para>
182
183 </para>
184
185 @self:
186 @contacts:
187 @error:
188 @Returns:
189
190
191 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_authorize_publication ##### -->
192 <para>
193
194 </para>
195
196 @cls:
197 @impl:
198
199
200 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_just_store_contacts ##### -->
201 <para>
202
203 </para>
204
205 @cls:
206 @impl:
207
208
209 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_contacts ##### -->
210 <para>
211
212 </para>
213
214 @cls:
215 @impl:
216
217
218 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unsubscribe ##### -->
219 <para>
220
221 </para>
222
223 @cls:
224 @impl:
225
226
227 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unpublish ##### -->
228 <para>
229
230 </para>
231
232 @cls:
233 @impl:
234
235
236 <!-- ##### USER_FUNCTION TpContactListManagerNormalizeFunc ##### -->
237 <para>
238
239 </para>
240
241 @self:
242 @s:
243 @Returns:
244
245
246 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_normalize_group ##### -->
247 <para>
248
249 </para>
250
251 @cls:
252 @impl:
253
254
255 <!-- ##### USER_FUNCTION TpContactListManagerGetContactGroupsFunc ##### -->
256 <para>
257
258 </para>
259
260 @self:
261 @contact:
262 @Returns:
263
264
265 <!-- ##### USER_FUNCTION TpContactListManagerGetGroupsFunc ##### -->
266 <para>
267
268 </para>
269
270 @self:
271 @Returns:
272
273
274 <!-- ##### USER_FUNCTION TpContactListManagerGroupContactsFunc ##### -->
275 <para>
276
277 </para>
278
279 @self:
280 @group:
281 @contacts:
282
283
284 <!-- ##### USER_FUNCTION TpContactListManagerRemoveGroupFunc ##### -->
285 <para>
286
287 </para>
288
289 @self:
290 @group:
291 @error:
292 @Returns:
293
294
295 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_add_to_group ##### -->
296 <para>
297
298 </para>
299
300 @cls:
301 @impl:
302
303
304 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_disjoint_groups ##### -->
305 <para>
306
307 </para>
308
309 @cls:
310 @impl:
311
312
313 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contact_groups ##### -->
314 <para>
315
316 </para>
317
318 @cls:
319 @impl:
320
321
322 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_groups ##### -->
323 <para>
324
325 </para>
326
327 @cls:
328 @impl:
329
330
331 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_from_group ##### -->
332 <para>
333
334 </para>
335
336 @cls:
337 @impl:
338
339
340 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_group ##### -->
341 <para>
342
343 </para>
344
345 @cls:
346 @impl:
347
348
349 <!-- ##### FUNCTION tp_contact_list_manager_group_renamed ##### -->
350 <para>
351
352 </para>
353
354 @self:
355 @old_name:
356 @new_name:
357
358
359 <!-- ##### FUNCTION tp_contact_list_manager_groups_changed ##### -->
360 <para>
361
362 </para>
363
364 @self:
365 @contacts:
366 @added:
367 @removed:
368
369
370 <!-- ##### FUNCTION tp_contact_list_manager_groups_created ##### -->
371 <para>
372
373 </para>
374
375 @self:
376 @created:
377
378
379 <!-- ##### FUNCTION tp_contact_list_manager_groups_removed ##### -->
380 <para>
381
382 </para>
383
384 @self:
385 @removed:
386
387
388 <!-- ##### USER_FUNCTION TpContactListManagerContactBooleanFunc ##### -->
389 <para>
390
391 </para>
392
393 @self:
394 @contact:
395 @Returns:
396
397
398 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_can_block ##### -->
399 <para>
400
401 </para>
402
403 @cls:
404 @check:
405
406
407 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_blocked_contacts ##### -->
408 <para>
409
410 </para>
411
412 @cls:
413 @impl:
414
415
416 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contact_blocked ##### -->
417 <para>
418
419 </para>
420
421 @cls:
422 @impl:
423
424
425 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_block_contacts ##### -->
426 <para>
427
428 </para>
429
430 @cls:
431 @impl:
432
433
434 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unblock_contacts ##### -->
435 <para>
436
437 </para>
438
439 @cls:
440 @impl:
441
442
443 <!-- ##### FUNCTION tp_contact_list_manager_contact_blocking_changed ##### -->
444 <para>
445
446 </para>
447
448 @self:
449 @changed:
450
451
2626
2727
2828 <!-- ##### ARG TpContact:alias ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### ARG TpContact:avatar-file ##### -->
34 <para>
35
36 </para>
37
38 <!-- ##### ARG TpContact:avatar-mime-type ##### -->
2939 <para>
3040
3141 </para>
8595 @TP_CONTACT_FEATURE_PRESENCE:
8696 @TP_CONTACT_FEATURE_LOCATION:
8797 @TP_CONTACT_FEATURE_CAPABILITIES:
98 @TP_CONTACT_FEATURE_AVATAR_DATA:
8899
89100 <!-- ##### MACRO TP_TYPE_CONTACT_FEATURE ##### -->
90101 <para>
202213 @Returns:
203214
204215
216 <!-- ##### FUNCTION tp_contact_get_avatar_file ##### -->
217 <para>
218
219 </para>
220
221 @self:
222 @Returns:
223
224
225 <!-- ##### FUNCTION tp_contact_get_avatar_mime_type ##### -->
226 <para>
227
228 </para>
229
230 @self:
231 @Returns:
232
233
205234 <!-- ##### FUNCTION tp_contact_get_connection ##### -->
206235 <para>
207236
675675
676676 @TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT:
677677
678 <!-- ##### ENUM TpLocationFeatures ##### -->
679 <para>
680
681 </para>
682
683 @TP_LOCATION_FEATURE_CAN_SET:
684
0 <!-- ##### SECTION Title ##### -->
1 handle-channels-context
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 TpHandleChannelsContext ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### SIGNAL TpHandleChannelsContext::done ##### -->
29 <para>
30
31 </para>
32
33 @tphandlechannelscontext: the object which received the signal.
34
35 <!-- ##### ARG TpHandleChannelsContext:account ##### -->
36 <para>
37
38 </para>
39
40 <!-- ##### ARG TpHandleChannelsContext:channels ##### -->
41 <para>
42
43 </para>
44
45 <!-- ##### ARG TpHandleChannelsContext:connection ##### -->
46 <para>
47
48 </para>
49
50 <!-- ##### ARG TpHandleChannelsContext:dbus-context ##### -->
51 <para>
52
53 </para>
54
55 <!-- ##### ARG TpHandleChannelsContext:handler-info ##### -->
56 <para>
57
58 </para>
59
60 <!-- ##### ARG TpHandleChannelsContext:requests-satisfied ##### -->
61 <para>
62
63 </para>
64
65 <!-- ##### ARG TpHandleChannelsContext:user-action-time ##### -->
66 <para>
67
68 </para>
69
70 <!-- ##### FUNCTION tp_handle_channels_context_accept ##### -->
71 <para>
72
73 </para>
74
75 @self:
76
77
78 <!-- ##### FUNCTION tp_handle_channels_context_delay ##### -->
79 <para>
80
81 </para>
82
83 @self:
84
85
86 <!-- ##### FUNCTION tp_handle_channels_context_fail ##### -->
87 <para>
88
89 </para>
90
91 @self:
92 @error:
93
94
219219 </para>
220220
221221
222 <!-- ##### MACRO TP_TYPE_HANDLE_SET ##### -->
223 <para>
224
225 </para>
226
227
228
222229 <!-- ##### USER_FUNCTION TpHandleSetMemberFunc ##### -->
223230 <para>
224231
236243
237244 @repo:
238245 @Returns:
246
247
248 <!-- ##### FUNCTION tp_handle_set_copy ##### -->
249 <para>
250
251 </para>
252
253 @other:
254 @Returns:
255
256
257 <!-- ##### FUNCTION tp_handle_set_clear ##### -->
258 <para>
259
260 </para>
261
262 @set:
239263
240264
241265 <!-- ##### FUNCTION tp_handle_set_destroy ##### -->
294318 @userdata:
295319
296320
321 <!-- ##### FUNCTION tp_handle_set_is_empty ##### -->
322 <para>
323
324 </para>
325
326 @set:
327 @Returns:
328
329
297330 <!-- ##### FUNCTION tp_handle_set_size ##### -->
298331 <para>
299332
754754
755755
756756
757 <!-- ##### MACRO TP_PROP_ACCOUNT_CHANGING_PRESENCE ##### -->
758 <para>
759
760 </para>
761
762
763
757764 <!-- ##### MACRO TP_PROP_ACCOUNT_CONNECTION ##### -->
758765 <para>
759766
971978
972979
973980
981 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES ##### -->
982 <para>
983
984 </para>
985
986
987
988 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES ##### -->
989 <para>
990
991 </para>
992
993
994
974995 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS ##### -->
975996 <para>
976997
14121433
14131434
14141435
1436 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES ##### -->
1437 <para>
1438
1439 </para>
1440
1441
1442
14151443 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS ##### -->
14161444 <para>
14171445
15311559
15321560
15331561
1562 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO ##### -->
1563 <para>
1564
1565 </para>
1566
1567
1568
15341569 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE ##### -->
15351570 <para>
15361571
141141 @Returns:
142142
143143
144 <!-- ##### FUNCTION tp_intset_is_empty ##### -->
145 <para>
146
147 </para>
148
149 @set:
150 @Returns:
151
152
144153 <!-- ##### FUNCTION tp_intset_size ##### -->
145154 <para>
146155
218227 @Returns:
219228
220229
230 <!-- ##### STRUCT TpIntSetFastIter ##### -->
231 <para>
232
233 </para>
234
235
236 <!-- ##### FUNCTION tp_intset_fast_iter_init ##### -->
237 <para>
238
239 </para>
240
241 @iter:
242 @set:
243
244
245 <!-- ##### FUNCTION tp_intset_fast_iter_next ##### -->
246 <para>
247
248 </para>
249
250 @iter:
251 @output:
252 @Returns:
253
254
221255 <!-- ##### MACRO TP_INTSET_ITER_INIT ##### -->
222256 <para>
223257
88
99 </para>
1010
11
1211 <!-- ##### SECTION See_Also ##### -->
1312 <para>
1413
1514 </para>
16
1715
1816 <!-- ##### SECTION Stability_Level ##### -->
1917
0 <!-- ##### SECTION Title ##### -->
1 simple-handler
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 TpSimpleHandler ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpSimpleHandler:bypass-approval ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### ARG TpSimpleHandler:callback ##### -->
34 <para>
35
36 </para>
37
38 <!-- ##### ARG TpSimpleHandler:destroy ##### -->
39 <para>
40
41 </para>
42
43 <!-- ##### ARG TpSimpleHandler:requests ##### -->
44 <para>
45
46 </para>
47
48 <!-- ##### ARG TpSimpleHandler:user-data ##### -->
49 <para>
50
51 </para>
52
53 <!-- ##### USER_FUNCTION TpSimpleHandlerHandleChannelsImpl ##### -->
54 <para>
55
56 </para>
57
58 @self:
59 @account:
60 @connection:
61 @channels:
62 @requests_satisfied:
63 @user_action_time:
64 @context:
65 @user_data:
66
67
68 <!-- ##### FUNCTION tp_simple_handler_new ##### -->
69 <para>
70
71 </para>
72
73 @dbus:
74 @bypass_approval:
75 @requests:
76 @name:
77 @unique:
78 @callback:
79 @user_data:
80 @destroy:
81 @Returns:
82
83
101101 @impl:
102102
103103
104 <!-- ##### USER_FUNCTION tp_svc_channel_dispatch_operation_handle_with_time_impl ##### -->
105 <para>
106
107 </para>
108
109 @self:
110 @in_Handler:
111 @in_UserActionTime:
112 @context:
113
114
115 <!-- ##### FUNCTION tp_svc_channel_dispatch_operation_implement_handle_with_time ##### -->
116 <para>
117
118 </para>
119
120 @klass:
121 @impl:
122
123
124 <!-- ##### FUNCTION tp_svc_channel_dispatch_operation_return_from_handle_with_time ##### -->
125 <para>
126
127 </para>
128
129 @context:
130
131
104132 <!-- ##### FUNCTION tp_svc_channel_dispatch_operation_emit_channel_lost ##### -->
105133 <para>
106134
305305 </para>
306306
307307
308 <!-- ##### SIGNAL TpSvcChannelInterfaceDTMF::sending-tones ##### -->
309 <para>
310
311 </para>
312
313 @tpsvcchannelinterfacedtmf: the object which received the signal.
314 @arg1:
315
316 <!-- ##### SIGNAL TpSvcChannelInterfaceDTMF::stopped-tones ##### -->
317 <para>
318
319 </para>
320
321 @tpsvcchannelinterfacedtmf: the object which received the signal.
322 @arg1:
323
308324 <!-- ##### STRUCT TpSvcChannelInterfaceDTMFClass ##### -->
309325 <para>
310326
311327 </para>
312328
313329
330 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_implement_multiple_tones ##### -->
331 <para>
332
333 </para>
334
335 @klass:
336 @impl:
337
338
314339 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_implement_start_tone ##### -->
315340 <para>
316341
329354 @impl:
330355
331356
357 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_return_from_multiple_tones ##### -->
358 <para>
359
360 </para>
361
362 @context:
363
364
332365 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_return_from_start_tone ##### -->
333366 <para>
334367
342375
343376 </para>
344377
378 @context:
379
380
381 <!-- ##### USER_FUNCTION tp_svc_channel_interface_dtmf_multiple_tones_impl ##### -->
382 <para>
383
384 </para>
385
386 @self:
387 @in_Tones:
345388 @context:
346389
347390
366409 @context:
367410
368411
412 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_emit_sending_tones ##### -->
413 <para>
414
415 </para>
416
417 @instance:
418 @arg_Tones:
419
420
421 <!-- ##### FUNCTION tp_svc_channel_interface_dtmf_emit_stopped_tones ##### -->
422 <para>
423
424 </para>
425
426 @instance:
427 @arg_Cancelled:
428
429
369430 <!-- ##### STRUCT TpSvcChannelInterfaceHold ##### -->
370431 <para>
371432
2525 base-protocol
2626
2727
28 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Image ##### -->
29
30
31
32 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Long_Description ##### -->
33 <para>
34
35 </para>
36
37
38 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:See_Also ##### -->
39 <para>
40
41 </para>
42
43
44 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Short_Description ##### -->
45
46
47
48 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Stability_Level ##### -->
49
50
51
52 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Title ##### -->
53 contact-list-manager
54
55
2856 <!-- ##### SECTION ./tmpl/protocol.sgml:Image ##### -->
2957
3058
188216
189217 </para>
190218
219
220 <!-- ##### SIGNAL TpBaseConnection::clients-interested ##### -->
221 <para>
222
223 </para>
224
225 @tpbaseconnection: the object which received the signal.
226 @arg1:
227
228 <!-- ##### SIGNAL TpBaseConnection::clients-uninterested ##### -->
229 <para>
230
231 </para>
232
233 @tpbaseconnection: the object which received the signal.
234 @arg1:
191235
192236 <!-- ##### ARG TpBaseConnectionManager:interfaces ##### -->
193237 <para>
234278 @get_interfaces:
235279 @get_connection_details:
236280
281 <!-- ##### STRUCT TpContactListManager ##### -->
282 <para>
283
284 </para>
285
286
287 <!-- ##### ARG TpContactListManager:connection ##### -->
288 <para>
289
290 </para>
291
292
293 <!-- ##### USER_FUNCTION TpContactListManagerActOnContactsFunc ##### -->
294 <para>
295
296 </para>
297
298 @self:
299 @contacts:
300 @error:
301 @Returns:
302
303 <!-- ##### USER_FUNCTION TpContactListManagerBooleanFunc ##### -->
304 <para>
305
306 </para>
307
308 @self:
309 @Returns:
310
311 <!-- ##### STRUCT TpContactListManagerClass ##### -->
312 <para>
313
314 </para>
315
316
317 <!-- ##### USER_FUNCTION TpContactListManagerContactBooleanFunc ##### -->
318 <para>
319
320 </para>
321
322 @self:
323 @contact:
324 @Returns:
325
326 <!-- ##### USER_FUNCTION TpContactListManagerGetContactGroupsFunc ##### -->
327 <para>
328
329 </para>
330
331 @self:
332 @contact:
333 @Returns:
334
335 <!-- ##### USER_FUNCTION TpContactListManagerGetContactsFunc ##### -->
336 <para>
337
338 </para>
339
340 @self:
341 @Returns:
342
343 <!-- ##### USER_FUNCTION TpContactListManagerGetGroupsFunc ##### -->
344 <para>
345
346 </para>
347
348 @self:
349 @Returns:
350
351 <!-- ##### USER_FUNCTION TpContactListManagerGetPresenceStatesFunc ##### -->
352 <para>
353
354 </para>
355
356 @self:
357 @contact:
358 @subscribe:
359 @publish:
360 @publish_request:
361
362 <!-- ##### USER_FUNCTION TpContactListManagerGroupContactsFunc ##### -->
363 <para>
364
365 </para>
366
367 @self:
368 @group:
369 @contacts:
370
371 <!-- ##### USER_FUNCTION TpContactListManagerNormalizeFunc ##### -->
372 <para>
373
374 </para>
375
376 @self:
377 @s:
378 @Returns:
379
380 <!-- ##### USER_FUNCTION TpContactListManagerRemoveGroupFunc ##### -->
381 <para>
382
383 </para>
384
385 @self:
386 @group:
387 @error:
388 @Returns:
389
390 <!-- ##### STRUCT TpContactListManagerRequest ##### -->
391 <para>
392
393 </para>
394
395
396 <!-- ##### USER_FUNCTION TpContactListManagerRequestSubscriptionFunc ##### -->
397 <para>
398
399 </para>
400
401 @self:
402 @contacts:
403 @message:
404 @error:
405 @Returns:
406
407 <!-- ##### ENUM TpPresenceState ##### -->
408 <para>
409
410 </para>
411
412 @TP_PRESENCE_STATE_NO:
413 @TP_PRESENCE_STATE_ASK:
414 @TP_PRESENCE_STATE_YES:
415
237416 <!-- ##### STRUCT TpProtocol ##### -->
238417 <para>
239418
299478
300479 </para>
301480
481
482 <!-- ##### FUNCTION tp_base_connection_add_client_interest ##### -->
483 <para>
484
485 </para>
486
487 @self:
488 @unique_name:
489 @iface:
490 @only_if_uninterested:
302491
303492 <!-- ##### FUNCTION tp_base_connection_manager_add_protocol ##### -->
304493 <para>
333522 @asv:
334523 @error:
335524 @Returns:
525
526 <!-- ##### FUNCTION tp_cli_connection_call_add_client_interest ##### -->
527 <para>
528
529 </para>
530
531 @proxy:
532 @timeout_ms:
533 @in_Interfaces:
534 @callback:
535 @user_data:
536 @destroy:
537 @weak_object:
538 @Returns:
539
540 <!-- ##### FUNCTION tp_cli_connection_call_remove_client_interest ##### -->
541 <para>
542
543 </para>
544
545 @proxy:
546 @timeout_ms:
547 @in_Interfaces:
548 @callback:
549 @user_data:
550 @destroy:
551 @weak_object:
552 @Returns:
553
554 <!-- ##### USER_FUNCTION tp_cli_connection_callback_for_add_client_interest ##### -->
555 <para>
556
557 </para>
558
559 @proxy:
560 @error:
561 @user_data:
562 @weak_object:
563
564 <!-- ##### USER_FUNCTION tp_cli_connection_callback_for_remove_client_interest ##### -->
565 <para>
566
567 </para>
568
569 @proxy:
570 @error:
571 @user_data:
572 @weak_object:
336573
337574 <!-- ##### FUNCTION tp_cli_protocol_call_identify_account ##### -->
338575 <para>
384621 @user_data:
385622 @weak_object:
386623
624 <!-- ##### FUNCTION tp_connection_add_client_interest ##### -->
625 <para>
626
627 </para>
628
629 @self:
630 @interested_in:
631
632 <!-- ##### FUNCTION tp_connection_add_client_interest_by_id ##### -->
633 <para>
634
635 </para>
636
637 @self:
638 @interested_in:
639
387640 <!-- ##### FUNCTION tp_connection_manager_get_protocol_object ##### -->
388641 <para>
389642
391644
392645 @self:
393646 @protocol:
647 @Returns:
648
649 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_add_to_group ##### -->
650 <para>
651
652 </para>
653
654 @cls:
655 @impl:
656
657 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_authorize_publication ##### -->
658 <para>
659
660 </para>
661
662 @cls:
663 @impl:
664
665 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_block_contacts ##### -->
666 <para>
667
668 </para>
669
670 @cls:
671 @impl:
672
673 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_can_block ##### -->
674 <para>
675
676 </para>
677
678 @cls:
679 @check:
680
681 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_can_change_subscriptions ##### -->
682 <para>
683
684 </para>
685
686 @cls:
687 @check:
688
689 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_disjoint_groups ##### -->
690 <para>
691
692 </para>
693
694 @cls:
695 @impl:
696
697 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_blocked_contacts ##### -->
698 <para>
699
700 </para>
701
702 @cls:
703 @impl:
704
705 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contact_blocked ##### -->
706 <para>
707
708 </para>
709
710 @cls:
711 @impl:
712
713 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contact_groups ##### -->
714 <para>
715
716 </para>
717
718 @cls:
719 @impl:
720
721 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_contacts ##### -->
722 <para>
723
724 </para>
725
726 @cls:
727 @impl:
728
729 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_groups ##### -->
730 <para>
731
732 </para>
733
734 @cls:
735 @impl:
736
737 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_get_states ##### -->
738 <para>
739
740 </para>
741
742 @cls:
743 @impl:
744
745 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_just_store_contacts ##### -->
746 <para>
747
748 </para>
749
750 @cls:
751 @impl:
752
753 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_normalize_group ##### -->
754 <para>
755
756 </para>
757
758 @cls:
759 @impl:
760
761 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_contacts ##### -->
762 <para>
763
764 </para>
765
766 @cls:
767 @impl:
768
769 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_from_group ##### -->
770 <para>
771
772 </para>
773
774 @cls:
775 @impl:
776
777 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_remove_group ##### -->
778 <para>
779
780 </para>
781
782 @cls:
783 @impl:
784
785 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_request_subscription ##### -->
786 <para>
787
788 </para>
789
790 @cls:
791 @impl:
792
793 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_request_uses_message ##### -->
794 <para>
795
796 </para>
797
798 @cls:
799 @check:
800
801 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_subscriptions_persist ##### -->
802 <para>
803
804 </para>
805
806 @cls:
807 @check:
808
809 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unblock_contacts ##### -->
810 <para>
811
812 </para>
813
814 @cls:
815 @impl:
816
817 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unpublish ##### -->
818 <para>
819
820 </para>
821
822 @cls:
823 @impl:
824
825 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_unsubscribe ##### -->
826 <para>
827
828 </para>
829
830 @cls:
831 @impl:
832
833 <!-- ##### FUNCTION tp_contact_list_manager_contact_blocking_changed ##### -->
834 <para>
835
836 </para>
837
838 @self:
839 @changed:
840
841 <!-- ##### FUNCTION tp_contact_list_manager_contacts_changed ##### -->
842 <para>
843
844 </para>
845
846 @self:
847 @changed:
848 @removed:
849
850 <!-- ##### FUNCTION tp_contact_list_manager_false_func ##### -->
851 <para>
852
853 </para>
854
855 @self:
856 @Returns:
857
858 <!-- ##### FUNCTION tp_contact_list_manager_group_renamed ##### -->
859 <para>
860
861 </para>
862
863 @self:
864 @old_name:
865 @new_name:
866
867 <!-- ##### FUNCTION tp_contact_list_manager_groups_changed ##### -->
868 <para>
869
870 </para>
871
872 @self:
873 @contacts:
874 @added:
875 @removed:
876
877 <!-- ##### FUNCTION tp_contact_list_manager_groups_created ##### -->
878 <para>
879
880 </para>
881
882 @self:
883 @created:
884
885 <!-- ##### FUNCTION tp_contact_list_manager_groups_removed ##### -->
886 <para>
887
888 </para>
889
890 @self:
891 @removed:
892
893 <!-- ##### FUNCTION tp_contact_list_manager_request_failed ##### -->
894 <para>
895
896 </para>
897
898 @self:
899 @req:
900 @domain:
901 @code:
902 @message:
903
904 <!-- ##### FUNCTION tp_contact_list_manager_request_succeeded ##### -->
905 <para>
906
907 </para>
908
909 @self:
910 @req:
911
912 <!-- ##### FUNCTION tp_contact_list_manager_set_default_group ##### -->
913 <para>
914
915 </para>
916
917 @self:
918 @def:
919
920 <!-- ##### FUNCTION tp_contact_list_manager_set_list_received ##### -->
921 <para>
922
923 </para>
924
925 @self:
926
927 <!-- ##### FUNCTION tp_contact_list_manager_true_func ##### -->
928 <para>
929
930 </para>
931
932 @self:
394933 @Returns:
395934
396935 <!-- ##### FUNCTION tp_dbus_properties_mixin_fill_properties_hash ##### -->
4971036 @error:
4981037 @Returns:
4991038
1039 <!-- ##### USER_FUNCTION tp_svc_connection_add_client_interest_impl ##### -->
1040 <para>
1041
1042 </para>
1043
1044 @self:
1045 @in_Interfaces:
1046 @context:
1047
1048 <!-- ##### FUNCTION tp_svc_connection_implement_add_client_interest ##### -->
1049 <para>
1050
1051 </para>
1052
1053 @klass:
1054 @impl:
1055
1056 <!-- ##### FUNCTION tp_svc_connection_implement_remove_client_interest ##### -->
1057 <para>
1058
1059 </para>
1060
1061 @klass:
1062 @impl:
1063
1064 <!-- ##### USER_FUNCTION tp_svc_connection_remove_client_interest_impl ##### -->
1065 <para>
1066
1067 </para>
1068
1069 @self:
1070 @in_Interfaces:
1071 @context:
1072
1073 <!-- ##### FUNCTION tp_svc_connection_return_from_add_client_interest ##### -->
1074 <para>
1075
1076 </para>
1077
1078 @context:
1079
1080 <!-- ##### FUNCTION tp_svc_connection_return_from_remove_client_interest ##### -->
1081 <para>
1082
1083 </para>
1084
1085 @context:
1086
5001087 <!-- ##### USER_FUNCTION tp_svc_protocol_identify_account_impl ##### -->
5011088 <para>
5021089
178178 PACKAGE_VERSION = @PACKAGE_VERSION@
179179 PATH_SEPARATOR = @PATH_SEPARATOR@
180180 PKG_CONFIG = @PKG_CONFIG@
181 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
182 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
181183 PYTHON = @PYTHON@
182184 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
183185 PYTHON_PLATFORM = @PYTHON_PLATFORM@
2929 EXAMPLES += telepathy-example-approver
3030 telepathy_example_approver_SOURCES = approver.c
3131
32 EXAMPLES += telepathy-example-text-handler
33 telepathy_example_text_handler_SOURCES = text-handler.c
34
3235 if INSTALL_EXAMPLES
3336 bin_PROGRAMS = $(EXAMPLES)
3437 else
6060 telepathy-example-list-managers$(EXEEXT) \
6161 telepathy-example-extended-client$(EXEEXT) \
6262 telepathy-example-media-observer$(EXEEXT) \
63 telepathy-example-approver$(EXEEXT)
63 telepathy-example-approver$(EXEEXT) \
64 telepathy-example-text-handler$(EXEEXT)
6465 am__installdirs = "$(DESTDIR)$(bindir)"
6566 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
6667 am_telepathy_example_approver_OBJECTS = approver.$(OBJEXT)
127128 $(am_telepathy_example_media_observer_OBJECTS)
128129 telepathy_example_media_observer_LDADD = $(LDADD)
129130 telepathy_example_media_observer_DEPENDENCIES = \
131 $(top_builddir)/telepathy-glib/libtelepathy-glib.la
132 am_telepathy_example_text_handler_OBJECTS = text-handler.$(OBJEXT)
133 telepathy_example_text_handler_OBJECTS = \
134 $(am_telepathy_example_text_handler_OBJECTS)
135 telepathy_example_text_handler_LDADD = $(LDADD)
136 telepathy_example_text_handler_DEPENDENCIES = \
130137 $(top_builddir)/telepathy-glib/libtelepathy-glib.la
131138 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
132139 depcomp = $(SHELL) $(top_srcdir)/depcomp
162169 $(telepathy_example_inspect_contact_SOURCES) \
163170 $(telepathy_example_list_connections_SOURCES) \
164171 $(telepathy_example_list_managers_SOURCES) \
165 $(telepathy_example_media_observer_SOURCES)
172 $(telepathy_example_media_observer_SOURCES) \
173 $(telepathy_example_text_handler_SOURCES)
166174 DIST_SOURCES = $(telepathy_example_approver_SOURCES) \
167175 $(telepathy_example_extended_client_SOURCES) \
168176 $(telepathy_example_inspect_channel_SOURCES) \
171179 $(telepathy_example_inspect_contact_SOURCES) \
172180 $(telepathy_example_list_connections_SOURCES) \
173181 $(telepathy_example_list_managers_SOURCES) \
174 $(telepathy_example_media_observer_SOURCES)
182 $(telepathy_example_media_observer_SOURCES) \
183 $(telepathy_example_text_handler_SOURCES)
175184 ETAGS = etags
176185 CTAGS = ctags
177186 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
255264 PACKAGE_VERSION = @PACKAGE_VERSION@
256265 PATH_SEPARATOR = @PATH_SEPARATOR@
257266 PKG_CONFIG = @PKG_CONFIG@
267 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
268 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
258269 PYTHON = @PYTHON@
259270 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
260271 PYTHON_PLATFORM = @PYTHON_PLATFORM@
331342 telepathy-example-list-connections \
332343 telepathy-example-list-managers \
333344 telepathy-example-extended-client \
334 telepathy-example-media-observer telepathy-example-approver
345 telepathy-example-media-observer telepathy-example-approver \
346 telepathy-example-text-handler
335347 telepathy_example_inspect_channel_SOURCES = inspect-channel.c
336348 telepathy_example_inspect_connection_SOURCES = inspect-connection.c
337349 telepathy_example_inspect_contact_SOURCES = inspect-contact.c
345357
346358 telepathy_example_media_observer_SOURCES = media-observer.c
347359 telepathy_example_approver_SOURCES = approver.c
360 telepathy_example_text_handler_SOURCES = text-handler.c
348361
349362 # In an external project you'd use $(TP_GLIB_LIBS) (obtained from
350363 # pkg-config via autoconf) instead of the .la path
472485 telepathy-example-media-observer$(EXEEXT): $(telepathy_example_media_observer_OBJECTS) $(telepathy_example_media_observer_DEPENDENCIES)
473486 @rm -f telepathy-example-media-observer$(EXEEXT)
474487 $(AM_V_CCLD)$(LINK) $(telepathy_example_media_observer_OBJECTS) $(telepathy_example_media_observer_LDADD) $(LIBS)
488 telepathy-example-text-handler$(EXEEXT): $(telepathy_example_text_handler_OBJECTS) $(telepathy_example_text_handler_DEPENDENCIES)
489 @rm -f telepathy-example-text-handler$(EXEEXT)
490 $(AM_V_CCLD)$(LINK) $(telepathy_example_text_handler_OBJECTS) $(telepathy_example_text_handler_LDADD) $(LIBS)
475491
476492 mostlyclean-compile:
477493 -rm -f *.$(OBJEXT)
488504 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections.Po@am__quote@
489505 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-managers.Po@am__quote@
490506 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/media-observer.Po@am__quote@
507 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-handler.Po@am__quote@
491508
492509 .c.o:
493510 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
289289 {
290290 TpConnectionManager *cm = NULL;
291291 GError *error = NULL;
292 TpDBusDaemon *daemon = NULL;
292 TpDBusDaemon *dbus = NULL;
293293
294294 g_type_init ();
295295 tp_debug_set_flags (g_getenv ("EXAMPLE_DEBUG"));
296296
297297 example_cli_init ();
298298
299 daemon = tp_dbus_daemon_dup (&error);
300
301 if (daemon == NULL)
299 dbus = tp_dbus_daemon_dup (&error);
300
301 if (dbus == NULL)
302302 {
303303 g_warning ("%s", error->message);
304304 g_error_free (error);
307307
308308 mainloop = g_main_loop_new (NULL, FALSE);
309309
310 cm = tp_connection_manager_new (daemon, "example_extended", NULL, &error);
310 cm = tp_connection_manager_new (dbus, "example_extended", NULL, &error);
311311
312312 if (cm == NULL)
313313 {
326326 if (cm != NULL)
327327 g_object_unref (cm);
328328
329 if (daemon != NULL)
330 g_object_unref (daemon);
329 if (dbus != NULL)
330 g_object_unref (dbus);
331331
332332 if (mainloop != NULL)
333333 g_main_loop_unref (mainloop);
5959 TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
6060 {
6161 const TpIntSet *members = tp_channel_group_get_members (channel);
62 TpIntSetIter group_iter;
62 TpIntSetFastIter group_iter;
63 TpHandle member;
6364
6465 printf ("Group members:\n");
6566
66 tp_intset_iter_init (&group_iter, members);
67 tp_intset_fast_iter_init (&group_iter, members);
6768
68 while (tp_intset_iter_next (&group_iter))
69 while (tp_intset_fast_iter_next (&group_iter, &member))
6970 {
70 printf ("\tcontact #%u\n", group_iter.element);
71 printf ("\tcontact #%u\n", member);
7172 }
7273 }
7374
119120 {
120121 InspectChannelData data = { 1, NULL, NULL };
121122 const gchar *conn_name;
122 TpDBusDaemon *daemon = NULL;
123 TpDBusDaemon *dbus = NULL;
123124 TpConnection *connection = NULL;
124125 GError *error = NULL;
125126
139140 conn_name = argv[1];
140141 data.object_path = argv[2];
141142
142 daemon = tp_dbus_daemon_dup (&error);
143 dbus = tp_dbus_daemon_dup (&error);
143144
144 if (daemon == NULL)
145 if (dbus == NULL)
145146 {
146147 g_warning ("%s", error->message);
147148 g_error_free (error);
150151 }
151152
152153 if (conn_name[0] == '/')
153 connection = tp_connection_new (daemon, NULL, conn_name, &error);
154 connection = tp_connection_new (dbus, NULL, conn_name, &error);
154155 else
155 connection = tp_connection_new (daemon, conn_name, NULL, &error);
156 connection = tp_connection_new (dbus, conn_name, NULL, &error);
156157
157158 if (connection == NULL)
158159 {
173174 g_main_loop_run (data.main_loop);
174175
175176 out:
176 if (daemon != NULL)
177 g_object_unref (daemon);
177 if (dbus != NULL)
178 g_object_unref (dbus);
178179
179180 if (data.main_loop != NULL)
180181 g_main_loop_unref (data.main_loop);
130130 TpConnectionManager *cm = NULL;
131131 GMainLoop *mainloop = NULL;
132132 GError *error = NULL;
133 TpDBusDaemon *daemon = NULL;
133 TpDBusDaemon *dbus = NULL;
134134 int ret = 1;
135135
136136 g_type_init ();
139139 if (argc < 2)
140140 return 2;
141141
142 daemon = tp_dbus_daemon_dup (&error);
142 dbus = tp_dbus_daemon_dup (&error);
143143
144 if (daemon == NULL)
144 if (dbus == NULL)
145145 {
146146 g_warning ("%s", error->message);
147147 g_error_free (error);
153153 cm_name = argv[1];
154154 manager_file = argv[2]; /* possibly NULL */
155155
156 cm = tp_connection_manager_new (daemon, cm_name, manager_file, &error);
156 cm = tp_connection_manager_new (dbus, cm_name, manager_file, &error);
157157
158158 if (cm == NULL)
159159 {
173173 if (mainloop != NULL)
174174 g_main_loop_unref (mainloop);
175175
176 if (daemon != NULL)
177 g_object_unref (daemon);
176 if (dbus != NULL)
177 g_object_unref (dbus);
178178
179179 return ret;
180180 }
7878 const gchar *bus_name, *object_path;
7979 TpConnection *connection = NULL;
8080 GMainLoop *mainloop = NULL;
81 TpDBusDaemon *daemon = NULL;
81 TpDBusDaemon *dbus = NULL;
8282 GError *error = NULL;
8383
8484 g_type_init ();
106106 bus_name = NULL;
107107 }
108108
109 daemon = tp_dbus_daemon_dup (&error);
109 dbus = tp_dbus_daemon_dup (&error);
110110
111 if (daemon == NULL)
111 if (dbus == NULL)
112112 {
113113 g_warning ("%s", error->message);
114114 g_error_free (error);
115115 goto out;
116116 }
117117
118 connection = tp_connection_new (daemon, bus_name, object_path, &error);
118 connection = tp_connection_new (dbus, bus_name, object_path, &error);
119119
120120 if (connection == NULL)
121121 {
139139 if (mainloop != NULL)
140140 g_main_loop_unref (mainloop);
141141
142 if (daemon != NULL)
143 g_object_unref (daemon);
142 if (dbus != NULL)
143 g_object_unref (dbus);
144144
145145 return exit_status;
146146 }
172172 const gchar *bus_name, *object_path;
173173 TpConnection *connection = NULL;
174174 InspectContactData data = { NULL, 1, NULL };
175 TpDBusDaemon *daemon = NULL;
175 TpDBusDaemon *dbus = NULL;
176176 GError *error = NULL;
177177
178178 g_type_init ();
202202
203203 data.to_inspect = argv[2];
204204
205 daemon = tp_dbus_daemon_dup (&error);
206
207 if (daemon == NULL)
205 dbus = tp_dbus_daemon_dup (&error);
206
207 if (dbus == NULL)
208208 {
209209 g_warning ("%s", error->message);
210210 goto out;
211211 }
212212
213 connection = tp_connection_new (daemon, bus_name, object_path, &error);
213 connection = tp_connection_new (dbus, bus_name, object_path, &error);
214214
215215 if (connection == NULL)
216216 {
238238 if (connection != NULL)
239239 g_object_unref (connection);
240240
241 if (daemon != NULL)
242 g_object_unref (daemon);
241 if (dbus != NULL)
242 g_object_unref (dbus);
243243
244244 return data.exit_status;
245245 }
0 /*
1 * text-handler - Handle text channels
2 *
3 * Simple text channel handler echoing received message in upper case
4 *
5 * Copyright © 2010 Collabora Ltd. <http://www.collabora.co.uk/>
6 *
7 * Copying and distribution of this file, with or without modification,
8 * are permitted in any medium without royalty provided the copyright
9 * notice and this notice are preserved.
10 */
11
12 #include <glib.h>
13
14 #include <telepathy-glib/telepathy-glib.h>
15
16 gboolean got_pending_msg = FALSE;
17
18 static void
19 echo_message (TpChannel *channel,
20 const gchar *text)
21 {
22 gchar *msg;
23
24 msg = g_ascii_strup (text, -1);
25 g_print ("send: %s\n", msg);
26
27 tp_cli_channel_type_text_call_send (channel, -1,
28 TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, msg, NULL, NULL, NULL, NULL);
29
30 g_free (msg);
31 }
32
33 static void
34 message_received_cb (TpChannel *channel,
35 guint id,
36 guint timestamp,
37 guint sender,
38 guint type,
39 guint flags,
40 const gchar *text,
41 gpointer user_data,
42 GObject *weak_object)
43 {
44 GArray *arr;
45
46 /* Ignore messages if we didn't fetch pending messages yet */
47 if (!got_pending_msg)
48 return;
49
50 g_print ("received: %s\n", text);
51
52 echo_message (channel, text);
53
54 arr = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
55 g_array_append_val (arr, id);
56
57 tp_cli_channel_type_text_call_acknowledge_pending_messages (channel, -1,
58 arr, NULL, NULL, NULL, NULL);
59
60 g_array_free (arr, TRUE);
61 }
62
63 static void
64 got_pending_messages_cb (TpChannel *channel,
65 const GPtrArray *messages,
66 const GError *error,
67 gpointer user_data,
68 GObject *weak_object)
69 {
70 guint i;
71 GArray *ids;
72
73 got_pending_msg = TRUE;
74
75 if (error != NULL)
76 return;
77
78 ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), messages->len);
79
80 for (i = 0; i < messages->len; i++)
81 {
82 GValueArray *v = g_ptr_array_index (messages, i);
83 guint id, timestamp, sender, type, flags;
84 const gchar *text;
85
86 tp_value_array_unpack (v, 6,
87 &id, &timestamp, &sender, &type, &flags, &text);
88
89 g_print ("pending: %s\n", text);
90
91 echo_message (channel, text);
92 g_array_append_val (ids, id);
93 }
94
95 tp_cli_channel_type_text_call_acknowledge_pending_messages (channel, -1,
96 ids, NULL, NULL, NULL, NULL);
97
98 g_array_free (ids, TRUE);
99 }
100
101 static void
102 handle_channels_cb (TpSimpleHandler *self,
103 TpAccount *account,
104 TpConnection *connection,
105 GList *channels,
106 GList *requests,
107 gint64 user_action_time,
108 TpHandleChannelsContext *context,
109 gpointer user_data)
110 {
111 GList *l;
112
113 for (l = channels; l != NULL; l = g_list_next (l))
114 {
115 TpChannel *channel = l->data;
116 GHashTable *props;
117 gboolean requested;
118
119 if (tp_strdiff (tp_channel_get_channel_type (channel),
120 TP_IFACE_CHANNEL_TYPE_TEXT))
121 continue;
122
123 props = tp_channel_borrow_immutable_properties (channel);
124 requested = tp_asv_get_boolean (props, TP_PROP_CHANNEL_REQUESTED, NULL);
125
126 g_print ("Handling text channel with %s\n",
127 tp_channel_get_identifier (channel));
128
129 tp_cli_channel_type_text_connect_to_received (channel,
130 message_received_cb, NULL, NULL, NULL, NULL);
131
132 tp_cli_channel_type_text_call_list_pending_messages (channel, -1, FALSE,
133 got_pending_messages_cb, NULL, NULL, NULL);
134 }
135
136 tp_handle_channels_context_accept (context);
137 }
138
139 int
140 main (int argc,
141 char **argv)
142 {
143 GMainLoop *mainloop;
144 TpDBusDaemon *bus_daemon;
145 GError *error = NULL;
146 TpBaseClient *handler;
147
148 g_type_init ();
149 tp_debug_set_flags (g_getenv ("EXAMPLE_DEBUG"));
150
151 bus_daemon = tp_dbus_daemon_dup (&error);
152
153 if (bus_daemon == NULL)
154 {
155 g_warning ("%s", error->message);
156 g_error_free (error);
157 return 1;
158 }
159
160 handler = tp_simple_handler_new (bus_daemon, FALSE, FALSE, "ExampleHandler",
161 FALSE, handle_channels_cb, NULL, NULL);
162
163 tp_base_client_take_handler_filter (handler, tp_asv_new (
164 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
165 TP_IFACE_CHANNEL_TYPE_TEXT,
166 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
167 TP_HANDLE_TYPE_CONTACT,
168 TP_PROP_CHANNEL_REQUESTED, G_TYPE_BOOLEAN, FALSE,
169 NULL));
170
171 if (!tp_base_client_register (handler, &error))
172 {
173 g_warning ("Failed to register Handler: %s\n", error->message);
174 g_error_free (error);
175 goto out;
176 }
177
178 g_print ("Waiting for channels\n");
179
180 mainloop = g_main_loop_new (NULL, FALSE);
181 g_main_loop_run (mainloop);
182
183 if (mainloop != NULL)
184 g_main_loop_unref (mainloop);
185
186 out:
187 g_object_unref (bus_daemon);
188 g_object_unref (handler);
189
190 return 0;
191 }
178178 PACKAGE_VERSION = @PACKAGE_VERSION@
179179 PATH_SEPARATOR = @PATH_SEPARATOR@
180180 PKG_CONFIG = @PKG_CONFIG@
181 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
182 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
181183 PYTHON = @PYTHON@
182184 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
183185 PYTHON_PLATFORM = @PYTHON_PLATFORM@
211211 PACKAGE_VERSION = @PACKAGE_VERSION@
212212 PATH_SEPARATOR = @PATH_SEPARATOR@
213213 PKG_CONFIG = @PKG_CONFIG@
214 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
215 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
214216 PYTHON = @PYTHON@
215217 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
216218 PYTHON_PLATFORM = @PYTHON_PLATFORM@
211211 PACKAGE_VERSION = @PACKAGE_VERSION@
212212 PATH_SEPARATOR = @PATH_SEPARATOR@
213213 PKG_CONFIG = @PKG_CONFIG@
214 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
215 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
214216 PYTHON = @PYTHON@
215217 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
216218 PYTHON_PLATFORM = @PYTHON_PLATFORM@
211211 PACKAGE_VERSION = @PACKAGE_VERSION@
212212 PATH_SEPARATOR = @PATH_SEPARATOR@
213213 PKG_CONFIG = @PKG_CONFIG@
214 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
215 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
214216 PYTHON = @PYTHON@
215217 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
216218 PYTHON_PLATFORM = @PYTHON_PLATFORM@
3737 enum
3838 {
3939 PROP_ACCOUNT = 1,
40 PROP_SIMULATION_DELAY,
4041 N_PROPS
4142 };
4243
4344 struct _ExampleContactListConnectionPrivate
4445 {
4546 gchar *account;
47 guint simulation_delay;
4648 ExampleContactListManager *list_manager;
4749 gboolean away;
4850 };
7072 g_value_set_string (value, self->priv->account);
7173 break;
7274
75 case PROP_SIMULATION_DELAY:
76 g_value_set_uint (value, self->priv->simulation_delay);
77 break;
78
7379 default:
7480 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec);
7581 }
8995 case PROP_ACCOUNT:
9096 g_free (self->priv->account);
9197 self->priv->account = g_value_dup_string (value);
98 break;
99
100 case PROP_SIMULATION_DELAY:
101 self->priv->simulation_delay = g_value_get_uint (value);
92102 break;
93103
94104 default:
220230 EXAMPLE_CONTACT_LIST_MANAGER (g_object_new (
221231 EXAMPLE_TYPE_CONTACT_LIST_MANAGER,
222232 "connection", conn,
233 "simulation-delay", self->priv->simulation_delay,
223234 NULL));
224235
225236 g_signal_connect (self->priv->list_manager, "alias-updated",
430441 G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
431442 g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec);
432443
444 param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay",
445 "Delay between simulated network events",
446 0, G_MAXUINT32, 1000,
447 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
448 g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
449 param_spec);
450
433451 tp_contacts_mixin_class_init (object_class,
434452 G_STRUCT_OFFSET (ExampleContactListConnectionClass, contacts_mixin));
435453 tp_presence_mixin_class_init (object_class,
3737
3838 typedef struct {
3939 gchar *account;
40 guint simulation_delay;
4041 } ExampleParams;
4142
4243 static gboolean
9293 conn = EXAMPLE_CONTACT_LIST_CONNECTION
9394 (g_object_new (EXAMPLE_TYPE_CONTACT_LIST_CONNECTION,
9495 "account", params->account,
96 "simulation-delay", params->simulation_delay,
9597 "protocol", proto,
9698 NULL));
9799
100100 enum
101101 {
102102 PROP_CONNECTION = 1,
103 PROP_SIMULATION_DELAY,
103104 N_PROPS
104105 };
105106
106107 struct _ExampleContactListManagerPrivate
107108 {
108109 TpBaseConnection *conn;
110 guint simulation_delay;
109111 TpHandleRepoIface *contact_repo;
110112 TpHandleRepoIface *group_repo;
111113
163165 while (g_hash_table_iter_next (&iter, &key, &value))
164166 {
165167 GSList *requests = value;
166 GSList *link;
168 GSList *l;
167169
168170 requests = g_slist_reverse (requests);
169171
170 for (link = requests; link != NULL; link = link->next)
172 for (l = requests; l != NULL; l = l->next)
171173 {
172174 tp_channel_manager_emit_request_failed (self,
173 link->data, TP_ERRORS, TP_ERROR_DISCONNECTED,
175 l->data, TP_ERRORS, TP_ERROR_DISCONNECTED,
174176 "Unable to complete channel request due to disconnection");
175177 }
176178
251253 case PROP_CONNECTION:
252254 g_value_set_object (value, self->priv->conn);
253255 break;
256
257 case PROP_SIMULATION_DELAY:
258 g_value_set_uint (value, self->priv->simulation_delay);
259 break;
260
254261 default:
255262 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
256263 }
272279 * less than its lifetime */
273280 self->priv->conn = g_value_get_object (value);
274281 break;
282
283 case PROP_SIMULATION_DELAY:
284 self->priv->simulation_delay = g_value_get_uint (value);
285 break;
286
275287 default:
276288 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
277289 }
317329
318330 g_hash_table_insert (self->priv->contact_details,
319331 GUINT_TO_POINTER (contact), ret);
332
333 if (created != NULL)
334 *created = TRUE;
335 }
336 else if (created != NULL)
337 {
338 *created = FALSE;
320339 }
321340
322341 return ret;
359378 TpHandle handle, cambridge, montreal, francophones;
360379 ExampleContactDetails *d;
361380 TpIntSet *set, *cam_set, *mtl_set, *fr_set;
362 TpIntSetIter iter;
381 TpIntSetFastIter iter;
363382 ExampleContactList *subscribe, *publish, *stored;
364383 ExampleContactGroup *cambridge_group, *montreal_group,
365384 *francophones_group;
461480 set, NULL, NULL, NULL,
462481 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
463482
464 tp_intset_iter_init (&iter, set);
465
466 while (tp_intset_iter_next (&iter))
467 {
468 g_signal_emit (self, signals[ALIAS_UPDATED], 0, iter.element);
469 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, iter.element);
483 tp_intset_fast_iter_init (&iter, set);
484
485 while (tp_intset_fast_iter_next (&iter, &handle))
486 {
487 g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle);
488 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle);
470489 }
471490
472491 tp_intset_destroy (set);
506525 NULL, NULL, NULL, set,
507526 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
508527 tp_group_mixin_change_members ((GObject *) stored, "",
509 NULL, NULL, NULL, set,
528 set, NULL, NULL, NULL,
510529 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
511530
512 tp_intset_iter_init (&iter, set);
513
514 while (tp_intset_iter_next (&iter))
515 {
516 g_signal_emit (self, signals[ALIAS_UPDATED], 0, iter.element);
517 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, iter.element);
531 tp_intset_fast_iter_init (&iter, set);
532
533 while (tp_intset_fast_iter_next (&iter, &handle))
534 {
535 g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle);
536 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle);
518537 }
519538
520539 tp_intset_destroy (set);
535554 "I'm more metal than you!",
536555 NULL, NULL, set, NULL,
537556 handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
557 tp_group_mixin_change_members ((GObject *) stored, "",
558 set, NULL, NULL, NULL,
559 handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
538560 tp_intset_destroy (set);
539561 g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle);
540562 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle);
551573 tp_group_mixin_change_members ((GObject *) publish,
552574 "I have some fermented herring for you",
553575 NULL, NULL, set, NULL,
576 handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
577 tp_group_mixin_change_members ((GObject *) stored, "",
578 set, NULL, NULL, NULL,
554579 handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
555580 tp_intset_destroy (set);
556581 g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle);
599624 /* Do network I/O to get the contact list. This connection manager
600625 * doesn't really have a server, so simulate a small network delay
601626 * then invent a contact list */
602 g_timeout_add_full (G_PRIORITY_DEFAULT, 1000, receive_contact_lists,
627 g_timeout_add_full (G_PRIORITY_DEFAULT,
628 2 * self->priv->simulation_delay, receive_contact_lists,
603629 g_object_ref (self), g_object_unref);
604630 }
605631 break;
651677 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
652678 G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
653679 g_object_class_install_property (object_class, PROP_CONNECTION, param_spec);
680
681 param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay",
682 "Delay between simulated network events",
683 0, G_MAXUINT32, 1000,
684 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
685 g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
686 param_spec);
654687
655688 g_type_class_add_private (klass, sizeof (ExampleContactListManagerPrivate));
656689
9991032 else
10001033 {
10011034 TpIntSet *set = tp_handle_set_peek (d->tags);
1002 TpIntSetIter iter = TP_INTSET_ITER_INIT (set);
1003
1004 while (tp_intset_iter_next (&iter))
1035 TpIntSetFastIter iter;
1036 TpHandle member;
1037
1038 tp_intset_fast_iter_init (&iter, set);
1039
1040 while (tp_intset_fast_iter_next (&iter, &member))
10051041 {
10061042 g_message ("\tin group: %s",
1007 tp_handle_inspect (self->priv->group_repo, iter.element));
1043 tp_handle_inspect (self->priv->group_repo, member));
10081044 }
10091045 }
10101046 }
11111147 TpIntSet *set;
11121148 ExampleContactList *publish = self->priv->lists[
11131149 EXAMPLE_CONTACT_LIST_PUBLISH];
1150 ExampleContactList *stored = self->priv->lists[
1151 EXAMPLE_CONTACT_LIST_STORED];
11141152
11151153 /* if shutting down, do nothing */
11161154 if (publish == NULL)
11361174 "May I see your presence, please?",
11371175 NULL, NULL, set, NULL,
11381176 contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1177 tp_group_mixin_change_members ((GObject *) stored, "",
1178 set, NULL, NULL, NULL,
1179 contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
11391180 tp_intset_destroy (set);
11401181 }
11411182
11471188 TpIntSet *set;
11481189 ExampleContactList *subscribe = s->self->priv->lists[
11491190 EXAMPLE_CONTACT_LIST_SUBSCRIBE];
1191 ExampleContactList *stored = s->self->priv->lists[
1192 EXAMPLE_CONTACT_LIST_STORED];
11501193
11511194 /* A remote contact has accepted our request to see their presence.
11521195 *
11671210
11681211 set = tp_intset_new_containing (s->contact);
11691212 tp_group_mixin_change_members ((GObject *) subscribe, "",
1213 set, NULL, NULL, NULL,
1214 s->contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1215 tp_group_mixin_change_members ((GObject *) stored, "",
11701216 set, NULL, NULL, NULL,
11711217 s->contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
11721218 tp_intset_destroy (set);
12341280 GError **error)
12351281 {
12361282 TpIntSet *set;
1283 ExampleContactList *stored = self->priv->lists[EXAMPLE_CONTACT_LIST_STORED];
12371284
12381285 switch (list)
12391286 {
12641311 NULL, NULL, NULL, set,
12651312 self->priv->conn->self_handle,
12661313 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1314 /* subscribing to someone implicitly puts them on Stored, too */
1315 tp_group_mixin_change_members ((GObject *) stored, "",
1316 set, NULL, NULL, NULL,
1317 self->priv->conn->self_handle,
1318 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
12671319 tp_intset_destroy (set);
12681320
1269 /* Pretend that after 500ms, the contact notices the request
1321 /* Pretend that after a delay, the contact notices the request
12701322 * and allows or rejects it. In this example connection manager,
12711323 * empty requests are allowed, as are requests that contain "please"
12721324 * case-insensitively. All other requests are denied. */
12741326
12751327 if (message[0] == '\0' || strstr (message_lc, "please") != NULL)
12761328 {
1277 g_timeout_add_full (G_PRIORITY_DEFAULT, 500, receive_authorized,
1329 g_timeout_add_full (G_PRIORITY_DEFAULT,
1330 self->priv->simulation_delay, receive_authorized,
12781331 self_and_contact_new (self, member),
12791332 self_and_contact_destroy);
12801333 }
12811334 else
12821335 {
1283 g_timeout_add_full (G_PRIORITY_DEFAULT, 500,
1336 g_timeout_add_full (G_PRIORITY_DEFAULT,
1337 self->priv->simulation_delay,
12841338 receive_unauthorized,
12851339 self_and_contact_new (self, member),
12861340 self_and_contact_destroy);
12981352
12991353 if (d == NULL || !d->publish_requested)
13001354 {
1355 /* the group mixin won't actually allow this to be reached,
1356 * because of the flags we set */
13011357 g_set_error (error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
13021358 "Can't unilaterally send presence to %s",
13031359 tp_handle_inspect (self->priv->contact_repo, member));
13121368
13131369 set = tp_intset_new_containing (member);
13141370 tp_group_mixin_change_members (channel, "",
1371 set, NULL, NULL, NULL,
1372 self->priv->conn->self_handle,
1373 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1374 tp_group_mixin_change_members ((GObject *) stored, "",
13151375 set, NULL, NULL, NULL,
13161376 self->priv->conn->self_handle,
13171377 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
13991459 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
14001460 tp_intset_destroy (set);
14011461
1402 /* Pretend that after 500ms, the contact notices the change
1462 /* Pretend that after a delay, the contact notices the change
14031463 * and asks for our presence again */
1404 g_timeout_add_full (G_PRIORITY_DEFAULT, 500, auth_request_cb,
1464 g_timeout_add_full (G_PRIORITY_DEFAULT,
1465 self->priv->simulation_delay, auth_request_cb,
14051466 self_and_contact_new (self, member),
14061467 self_and_contact_destroy);
14071468 }
14701531 case EXAMPLE_CONTACT_LIST_STORED:
14711532 /* we would like to remove member from the roster altogether */
14721533 {
1473 if (lookup_contact (self, member) != NULL)
1534 ExampleContactDetails *d = lookup_contact (self, member);
1535
1536 if (d != NULL)
14741537 {
14751538 g_hash_table_remove (self->priv->contact_details,
14761539 GUINT_TO_POINTER (member));
14811544 NULL, set, NULL, NULL,
14821545 self->priv->conn->self_handle,
14831546 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1547 tp_group_mixin_change_members (
1548 (GObject *) self->priv->lists[EXAMPLE_CONTACT_LIST_SUBSCRIBE],
1549 "", NULL, set, NULL, NULL,
1550 self->priv->conn->self_handle,
1551 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
1552 tp_group_mixin_change_members (
1553 (GObject *) self->priv->lists[EXAMPLE_CONTACT_LIST_PUBLISH],
1554 "", NULL, set, NULL, NULL,
1555 self->priv->conn->self_handle,
1556 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
14841557 tp_intset_destroy (set);
14851558
14861559 tp_handle_set_remove (self->priv->contacts, member);
14891562 * see their presence, so emit a signal changing it to
14901563 * UNKNOWN */
14911564 g_signal_emit (self, signals[PRESENCE_UPDATED], 0, member);
1565
14921566 }
14931567 }
14941568 return TRUE;
1111 # 'struct_field': '...',
1212 # 'setter_data': 'NULL',
1313 },
14 'simulation-delay': {
15 'dtype': 'u',
16 'default': 1000,
17 },
1418 },
1519 }
1620 STRUCTS = {
208208 PACKAGE_VERSION = @PACKAGE_VERSION@
209209 PATH_SEPARATOR = @PATH_SEPARATOR@
210210 PKG_CONFIG = @PKG_CONFIG@
211 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
212 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
211213 PYTHON = @PYTHON@
212214 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
213215 PYTHON_PLATFORM = @PYTHON_PLATFORM@
209209 PACKAGE_VERSION = @PACKAGE_VERSION@
210210 PATH_SEPARATOR = @PATH_SEPARATOR@
211211 PKG_CONFIG = @PKG_CONFIG@
212 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
213 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
212214 PYTHON = @PYTHON@
213215 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
214216 PYTHON_PLATFORM = @PYTHON_PLATFORM@
202202 PACKAGE_VERSION = @PACKAGE_VERSION@
203203 PATH_SEPARATOR = @PATH_SEPARATOR@
204204 PKG_CONFIG = @PKG_CONFIG@
205 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
206 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
205207 PYTHON = @PYTHON@
206208 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
207209 PYTHON_PLATFORM = @PYTHON_PLATFORM@
201201 PACKAGE_VERSION = @PACKAGE_VERSION@
202202 PATH_SEPARATOR = @PATH_SEPARATOR@
203203 PKG_CONFIG = @PKG_CONFIG@
204 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
205 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
204206 PYTHON = @PYTHON@
205207 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
206208 PYTHON_PLATFORM = @PYTHON_PLATFORM@
185185 PACKAGE_VERSION = @PACKAGE_VERSION@
186186 PATH_SEPARATOR = @PATH_SEPARATOR@
187187 PKG_CONFIG = @PKG_CONFIG@
188 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
189 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
188190 PYTHON = @PYTHON@
189191 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
190192 PYTHON_PLATFORM = @PYTHON_PLATFORM@
178178 PACKAGE_VERSION = @PACKAGE_VERSION@
179179 PATH_SEPARATOR = @PATH_SEPARATOR@
180180 PKG_CONFIG = @PKG_CONFIG@
181 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
182 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
181183 PYTHON = @PYTHON@
182184 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
183185 PYTHON_PLATFORM = @PYTHON_PLATFORM@
211211 PACKAGE_VERSION = @PACKAGE_VERSION@
212212 PATH_SEPARATOR = @PATH_SEPARATOR@
213213 PKG_CONFIG = @PKG_CONFIG@
214 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
215 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
214216 PYTHON = @PYTHON@
215217 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
216218 PYTHON_PLATFORM = @PYTHON_PLATFORM@
182182 PACKAGE_VERSION = @PACKAGE_VERSION@
183183 PATH_SEPARATOR = @PATH_SEPARATOR@
184184 PKG_CONFIG = @PKG_CONFIG@
185 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
186 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
185187 PYTHON = @PYTHON@
186188 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
187189 PYTHON_PLATFORM = @PYTHON_PLATFORM@
7474 scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
7575 @echo 'gtk-doc: Scanning header files'
7676 @-chmod -R u+w $(srcdir)
77 @cd $(srcdir) && \
78 gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
77 @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
78 _source_dir="$${_source_dir} --source-dir=$$i" ; \
79 done ; \
80 cd $(srcdir) && \
81 gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
7982 @if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
8083 CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
8184 else \
108111 sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
109112 @echo 'gtk-doc: Building XML'
110113 @-chmod -R u+w $(srcdir)
111 @cd $(srcdir) && \
112 gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
114 @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
115 _source_dir="$${_source_dir} --source-dir=$$i" ; \
116 done ; \
117 cd $(srcdir) && \
118 gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
113119 @touch sgml-build.stamp
114120
115121 sgml.stamp: sgml-build.stamp
138138 PACKAGE_VERSION = @PACKAGE_VERSION@
139139 PATH_SEPARATOR = @PATH_SEPARATOR@
140140 PKG_CONFIG = @PKG_CONFIG@
141 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
142 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
141143 PYTHON = @PYTHON@
142144 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
143145 PYTHON_PLATFORM = @PYTHON_PLATFORM@
479479 </tp:docstring>
480480 </property>
481481
482 <property name="ChangingPresence" tp:name-for-bindings="Changing_Presence"
483 type="b" access="read">
484 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
485 <p>If true, a change to the presence of this account is
486 in progress.</p>
487
488 <p>Whenever <tp:member-ref>RequestedPresence</tp:member-ref> is set on
489 an account that could go online, or whenever an account with a
490 non-offline <tp:member-ref>RequestedPresence</tp:member-ref> becomes
491 able to go online (for instance because
492 <tp:member-ref>Enabled</tp:member-ref> or
493 <tp:member-ref>Valid</tp:member-ref> changes to True),
494 ChangingPresence MUST change to True, and the two property changes MUST
495 be emitted in the same
496 <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal, before the
497 Set method returns.</p>
498
499 <p>When the account manager succeeds or fails in changing the presence,
500 or the connection disconnects due to an error, ChangingPresence MUST
501 change to False as part of the same
502 <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal.</p>
503
504 <tp:rationale>
505 <p>This allows UIs to indicate that a presence change is in progress
506 or has finished, even if the change was initiated by a different
507 UI.</p>
508
509 <p>For instance, Maemo 5 and Empathy indicate a presence change by
510 having the presence indicator alternate between the
511 <tp:member-ref>RequestedPresence</tp:member-ref>
512 and the <tp:member-ref>CurrentPresence</tp:member-ref>; they should
513 start blinking when ChangingPresence becomes true, and stop when it
514 becomes false.</p>
515 </tp:rationale>
516
517 </tp:docstring>
518 </property>
519
482520 <method name="Reconnect" tp:name-for-bindings="Reconnect">
483521 <tp:added version="0.17.24"/>
484522 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
6060 </tp:docstring>
6161 </tp:member>
6262
63 <tp:member name="Parameters" type="a{ss}">
63 <tp:member name="Parameters" type="a{ss}" tp:type="String_String_Map">
6464 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
6565 Extra parameters for this codec
6666 </tp:docstring>
0 <?xml version="1.0" ?>
1 <node name="/Call_Content_Interface_Mute" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright> Copyright © 2005-2010 Nokia Corporation </tp:copyright>
3 <tp:copyright> Copyright © 2005-2010 Collabora Ltd </tp:copyright>
4 <tp:license xmlns="http://www.w3.org/1999/xhtml">
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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 </tp:license>
19
20 <interface name="org.freedesktop.Telepathy.Call.Content.Interface.Mute.DRAFT" tp:causes-havoc="experimental">
21 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
22
23 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
24 <p>Interface for calls which may be muted. This only makes sense
25 for channels where audio or video is streaming between members.</p>
26
27 <p>Muting a call content indicates that the user does not wish to send
28 outgoing audio or video.</p>
29
30 <p>Although it's client's responsibility to actually mute the microphone
31 or turn off the camera, using this interface the client can also
32 inform the CM and other clients of that fact.</p>
33 <tp:rationale>
34 <p>For some protocols, the fact that the content is muted needs to be
35 transmitted to the peer; for others, the notification to the peer is
36 only informational (eg. XMPP), and some protocols may have no notion
37 of muting at all.</p>
38 </tp:rationale>
39 </tp:docstring>
40
41 <signal name="MuteStateChanged" tp:name-for-bindings="Mute_State_Changed">
42 <tp:docstring>
43 Emitted to indicate that the mute state has changed for this call content.
44 This may occur as a consequence of the client calling
45 <tp:member-ref>Muted</tp:member-ref>, or as an indication that another
46 client has (un)muted the content.
47 </tp:docstring>
48
49 <arg name="MuteState" type="b">
50 <tp:docstring>
51 True if the content is now muted.
52 </tp:docstring>
53 </arg>
54 </signal>
55
56 <property name="MuteState" type="b"
57 access="read" tp:name-for-bindings="Mute_State">
58 <tp:docstring>
59 True if the content is muted.
60 </tp:docstring>
61 </property>
62
63 <method name="Muted" tp:name-for-bindings="Muted">
64 <arg direction="in" name="Muted" type="b">
65 <tp:docstring>
66 True if the client has muted the content.
67 </tp:docstring>
68 </arg>
69
70 <tp:docstring>
71 <p>Inform the CM that the call content has been muted or unmuted by
72 che client.</p>
73
74 <p>It is the client's responsibility to actually mute or unmute the
75 microphone or camera used for the content. However, the client
76 MUST call this whenever it mutes or unmutes the content.</p>
77 </tp:docstring>
78 </method>
79
80 </interface>
81 </node>
82 <!-- vim:set sw=2 sts=2 et ft=xml: -->
369369 </tp:possible-errors>
370370 </method>
371371
372 <method name="HandleWithTime" tp:name-for-bindings="Handle_With_Time">
373 <tp:added version="0.19.6">
374 At the time of writing, no released implementation of the
375 Channel Dispatcher implements this method; clients should fall
376 back to calling <tp:member-ref>HandleWith</tp:member-ref>.
377 </tp:added>
378 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
379 <p>A variant of <tp:member-ref>HandleWith</tp:member-ref> allowing the
380 approver to pass an user action time. This timestamp will be passed
381 to the Handler when <tp:dbus-ref
382 namespace="org.freedesktop.Telepathy.Client.Handler">HandleChannels</tp:dbus-ref>
383 is called.</p>
384 </tp:docstring>
385
386 <arg direction="in" type="s" tp:type="DBus_Bus_Name" name="Handler">
387 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
388 <p>The well-known bus name (starting with
389 <code>org.freedesktop.Telepathy.Client.</code>) of the channel
390 handler that should handle the channel, or the empty string
391 if the client has no preferred channel handler.</p>
392 </tp:docstring>
393 </arg>
394
395 <arg direction="in" type="x" tp:type="User_Action_Timestamp" name="UserActionTime">
396 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
397 <p>The time at which user action occurred.</p>
398 </tp:docstring>
399 </arg>
400
401 <tp:possible-errors>
402 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
403 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
404 The selected handler is non-empty, but is not a syntactically
405 correct <tp:type>DBus_Bus_Name</tp:type> or does not start with
406 "<code>org.freedesktop.Telepathy.Client.</code>".
407 </tp:docstring>
408 </tp:error>
409 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
410 <tp:docstring>
411 The selected handler is temporarily unable to handle these
412 channels.
413 </tp:docstring>
414 </tp:error>
415 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
416 <tp:docstring>
417 The selected handler is syntactically correct, but will never
418 be able to handle these channels (for instance because the channels
419 do not match its HandlerChannelFilter, or because HandleChannels
420 raised NotImplemented).
421 </tp:docstring>
422 </tp:error>
423 <tp:error name="org.freedesktop.Telepathy.Error.NotYours">
424 <tp:docstring>
425 At the time that HandleWith was called, this dispatch operation was
426 processing an earlier call to HandleWith. The earlier call has
427 now succeeded, so some Handler nominated by another approver is
428 now responsible for the channels. In this situation, the second
429 call to HandleWith MUST NOT return until the first one has
430 returned successfully or unsuccessfully, and if the first call
431 to HandleChannels fails, the channel dispatcher SHOULD try to obey
432 the choice of Handler made by the second call to HandleWith.
433 </tp:docstring>
434 </tp:error>
435 </tp:possible-errors>
436 </method>
437
372438 <signal name="Finished" tp:name-for-bindings="Finished">
373439 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
374440 <p>Emitted when this dispatch operation finishes. The dispatch
163163 </arg>
164164
165165 <arg direction="in" name="User_Action_Time" type="x"
166 tp:type="Unix_Timestamp64">
166 tp:type="User_Action_Timestamp">
167167 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
168168 <p>The time at which user action occurred, or 0 if this channel
169169 request is for some reason not involving user action.
304304 </arg>
305305
306306 <arg direction="in" name="User_Action_Time" type="x"
307 tp:type="Unix_Timestamp64">
307 tp:type="User_Action_Timestamp">
308308 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
309309 <p>The time at which user action occurred, or 0 if this channel
310310 request is for some reason not involving user action.</p>
0 <?xml version="1.0" ?>
1 <node name="/Channel_Interface_Anonymity"
2 xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
3
4 <tp:copyright>Copyright © 2008-2010 Nokia Corporation</tp:copyright>
5 <tp:copyright>Copyright © 2010 Collabora Ltd.</tp:copyright>
6 <tp:license xmlns="http://www.w3.org/1999/xhtml">
7 <p>This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.</p>
11
12 <p>This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.</p>
16
17 <p>You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.</p>
21 </tp:license>
22
23 <interface name="org.freedesktop.Telepathy.Channel.Interface.Anonymity.DRAFT"
24 tp:causes-havoc="experimental">
25 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
26
27 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
28 <p>Interface for requesting the anonymity modes of a channel
29 (as defined in Connection.Interface.Anonymity.DRAFT).</p>
30 </tp:docstring>
31
32 <property name="AnonymityModes" type="u" tp:type="Anonymity_Mode_Flags"
33 access="read" tp:name-for-bindings="Anonymity_Modes">
34 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
35 The list of initially requested anonymity modes on the channel. This
36 MUST NOT change, and is Requestable.
37 </tp:docstring>
38 </property>
39
40 <property name="AnonymityMandatory" type="b" access="read"
41 tp:name-for-bindings="Anonymity_Mandatory">
42 <tp:docstring>
43 Whether or not the anonymity settings are required for this channel.
44 This MUST NOT change, and is Requestable.
45 </tp:docstring>
46 </property>
47
48 <property name="AnonymousID" type="s" access="read"
49 tp:name-for-bindings="Anonymous_ID">
50 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
51 <p>This is the ID that the remote user of the channel MAY see
52 (assuming there's a single ID). For example, for SIP connections
53 where the From address has been scrambled by the CM, the scrambled
54 address would be available here for the client to see. This is
55 completely optional, and MAY be an empty string ("") in
56 cases where anonymity modes are not set, or the CM doesn't know
57 what the remote contact will see, or any other case where this
58 doesn't make sense.</p>
59
60 <p>This MAY change over the lifetime of the channel, and SHOULD NOT
61 be used with the Request interface.</p>
62 </tp:docstring>
63 </property>
64
65 </interface>
66 </node>
67 <!-- vim:set sw=2 sts=2 et ft=xml: -->
00 <?xml version="1.0" ?>
11 <node name="/Channel_Interface_DTMF" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright>Copyright (C) 2005, 2006 Collabora Limited</tp:copyright>
3 <tp:copyright>Copyright (C) 2005, 2006 Nokia Corporation</tp:copyright>
4 <tp:copyright>Copyright (C) 2006 INdT</tp:copyright>
2 <tp:copyright>Copyright © 2005-2010 Collabora Limited</tp:copyright>
3 <tp:copyright>Copyright © 2005-2010 Nokia Corporation</tp:copyright>
4 <tp:copyright>Copyright © 2006 INdT</tp:copyright>
55 <tp:license xmlns="http://www.w3.org/1999/xhtml">
66 <p>This library is free software; you can redistribute it and/or
77 modify it under the terms of the GNU Lesser General Public
1919 </tp:license>
2020 <interface name="org.freedesktop.Telepathy.Channel.Interface.DTMF">
2121 <tp:requires interface="org.freedesktop.Telepathy.Channel.Type.StreamedMedia"/>
22
23 <method name="StartTone" tp:name-for-bindings="Start_Tone">
24 <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
25 <tp:docstring>A stream ID as defined in the StreamedMedia channel type.</tp:docstring>
26 </arg>
27 <arg direction="in" name="Event" type="y" tp:type="DTMF_Event">
28 <tp:docstring>A numeric event code from the DTMF_Event enum.</tp:docstring>
29 </arg>
30 <tp:docstring>
31 Start sending a DTMF tone on this stream. Where possible, the tone
32 will continue until <tp:member-ref>StopTone</tp:member-ref> is called.
33 On certain protocols, it may
34 only be possible to send events with a predetermined length. In this
35 case, the implementation may emit a fixed-length tone, and the StopTone
36 method call should return NotAvailable.
37 </tp:docstring>
38 <tp:possible-errors>
39 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError" />
40 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
41 <tp:docstring>
42 The given stream ID was invalid.
43 </tp:docstring>
44 </tp:error>
45 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
46 <tp:docstring>
47 The requested event is not available on this stream.
48 </tp:docstring>
49 </tp:error>
50 </tp:possible-errors>
51 </method>
52
53 <method name="StopTone" tp:name-for-bindings="Stop_Tone">
54 <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
55 <tp:docstring>A stream ID as defined in the StreamedMedia channel type.</tp:docstring>
56 </arg>
57 <tp:docstring>
58 Stop sending any DTMF tone which has been started using the
59 <tp:member-ref>StartTone</tp:member-ref>
60 method. If there is no current tone, this method will do nothing.
61 </tp:docstring>
62 <tp:possible-errors>
63 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError" />
64 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
65 <tp:docstring>
66 The given stream ID was invalid.
67 </tp:docstring>
68 </tp:error>
69 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
70 <tp:docstring>
71 Continuous tones are not supported by this stream.
72 </tp:docstring>
73 </tp:error>
74 </tp:possible-errors>
75 </method>
76
77 <tp:enum name="DTMF_Event" type="y">
78 <tp:enumvalue suffix="Digit_0" value="0">
79 <tp:docstring>0</tp:docstring>
80 </tp:enumvalue>
81 <tp:enumvalue suffix="Digit_1" value="1">
82 <tp:docstring>1</tp:docstring>
83 </tp:enumvalue>
84 <tp:enumvalue suffix="Digit_2" value="2">
85 <tp:docstring>2</tp:docstring>
86 </tp:enumvalue>
87 <tp:enumvalue suffix="Digit_3" value="3">
88 <tp:docstring>3</tp:docstring>
89 </tp:enumvalue>
90 <tp:enumvalue suffix="Digit_4" value="4">
91 <tp:docstring>4</tp:docstring>
92 </tp:enumvalue>
93 <tp:enumvalue suffix="Digit_5" value="5">
94 <tp:docstring>5</tp:docstring>
95 </tp:enumvalue>
96 <tp:enumvalue suffix="Digit_6" value="6">
97 <tp:docstring>6</tp:docstring>
98 </tp:enumvalue>
99 <tp:enumvalue suffix="Digit_7" value="7">
100 <tp:docstring>7</tp:docstring>
101 </tp:enumvalue>
102 <tp:enumvalue suffix="Digit_8" value="8">
103 <tp:docstring>8</tp:docstring>
104 </tp:enumvalue>
105 <tp:enumvalue suffix="Digit_9" value="9">
106 <tp:docstring>9</tp:docstring>
107 </tp:enumvalue>
108 <tp:enumvalue suffix="Asterisk" value="10">
109 <tp:docstring>*</tp:docstring>
110 </tp:enumvalue>
111 <tp:enumvalue suffix="Hash" value="11">
112 <tp:docstring>#</tp:docstring>
113 </tp:enumvalue>
114 <tp:enumvalue suffix="Letter_A" value="12">
115 <tp:docstring>A</tp:docstring>
116 </tp:enumvalue>
117 <tp:enumvalue suffix="Letter_B" value="13">
118 <tp:docstring>B</tp:docstring>
119 </tp:enumvalue>
120 <tp:enumvalue suffix="Letter_C" value="14">
121 <tp:docstring>C</tp:docstring>
122 </tp:enumvalue>
123 <tp:enumvalue suffix="Letter_D" value="15">
124 <tp:docstring>D</tp:docstring>
125 </tp:enumvalue>
126 </tp:enum>
12722
12823 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
12924 An interface that gives a Channel the ability to send DTMF events over
13328 listed in the <tp:type>DTMF_Event</tp:type> enumeration.
13429 </tp:docstring>
13530
31 <method name="StartTone" tp:name-for-bindings="Start_Tone">
32 <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
33 <tp:docstring>A stream ID as defined in the StreamedMedia channel
34 type. This argument is included for backwards compatibility and MUST
35 be ignored by the implementations - the tone SHOULD be sent to all
36 eligible streams in the channel.</tp:docstring>
37 </arg>
38 <arg direction="in" name="Event" type="y" tp:type="DTMF_Event">
39 <tp:docstring>A numeric event code from the DTMF_Event enum.</tp:docstring>
40 </arg>
41
42 <tp:docstring>
43 <p>Start sending a DTMF tone to all eligible streams in the channel.
44 Where possible, the tone will continue until
45 <tp:member-ref>StopTone</tp:member-ref> is called. On certain protocols,
46 it may only be possible to send events with a predetermined length. In
47 this case, the implementation MAY emit a fixed-length tone, and the
48 StopTone method call SHOULD return NotAvailable.</p>
49 <tp:rationale>
50 The client may wish to control the exact duration and timing of the
51 tones sent as a result of user's interaction with the dialpad, thus
52 starting and stopping the tone sending explicitly.
53 </tp:rationale>
54
55 <p>Tone overlaping or queueing is not supported, so this method can only
56 be called if no DTMF tones are already being played.</p>
57 </tp:docstring>
58 <tp:possible-errors>
59 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError" />
60 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
61 <tp:docstring>
62 The given stream ID was invalid. Deprecated, since stream IDs
63 are ignored.
64 </tp:docstring>
65 </tp:error>
66 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
67 <tp:docstring>
68 There are no eligible audio streams.
69 </tp:docstring>
70 </tp:error>
71 <tp:error name="org.freedesktop.Telepathy.Error.ServiceBusy">
72 <tp:docstring>
73 DTMF tones are already being played.
74 </tp:docstring>
75 </tp:error>
76 </tp:possible-errors>
77 </method>
78
79 <method name="StopTone" tp:name-for-bindings="Stop_Tone">
80 <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
81 <tp:docstring>A stream ID as defined in the StreamedMedia channel
82 type. This argument is included for backwards compatibility and MUST
83 be ignored by the implementations - the sending SHOULD be stoped in
84 all eligible streams in the channel.</tp:docstring>
85 </arg>
86
87 <tp:docstring>
88 Stop sending any DTMF tones which have been started using the
89 <tp:member-ref>StartTone</tp:member-ref> or
90 <tp:member-ref>MultipleTones</tp:member-ref> methods.
91 If there is no current tone, this method will do nothing.
92 If MultipleTones was used, the client should not assume the
93 sending has stopped immediately; instead, the client should wait
94 for the StoppedTones signal.
95 <tp:rationale>
96 On some protocols it might be impossible to cancel queued tones
97 immediately.
98 </tp:rationale>
99 </tp:docstring>
100 <tp:possible-errors>
101 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError" />
102 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
103 <tp:docstring>
104 The given stream ID was invalid. Deprecated, since stream IDs
105 are ignored.
106 </tp:docstring>
107 </tp:error>
108 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
109 <tp:docstring>
110 Continuous tones are not supported by this stream. Deprecated,
111 since stream IDs are ignored.
112 </tp:docstring>
113 </tp:error>
114 </tp:possible-errors>
115 </method>
116
117 <method name="MultipleTones" tp:name-for-bindings="Multiple_Tones">
118 <tp:added version="0.19.6" />
119 <arg direction="in" name="Tones" type="s">
120 <tp:docstring>A string representation of one or more DTMF
121 events.</tp:docstring>
122 </arg>
123 <tp:docstring>
124 <p>Send multiple DTMF events to all eligible streams in the channel.
125 Each character in the Tones string must be a valid DTMF event
126 (as defined by
127 <a href="http://www.rfc-editor.org/rfc/rfc4733.txt">RFC4733</a>).
128 Each tone will be played for a pre-defined number of milliseconds,
129 followed by a pause before the next tone is played. The
130 duration/pause is defined by the protocol or connection manager.</p>
131 <tp:rationale>
132 In cases where the client knows in advance the tone sequence it wants
133 to send, it's easier to use this method than manually start and stop
134 each tone in the sequence.
135 </tp:rationale>
136
137 <p>Tone overlaping or queueing is not supported, so this method can only
138 be called if no DTMF tones are already being played.</p>
139 </tp:docstring>
140 <tp:possible-errors>
141 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError" />
142 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
143 <tp:docstring>
144 The supplied Tones string was invalid.
145 </tp:docstring>
146 </tp:error>
147 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
148 <tp:docstring>
149 There are no eligible audio streams.
150 </tp:docstring>
151 </tp:error>
152 <tp:error name="org.freedesktop.Telepathy.Error.ServiceBusy">
153 <tp:docstring>
154 DTMF tones are already being played.
155 </tp:docstring>
156 </tp:error>
157 </tp:possible-errors>
158 </method>
159
160 <property name="CurrentlySendingTones"
161 tp:name-for-bindings="Currently_Sending_Tones" type="b" access="read">
162 <tp:added version="0.19.6" />
163 <tp:docstring>
164 Indicates whether there are DTMF tones currently being sent in the
165 channel. If so, the client should wait for
166 <tp:member-ref>StoppedTones</tp:member-ref> signal before trying to
167 send more tones.
168 </tp:docstring>
169 </property>
170
171 <property name="InitialTones" tp:name-for-bindings="Initial_Tones"
172 type="s" access="read">
173 <tp:added version="0.19.6" />
174 <tp:docstring>
175 <p>If non-empty in a channel request that will create a new channel,
176 the connection manager should send the tones immediately after
177 at least one eligible audio stream has been created in the
178 channel.</p>
179
180 <p>This property is immutable (cannot change).</p>
181 </tp:docstring>
182 </property>
183
184 <signal name="SendingTones" tp:name-for-bindings="Sending_Tones">
185 <tp:added version="0.19.6" />
186 <arg name="Tones" type="s">
187 <tp:docstring>DTMF string (one or more events) that is to be played.
188 </tp:docstring>
189 </arg>
190 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
191 <p>DTMF tone(s)are being sent to all eligible streams in the channel.
192 The signal is provided to indicating the fact that the streams are
193 currently being used to send one or more DTMF tones, so any other
194 media input is not getting through to the audio stream. It also
195 serves as a cue for the
196 <tp:member-ref>StopTone</tp:member-ref> method.</p>
197 </tp:docstring>
198 </signal>
199
200 <signal name="StoppedTones" tp:name-for-bindings="Stopped_Tones">
201 <tp:added version="0.19.6" />
202 <arg name="Cancelled" type="b">
203 <tp:docstring>True if the DTMF tones were actively cancelled via
204 <tp:member-ref>StopTone</tp:member-ref>.</tp:docstring>
205 </arg>
206 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
207 <p>DTMF tones have finished playing on streams in this channel.</p>
208 </tp:docstring>
209 </signal>
210
211 <tp:enum name="DTMF_Event" type="y">
212 <tp:enumvalue suffix="Digit_0" value="0">
213 <tp:docstring>0</tp:docstring>
214 </tp:enumvalue>
215 <tp:enumvalue suffix="Digit_1" value="1">
216 <tp:docstring>1</tp:docstring>
217 </tp:enumvalue>
218 <tp:enumvalue suffix="Digit_2" value="2">
219 <tp:docstring>2</tp:docstring>
220 </tp:enumvalue>
221 <tp:enumvalue suffix="Digit_3" value="3">
222 <tp:docstring>3</tp:docstring>
223 </tp:enumvalue>
224 <tp:enumvalue suffix="Digit_4" value="4">
225 <tp:docstring>4</tp:docstring>
226 </tp:enumvalue>
227 <tp:enumvalue suffix="Digit_5" value="5">
228 <tp:docstring>5</tp:docstring>
229 </tp:enumvalue>
230 <tp:enumvalue suffix="Digit_6" value="6">
231 <tp:docstring>6</tp:docstring>
232 </tp:enumvalue>
233 <tp:enumvalue suffix="Digit_7" value="7">
234 <tp:docstring>7</tp:docstring>
235 </tp:enumvalue>
236 <tp:enumvalue suffix="Digit_8" value="8">
237 <tp:docstring>8</tp:docstring>
238 </tp:enumvalue>
239 <tp:enumvalue suffix="Digit_9" value="9">
240 <tp:docstring>9</tp:docstring>
241 </tp:enumvalue>
242 <tp:enumvalue suffix="Asterisk" value="10">
243 <tp:docstring>*</tp:docstring>
244 </tp:enumvalue>
245 <tp:enumvalue suffix="Hash" value="11">
246 <tp:docstring>#</tp:docstring>
247 </tp:enumvalue>
248 <tp:enumvalue suffix="Letter_A" value="12">
249 <tp:docstring>A</tp:docstring>
250 </tp:enumvalue>
251 <tp:enumvalue suffix="Letter_B" value="13">
252 <tp:docstring>B</tp:docstring>
253 </tp:enumvalue>
254 <tp:enumvalue suffix="Letter_C" value="14">
255 <tp:docstring>C</tp:docstring>
256 </tp:enumvalue>
257 <tp:enumvalue suffix="Letter_D" value="15">
258 <tp:docstring>D</tp:docstring>
259 </tp:enumvalue>
260 </tp:enum>
136261 </interface>
137262 </node>
138263 <!-- vim:set sw=2 sts=2 et ft=xml: -->
312312 <dt>message-sender (u - <tp:type>Contact_Handle</tp:type>)</dt>
313313 <dd>The contact who sent the message. If 0 or omitted, the contact
314314 who sent the message could not be determined.</dd>
315
316 <dt>sender-nickname (s)</dt>
317 <dd>The nickname chosen by the sender of the message, which can be
318 different for each message in a conversation.</dd>
315319
316320 <dt>message-type (u - <tp:type>Channel_Text_Message_Type</tp:type>)
317321 </dt>
0 <?xml version="1.0" ?>
1 <node name="/Channel_Interface_Service_Point" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright> Copyright © 2005-2010 Nokia Corporation </tp:copyright>
3 <tp:copyright> Copyright © 2005-2010 Collabora Ltd </tp:copyright>
4 <tp:license xmlns="http://www.w3.org/1999/xhtml">
5 <p>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.</p>
9
10 <p>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.</p>
14
15 <p>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 Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
18 </tp:license>
19 <interface name="org.freedesktop.Telepathy.Channel.Interface.ServicePoint.DRAFT" tp:causes-havoc="experimental">
20 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
21
22 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
23 <p>An interface for channels
24 that can indicate when/if they are connected to some form
25 of service point. For example, when
26 dialing 9-1-1 in the US, a GSM modem/network will recognize that as
27 an emergency call, and inform higher levels of the stack that the
28 call is being handled by an emergency service. In this example,
29 the call is handled by a Public Safety Answering Point (PSAP) which is labeled
30 as "urn:service:sos". Other networks and protocols may handle this
31 differently while still using this interface.</p>
32
33 <p>Note that while the majority of examples given in this
34 documentation are for GSM calls, they could just as easily be
35 SIP calls, GSM SMS's, etc.</p>
36 </tp:docstring>
37
38 <property name="InitialServicePoint" tp:name-for-bindings="Initial_Service_Point"
39 type="(us)" tp:type="Service_Point" access="read">
40 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
41 <p>This property is used to indicate that the channel target is a
42 well-known service point. Please note that the CM (or lower layers
43 of the stack or network) may forward the connection to other other
44 service points, which the CM SHOULD indicate via
45 <tp:member-ref>ServicePointChanged</tp:member-ref>
46 signal.</p>
47
48 <p>This property SHOULD be set for channel requests that are
49 specifically targeting service points.</p>
50 </tp:docstring>
51 </property>
52
53 <property name="CurrentServicePoint" tp:name-for-bindings="Current_Service_Point"
54 type="(us)" tp:type="Service_Point" access="read">
55 <tp:docstring>
56 The service point that the channel is connected to. If the channel is
57 not connected to any service points, the CM MUST set the
58 <tp:type>Service_Point_Type</tp:type> field to None.
59 </tp:docstring>
60 </property>
61
62 <signal name="ServicePointChanged" tp:name-for-bindings="Service_Point_Changed">
63 <tp:docstring>
64 <p>Emitted when a channel changes the service point that it's connected to. This
65 might be a new call being connected to a service, a call connected to
66 a service being routed to a different service
67 (ie, an emergency call being routed from a generic emergency PSAP to
68 a poison control PSAP), or any number of other things.</p>
69
70 <p>Note that this should be emitted as soon as the CM has been notified
71 of the switch, and has updated its internal state. The CM MAY still
72 be in the process of connecting to the new service point.</p>
73 </tp:docstring>
74
75 <arg name="ServicePoint" type="(us)" tp:type="Service_Point">
76 <tp:docstring>
77 The new service point that is being used.
78 </tp:docstring>
79 </arg>
80 </signal>
81
82 </interface>
83 </node>
84 <!-- vim:set sw=2 sts=2 et ft=xml: -->
5454 </property>
5555
5656 <property name="UserActionTime" tp:name-for-bindings="User_Action_Time"
57 type="x" tp:type="Unix_Timestamp64" access="read">
57 type="x" tp:type="User_Action_Timestamp" access="read">
5858 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
5959 <p>The time at which user action occurred, or 0 if this channel
6060 request is for some reason not involving user action.</p>
61
62 <p>This corresponds to the _NET_WM_USER_TIME property in
63 <a href="http://standards.freedesktop.org/wm-spec/wm-spec-latest.html">EWMH</a>.</p>
6461
6562 <p>This property is set when the channel request is created,
6663 and can never change.</p>
380380 </tp:rationale>
381381 </tp:docstring>
382382 </tp:flag>
383
384 <tp:flag suffix="Muted" value="64">
385 <tp:docstring>
386 The call has been muted by the local user, e.g. using the
387 <tp:dbus-ref namespace="org.freedesktop.Telepathy.Call.Content.Interface"
388 >Mute.DRAFT</tp:dbus-ref> interface. This flag SHOULD only be set if
389 there is at least one Content, and all Contents are locally muted;
390 it makes sense on calls in state Call_State_Pending_Receiver or
391 Call_State_Accepted.
392 </tp:docstring>
393 </tp:flag>
383394 </tp:flags>
384395
385396 <property name="CallStateDetails"
476487 rejected as busy, kicked from a conference by a moderator, etc.).</p>
477488 </tp:docstring>
478489 </tp:enumvalue>
490
491 <tp:enumvalue suffix="Forwarded" value="2">
492 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
493 <p>The call was forwarded. If known, the handle of the contact
494 the call was forwarded to will be indicated by the Actor member
495 of a <tp:type>Call_State_Reason</tp:type> struct.</p>
496 </tp:docstring>
497 </tp:enumvalue>
479498 </tp:enum>
480499
481500 <tp:struct name="Call_State_Reason">
556575 </tp:docstring>
557576 </arg>
558577
559 <arg name="Call_State_Reason" type="(uus)">
578 <arg name="Call_State_Reason" type="(uus)" tp:type="Call_State_Reason">
560579 <tp:docstring>
561580 The new value of the <tp:member-ref>CallStateReason</tp:member-ref>
562581 property.
105105 matches closely related Text channels by their Bundle property.
106106 (This is use-case dis5)</p>
107107 </tp:rationale>
108
109 <p>For service-activatable handlers, this property should be specified
110 in the handler's <tt>.client</tt> file as follows:</p>
111
112 <pre>
113 [org.freedesktop.Telepathy.Client.Handler]
114 BypassApproval=true
115 </pre>
108116 </tp:docstring>
109117 </property>
110118
263271 is to be handled for some reason not involving user action.
264272 Handlers SHOULD use this for focus-stealing prevention,
265273 if applicable.
274 This property has the same semantic as <tp:type>User_Action_Timestamp</tp:type>
275 but is unsigned for historical reasons.
266276 </tp:docstring>
267277 </arg>
268278
118118 properties as possible, given that constraint.</p>
119119
120120 <p>In particular, the properties <tp:dbus-ref
121 namespace="org.freedesktop.Telepathy.ChannelRequest">Requests</tp:dbus-ref>
121 namespace="org.freedesktop.Telepathy.ChannelRequest">Requests</tp:dbus-ref>,
122 <tp:dbus-ref
123 namespace="org.freedesktop.Telepathy.ChannelRequest">UserActionTime</tp:dbus-ref>
122124 and <tp:dbus-ref
123 namespace="org.freedesktop.Telepathy.ChannelRequest">UserActionTime</tp:dbus-ref>
125 namespace="org.freedesktop.Telepathy.ChannelRequest">Account</tp:dbus-ref>
124126 MUST be included.</p>
125127 </tp:docstring>
126128 </arg>
193193 its <tp:dbus-ref
194194 namespace="org.freedesktop.Telepathy.Client.Observer">ObserverChannelFilter</tp:dbus-ref></p>
195195
196 <p>When activatable client having this property disappears from the bus
197 and there are channels matching its ObserverChannelFilter,
198 ObserveChannels will be called immediately to reactivate it again.</p>
196 <p>When an activatable client having this property disappears from the
197 bus and there are channels matching its ObserverChannelFilter,
198 ObserveChannels will be called immediately to reactivate it
199 again. Such clients should specify this property in their
200 <tt>.client</tt> file as follows:</p>
201
202 <pre>
203 [org.freedesktop.Telepathy.Client.Observer]
204 Recover=true
205 </pre>
206
199207 <tp:rationale>
200208 <p>This means that if an activatable Observer crashes, it will
201209 be restarted as soon as possible; while there is an unavoidable
211219 </tp:rationale>
212220
213221 <p>When the ObserveChannels method is called due to observer recovery,
214 the "Observer_Info" dictionary will contain one extra item with key
215 "recovering" and boolean value of True.</p>
222 the <var>Observer_Info</var> dictionary will contain one extra item
223 mapping the key <code>"recovering"</code> to <code>True</code>.</p>
216224 </tp:docstring>
217225 </property>
218226
335343
336344 <dl>
337345 <dt><code>recovering</code> - b</dt>
338 <dd>True if ObserveChannels was called on existing channel due to
339 observer recovery, otherwise False.
346 <dd><code>True</code> if ObserveChannels was called for an existing
347 channel (due to the <tp:member-ref>Recover</tp:member-ref>
348 property being <code>True</code>); <code>False</code> or omitted
349 otherwise.
350
340351 <tp:rationale>
341352 This allows observers to distinguish between new channels (the normal
342353 case), and existing channels that were given to the observer in order
0 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Anonymity"
2 xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
3
4 <tp:copyright>Copyright © 2008-2010 Nokia Corporation</tp:copyright>
5 <tp:copyright>Copyright © 2010 Collabora Ltd.</tp:copyright>
6 <tp:license xmlns="http://www.w3.org/1999/xhtml">
7 <p>This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.</p>
11
12 <p>This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.</p>
16
17 <p>You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.</p>
21 </tp:license>
22
23 <interface name="org.freedesktop.Telepathy.Connection.Interface.Anonymity.DRAFT"
24 tp:causes-havoc="experimental">
25 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
26
27 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
28 <p>An interface to support anonymity settings on a per-connection basis.
29 This defines what personal identifying information a remote contact
30 may or may not see. For example, GSM might use this for CLIR, while
31 SIP might use this for privacy service requests.</p>
32 </tp:docstring>
33
34 <tp:flags name="Anonymity_Mode_Flags" value-prefix="Anonymity_Mode" type="u">
35 <tp:docstring>
36 <p>Flags for the various types of anonymity modes. These modes are solely to
37 inform the CM of the desired anonymous settings. It is up to the
38 CM to determine whether the anonymity modes should be handled within
39 the CM itself, or whether the network that a CM might be talking to
40 should be enforcing anonymity.</p>
41
42 <p>CMs MAY support only a subset of these modes, and specific
43 connections MAY support none at all.</p>
44 </tp:docstring>
45
46 <tp:flag value="1" suffix="Client_Info">
47 <tp:docstring>
48 <p>Obscure any information that provides user identification,
49 user-agent identification or personal details. Examples of this
50 information might be GSM CallerID, SIP from address, various
51 informational email headers, etc.</p>
52
53 <p>The CM should scrub/replace any of this information before
54 passing messages or data onto the network. Note that a CM which
55 has the option of obscuring the information at the CM or privacy
56 service level would choose both (anonymity services are opaque
57 to clients of this interface).</p>
58
59 <p>Clients SHOULD NOT set both Client_Info and ShowClient_Info modes.
60 If they are set, the CM MUST respect Client_Info and ignore
61 Show_Client_Info.</p>
62 </tp:docstring>
63 </tp:flag>
64
65 <tp:flag value="2" suffix="Show_Client_Info">
66 <tp:docstring>
67 <p>Explicitly request showing of client information. In connection
68 context, this can be used to override service default. In channel
69 context, this overrides connection anonymity modes.</p>
70 <tp:rationale>
71 In GSM, it's possible to have CLIR enabled by default, and
72 explicitly suppress CLIR for a single phone call.
73 </tp:rationale>
74
75 <p>Clients SHOULD NOT set both Client_Info and Show_Client_Info modes.
76 If they are set, the CM MUST respect Client_Info and ignore
77 ShowClientInfo. The CM MAY set both Client_Info and Show_Client_Info
78 in <tp:member-ref>SupportedAnonymityModes</tp:member-ref> to indicate
79 its support for explicitly hiding and publicising client information.
80 </p>
81 </tp:docstring>
82 </tp:flag>
83
84 <tp:flag value="4" suffix="Network_Info">
85 <tp:docstring>
86 <p>Obscure any originating IP address information, contact URIs,
87 and anonymize all traffic involved with sending/receiving any
88 media streams or call content.
89 Examples of this include the "headers" portions of
90 <a href="http://www.rfc-editor.org/rfc/rfc3323.txt">RFC 3323</a> as
91 well as the History-Info (described in
92 <a href="http://www.rfc-editor.org/rfc/rfc4244.txt">RFC 4244</a>)
93 for a SIP CM.</p>
94
95 <p>This SHOULD have the effect of hiding address information from
96 the remote contact (ie, the contact cannot know what IP address
97 the session is originated from). Obviously the network still needs
98 to be able to route information between contacts, so this provides
99 no guarantees of what can be seen by intermediaries.</p>
100 </tp:docstring>
101 </tp:flag>
102 </tp:flags>
103
104 <property name="SupportedAnonymityModes" type="u" access="read"
105 tp:type="Anonymity_Mode_Flags" tp:name-for-bindings="Supported_Anonymity_Modes">
106 <tp:docstring>
107 The anonymity modes supported by the CM for this connection. Once
108 Connection.Status has moved to Connected, this property MUST NOT change.
109 </tp:docstring>
110 </property>
111
112 <property name="Mandatory" type="b" access="readwrite"
113 tp:name-for-bindings="Mandatory">
114 <tp:docstring>
115 <p>This specifies whether or not the anonymity settings MUST be respected
116 by the CM and any intermediaries between the local and remote contacts.
117 If this is set to true but anonymity settings cannot be followed, then
118 the session MUST be denied with a
119 <code>org.freedesktop.Telepathy.Errors.NotAvailable</code> error.
120 Any client that sets <tp:member-ref>AnonymityModes</tp:member-ref>
121 SHOULD also set this property first (rather than accepting the CM's
122 default value).</p>
123
124 <p>This property can also be set using a connection parameter in <tp:dbus-ref
125 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
126 see <tp:type>Conn_Mgr_Param_Flags</tp:type> for more information.</p>
127 </tp:docstring>
128 </property>
129
130 <property name="AnonymityModes" type="u" tp:type="Anonymity_Mode_Flags"
131 access="readwrite" tp:name-for-bindings="Anonymity_Modes">
132 <tp:docstring>
133 <p>The currently enabled anonymity modes for the connection. Setting
134 has the effect of requesting new modes for the connection, and may
135 raise an error if the unsupported modes are set. Successfully changing
136 the modes will result in emmision of
137 <tp:member-ref>AnonymityModesChanged</tp:member-ref> signal.</p>
138
139 <p>This property can also be set using a connection parameter in <tp:dbus-ref
140 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
141 see <tp:type>Conn_Mgr_Param_Flags</tp:type> for more information.</p>
142 </tp:docstring>
143 <tp:possible-errors>
144 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
145 <tp:docstring>
146 An unsupported mode was supplied. Supported modes are specified
147 in the SupportedAnonymityModes property, and this should be
148 checked prior to setting AnonymityModes.
149 </tp:docstring>
150 </tp:error>
151 </tp:possible-errors>
152 </property>
153
154 <signal name="AnonymityModesChanged"
155 tp:name-for-bindings="Anonymity_Modes_Changed">
156 <tp:docstring>
157 Emitted when the anonymity mode has changed.
158 </tp:docstring>
159
160 <arg name="Modes" type="u" tp:type="Anonymity_Mode_Flags">
161 <tp:docstring>
162 The new anonymity modes for this connection.
163 </tp:docstring>
164 </arg>
165 </signal>
166
167 </interface>
168 </node>
169 <!-- vim:set sw=2 sts=2 et ft=xml: -->
230230 </method>
231231
232232 <tp:contact-attribute name="caps"
233 type="a(usuu)" tp:type="Contact_Capability">
233 type="a(usuu)" tp:type="Contact_Capability[]">
234234 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
235235 <p>The same structs that would be returned by
236236 <tp:member-ref>GetCapabilities</tp:member-ref>
0 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Cellular"
2 xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
3
4 <tp:copyright>Copyright © 2008-2010 Nokia Corporation</tp:copyright>
5 <tp:copyright>Copyright © 2010 Collabora Ltd.</tp:copyright>
6 <tp:license xmlns="http://www.w3.org/1999/xhtml">
7 <p>This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.</p>
11
12 <p>This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.</p>
16
17 <p>You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.</p>
21 </tp:license>
22
23 <interface name="org.freedesktop.Telepathy.Connection.Interface.Cellular.DRAFT"
24 tp:causes-havoc="experimental">
25 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
26
27 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
28 <p>This interface is for various cellular things (GSM and/or CDMA) things that
29 aren't really applicable to other protocols.</p>
30 </tp:docstring>
31
32 <property name="MessageValidityPeriod" tp:name-for-bindings="Message_Validity_Period"
33 type="u" access="readwrite">
34 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
35 <p>Define how long should the service centre try message delivery before
36 giving up, failing delivery and deleting the message. A value of 0 means
37 to use the service centre's default period.</p>
38 <p>The value specified is in seconds. Note that various protocols or
39 implementations may round the value up (eg. to a minute or hour
40 precision). The maximum validity period may vary depending on
41 protocol or provider.</p>
42 </tp:docstring>
43 </property>
44
45 <property name="MessageServiceCentre" tp:name-for-bindings="Message_Service_Centre"
46 type="s" access="readwrite">
47 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
48 Address for the messaging service centre. Typically (as is the case
49 for GSM's SMSC), it's the ISDN / telephony address (ie. a phone number).
50 </tp:docstring>
51 </property>
52
53 <property name="IMSI" tp:name-for-bindings="IMSI" type="s" access="read">
54 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
55 <p>The International Mobile Subscriber Identifier, if it exists. This
56 would originate from a SIM card. If the IMSI is unknown, this will
57 contain an empty string ("").</p>
58 </tp:docstring>
59 </property>
60
61 <signal name="IMSIChanged" tp:name-for-bindings="IMSI_Changed">
62 <tp:docstring>
63 Emitted when the IMSI for the connection changes. This sort of thing
64 is rare, but could happen on cellular phones that allow hot-swapping
65 of SIM cards. In the case of SIM swapping, this signal would be
66 emitted twice; the first time while the SIM is being ejected (with an
67 empty string), and the second time after a new SIM has been inserted
68 (assuming that the IMSI can be determined from the new SIM).
69 </tp:docstring>
70
71 <arg name="IMSI" type="s">
72 <tp:docstring>
73 The new IMSI value. This may be an empty string in the case where
74 the IMSI is being reset or removed.
75 </tp:docstring>
76 </arg>
77 </signal>
78
79 </interface>
80 </node>
81 <!-- vim:set sw=2 sts=2 et ft=xml: -->
0 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Contact_Groups" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright>Copyright © 2009-2010 Collabora Ltd.</tp:copyright>
3 <tp:copyright>Copyright © 2009 Nokia Corporation</tp:copyright>
4 <tp:license xmlns="http://www.w3.org/1999/xhtml">
5 <p>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.</p>
9
10 <p>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.</p>
14
15 <p>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 Street, Fifth Floor, Boston, MA 02110-1301,
18 USA.</p>
19 </tp:license>
20 <interface name="org.freedesktop.Telepathy.Connection.Interface.ContactGroups.DRAFT"
21 tp:causes-havoc="experimental">
22 <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
23 <tp:requires interface="org.freedesktop.Telepathy.Connection.Interface.ContactList.DRAFT"/>
24 <tp:added version="0.19.6">(draft 1)</tp:added>
25
26 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
27 <p>An interface for connections in which contacts can be placed in
28 user-defined groups.</p>
29 </tp:docstring>
30
31 <property name="DisjointGroups" tp:name-for-bindings="Disjoint_Groups"
32 access="read" type="b">
33 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
34 <p>True if each contact can be in at most one group; false if each
35 contact can be in many groups.</p>
36
37 <p>This property cannot change after the connection has moved to the
38 Connected state. Until then, its value is undefined, and it may
39 change at any time, without notification.</p>
40 </tp:docstring>
41 </property>
42
43 <property name="GroupStorage" tp:name-for-bindings="Group_Storage"
44 type="u" tp:type="Contact_Metadata_Storage_Type" access="read">
45 <tp:docstring>
46 <p>Indicates the extent to which contacts' groups can be set and
47 stored.</p>
48
49 <p>This property cannot change after the connection has moved to the
50 Connected state. Until then, its value is undefined, and it may
51 change at any time, without notification.</p>
52 </tp:docstring>
53 </property>
54
55 <tp:contact-attribute name="groups" type="as">
56 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
57 <p>The names of groups of which a contact is a member.</p>
58
59 <p>Change notification is via
60 <tp:member-ref>GroupsChanged</tp:member-ref>,
61 <tp:member-ref>GroupRenamed</tp:member-ref> and
62 <tp:member-ref>GroupsRemoved</tp:member-ref>.</p>
63 </tp:docstring>
64 </tp:contact-attribute>
65
66 <property name="Groups" type="as" access="read"
67 tp:name-for-bindings="Groups">
68 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
69 <p>The names of all groups that currently exist. This may be a
70 larger set than the union of all contacts' <code>groups</code>
71 contact attributes, if the connection allows groups to be
72 empty.</p>
73
74 <p>Change notification is via
75 <tp:member-ref>GroupsCreated</tp:member-ref>,
76 <tp:member-ref>GroupRenamed</tp:member-ref> and
77 <tp:member-ref>GroupsRemoved</tp:member-ref>.</p>
78 </tp:docstring>
79 </property>
80
81 <signal name="GroupsCreated" tp:name-for-bindings="Groups_Created">
82 <tp:docstring>
83 Emitted when new, empty groups are created. This will often be
84 followed by <tp:member-ref>GroupsChanged</tp:member-ref> signals that
85 add some members.
86 </tp:docstring>
87
88 <arg name="Names" type="as">
89 <tp:docstring>The names of the new groups.</tp:docstring>
90 </arg>
91 </signal>
92
93 <signal name="GroupRenamed" tp:name-for-bindings="Group_Renamed">
94 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
95 <p>Emitted when a group is renamed. If the group was not empty,
96 immediately after this signal is emitted,
97 <tp:member-ref>GroupsChanged</tp:member-ref> MUST signal
98 that the members of that group were removed from the old name
99 and added to the new name.</p>
100
101 <p>On connection managers where groups behave like tags, this signal
102 will probably only be emitted when
103 <tp:member-ref>RenameGroup</tp:member-ref> is called, and renaming a
104 group from another client MAY be signalled as a
105 <tp:member-ref>GroupsChanged</tp:member-ref> signal instead.</p>
106
107 <tp:rationale>
108 <p>On protocols like XMPP, another resource "renaming a group" is
109 indistinguishable from changing contacts' groups individually.</p>
110 </tp:rationale>
111 </tp:docstring>
112
113 <arg name="Old_Name" type="s">
114 <tp:docstring>The old name of the group.</tp:docstring>
115 </arg>
116
117 <arg name="New_Name" type="s">
118 <tp:docstring>The new name of the group.</tp:docstring>
119 </arg>
120 </signal>
121
122 <signal name="GroupsRemoved" tp:name-for-bindings="Groups_Removed">
123 <tp:docstring>
124 Emitted when one or more groups are removed. If they had members at
125 the time that they were removed, then immediately after this signal is
126 emitted, <tp:member-ref>GroupsChanged</tp:member-ref> MUST signal
127 that their members were removed.
128 </tp:docstring>
129
130 <arg name="Names" type="as">
131 <tp:docstring>The names of the groups.</tp:docstring>
132 </arg>
133 </signal>
134
135 <signal name="GroupsChanged" tp:name-for-bindings="Groups_Changed">
136 <tp:docstring>
137 Emitted when contacts' groups change.
138 </tp:docstring>
139
140 <arg name="Contact" type="au" tp:type="Contact_Handle">
141 <tp:docstring>The relevant contacts.</tp:docstring>
142 </arg>
143
144 <arg name="Added" type="as">
145 <tp:docstring>The names of groups to which the contacts were
146 added.</tp:docstring>
147 </arg>
148
149 <arg name="Removed" type="as">
150 <tp:docstring>The names of groups from which the contacts were
151 removed.</tp:docstring>
152 </arg>
153 </signal>
154
155 <method name="SetContactGroups" tp:name-for-bindings="Set_Contact_Groups">
156 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
157 <p>Add the given contact to the given groups (creating new groups
158 if necessary), and remove them from all other groups.</p>
159
160 <tp:rationale>
161 <p>This is the easiest and most correct way to implement user
162 interfaces that display a single contact with a list of groups,
163 resulting in a user expectation that when they apply the changes,
164 the contact's set of groups will become exactly what was
165 displayed.</p>
166 </tp:rationale>
167
168 <p>If the user is removed from a group of which they were the only
169 member, the group MAY be removed automatically.</p>
170
171 <tp:rationale>
172 <p>In protocols like XMPP where groups behave like tags, a group
173 with no members has no protocol representation.</p>
174 </tp:rationale>
175
176 <p>Any <tp:member-ref>GroupsCreated</tp:member-ref>,
177 <tp:member-ref>GroupsChanged</tp:member-ref> and
178 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
179 this method call MUST be emitted before the method returns.</p>
180 </tp:docstring>
181
182 <arg name="Contact" type="u" tp:type="Contact_Handle" direction="in">
183 <tp:docstring>The contact to alter.</tp:docstring>
184 </arg>
185
186 <arg name="Groups" type="as" direction="in">
187 <tp:docstring>The set of groups which the contact should be
188 in.</tp:docstring>
189 </arg>
190
191 <tp:possible-errors>
192 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
193 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
194 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
195 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
196 <tp:docstring>Raised if <tp:member-ref>DisjointGroups</tp:member-ref>
197 is true and the list of groups has more than one
198 member.</tp:docstring>
199 </tp:error>
200 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
201 <tp:docstring>
202 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
203 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
204 </tp:docstring>
205 </tp:error>
206 </tp:possible-errors>
207 </method>
208
209 <method name="SetGroupMembers" tp:name-for-bindings="Set_Group_Members">
210 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
211 <p>Add the given members to the given group (creating it if necessary),
212 and remove all other members.</p>
213
214 <tp:rationale>
215 <p>This is the easiest and most correct way to implement user
216 interfaces that display a single group with a list of contacts,
217 resulting in a user expectation that when they apply the changes,
218 the groups's set of members will become exactly what was
219 displayed.</p>
220 </tp:rationale>
221
222 <p>If <tp:member-ref>DisjointGroups</tp:member-ref> is true,
223 this will also remove each member from their previous group.</p>
224
225 <p>If the user is removed from a group of which they were the only
226 member, the group MAY be removed automatically.</p>
227
228 <p>Any <tp:member-ref>GroupsCreated</tp:member-ref>,
229 <tp:member-ref>GroupsChanged</tp:member-ref> and
230 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
231 this method call MUST be emitted before the method returns.</p>
232 </tp:docstring>
233
234 <arg name="Group" type="s" direction="in">
235 <tp:docstring>The group to alter.</tp:docstring>
236 </arg>
237
238 <arg name="Members" type="au" tp:type="Contact_Handle[]" direction="in">
239 <tp:docstring>The set of members for the group. If this set is
240 empty, this method MAY remove the group.</tp:docstring>
241 </arg>
242
243 <tp:possible-errors>
244 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
245 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
246 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
247 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
248 <tp:docstring>
249 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
250 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
251 </tp:docstring>
252 </tp:error>
253 </tp:possible-errors>
254 </method>
255
256 <method name="AddToGroup" tp:name-for-bindings="Add_To_Group">
257 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
258 <p>Add the given members to the given group, creating it if
259 necessary.</p>
260
261 <p>If <tp:member-ref>DisjointGroups</tp:member-ref> is true,
262 this will also remove each member from their previous group.</p>
263
264 <tp:rationale>
265 <p>This is good for user interfaces in which you can edit groups
266 via drag-and-drop.</p>
267 </tp:rationale>
268
269 <p>Any <tp:member-ref>GroupsCreated</tp:member-ref>,
270 <tp:member-ref>GroupsChanged</tp:member-ref> and
271 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
272 this method call MUST be emitted before the method returns.</p>
273 </tp:docstring>
274
275 <arg name="Group" type="s" direction="in">
276 <tp:docstring>The group to alter.</tp:docstring>
277 </arg>
278
279 <arg name="Members" type="au" tp:type="Contact_Handle[]" direction="in">
280 <tp:docstring>The set of members to include in the group.</tp:docstring>
281 </arg>
282
283 <tp:possible-errors>
284 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
285 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
286 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
287 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
288 <tp:docstring>
289 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
290 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
291 </tp:docstring>
292 </tp:error>
293 </tp:possible-errors>
294 </method>
295
296 <method name="RemoveFromGroup" tp:name-for-bindings="Remove_From_Group">
297 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
298 <p>Remove the given members from the given group.</p>
299
300 <tp:rationale>
301 <p>This is good for user interfaces in which you can edit groups
302 via drag-and-drop.</p>
303 </tp:rationale>
304
305 <p>Any <tp:member-ref>GroupsChanged</tp:member-ref> or
306 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
307 this method call MUST be emitted before the method returns.</p>
308 </tp:docstring>
309
310 <arg name="Group" type="s" direction="in">
311 <tp:docstring>The group to alter. If it does not exist, then it has
312 no members by definition, so this method SHOULD return
313 successfully.</tp:docstring>
314 </arg>
315
316 <arg name="Members" type="au" tp:type="Contact_Handle[]" direction="in">
317 <tp:docstring>The set of members to remove from the group. It is not
318 an error to remove members who are already not in the group.
319 If there are no members left in the group afterwards, the group MAY
320 itself be removed.</tp:docstring>
321 </arg>
322
323 <tp:possible-errors>
324 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
325 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
326 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
327 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
328 <tp:docstring>
329 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
330 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
331 </tp:docstring>
332 </tp:error>
333 </tp:possible-errors>
334 </method>
335
336 <method name="RemoveGroup" tp:name-for-bindings="Remove_Group">
337 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
338 <p>Remove all members from the given group, then remove the group
339 itself. If the group already does not exist, this method SHOULD
340 return successfully.</p>
341
342 <p>Any <tp:member-ref>GroupsChanged</tp:member-ref> or
343 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
344 this method call MUST be emitted before the method returns.</p>
345 </tp:docstring>
346
347 <arg name="Group" type="s" direction="in">
348 <tp:docstring>The group to remove.</tp:docstring>
349 </arg>
350
351 <tp:possible-errors>
352 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
353 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
354 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
355 <tp:docstring>
356 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
357 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
358 </tp:docstring>
359 </tp:error>
360 </tp:possible-errors>
361 </method>
362
363 <method name="RenameGroup" tp:name-for-bindings="Rename_Group">
364 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
365 <p>Rename the given group.</p>
366
367 <p>On protocols where groups behave like tags, this is an API
368 short-cut for adding all of the group's members to a group with
369 the new name, then removing the old group.</p>
370
371 <tp:rationale>
372 <p>Otherwise, clients can't perform this operation atomically, even
373 if the connection could.</p>
374 </tp:rationale>
375
376 <p>Any <tp:member-ref>GroupRenamed</tp:member-ref> or
377 <tp:member-ref>GroupsRemoved</tp:member-ref> signals that result from
378 this method call MUST be emitted before the method returns.</p>
379 </tp:docstring>
380
381 <arg name="Old_Name" type="s" direction="in">
382 <tp:docstring>The group to rename.</tp:docstring>
383 </arg>
384
385 <arg name="New_Name" type="s" direction="in">
386 <tp:docstring>The new name for the group.</tp:docstring>
387 </arg>
388
389 <tp:possible-errors>
390 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
391 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
392 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
393 <tp:docstring>
394 Raised if <tp:member-ref>GroupStorage</tp:member-ref>
395 is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
396 </tp:docstring>
397 </tp:error>
398 <tp:error name="org.freedesktop.Telepathy.Error.DoesNotExist">
399 <tp:docstring>Raised if there is no group with that
400 name.</tp:docstring>
401 </tp:error>
402 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
403 <tp:docstring>Raised if there is already a group with the new
404 name.</tp:docstring>
405 </tp:error>
406 </tp:possible-errors>
407 </method>
408
409 </interface>
410 </node>
411 <!-- vim:set sw=2 sts=2 et ft=xml: -->
503503 network traffic.</p>
504504 </tp:rationale>
505505 </tp:docstring>
506
507 <tp:contact-attribute name="info"
508 type="a(sasas)" tp:type="Contact_Info_Field[]">
509 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
510 <p>The same value that would be returned by
511 <tp:member-ref>GetContactInfo</tp:member-ref> for this contact.
512 Omitted from the result if the contact's info
513 is not known.</p>
514 </tp:docstring>
515 </tp:contact-attribute>
516
506517 </interface>
507518 </node>
508519 <!-- vim:set sw=2 sts=2 et ft=xml: -->
0 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Contact_List" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright>Copyright © 2009-2010 Collabora Ltd.</tp:copyright>
3 <tp:copyright>Copyright © 2009 Nokia Corporation</tp:copyright>
4 <tp:license xmlns="http://www.w3.org/1999/xhtml">
5 <p>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.</p>
9
10 <p>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.</p>
14
15 <p>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 Street, Fifth Floor, Boston, MA 02110-1301,
18 USA.</p>
19 </tp:license>
20 <interface name="org.freedesktop.Telepathy.Connection.Interface.ContactList.DRAFT"
21 tp:causes-havoc="experimental">
22 <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
23 <tp:added version="0.19.6">(draft 1)</tp:added>
24
25 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
26 <p>An interface for connections that have any concept of a list of
27 known contacts (roster, buddy list, friends list etc.)</p>
28
29 <tp:rationale>
30 <p>On many protocols, there's a server-side roster (as in XMPP),
31 or a set of server-side lists that can be combined to form a
32 roster (as in MSN).</p>
33
34 <p>In some protocols (like link-local XMPP), while there might not be
35 any server or roster, it's possible to list "nearby" contacts.</p>
36
37 <p>In Telepathy 0.18 and older, we represented contact lists as a
38 collection of <tp:dbus-ref
39 namespace="org.freedesktop.Telepathy.Channel.Type"
40 >ContactList</tp:dbus-ref> channels. This is remarkably difficult to
41 work with in practice - every client that cares about contact lists
42 has to take the union of some hard-to-define set of these
43 channels - and conflicts with the idea that channels that cannot
44 be dispatched to a handler should be closed.</p>
45 </tp:rationale>
46
47 <p>The list of contacts is not exposed as a D-Bus property; it can be
48 fetched using <tp:member-ref>GetContactListAttributes</tp:member-ref>.
49 </p>
50
51 <tp:rationale>
52 <p>In some protocols, such as XMPP, the contact list may not be
53 available immediately. The
54 <tp:member-ref>GetContactListAttributes</tp:member-ref> method
55 will wait until the contact list is available before returning.
56 Using a method also allows extra attributes to be retrieved at
57 the same time.</p>
58 </tp:rationale>
59 </tp:docstring>
60
61 <method name="GetContactListAttributes"
62 tp:name-for-bindings="Get_Contact_List_Attributes">
63 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
64 <p>Return some contact attributes for a list of contacts somehow
65 associated with the user.</p>
66
67 <p>This definition is deliberately vague: in practice, most user
68 interfaces should display some subset of this list, by filtering it
69 by some contact attributes (for instance, displaying all contacts
70 whose "subscribe" attribute is Yes is expected to be a common case).
71 This list MAY contain any contacts whatsoever, but MUST contain
72 at least the following:</p>
73
74 <ul>
75 <li>all contacts whose "subscribe" attribute is Ask or Yes</li>
76 <li>all contacts whose "publish" attribute is Ask or Yes</li>
77 <li>all contacts with a persistently-stored stored alias, if
78 supported</li>
79 <li>all contacts in user-defined contact groups, if supported</li>
80 </ul>
81
82 <p>This list does not need to contain every visible contact: for
83 instance, contacts seen in XMPP or IRC chatrooms SHOULD NOT appear
84 here. Blocked contacts SHOULD NOT appear here either, unless they
85 are still stored in a persistent roster/contact list as well as
86 being blocked.</p>
87
88 <tp:rationale>
89 <p>This is basically the union of the historical <tp:dbus-ref
90 namespace="org.freedesktop.Telepathy.Channel.Type"
91 >ContactList</tp:dbus-ref> subscribe, publish and stored
92 channels.</p>
93
94 <p>For example, XMPP, it's the roster; on link-local XMPP, it's the
95 set of visible users on the local network; on MSN, it's the union
96 of the forward and reverse buddy lists.</p>
97
98 <p>An easy way for an application to display a contact list is to
99 call this method with at least this interface in the Interfaces
100 argument, then check which subset of contacts should be displayed
101 (perhaps based on their subscribe attribute, for instance) and display
102 them. Any additional information required to display the contact
103 list, like aliases or presence, can be retrieved at the same
104 time.</p>
105
106 <p>In practice, most user interfaces for the contact list will
107 usually display a large proportion of this list
108 (for instance, most contacts on the contact list will usually
109 have subscribe=Yes in practice, so contact lists that display
110 subscribe=Yes contacts need to display almost the entire list),
111 so the overhead of returning information about too many contacts
112 is small.</p>
113 </tp:rationale>
114
115 <p>This method SHOULD NOT return before the contact list has been
116 retrieved, on protocols where this is possible. As a result,
117 clients SHOULD use a longer-than-default timeout for this method
118 call, since retrieving the contact list can take a significant
119 time on some servers.</p>
120
121 <tp:rationale>
122 <p>This makes it possible for clients to wait for the contact list.
123 For instance, on XMPP this method shouldn't return until the
124 roster has been retrieved, which is an asynchronous process.
125 However, on link-local XMPP you can't know when you have the
126 complete list, so this method would have to return immediately.</p>
127 </tp:rationale>
128 </tp:docstring>
129
130 <arg direction="in" name="Interfaces" type="as"
131 tp:type="DBus_Interface[]">
132 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
133 <p>A list of strings indicating which D-Bus interfaces the calling
134 process is interested in. Equivalent to the corresponding argument
135 to <tp:dbus-ref
136 namespace="org.freedesktop.Telepathy.Connection.Interface.Contacts"
137 >GetContactAttributes</tp:dbus-ref>.</p>
138 </tp:docstring>
139 </arg>
140
141 <arg direction="in" name="Hold" type="b">
142 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
143 <p>Whether to hold the handles on behalf of the calling process.
144 Equivalent to the corresponding argument to <tp:dbus-ref
145 namespace="org.freedesktop.Telepathy.Connection.Interface.Contacts"
146 >GetContactAttributes</tp:dbus-ref>.</p>
147
148 <p><em>FIXME: if we do distributed refcounting, we should probably
149 rename this to 'Reference' and implement handle-refcounting
150 semantics first? On the other hand, if we make handles persist
151 for the lifetime of the connection, we can just remove this
152 parameter.</em></p>
153 </tp:docstring>
154 </arg>
155
156 <arg direction="out" type="a{ua{sv}}" name="Attributes"
157 tp:type="Contact_Attributes_Map">
158 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
159 <p>A dictionary mapping the contact handles to contact attributes,
160 equivalent to the result of <tp:dbus-ref
161 namespace="org.freedesktop.Telepathy.Connection.Interface.Contacts"
162 >GetContactAttributes</tp:dbus-ref>.</p>
163
164 </tp:docstring>
165 </arg>
166
167 <tp:possible-errors>
168 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
169 </tp:possible-errors>
170 </method>
171
172 <tp:enum name="Presence_State" type="u">
173 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
174 <p>A tristate indicating whether presence subscription is denied,
175 denied but pending permission, or allowed. The exact semantics
176 vary according to where this type is used.</p>
177 </tp:docstring>
178
179 <tp:enumvalue suffix="No" value="0">
180 <tp:docstring>Presence information cannot be seen.</tp:docstring>
181 </tp:enumvalue>
182 <tp:enumvalue suffix="Ask" value="1">
183 <tp:docstring>Presence information cannot be seen, but permission
184 to see presence information has been requested.</tp:docstring>
185 </tp:enumvalue>
186 <tp:enumvalue suffix="Yes" value="2">
187 <tp:docstring>Presence information can be seen.</tp:docstring>
188 </tp:enumvalue>
189 </tp:enum>
190
191 <tp:contact-attribute name="subscribe"
192 type="u" tp:type="Presence_State">
193 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
194 <p>If this attribute on a contact is Yes, this connection can
195 expect to receive their presence, along with any other information
196 that has the same access control.</p>
197
198 <tp:rationale>
199 <p>This is subscription="from" or subscription="both" in XMPP,
200 the "forward list" on MSN, or the contact being "added to
201 the local user's buddy list" in ICQ, for example.</p>
202 </tp:rationale>
203
204 <p>If this attribute is No or Ask, the local user cannot generally
205 expect to receive presence from this contact. Their presence status
206 as returned by <tp:dbus-ref
207 namespace="org.freedesktop.Telepathy.Connection.Interface.SimplePresence">GetPresences</tp:dbus-ref>
208 is likely to be (Unknown, "unknown", ""), unless the local user
209 can temporarily see their presence for some other reason (for
210 instance, on XMPP, contacts seen in chatrooms will temporarily
211 have available presence).</p>
212
213 <p>If this attribute is Ask, this indicates that the local user has
214 asked to receive the contact's presence at some time. It is
215 implementation-dependent whether contacts' subscribe attributes
216 can remain set to Ask, or are reset to No, when the connection
217 disconnects.</p>
218
219 <tp:rationale>
220 <p>Some protocols store the fact that we wishes to see a contact's
221 presence; on these protocols, this attribute can remain Ask
222 indefinitely. On other protocols, only contacts who have been
223 asked during the current session will ever have Ask status.</p>
224 </tp:rationale>
225 </tp:docstring>
226 </tp:contact-attribute>
227
228 <tp:contact-attribute name="publish"
229 type="u" tp:type="Presence_State">
230 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
231 <p>If this attribute on a contact is Yes, the local user's presence
232 is published to that contact, along with any other information that
233 shares an access-control mechanism with presence (depending on
234 protocol, server configuration and/or user configuration, this may
235 include avatars, "rich presence" such as location, etc.).</p>
236
237 <tp:rationale>
238 <p>This is subscription="to" or subscription="both" in XMPP,
239 the "reverse list" on MSN, or the state of "being added to
240 the contact's buddy list" in ICQ, for example.</p>
241 </tp:rationale>
242
243 <p>If this attribute is No or Ask, the
244 local user's presence is not published to that contact; however,
245 if it is Ask, the contact has requested that the local user's
246 presence is made available to them.</p>
247
248 <p>It is implementation-dependent whether contacts' publish
249 attributes can remain set to Ask, or are reset to No, when the
250 connection disconnects.</p>
251
252 <tp:rationale>
253 <p>Some protocols store the fact that a contact wishes to see our
254 presence; on these protocols, this attribute can remain Ask
255 indefinitely. On other protocols, only contacts who have asked
256 during the current session will ever have Ask status.</p>
257 </tp:rationale>
258 </tp:docstring>
259 </tp:contact-attribute>
260
261 <tp:contact-attribute name="publish-request" type="s">
262 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
263 <p>If the "publish" attribute is Ask, an optional message that was
264 sent by the contact asking to receive the local user's presence;
265 omitted if none was given.</p>
266
267 <tp:rationale>
268 <p>If the contact asking to receive our presence is also using
269 Telepathy, this is the message they supplied as the Message
270 argument to <tp:member-ref>RequestSubscription</tp:member-ref>.</p>
271 </tp:rationale>
272
273 <p>Otherwise, this SHOULD be omitted.</p>
274 </tp:docstring>
275 </tp:contact-attribute>
276
277 <property name="SubscriptionsPersist"
278 tp:name-for-bindings="Subscriptions_Persist" type="b" access="read">
279 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
280 <p>If true, presence subscriptions (in both directions) on this
281 connection are stored by the server or other infrastructure.</p>
282
283 <tp:rationale>
284 <p>XMPP, MSN, ICQ, etc. all behave like this.</p>
285 </tp:rationale>
286
287 <p>If false, presence subscriptions on this connection are not
288 stored.</p>
289
290 <tp:rationale>
291 <p>In SIMPLE (SIP), <em>clients</em> are expected to keep a record
292 of subscriptions, as described below. In link-local XMPP,
293 subscriptions are implicit (everyone on the local network receives
294 presence from everyone else) so nothing is ever stored.</p>
295 </tp:rationale>
296
297 <p>If <tp:member-ref>CanChangeSubscriptions</tp:member-ref>
298 is true, Telepathy clients (e.g. user interfaces or address books)
299 MAY keep a record of permission to publish and requests to subscribe
300 locally, and attempt to restore it for each Connection. If
301 SubscriptionsPersist is false, clients MAY do this for all contacts;
302 if SubscriptionsPersist is true, clients SHOULD NOT change the state
303 of contacts that were not changed locally.</p>
304
305 <tp:rationale>
306 <p>In SIMPLE (SIP), SubscriptionsPersist is false, but
307 CanChangeSubscriptions is true. Presence will not be received
308 unless clients renew any subscriptions they have for each
309 connection, in the way described. There is no server-side storage,
310 so clients have no alternative but to maintain independent contact
311 lists.</p>
312
313 <p>In protocols like XMPP and MSN, it may be useful for clients to
314 queue up subscription requests or removals made while offline and
315 process them next time the connection is online. However, clients
316 should only replay the changes, rather than resetting the contact
317 list to match a stored copy, to avoid overwriting changes that
318 were made on the server.</p>
319 </tp:rationale>
320
321 <p>Clients that replay requests like this SHOULD do so by calling
322 AuthorizePublication to pre-approve publication of presence to the
323 appropriate contacts, followed by RequestSubscription to request the
324 appropriate contacts' presences.</p>
325
326 <p>This property cannot change after the connection has moved to the
327 Connected state. Until then, its value is undefined, and it may
328 change at any time, without notification.</p>
329 </tp:docstring>
330 </property>
331
332 <tp:enum name="Contact_Metadata_Storage_Type" type="u">
333 <tp:docstring>
334 Values of this enumeration indicate the extent to which metadata
335 such as aliases and group memberships can be stored for the contacts
336 on a particular connection.
337 </tp:docstring>
338
339 <tp:enumvalue suffix="None" value="0">
340 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
341 <p>This connection cannot store this type of metadata at all, and
342 attempting to do so will fail with NotImplemented.</p>
343
344 <tp:rationale>
345 <p>Link-local XMPP can't store aliases or group memberships at
346 all, and subscription and presence states are implicit (all
347 contacts on the local network have subscribe = publish = Yes
348 and no other contacts exist).</p>
349
350 <p>As of April 2010, the XMPP server for Facebook Chat provides a
351 read-only view of the user's Facebook contacts, so it could also
352 usefully have this storage type.</p>
353 </tp:rationale>
354 </tp:docstring>
355 </tp:enumvalue>
356
357 <tp:enumvalue suffix="Subscribed_Or_Pending" value="1">
358 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
359 <p>This type of metadata can only be stored permanently for contacts
360 whose subscribe attribute is Ask or Yes.</p>
361
362 <tp:rationale>
363 <p>Contact aliases and groups on MSN have this behaviour.</p>
364 </tp:rationale>
365
366 <p>If this type of metadata is set on a contact with subscribe=No,
367 the Connection MUST cache it until disconnected, and return it
368 if requested. If subscription to the contact's presence is
369 subsequently requested, making it possible to store this metadata,
370 the Connection MUST store the cached value at that time.</p>
371
372 <tp:rationale>
373 <p>This supports the recommended calling pattern for adding a
374 new contact, in which alias and groups are set (without
375 necessarily waiting for a reply) before requesting the
376 contact's presence. Until the subscription request is
377 processed by the server, the alias and groups will be cached
378 in memory; when the subscription request has been processed,
379 the connection manager will store the metadata on the server.</p>
380 </tp:rationale>
381 </tp:docstring>
382 </tp:enumvalue>
383
384 <tp:enumvalue suffix="Subscribed" value="2">
385 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
386 <p>This type of metadata can only be stored permanently for contacts
387 whose subscribe attribute is Yes.</p>
388
389 <tp:rationale>
390 <p>No service with this behaviour is currently known, but it's a
391 stricter form of Subscribed_Or_Pending.</p>
392 </tp:rationale>
393
394 <p>If this type of metadata is set on a contact with subscribe != Yes,
395 the Connection MUST cache it until disconnected, and return it
396 if requested. If subscription to the contact's presence is
397 subsequently allowed, making it possible to store this metadata,
398 the Connection MUST store the cached value at that time.</p>
399
400 <tp:rationale>
401 <p>The same rationale applies as for Subscribed_Or_Pending,
402 except that metadata must be stored until the subscription
403 request is not only processed by the server, but also allowed
404 by the remote user.</p>
405 </tp:rationale>
406 </tp:docstring>
407 </tp:enumvalue>
408
409 <tp:enumvalue suffix="Anyone" value="3">
410 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
411 <p>The user can set this metadata for any valid contact identifier,
412 whether or not they have any presence subscription relationship
413 to it, and it will be stored on their contact list.</p>
414
415 <tp:rationale>
416 <p>Contact aliases and groups on XMPP have this behaviour; it
417 is possible to put a contact in a group, or assign an alias
418 to them, without requesting that presence be shared.</p>
419 </tp:rationale>
420 </tp:docstring>
421 </tp:enumvalue>
422 </tp:enum>
423
424 <tp:struct name="Contact_Subscriptions" array-name="">
425 <tp:docstring>
426 A single contact's subscribe, publish and publish-request attributes.
427 </tp:docstring>
428
429 <tp:member name="Subscribe" type="u" tp:type="Presence_State">
430 <tp:docstring>
431 The new value of the contact's "subscribe" attribute.
432 </tp:docstring>
433 </tp:member>
434
435 <tp:member name="Publish" type="u" tp:type="Presence_State">
436 <tp:docstring>
437 The new value of the contact's "publish" attribute.
438 </tp:docstring>
439 </tp:member>
440
441 <tp:member name="Publish_Request" type="s">
442 <tp:docstring>
443 The new value of the contact's "publish-request" attribute,
444 or the empty string if that attribute would be omitted.
445 </tp:docstring>
446 </tp:member>
447 </tp:struct>
448
449 <tp:mapping name="Contact_Subscription_Map" array-name="">
450 <tp:docstring>
451 A map from contacts to their subscribe, publish and publish-request
452 attributes.
453 </tp:docstring>
454
455 <tp:member name="Contact" type="u" tp:type="Contact_Handle">
456 <tp:docstring>
457 The contact's handle.
458 </tp:docstring>
459 </tp:member>
460
461 <tp:member name="States" type="(uus)" tp:type="Contact_Subscriptions">
462 <tp:docstring>
463 The contact's subscribe, publish and publish-request attributes.
464 </tp:docstring>
465 </tp:member>
466 </tp:mapping>
467
468 <signal name="ContactsChanged"
469 tp:name-for-bindings="Contacts_Changed">
470 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
471 <p>Emitted when the contact list becomes available, when contacts'
472 basic stored properties change, when new contacts are added to the
473 list that would be returned by
474 <tp:member-ref>GetContactListAttributes</tp:member-ref>,
475 or when contact are removed from that list.</p>
476
477 <tp:rationale>
478 <p>This provides change notification for that list, and for
479 contacts' "subscribe", "publish" and
480 "publish-request" attributes.</p>
481 </tp:rationale>
482 </tp:docstring>
483
484 <arg type="a{u(uus)}" name="Changes" tp:type="Contact_Subscription_Map">
485 <tp:docstring>
486 The new subscribe, publish and publish-request attributes of all the
487 contacts that have been added, and all the contacts for which those
488 attributes have changed.
489 </tp:docstring>
490 </arg>
491
492 <arg name="Removals" type="au" tp:type="Contact_Handle[]">
493 <tp:docstring>
494 The contacts that have been removed from the list that would be
495 returned by
496 <tp:member-ref>GetContactListAttributes</tp:member-ref>.
497 This also implies that they have subscribe = No and publish = No;
498 contacts MUST NOT be listed both here and in Changes.
499 </tp:docstring>
500 </arg>
501 </signal>
502
503 <property name="CanChangeSubscriptions" type="b" access="read"
504 tp:name-for-bindings="Can_Change_Subscriptions">
505 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
506 <p>If true, presence subscription and publication can be changed
507 using the
508 <tp:member-ref>RequestSubscription</tp:member-ref>,
509 <tp:member-ref>AuthorizePublication</tp:member-ref> and
510 <tp:member-ref>RemoveContacts</tp:member-ref> methods.</p>
511
512 <p>If false, all of those methods will always fail; they SHOULD raise
513 the error org.freedesktop.Telepathy.Error.NotImplemented.</p>
514
515 <tp:rationale>
516 <p>In XEP-0174 "Serverless Messaging" (link-local XMPP), presence is
517 implicitly published to everyone in the local subnet, so the user
518 cannot control their presence publication.</p>
519 </tp:rationale>
520
521 <p>This property cannot change after the connection has moved to the
522 Connected state. Until then, its value is undefined, and it may
523 change at any time, without notification.</p>
524 </tp:docstring>
525 </property>
526
527 <method name="RequestSubscription" tp:name-for-bindings="Request_Subscription">
528 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
529 <p>Request that the given contacts allow the local user to
530 subscribe to their presence, i.e. that their subscribe attribute
531 becomes Yes.</p>
532
533 <p>Before calling this method on a connection where <tp:dbus-ref
534 namespace="org.freedesktop.Telepathy.Connection.Interface.Aliasing"
535 >GetAliasFlags</tp:dbus-ref> returns the <code>User_Set</code> flag,
536 user interfaces SHOULD obtain, from the user, an alias to
537 identify the contact in future, and store it using <tp:dbus-ref
538 namespace="org.freedesktop.Telepathy.Connection.Interface.Aliasing"
539 >SetAliases</tp:dbus-ref>.
540
541 The user MAY be
542 prompted using the contact's current self-assigned nickname, or
543 something derived from the contact's (presumably self-assigned)
544 identifier, as a default, but these names chosen by the contact
545 SHOULD NOT be used without user approval.</p>
546
547 <tp:rationale>
548 <p>This is a generalization of
549 <a href="http://xmpp.org/extensions/xep-0165.html"
550 >XEP-0165 "Best Practices to Discourage JID Mimicking"</a>)
551 to protocols other than XMPP. A reasonable user interface for
552 this, as used in many XMPP clients, is to have a text entry
553 for the alias adjacent to the text entry for the identifier
554 to add.</p>
555 </tp:rationale>
556
557 <p>For contacts with subscribe=Yes, this method has no effect.
558 It MUST return successfully if all contacts are in this state.</p>
559
560 <p>For contacts with subscribe=Ask, this method SHOULD send a new
561 request, with the given message, if allowed by the underlying
562 protocol.</p>
563
564 <p>For contacts with subscribe=No, this method SHOULD request that
565 the contact allows the local user to subscribe to their presence;
566 in general, this will change their publish attribute from No
567 to Ask (although it could change directly from No to Yes in some
568 situations).</p>
569
570 <p>Any state changes that immediately result from this request MUST
571 be signalled via <tp:member-ref>ContactsChanged</tp:member-ref>
572 before this method returns.</p>
573
574 <tp:rationale>
575 <p>This makes it easy for user interfaces to see what practical
576 effect this method had.</p>
577 </tp:rationale>
578
579 <p>If the remote contact accepts the request, their subscribe
580 attribute will later change from Ask to Yes; if they explicitly
581 reject the request (in protocols that allow this), their subscribe
582 attribute will later change from Ask to No.</p>
583 </tp:docstring>
584
585 <arg name="Contacts" direction="in"
586 type="au" tp:type="Contact_Handle[]">
587 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
588 <p>One or more contacts to whom requests are to be sent.</p>
589 </tp:docstring>
590 </arg>
591
592 <arg name="Message" type="s" direction="in">
593 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
594 <p>An optional plain-text message from the user, to send to those
595 contacts with the subscription request. The
596 <tp:member-ref>RequestUsesMessage</tp:member-ref> property
597 indicates whether this message will be used or ignored.</p>
598
599 <p>Clients SHOULD NOT send a non-empty message without first giving
600 the user an opportunity to edit it.</p>
601
602 <tp:rationale>
603 <p>These messages are typically presented to the remote contact
604 as if the user had typed them, so as a minimum, the user should be
605 allowed to see what the UI will be saying on their behalf.</p>
606 </tp:rationale>
607
608 <p>Connections where this message is not useful MUST still allow it to
609 be non-empty.</p>
610 </tp:docstring>
611 </arg>
612
613 <tp:possible-errors>
614 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
615 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
616 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
617 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
618 <tp:docstring>
619 It was not possible to perform the requested action, because
620 <tp:member-ref>CanChangeSubscriptions</tp:member-ref> is false.
621 </tp:docstring>
622 </tp:error>
623 </tp:possible-errors>
624 </method>
625
626 <property name="RequestUsesMessage" type="b" access="read"
627 tp:name-for-bindings="Request_Uses_Message">
628 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
629 <p>If true, the Message parameter to
630 <tp:member-ref>RequestSubscription</tp:member-ref> is likely to be
631 significant, and user interfaces SHOULD prompt the user for a
632 message to send with the request; a message such as "I would like
633 to add you to my contact list", translated into the local user's
634 language, might make a suitable default.</p>
635
636 <tp:rationale>
637 <p>This matches user expectations in XMPP and ICQ, for instance.</p>
638 </tp:rationale>
639
640 <p>If false, the parameter is ignored; user interfaces SHOULD avoid
641 prompting the user, and SHOULD pass an empty string to
642 RequestSubscription.</p>
643
644 <tp:rationale>
645 <p><em>FIXME: is there any such protocol?</em></p>
646 </tp:rationale>
647 </tp:docstring>
648 </property>
649
650 <method name="AuthorizePublication"
651 tp:name-for-bindings="Authorize_Publication">
652 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
653 <p>For each of the given contacts, request that the local user's
654 presence is sent to that contact, i.e. that their publish attribute
655 becomes Yes.</p>
656
657 <p>For contacts with publish=Yes, this method has no effect; it
658 MUST return successfully if all contacts given have this state.</p>
659
660 <p>For contacts with publish=Ask, this method accepts the
661 contact's request to see the local user's presence, changing
662 their publish attribute from Ask to Yes.</p>
663
664 <p>For contacts with publish=No, if the protocol allows it, this
665 method allows the contacts to see the local user's presence even
666 though they have not requested it, changing their publish attribute
667 from No to Yes. Otherwise, it merely records the fact that
668 presence publication to those contacts is allowed; if any of
669 those contacts ask to receive the local user's presence
670 later in the lifetime of the connection, the connection SHOULD
671 immediately allow them to do so, changing their publish
672 attribute directly from No to Yes.</p>
673
674 <tp:rationale>
675 <p>This makes it easy to implement the common UI policy that if
676 the user attempts to subscribe to a contact's presence, requests
677 for reciprocal subscription are automatically approved.</p>
678 </tp:rationale>
679
680 <p>Any state changes that immediately result from this request MUST
681 be signalled via <tp:member-ref>ContactsChanged</tp:member-ref>
682 before this method returns.</p>
683
684 <tp:rationale>
685 <p>This makes it easy for user interfaces to see what practical
686 effect this method had.</p>
687 </tp:rationale>
688 </tp:docstring>
689
690 <arg name="Contacts" direction="in"
691 type="au" tp:type="Contact_Handle[]">
692 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
693 <p>One or more contacts to authorize.</p>
694 </tp:docstring>
695 </arg>
696
697 <tp:possible-errors>
698 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
699 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
700 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
701 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
702 <tp:docstring>
703 It was not possible to perform the requested action, because
704 <tp:member-ref>CanChangeSubscriptions</tp:member-ref> is false.
705 </tp:docstring>
706 </tp:error>
707 </tp:possible-errors>
708 </method>
709
710 <method name="RemoveContacts" tp:name-for-bindings="Remove_Contacts">
711 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
712 <p>Remove the given contacts from the contact list entirely. It is
713 protocol-dependent whether this works, and under which
714 circumstances.</p>
715
716 <p>If possible, this method SHOULD set the contacts' subscribe and
717 publish attributes to No, remove any stored aliases for those
718 contacts, and remove the contacts from the result of
719 <tp:member-ref>GetContactListAttributes</tp:member-ref>.</p>
720
721 <p>This method SHOULD succeed even if it was not possible to carry out
722 the request entirely or for all contacts (for instance, if there is an
723 outstanding request to subscribe to the contact's presence, and it's
724 not possible to cancel such requests). However, all signals that
725 immediately result from this method call MUST be emitted before it
726 returns, so that clients can interpret the result.</p>
727
728 <tp:rationale>
729 <p>User interfaces removing a contact from the contact list are
730 unlikely to want spurious failure notifications resulting from
731 limitations of a particular protocol. However, emitting the
732 signals first means that if a client does want to check exactly
733 what happened, it can wait for the method to return (while
734 applying change-notification signals to its local cache of the
735 contact list's state), then consult its local cache of the
736 contact list's state to see whether the contact is still there.</p>
737 </tp:rationale>
738 </tp:docstring>
739
740 <arg name="Contacts" direction="in"
741 type="au" tp:type="Contact_Handle[]">
742 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
743 <p>One or more contacts to remove.</p>
744 </tp:docstring>
745 </arg>
746
747 <tp:possible-errors>
748 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
749 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
750 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
751 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
752 <tp:docstring>
753 It was not possible to perform the requested action because
754 <tp:member-ref>CanChangeSubscriptions</tp:member-ref> is false.
755 </tp:docstring>
756 </tp:error>
757 </tp:possible-errors>
758 </method>
759
760 <method name="Unsubscribe" tp:name-for-bindings="Unsubscribe">
761 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
762 <p>Attempt to set the given contacts' subscribe attribute to No,
763 i.e. stop receiving their presence.</p>
764
765 <p>For contacts with subscribe=Ask, this attempts to cancel
766 an earlier request to subscribe to the contact's presence; for
767 contacts with subscribe=Yes, this attempts to
768 unsubscribe from the contact's presence.</p>
769
770 <p>As with <tp:member-ref>RemoveContacts</tp:member-ref>, this method
771 SHOULD succeed even if it was not possible to carry out the request
772 entirely or for all contacts; however, all signals that
773 immediately result from this method call MUST be emitted before it
774 returns.</p>
775 </tp:docstring>
776
777 <arg name="Contacts" direction="in"
778 type="au" tp:type="Contact_Handle[]">
779 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
780 <p>One or more contacts to remove.</p>
781 </tp:docstring>
782 </arg>
783
784 <tp:possible-errors>
785 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
786 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
787 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
788 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
789 <tp:docstring>
790 It was not possible to perform the requested action because
791 <tp:member-ref>CanChangeSubscriptions</tp:member-ref> is false.
792 </tp:docstring>
793 </tp:error>
794 </tp:possible-errors>
795 </method>
796
797 <method name="Unpublish" tp:name-for-bindings="Unpublish">
798 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
799 <p>Attempt to set the given contacts' publish attribute to No,
800 i.e. stop sending presence to them.</p>
801
802 <p>For contacts with publish=Ask, this method explicitly rejects the
803 contact's request to subscribe to the user's presence; for
804 contacts with publish=Yes, this method attempts to prevent the
805 user's presence from being received by the contact.</p>
806
807 <p>As with <tp:member-ref>RemoveContacts</tp:member-ref>, this method
808 SHOULD succeed even if it was not possible to carry out the request
809 entirely or for all contacts; however, all signals that
810 immediately result from this method call MUST be emitted before it
811 returns.</p>
812 </tp:docstring>
813
814 <arg name="Contacts" direction="in"
815 type="au" tp:type="Contact_Handle[]">
816 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
817 <p>One or more contacts to remove.</p>
818 </tp:docstring>
819 </arg>
820
821 <tp:possible-errors>
822 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
823 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
824 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
825 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
826 <tp:docstring>
827 It was not possible to perform the requested action because
828 <tp:member-ref>CanChangeSubscriptions</tp:member-ref> is false.
829 </tp:docstring>
830 </tp:error>
831 </tp:possible-errors>
832 </method>
833
834 </interface>
835 </node>
836 <!-- vim:set sw=2 sts=2 et ft=xml: -->
00 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Forwarding" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright> Copyright (C) 2005, 2006 Collabora Limited </tp:copyright>
3 <tp:copyright> Copyright (C) 2005, 2006 Nokia Corporation </tp:copyright>
4 <tp:copyright> Copyright (C) 2006 INdT </tp:copyright>
1 <node name="/Connection_Interface_Forwarding"
2 xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
3
4 <tp:copyright>Copyright © 2005-2010 Nokia Corporation</tp:copyright>
5 <tp:copyright>Copyright © 2005-2010 Collabora Ltd.</tp:copyright>
6 <tp:copyright>Copyright © 2006 INdT </tp:copyright>
57 <tp:license xmlns="http://www.w3.org/1999/xhtml">
68 <p>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.</p>
10
11 <p>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.</p>
15
16 <p>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 Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.</p>
12
13 <p>This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.</p>
17
18 <p>You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.</p>
1922 </tp:license>
20 <interface name="org.freedesktop.Telepathy.Connection.Interface.Forwarding"
21 tp:causes-havoc='not well-tested'>
22 <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
23 <signal name="ForwardingChanged" tp:name-for-bindings="Forwarding_Changed">
24 <arg name="Forward_To" type="u" tp:type="Contact_Handle">
25 <tp:docstring>
26 An integer contact handle to forward communication to
27 </tp:docstring>
28 </arg>
29 <tp:docstring>
30 Emitted when the forwarding contact handle for this connection has been
31 changed. An zero handle indicates forwarding is disabled.
32 </tp:docstring>
23
24 <interface name="org.freedesktop.Telepathy.Connection.Interface.Forwarding.DRAFT"
25 tp:causes-havoc="experimental">
26 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
27
28 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
29 <p>This connection interface is for protocols that are capable of
30 signaling to remote contacts that incoming communication channels
31 should be instead sent to a separate contact. This might apply to
32 things such as call forwarding, for example.</p>
33
34 <p>In some cases, a CM may register forwarding rules with an external
35 service; in those cases, it will never see the incoming channel, and
36 the forwarding will happen automatically.</p>
37
38 <p>In other cases, the CM will handle the forwarding itself. When an
39 incoming channel is detected, the status of the local user will
40 determine whether or not a forwarding rule is matched. For some
41 rules, this MAY happen immediately (ie, if the user is Busy); for
42 others, there MAY be a timeout (in seconds) that must expire
43 before the forwarding rule is matched (the timeout is specified
44 by the first element in the <tp:type>Forwarding_Rule_Entry</tp:type> list).</p>
45
46 <p>Once a forwarding rule is matched and any necessary timeouts have
47 expired, the CM can forward the incoming channel to the specified
48 handle. If for whatever reason the remote handle does not accept
49 the channel AND the CM supports multiple forwarding entries AND
50 any necessary timeouts have expired (specified by the next entry
51 in the list), the CM can forward the incoming channel to the next
52 handle in the entry list. This continues until the list is
53 exhausted, or the incoming channel is accepted.</p>
54
55 <p>Note that the rule matches are only for the first entry in the
56 in the forwarding rule list. Once the incoming channel has been
57 forwarded, the next entry in the list (assuming one exists and
58 the contact that the channel has been forwarded to does not respond
59 after any necessary timeouts) is used regardless of the status of
60 the forwarded channel. The initial match rule might have been
61 Busy, whereas the contact that the channel has been forwarded to
62 might be offline. Even in this case, the Busy list is still
63 traversed until the channel is handled (or there are no more
64 forwarding entries in the list).</p>
65
66 <p>For example, assuming the following dict for Forwarding_Rules:</p>
67 <pre>
68 ForwardingRules = {
69 Busy: ( initial-timeout: 30, [
70 (handle: 3, timeout: 15),
71 (handle: 5, timeout: 20)
72 ]),
73 NoReply: ( initial-timeout: 15, [
74 (handle: 5, timeout: 30),
75 (handle: 3, timeout: 20)
76 ])
77 }</pre>
78
79 <p>We can imagine a scenario where an incoming channel is detected,
80 the media stream is available (ie, not Busy),
81 and the local user is online. While the CM is waiting for the local user to
82 accept the channel, it looks at NoReply's first timeout value. After 15s if
83 the local user hasn't accepted, the CM forwards the channel to Handle #5. The
84 CM then waits 30s for Handle #5 to accept the channel. If after 30s it does
85 not, the CM forwards the incoming channel to Handle #3, which will have
86 20s to accept the channel.</p>
87 </tp:docstring>
88
89 <tp:enum name="Forwarding_Condition" type="u">
90 <tp:docstring>
91 The various forwarding conditions that are supported by this interface.
92 In general, the conditions should not overlap; it should be very clear
93 which rule would be chosen given a CM's behavior with an incoming
94 channel. The exception to this is Unconditional,
95 which will override all other rules.
96 </tp:docstring>
97
98 <tp:enumvalue value="0" suffix="Unconditional">
99 <tp:docstring>
100 Incoming channels should always be forwarded. Note that setting this
101 will override any other rules. If not set, other rules will
102 be checked when an incoming communication channel is detected.
103 </tp:docstring>
104 </tp:enumvalue>
105
106 <tp:enumvalue value="1" suffix="Busy">
107 <tp:docstring>
108 <p>The incoming channel should be forwarded if a busy signal is
109 detected. What defines "Busy" is CM-specific (perhaps a single
110 resource is already in use, or a user's status is set to Busy
111 <tp:type>Connection_Presence_Type</tp:type>).</p>
112 <p>If initial timeout is specified for Busy condition and call
113 waiting is not supported by the service, the timeout will be
114 ignored.</p>
115 </tp:docstring>
116 </tp:enumvalue>
117
118 <tp:enumvalue value="2" suffix="No_Reply">
119 <tp:docstring>
120 The incoming channel should be forwarded if the local user doesn't
121 accept it within the specified amount of time.
122 </tp:docstring>
123 </tp:enumvalue>
124
125 <tp:enumvalue value="3" suffix="Not_Reachable">
126 <tp:docstring>
127 The incoming channel should be forwarded if the user is offline.
128 This could be a manual setting (the user has chosen to set their
129 presence to offline or invisible) or something specified by the
130 underlying network (the user is not within range of a cell tower).
131 </tp:docstring>
132 </tp:enumvalue>
133 </tp:enum>
134
135 <tp:struct name="Forwarding_Rule_Entry"
136 array-name="Forwarding_Rule_Entry_List">
137 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
138 <p>A forwarding rule entry. These MAY be chained together
139 for CMs that support chaining of forwards (in other words,
140 a forwarding rule may have multiple entries; if the contact
141 in the first entry doesn't respond, the incoming channel
142 might be forwarded to the contact in the second entry).</p>
143
144 <p>For CMs and protocols that don't support chaining of
145 entries, only the first entry would be used.</p>
146 </tp:docstring>
147
148 <tp:member type="u" name="Timeout">
149 <tp:docstring>
150 <p>The length of time (in seconds) to wait the contact to respond
151 to the forwarded channel. This MAY be ignored by the CM if it
152 isn't supported by the underlying network/protocol for the
153 specific status of the remote contact (for example, a GSM call
154 that is forwarded may return Not_Reachable immediately without
155 waiting for the timeout value to expire).</p>
156 <p>A value of 0 means the condition can match immediately. A
157 value of MAX_UINT32 means that the CM's default should be
158 used.</p>
159 </tp:docstring>
160 </tp:member>
161
162 <tp:member type="u" tp:type="Contact_Handle" name="Handle">
163 <tp:docstring>
164 The contact to forward an incoming channel to. If the handle
165 doesn't point to anything (e.g. points to a phone number that
166 doesn't exist), the entry SHOULD be skipped.
167 </tp:docstring>
168 </tp:member>
169 </tp:struct>
170
171 <tp:struct name="Forwarding_Rule_Chain">
172 <tp:docstring>
173 A chain of forwarding rules and an initial timeout after which
174 the rules are applied.
175 </tp:docstring>
176
177 <tp:member type="u" name="InitialTimeout">
178 <tp:docstring>Initial timeout for the rule.</tp:docstring>
179 </tp:member>
180
181 <tp:member type="a(uu)" name="Rules" tp:type="Forwarding_Rule_Entry[]">
182 <tp:docstring>The forwarding targets (an array of type
183 <tp:type>Forwarding_Rule_Entry</tp:type>).
184 </tp:docstring>
185 </tp:member>
186 </tp:struct>
187
188 <tp:mapping name="Forwarding_Rule_Map" array-name="">
189 <tp:docstring>A dictionary whose keys are forwarding conditions and
190 whose values are <tp:type>Forwarding_Rule_Chain</tp:type> structs.
191 </tp:docstring>
192
193 <tp:member type="u" tp:type="Forwarding_Condition" name="Condition" />
194 <tp:member type="(ua(uu))" tp:type="Forwarding_Rule_Chain"
195 name="Rule_Chain" />
196 </tp:mapping>
197
198 <tp:mapping name="Supported_Forwarding_Conditions_Map" array-name="">
199 <tp:docstring>A dictionary whose keys are forwarding conditions and
200 whose values are maximum number of <tp:type>Forwarding_Rule_Entry</tp:type>
201 for the condition.
202 </tp:docstring>
203 <tp:member type="u" tp:type="Forwarding_Condition" name="Condition" />
204 <tp:member type="u" name="Chain_Length" />
205 </tp:mapping>
206
207 <property name="SupportedForwardingConditions" type="a{uu}" access="read"
208 tp:type="Supported_Forwarding_Conditions_Map"
209 tp:name-for-bindings="Supported_Forwarding_Conditions">
210 <tp:docstring>
211 <p>
212 A map of forwarding conditions supported on this connection to
213 maximum number of <tp:type>Forwarding_Rule_Entry</tp:type>
214 supported for the specific condition.
215 <tp:rationale>
216 When forwarding is done by the provider, different providers
217 might support different chain sizes, or provider and local
218 implementation chain sizes might differ.
219 </tp:rationale>
220 </p>
221 </tp:docstring>
222 </property>
223
224 <property name="ForwardingRules" type="a{u(ua(uu))}" access="read"
225 tp:type="Forwarding_Rule_Map" tp:name-for-bindings="Forwarding_Rules">
226 <tp:docstring>
227 <p>The current forwarding rules that are enabled for this connection.
228 Forwarding rules each contain an array of type
229 <tp:type>Forwarding_Rule_Entry</tp:type>.</p>
230 </tp:docstring>
231 </property>
232
233 <signal name="ForwardingRuleChanged"
234 tp:name-for-bindings="Forwarding_Rule_Changed">
235 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
236 <p>Emitted when the <tp:member-ref>ForwardingRules</tp:member-ref> property changes.</p>
237
238 <p>By the time this is emitted, the property MUST have been updated
239 with the new rules being active. If any protocol/network
240 requests must be made, they should be completed before the signal
241 is emitted.</p>
242 </tp:docstring>
243
244 <arg name="Condition" type="u" tp:type="Forwarding_Condition">
245 <tp:docstring>
246 The condition of the forwarding rule that's been changed.
247 </tp:docstring>
248 </arg>
249
250 <arg name="Timeout" type="u">
251 <tp:docstring>
252 The new initial timeout for the rule.
253 </tp:docstring>
254 </arg>
255
256 <arg name="Forwards" type="a(uu)" tp:type="Forwarding_Rule_Entry[]">
257 <tp:docstring>
258 The new (and as of the emission of the signal, currently active)
259 forwards. The order is relevant; those at the lowest array index
260 are used first.
261 </tp:docstring>
262 </arg>
33263 </signal>
34 <method name="GetForwardingHandle"
35 tp:name-for-bindings="Get_Forwarding_Handle">
36 <arg direction="out" type="u" tp:type="Contact_Handle">
37 <tp:docstring>
38 An integer contact handle to whom incoming communication is forwarded
39 </tp:docstring>
40 </arg>
41 <tp:docstring>
42 Returns the current forwarding contact handle, or zero if none is set.
43 </tp:docstring>
264
265 <method name="SetForwardingRule" tp:name-for-bindings="Set_Forwarding_Rule">
266 <tp:docstring>
267 Update the forwarding rules.
268 </tp:docstring>
269
270 <arg direction="in" name="Condition" type="u" tp:type="Forwarding_Condition">
271 <tp:docstring>
272 <p>The forwarding rule to override. Note that this SHOULD not affect
273 other rules; setting a rule that overrides others (such as
274 Forwarding_Rule_Unconditional) will not modify other rules. This
275 means that when a client sets Forwarding_Rule_Busy and then
276 temporarily sets Forwarding_Rule_Unconditional, the
277 Forwarding_Rule_Busy rule will retain settings after
278 Forwarding_Rule_Unconditional, has been unset.</p>
279
280 <p>If the CM has no choice but to adjust multiple rules after a call
281 to this function (ie, due to the network or protocol forcing such
282 behavior), the CM MUST emit multiple <tp:member-ref>ForwardingRuleChanged</tp:member-ref>
283 signals for each changed rule. The order of the signals is
284 implementation-dependent, with the only requirement that the
285 last signal is for the rule that was originally requested to have
286 been changed (e.g. if Unconditional automatically modifies
287 Busy and NoReply, three
288 separate <tp:member-ref>ForwardingRuleChanged</tp:member-ref> signals should be raised with the
289 last signal being for Forwarding_Rule_Unconditional).</p>
290
291 <p>Each forwarding condition will occur no more than once in
292 the rule array. Setting a rule will overwrite the old rule
293 with the same <tp:type>Forwarding_Condition</tp:type> in its entirety.</p>
294 </tp:docstring>
295 </arg>
296
297 <arg direction="in" name="Forwards" type="a(uu)" tp:type="Forwarding_Rule_Entry[]">
298 <tp:docstring>
299 The forwarding targets (an array of type <tp:type>Forwarding_Rule_Entry</tp:type>) to
300 activate for the rule. An empty array will effectively disable the
301 rule.
302 </tp:docstring>
303 </arg>
304
305 <arg direction="out" name="Old_Forwards" type="a(uu)" tp:type="Forwarding_Rule_Entry[]">
306 <tp:docstring>
307 The old forwarding targets (an array of type <tp:type>Forwarding_Rule_Entry</tp:type>).
308 This is the list of entries that is being replaced with the call to
309 <tp:member-ref>SetForwardingRule</tp:member-ref>.
310 </tp:docstring>
311 </arg>
44312 <tp:possible-errors>
45313 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
46314 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
47 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
315 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
316 <tp:docstring>
317 The specified Condition is not supported by this connection,
318 or the number of chained
319 <tp:member-ref>SupportedForwardingConditions</tp:member-ref> should
320 be checked prior to calling
321 <tp:member-ref>SetForwardingRule</tp:member-ref>.
322 </tp:docstring>
323 </tp:error>
324 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle">
325 <tp:docstring>
326 A Handle that has been supplied is invalid.
327 </tp:docstring>
328 </tp:error>
48329 </tp:possible-errors>
49330 </method>
50 <method name="SetForwardingHandle"
51 tp:name-for-bindings="Set_Forwarding_Handle">
52 <arg direction="in" name="Forward_To" type="u" tp:type="Contact_Handle">
53 <tp:docstring>
54 An integer contact handle to forward incoming communications to
55 </tp:docstring>
56 </arg>
57 <tp:docstring>
58 Set a contact handle to forward incoming communications to. A zero
59 handle disables forwarding.
60 </tp:docstring>
61 <tp:possible-errors>
62 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
63 <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
64 <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
65 <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
66 <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
67 </tp:possible-errors>
68 </method>
69 <tp:docstring>
70 A connection interface for services which can signal to contacts
71 that they should instead contact a different user ID, effectively
72 forwarding all incoming communication channels to another contact on
73 the service.
74 </tp:docstring>
331
75332 </interface>
76333 </node>
77334 <!-- vim:set sw=2 sts=2 et ft=xml: -->
364364
365365 <tp:possible-errors>
366366 <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
367 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented"/>
367 <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
368 <tp:docstring>
369 The user's server does not support publishing their own location.
370 If it is possible to determine this ahead of time, the
371 <code>Can_Set</code> flag will not be set in
372 <tp:member-ref>SupportedLocationFeatures</tp:member-ref>.
373 </tp:docstring>
374 </tp:error>
368375 <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
369376 </tp:possible-errors>
370377 </method>
384391 supported).</tp:docstring>
385392 </property>
386393
394 <property name="SupportedLocationFeatures"
395 tp:name-for-bindings="Supported_Location_Features"
396 type="u" tp:type="Location_Features" access="read">
397 <tp:added version="0.19.6"/>
398 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
399 Indicates the Location features supported by this connection. This
400 property MAY be undefined before <tp:dbus-ref
401 namespace="org.freedesktop.Telepathy.Connection">Status</tp:dbus-ref>
402 becomes <code>Connected</code>, but MUST remain constant thereafter.
403 </tp:docstring>
404 </property>
405
406 <tp:flags name="Location_Features" type="u" value-prefix="Location_Feature">
407 <tp:flag suffix="Can_Set" value="1">
408 <tp:docstring>
409 Indicates that setting your own location with
410 <tp:member-ref>SetLocation</tp:member-ref> is supported on this
411 connection.
412 </tp:docstring>
413 </tp:flag>
414
415 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
416 Flags describing the Location features which may be supported on any
417 given connection.
418 </tp:docstring>
419 </tp:flags>
420
387421 <tp:contact-attribute name="location"
388422 type="a{sv}" tp:type="Location">
389423 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
158158 </tp:struct>
159159
160160 <tp:struct name="Mail_Address" array-name="Mail_Address_List">
161 <tp:docstring>
162 A pair (name, address) representing an e-mail address,
163 such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk").
161 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
162 <p>A pair (name, address) representing an e-mail address,
163 such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk"). At
164 least one of name and address MUST be provided. A missing element will
165 be represented by the empty string.</p>
166 <tp:rationale>
167 <p>The CM should provide as much information as possible, but not all
168 protocols provide both the displayed name and the address. (If a
169 protocol doesn't provide either, it should omit the appropriate
170 field from the <tp:type>Mail</tp:type> entirely.)</p>
171 </tp:rationale>
164172 </tp:docstring>
165173 <tp:member type="s" name="Name">
166174 <tp:docstring>The displayed name corresponding to the e-mail
0 <?xml version="1.0" ?>
1 <node name="/Connection_Interface_Service_Point" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
2 <tp:copyright> Copyright © 2005-2010 Nokia Corporation </tp:copyright>
3 <tp:copyright> Copyright © 2005-2010 Collabora Ltd </tp:copyright>
4 <tp:license xmlns="http://www.w3.org/1999/xhtml">
5 <p>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.</p>
9
10 <p>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.</p>
14
15 <p>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 Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
18 </tp:license>
19 <interface name="org.freedesktop.Telepathy.Connection.Interface.ServicePoint.DRAFT" tp:causes-havoc="experimental">
20 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
21
22 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
23 <p>An interface for connections whose channels may be able to indicate
24 specific they are connected to some form
25 of service station. For example, when
26 dialing 9-1-1 in the US, a GSM modem/network will recognize that as
27 an emergency call, and inform higher levels of the stack that the
28 call is being handled by an emergency service. In this example,
29 the call is handled by a Public Safety Answering Point (PSAP) which is labeled
30 as "urn:service:sos". Other networks and protocols may handle this
31 differently while still using this interface.</p>
32 </tp:docstring>
33
34 <tp:struct name="Service_Point_Info" array-name="Service_Point_Info_List">
35 <tp:member type="(us)" tp:type="Service_Point" name="ServicePoint">
36 <tp:docstring>
37 The service point.
38 </tp:docstring>
39 </tp:member>
40 <tp:member type="as" name="ServiceIDs">
41 <tp:docstring>
42 A list of IDs that are mapped to this service. This is provided as
43 a convenience for the UIs, but the preferred method for
44 requesting channel to a service is by setting <tp:dbus-ref
45 namespace="org.freedesktop.Telepathy.Channel.Interface.ServicePoint.DRAFT">InitialServicePoint</tp:dbus-ref>
46 property in channel request.
47 </tp:docstring>
48 </tp:member>
49 <tp:docstring>
50 <p>Description of a service point and IDs which are mapped to id.</p>
51
52 <p>An example Service Point info for GSM emergency calls (callable through
53 "911" and "112") could look like:</p>
54
55 <pre>
56 ServicePointInfo = (
57 ServicePoint: (
58 ServicePointType: 1 (Emergency),
59 ServicePoint: "urn:service:sos"
60 ),
61 ServiceIDs: [ "911", "112" ]
62 )
63 </pre>
64 </tp:docstring>
65 </tp:struct>
66
67 <property name="KnownServicePoints" tp:name-for-bindings="Known_Service_Points"
68 type="a((us)as)" tp:type="Service_Point_Info[]" access="read">
69 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
70 The list of all (known) service points.
71 </tp:docstring>
72 </property>
73
74 <signal name="ServicePointsChanged" tp:name-for-bindings="Service_Points_Changed">
75 <arg name="ServicePoints" type="a((us)as)" tp:type="Service_Point_Info[]">
76 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
77 <p>The new list of service points.</p>
78 </tp:docstring>
79 </arg>
80 <tp:docstring>
81 Indicate that the list of known service points (or their IDs) have
82 changed, presenting the new list.
83 </tp:docstring>
84 </signal>
85
86 <tp:struct name="Service_Point">
87 <tp:docstring>A service point.</tp:docstring>
88 <tp:member type="u" name="ServicePointType" tp:type="Service_Point_Type">
89 <tp:docstring>
90 The service type.
91 </tp:docstring>
92 </tp:member>
93 <tp:member type="s" name="Service">
94 <tp:docstring>
95 String representation of the service point. The representation is
96 service specific; it may be <tp:type>Uniform_Resource_Name</tp:type>
97 or may be in some other form. Empty, unused or unknown value is
98 represented by "".
99 </tp:docstring>
100 </tp:member>
101 </tp:struct>
102
103 <tp:enum name="Service_Point_Type" type="u">
104 <tp:docstring>
105 The various types of service points the channel might connect to.
106 </tp:docstring>
107
108 <tp:enumvalue value="0" suffix="None">
109 <tp:docstring>
110 The service point is not used/available.
111 </tp:docstring>
112 </tp:enumvalue>
113
114 <tp:enumvalue value="1" suffix="Emergency">
115 <tp:docstring>
116 The service point is a generic emergency point.
117 </tp:docstring>
118 </tp:enumvalue>
119
120 <tp:enumvalue value="2" suffix="Counseling">
121 <tp:docstring>
122 The service point is some kind of counseling service (ie, mental health
123 or child-services counseling).
124 </tp:docstring>
125 </tp:enumvalue>
126 </tp:enum>
127
128 <tp:simple-type name="Uniform_Resource_Name" type="s">
129 <tp:docstring>Uniform Resource Name as specified by
130 <a href="http://www.rfc-editor.org/rfc/rfc5031.txt">RFC 5031</a>.</tp:docstring>
131 </tp:simple-type>
132 </interface>
133 </node>
134 <!-- vim:set sw=2 sts=2 et ft=xml: -->
44 all.xml \
55 Call_Content.xml \
66 Call_Content_Interface_Media.xml \
7 Call_Content_Interface_Mute.xml \
78 Call_Content_Codec_Offer.xml \
89 Call_Stream.xml \
910 Call_Stream_Interface_Media.xml \
1314 Channel_Dispatcher_Interface_Operation_List.xml \
1415 Channel_Future.xml \
1516 Channel_Handler.xml \
17 Channel_Interface_Anonymity.xml \
1618 Channel_Interface_Call_State.xml \
1719 Channel_Interface_Chat_State.xml \
1820 Channel_Interface_Conference.xml \
2527 Channel_Interface_Mergeable_Conference.xml \
2628 Channel_Interface_Messages.xml \
2729 Channel_Interface_Password.xml \
30 Channel_Interface_Service_Point.xml \
2831 Channel_Interface_Splittable.xml \
2932 Channel_Interface_Transfer.xml \
3033 Channel_Interface_Tube.xml \
4851 Client_Observer.xml \
4952 Connection_Future.xml \
5053 Connection_Interface_Aliasing.xml \
54 Connection_Interface_Anonymity.xml \
5155 Connection_Interface_Avatars.xml \
5256 Connection_Interface_Balance.xml \
5357 Connection_Interface_Capabilities.xml \
58 Connection_Interface_Cellular.xml \
5459 Connection_Interface_Contact_Capabilities.xml \
60 Connection_Interface_Contact_Groups.xml \
5561 Connection_Interface_Contact_Info.xml \
62 Connection_Interface_Contact_List.xml \
5663 Connection_Interface_Contacts.xml \
5764 Connection_Interface_Forwarding.xml \
5865 Connection_Interface_Location.xml \
6168 Connection_Interface_Privacy.xml \
6269 Connection_Interface_Renaming.xml \
6370 Connection_Interface_Requests.xml \
71 Connection_Interface_Service_Point.xml \
6472 Connection_Interface_Simple_Presence.xml \
6573 Connection_Manager.xml \
6674 Connection.xml \
138138 PACKAGE_VERSION = @PACKAGE_VERSION@
139139 PATH_SEPARATOR = @PATH_SEPARATOR@
140140 PKG_CONFIG = @PKG_CONFIG@
141 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
142 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
141143 PYTHON = @PYTHON@
142144 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
143145 PYTHON_PLATFORM = @PYTHON_PLATFORM@
215217 all.xml \
216218 Call_Content.xml \
217219 Call_Content_Interface_Media.xml \
220 Call_Content_Interface_Mute.xml \
218221 Call_Content_Codec_Offer.xml \
219222 Call_Stream.xml \
220223 Call_Stream_Interface_Media.xml \
224227 Channel_Dispatcher_Interface_Operation_List.xml \
225228 Channel_Future.xml \
226229 Channel_Handler.xml \
230 Channel_Interface_Anonymity.xml \
227231 Channel_Interface_Call_State.xml \
228232 Channel_Interface_Chat_State.xml \
229233 Channel_Interface_Conference.xml \
236240 Channel_Interface_Mergeable_Conference.xml \
237241 Channel_Interface_Messages.xml \
238242 Channel_Interface_Password.xml \
243 Channel_Interface_Service_Point.xml \
239244 Channel_Interface_Splittable.xml \
240245 Channel_Interface_Transfer.xml \
241246 Channel_Interface_Tube.xml \
259264 Client_Observer.xml \
260265 Connection_Future.xml \
261266 Connection_Interface_Aliasing.xml \
267 Connection_Interface_Anonymity.xml \
262268 Connection_Interface_Avatars.xml \
263269 Connection_Interface_Balance.xml \
264270 Connection_Interface_Capabilities.xml \
271 Connection_Interface_Cellular.xml \
265272 Connection_Interface_Contact_Capabilities.xml \
273 Connection_Interface_Contact_Groups.xml \
266274 Connection_Interface_Contact_Info.xml \
275 Connection_Interface_Contact_List.xml \
267276 Connection_Interface_Contacts.xml \
268277 Connection_Interface_Forwarding.xml \
269278 Connection_Interface_Location.xml \
272281 Connection_Interface_Privacy.xml \
273282 Connection_Interface_Renaming.xml \
274283 Connection_Interface_Requests.xml \
284 Connection_Interface_Service_Point.xml \
275285 Connection_Interface_Simple_Presence.xml \
276286 Connection_Manager.xml \
277287 Connection.xml \
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.5</tp:version>
5 <tp:version>0.19.6</tp:version>
66
77 <tp:copyright>Copyright © 2005-2010 Collabora Limited</tp:copyright>
88 <tp:copyright>Copyright © 2005-2010 Nokia Corporation</tp:copyright>
4141 <xi:include href="Connection.xml"/>
4242 <xi:include href="Connection_Future.xml"/>
4343 <xi:include href="Connection_Interface_Aliasing.xml"/>
44 <xi:include href="Connection_Interface_Anonymity.xml"/>
4445 <xi:include href="Connection_Interface_Avatars.xml"/>
4546 <xi:include href="Connection_Interface_Balance.xml"/>
4647 <xi:include href="Connection_Interface_Capabilities.xml"/>
48 <xi:include href="Connection_Interface_Cellular.xml"/>
4749 <xi:include href="Connection_Interface_Contact_Capabilities.xml"/>
50 <xi:include href="Connection_Interface_Contact_Groups.xml"/>
4851 <xi:include href="Connection_Interface_Contact_Info.xml"/>
52 <xi:include href="Connection_Interface_Contact_List.xml"/>
4953 <xi:include href="Connection_Interface_Contacts.xml"/>
54 <xi:include href="Connection_Interface_Forwarding.xml"/>
5055 <xi:include href="Connection_Interface_Location.xml"/>
56 <xi:include href="Connection_Interface_Service_Point.xml"/>
5157 <xi:include href="Connection_Interface_Mail_Notification.xml"/>
5258 <xi:include href="Connection_Interface_Presence.xml"/>
5359 <xi:include href="Connection_Interface_Renaming.xml"/>
98104 depending on its type:
99105 </p>
100106 </tp:docstring>
107 <xi:include href="Channel_Interface_Anonymity.xml"/>
101108 <xi:include href="Channel_Interface_Call_State.xml"/>
102109 <xi:include href="Channel_Interface_Chat_State.xml"/>
103110 <xi:include href="Channel_Interface_Conference.xml"/>
106113 <xi:include href="Channel_Interface_Group.xml"/>
107114 <xi:include href="Channel_Interface_Hold.xml"/>
108115 <xi:include href="Channel_Interface_HTML.xml"/>
116 <xi:include href="Channel_Interface_Service_Point.xml"/>
109117 <xi:include href="Channel_Interface_Password.xml"/>
110118 <xi:include href="Channel_Interface_Media_Signalling.xml"/>
111119 <xi:include href="Channel_Interface_Mergeable_Conference.xml"/>
123131 <tp:section name="Calls">
124132 <xi:include href="Call_Content.xml"/>
125133 <xi:include href="Call_Content_Interface_Media.xml"/>
134 <xi:include href="Call_Content_Interface_Mute.xml"/>
126135 <xi:include href="Call_Content_Codec_Offer.xml"/>
127136 <xi:include href="Call_Stream.xml"/>
128137 <xi:include href="Call_Stream_Interface_Media.xml"/>
184193 <xi:include href="errors.xml"/>
185194 <xi:include href="generic-types.xml"/>
186195
187 <!-- Never implemented, insufficient (needs conditions)
188 <xi:include href="Connection_Interface_Forwarding.xml"/> -->
189196 <!-- Never implemented, vague
190197 <xi:include href="Connection_Interface_Privacy.xml"/> -->
191198 <!-- Causes havoc, never implemented, unclear requirements
00 <?xml version="1.0" ?>
11 <tp:errors xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" namespace="org.freedesktop.Telepathy.Error">
2
3 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
4 <p>The D-Bus errors used in Telepathy all start with
5 <code>org.freedesktop.Telepathy.Error.</code>. They are used in
6 D-Bus messages of type ERROR, and also as plain strings annotated with
7 the <tp:type>DBus_Error_Name</tp:type> type.</p>
8
9 <p>In principle, any method can raise any error (this is a general fact
10 of IPC). For instance, generic D-Bus errors starting with
11 <code>org.freedesktop.DBus.Error.</code> will occur in some
12 situations.</p>
13
14 <p>Telepathy methods can also raise implementation-specific errors to
15 indicate specialized failure conditions. For better interoperability,
16 if a suitable Telepathy error exists, it should be preferred.</p>
17
18 <p>The namespace <code>org.freedesktop.Telepathy.Qt4.Error.</code>
19 is reserved for use by the D-Bus client implementation in telepathy-qt4,
20 which uses it to represent certain error situations that did not involve
21 a D-Bus ERROR message. These errors are defined and documented as part of
22 telepathy-qt4's C++ API, and should not be used on D-Bus.</p>
23 </tp:docstring>
24
225 <tp:error name="Network Error">
326 <tp:docstring>
427 Raised when there is an error reading from or writing to the network.
164164 </tp:member>
165165 </tp:struct>
166166
167 <tp:simple-type name="User_Action_Timestamp" type="x">
168 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
169 <p>The time at which an user action occurred. This type has the 2
170 following special values:</p>
171
172 <p>0: the action doesn't involve any user action. Clients
173 SHOULD avoid stealing focus when presenting the channel.</p>
174
175 <p>MAX_INT64: clients SHOULD behave as though the user action happened
176 at the current time, e.g. a client MAY request that its window gains
177 focus.
178 </p>
179
180 <tp:rationale>
181 <p>This can be used by clients that can't know the X server time like
182 command line applications for example.</p>
183 </tp:rationale>
184
185 <p>For all the other values it corresponds to the time of the user
186 action. Clients SHOULD use this for focus-stealing prevention,
187 if applicable.
188 Note that the time is dependant on the local
189 environment and so is not necessarily a wall-clock time.
190 For example in an X environment it's expected to be the X timestamp
191 of events.
192 This corresponds to the _NET_WM_USER_TIME property in
193 <a href="http://standards.freedesktop.org/wm-spec/wm-spec-latest.html">EWMH</a>.</p>
194 </tp:docstring>
195 </tp:simple-type>
196
167197 </tp:generic-types>
5555 group-mixin.h \
5656 gtypes.h \
5757 handle.h \
58 handle-channels-context.h \
5859 handle-repo.h \
5960 handle-repo-static.h \
6061 handle-repo-dynamic.h \
7071 proxy-subclass.h \
7172 run.h \
7273 simple-approver.h \
74 simple-handler.h \
7375 simple-observer.h \
7476 svc-account.h \
7577 svc-account-manager.h \
149151 group-mixin.c \
150152 gtypes.c \
151153 handle.c \
154 handle-channels-context-internal.h \
155 handle-channels-context.c \
152156 handle-repo.c \
153157 handle-repo-dynamic.c \
154158 handle-repo-internal.h \
171175 run.c \
172176 signals-marshal.list \
173177 simple-approver.c \
178 simple-handler.c \
174179 simple-observer.c \
175180 text-mixin.c \
176181 util.c \
111111 contacts-mixin.lo dbus.lo dbus-daemon.lo \
112112 dbus-properties-mixin.lo debug.lo debug-sender.lo \
113113 interfaces.lo errors.lo exportable-channel.lo gnio-util.lo \
114 group-mixin.lo gtypes.lo handle.lo handle-repo.lo \
115 handle-repo-dynamic.lo handle-repo-static.lo handle-set.lo \
116 heap.lo intset.lo channel-iface.lo channel-factory-iface.lo \
117 media-interfaces.lo message-mixin.lo \
114 group-mixin.lo gtypes.lo handle.lo handle-channels-context.lo \
115 handle-repo.lo handle-repo-dynamic.lo handle-repo-static.lo \
116 handle-set.lo heap.lo intset.lo channel-iface.lo \
117 channel-factory-iface.lo media-interfaces.lo message-mixin.lo \
118118 observe-channels-context.lo presence-mixin.lo \
119119 properties-mixin.lo proxy.lo proxy-methods.lo proxy-signals.lo \
120 run.lo simple-approver.lo simple-observer.lo text-mixin.lo \
121 util.lo
120 run.lo simple-approver.lo simple-handler.lo simple-observer.lo \
121 text-mixin.lo util.lo
122122 nodist_libtelepathy_glib_internal_la_OBJECTS = error-str.lo \
123123 signals-marshal.lo genums.lo tp-svc-account.lo \
124124 tp-svc-account-manager.lo tp-svc-channel.lo \
255255 PACKAGE_VERSION = @PACKAGE_VERSION@
256256 PATH_SEPARATOR = @PATH_SEPARATOR@
257257 PKG_CONFIG = @PKG_CONFIG@
258 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
259 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
258260 PYTHON = @PYTHON@
259261 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
260262 PYTHON_PLATFORM = @PYTHON_PLATFORM@
379381 group-mixin.h \
380382 gtypes.h \
381383 handle.h \
384 handle-channels-context.h \
382385 handle-repo.h \
383386 handle-repo-static.h \
384387 handle-repo-dynamic.h \
394397 proxy-subclass.h \
395398 run.h \
396399 simple-approver.h \
400 simple-handler.h \
397401 simple-observer.h \
398402 svc-account.h \
399403 svc-account-manager.h \
464468 group-mixin.c \
465469 gtypes.c \
466470 handle.c \
471 handle-channels-context-internal.h \
472 handle-channels-context.c \
467473 handle-repo.c \
468474 handle-repo-dynamic.c \
469475 handle-repo-internal.h \
486492 run.c \
487493 signals-marshal.list \
488494 simple-approver.c \
495 simple-handler.c \
489496 simple-observer.c \
490497 text-mixin.c \
491498 util.c \
544551 versions/0.11.1.abi \
545552 versions/0.11.3.abi \
546553 versions/0.11.4.abi \
547 versions/0.11.5.abi
554 versions/0.11.5.abi \
555 versions/0.11.6.abi
548556
549557
550558 # The quoting here is unnecessary but harmless, and has the useful side-effect
678686 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/connection-manager.c $(srcdir)/connection-manager.h \
679687 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/channel.c $(srcdir)/channel.h \
680688 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/handle.c $(srcdir)/handle.h \
689 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/handle-channels-context.c $(srcdir)/handle-channels-context.h \
681690 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/dbus-daemon.c $(srcdir)/dbus-daemon.h \
682691 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/interfaces.c $(srcdir)/interfaces.h \
683692 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/intset.c $(srcdir)/intset.h \
688697 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/debug.c $(srcdir)/debug.h \
689698 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/base-client.c $(srcdir)/base-client.h \
690699 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/simple-approver.c $(srcdir)/simple-approver.h \
700 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/simple-handler.c $(srcdir)/simple-handler.h \
691701 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/simple-observer.c $(srcdir)/simple-observer.h \
692702 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/dbus-properties-mixin.c $(srcdir)/dbus-properties-mixin.h \
693703 @HAVE_INTROSPECTION_TRUE@ $(srcdir)/channel-dispatch-operation.c $(srcdir)/channel-dispatch-operation.h \
824834 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnio-util.Plo@am__quote@
825835 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group-mixin.Plo@am__quote@
826836 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtypes.Plo@am__quote@
837 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handle-channels-context.Plo@am__quote@
827838 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handle-repo-dynamic.Plo@am__quote@
828839 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handle-repo-static.Plo@am__quote@
829840 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handle-repo.Plo@am__quote@
843854 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run.Plo@am__quote@
844855 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals-marshal.Plo@am__quote@
845856 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-approver.Plo@am__quote@
857 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-handler.Plo@am__quote@
846858 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-observer.Plo@am__quote@
847859 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-mixin.Plo@am__quote@
848860 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-svc-account-manager.Plo@am__quote@
15511563 @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_FILES)
15521564 @HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)$(INTROSPECTION_SCANNER) -v \
15531565 @HAVE_INTROSPECTION_TRUE@ --namespace TelepathyGLib \
1554 @HAVE_INTROSPECTION_TRUE@ --nsversion=$(VERSION) \
1566 @HAVE_INTROSPECTION_TRUE@ --nsversion=0.12 \
15551567 @HAVE_INTROSPECTION_TRUE@ --strip-prefix=tp \
15561568 @HAVE_INTROSPECTION_TRUE@ -I$(top_builddir) \
15571569 @HAVE_INTROSPECTION_TRUE@ -I$(top_srcdir) \
3939 versions/0.11.1.abi \
4040 versions/0.11.3.abi \
4141 versions/0.11.4.abi \
42 versions/0.11.5.abi
42 versions/0.11.5.abi \
43 versions/0.11.6.abi
4344
4445 # The quoting here is unnecessary but harmless, and has the useful side-effect
4546 # that vim quickfix mode (:make) doesn't interpret the libtool --mode=link
9393 gchar *requested_status;
9494 gchar *requested_message;
9595
96 gboolean changing_presence;
9697 gboolean connect_automatically;
9798 gboolean has_been_online;
9899
125126 /* properties */
126127 enum {
127128 PROP_ENABLED = 1,
129 PROP_CHANGING_PRESENCE,
128130 PROP_CURRENT_PRESENCE_TYPE,
129131 PROP_CURRENT_STATUS,
130132 PROP_CURRENT_STATUS_MESSAGE,
484486
485487 g_object_notify (G_OBJECT (account), "connection");
486488 }
489 }
490
491 if (g_hash_table_lookup (properties, "ChangingPresence") != NULL)
492 {
493 gboolean old = priv->changing_presence;
494
495 priv->changing_presence =
496 tp_asv_get_boolean (properties, "ChangingPresence", NULL);
497
498 if (old != priv->changing_presence)
499 g_object_notify (G_OBJECT (account), "changing-presence");
487500 }
488501
489502 if (g_hash_table_lookup (properties, "ConnectAutomatically") != NULL)
633646 case PROP_ICON_NAME:
634647 g_value_set_string (value, self->priv->icon_name);
635648 break;
649 case PROP_CHANGING_PRESENCE:
650 g_value_set_boolean (value, self->priv->changing_presence);
651 break;
636652 case PROP_CONNECT_AUTOMATICALLY:
637653 g_value_set_boolean (value, self->priv->connect_automatically);
638654 break;
809825 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
810826
811827 /**
828 * TpAccount:changing-presence:
829 *
830 * %TRUE if an attempt is currently being made to change the account's
831 * presence (#TpAccount:current-presence-type, #TpAccount:current-status
832 * and #TpAccount:current-status-message) to match its requested presence
833 * (#TpAccount:requested-presence-type, #TpAccount:requested-status
834 * and #TpAccount:requested-status-message).
835 *
836 * One can receive change notifications on this property by connecting
837 * to the #GObject::notify signal and using this property as the signal
838 * detail.
839 *
840 * This is not guaranteed to have been retrieved until
841 * tp_proxy_prepare_async() has finished; until then, the value is
842 * %FALSE.
843 *
844 * Since: 0.11.6
845 */
846 g_object_class_install_property (object_class, PROP_CHANGING_PRESENCE,
847 g_param_spec_boolean ("changing-presence",
848 "Changing Presence",
849 "TRUE if presence is changing",
850 FALSE,
851 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
852
853 /**
812854 * TpAccount:connection-status:
813855 *
814856 * The account's connection status type (a %TpConnectionStatus).
20132055 }
20142056
20152057 /**
2058 * tp_account_get_changing_presence:
2059 * @self: an account
2060 *
2061 * <!-- -->
2062 *
2063 * Returns: the same as the #TpAccount:changing-presence property
2064 *
2065 * Since: 0.11.6
2066 */
2067 gboolean
2068 tp_account_get_changing_presence (TpAccount *self)
2069 {
2070 g_return_val_if_fail (TP_IS_ACCOUNT (self), FALSE);
2071
2072 return self->priv->changing_presence;
2073 }
2074
2075 /**
20162076 * tp_account_get_connect_automatically:
20172077 * @account: a #TpAccount
20182078 *
23712431 *
23722432 * Finishes an async get operation of @account's avatar.
23732433 *
2374 * Returns: a #GArray of #guchar containing the bytes of the account's avatar,
2375 * or %NULL on failure
2434 * Returns: (element-type uint8): a #GArray of #guchar
2435 * containing the bytes of the account's avatar, or %NULL on failure
23762436 *
23772437 * Since: 0.9.0
23782438 */
197197 GAsyncResult *result,
198198 GError **error);
199199
200 gboolean tp_account_get_changing_presence (TpAccount *self);
201
200202 G_END_DECLS
201203
202204 #include <telepathy-glib/_gen/tp-cli-account.h>
105105 GError error = { TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
106106 "Disposing the TpAddDispatchOperationContext" };
107107
108 g_warning ("Disposing a context in the %s state",
108 WARNING ("Disposing a context in the %s state",
109109 self->priv->state == TP_ADD_DISPATCH_OPERATION_CONTEXT_STATE_NONE ?
110110 "none": "delayed");
111111
9898 * Since: 0.11.5
9999 */
100100
101 /**
102 * TpBaseClientClassHandleChannelsImpl:
103 * @client: a #TpBaseClient instance
104 * @account: a #TpAccount having %TP_ACCOUNT_FEATURE_CORE prepared if possible
105 * @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
106 * if possible
107 * @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
108 * all having %TP_CHANNEL_FEATURE_CORE prepared if possible
109 * @requests_satisfied: (element-type TelepathyGLib.ChannelRequest): a #GList of
110 * #TpChannelRequest having their object-path defined but are not guaranteed
111 * to be prepared.
112 * @user_action_time: the time at which user action occurred, or 0 if this
113 * channel is to be handled for some reason not involving user action.
114 * @context: a #TpHandleChannelsContext representing the context of this
115 * D-Bus call
116 *
117 * Signature of the implementation of the HandleChannels method.
118 *
119 * This function must call either tp_handle_channels_context_accept(),
120 * tp_handle_channels_context_delay() or tp_handle_channels_context_fail()
121 * on @context before it returns.
122 *
123 * Since: 0.11.6
124 */
125
101126 #include "telepathy-glib/base-client.h"
127
128 #include <dbus/dbus.h>
129 #include <dbus/dbus-glib-lowlevel.h>
102130
103131 #include <telepathy-glib/account-manager.h>
104132 #include <telepathy-glib/add-dispatch-operation-context-internal.h>
106134 #include <telepathy-glib/channel-request.h>
107135 #include <telepathy-glib/channel.h>
108136 #include <telepathy-glib/dbus-internal.h>
137 #include <telepathy-glib/handle-channels-context-internal.h>
109138 #include <telepathy-glib/interfaces.h>
110139 #include <telepathy-glib/observe-channels-context-internal.h>
111140 #include <telepathy-glib/svc-client.h>
114143
115144 #define DEBUG_FLAG TP_DEBUG_CLIENT
116145 #include "telepathy-glib/debug-internal.h"
146 #include "telepathy-glib/_gen/signals-marshal.h"
117147
118148 struct _TpBaseClientClassPrivate {
119149 /*<private>*/
120150 TpBaseClientClassObserveChannelsImpl observe_channels_impl;
121151 TpBaseClientClassAddDispatchOperationImpl add_dispatch_operation_impl;
152 TpBaseClientClassHandleChannelsImpl handle_channels_impl;
122153 };
123154
124155 static void observer_iface_init (gpointer, gpointer);
125156 static void approver_iface_init (gpointer, gpointer);
157 static void handler_iface_init (gpointer, gpointer);
158 static void requests_iface_init (gpointer, gpointer);
126159
127160 G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TpBaseClient, tp_base_client, G_TYPE_OBJECT,
128161 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
130163 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT, NULL);
131164 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_OBSERVER, observer_iface_init);
132165 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_APPROVER, approver_iface_init);
166 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_HANDLER, handler_iface_init);
167 G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_INTERFACE_REQUESTS,
168 requests_iface_init);
133169 g_type_add_class_private (g_define_type_id, sizeof (
134170 TpBaseClientClassPrivate)))
135171
139175 PROP_UNIQUIFY_NAME,
140176 N_PROPS
141177 };
178
179 enum {
180 SIGNAL_REQUEST_ADDED,
181 SIGNAL_REQUEST_REMOVED,
182 N_SIGNALS
183 };
184
185 static guint signals[N_SIGNALS] = { 0 };
186
187 static dbus_int32_t clients_slot = -1;
142188
143189 typedef enum {
144190 CLIENT_IS_OBSERVER = 1 << 0,
154200 TpDBusDaemon *dbus;
155201 gchar *name;
156202 gboolean uniquify_name;
203 /* reffed */
204 DBusConnection *libdbus;
157205
158206 gboolean registered;
159207 ClientFlags flags;
166214 /* array of g_strdup(token), plus NULL included in length */
167215 GPtrArray *handler_caps;
168216
217 GList *pending_requests;
218 /* Channels actually handled by THIS observer.
219 * borrowed path (gchar *) => reffed TpChannel */
220 GHashTable *my_chans;
221
169222 gchar *bus_name;
170223 gchar *object_path;
171224
344397 }
345398
346399 /**
400 * tp_base_client_be_a_handler:
401 * @self: a #TpBaseClient
402 *
403 * Register @self as a ChannelHandler with an empty list of filter.
404 * This is useful if you want to create a client that only handle channels
405 * for which it's the PreferredHandler.
406 *
407 * This method may only be called before tp_base_client_register() is
408 * called, and may only be called on objects whose class has called
409 * tp_base_client_implement_handle_channels().
410 *
411 * Since: 0.11.6
412 */
413 void
414 tp_base_client_be_a_handler (TpBaseClient *self)
415 {
416 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
417
418 g_return_if_fail (TP_IS_BASE_CLIENT (self));
419 g_return_if_fail (!self->priv->registered);
420 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
421
422 self->priv->flags |= CLIENT_IS_HANDLER;
423 }
424
425 /**
426 * tp_base_client_add_handler_filter:
427 * @self: a #TpBaseClient
428 * @filter: (transfer none) (element-type utf8 GObject.Value):
429 * a %TP_HASH_TYPE_CHANNEL_CLASS
430 *
431 * Register a new channel class as Handler.HandlerChannelFilter.
432 * The @handle_channels virtual method set up using
433 * tp_base_client_implement_handle_channels() will be called whenever
434 * a new channel's properties match the ones in @filter.
435 *
436 * This method may only be called before tp_base_client_register() is
437 * called, and may only be called on objects whose class has called
438 * tp_base_client_implement_handle_channels().
439 *
440 * Since: 0.11.6
441 */
442 void
443 tp_base_client_add_handler_filter (TpBaseClient *self,
444 GHashTable *filter)
445 {
446 g_return_if_fail (filter != NULL);
447
448 tp_base_client_take_handler_filter (self,
449 _tp_base_client_copy_filter (filter));
450 }
451
452 /**
453 * tp_base_client_take_handler_filter: (skip)
454 * @self: a #TpBaseClient
455 * @filter: (transfer full) (element-type utf8 GObject.Value):
456 * a %TP_HASH_TYPE_CHANNEL_CLASS, ownership of which is taken by @self
457 *
458 * The same as tp_base_client_add_handler_filter(), but ownership of @filter
459 * is taken by @self. This makes it convenient to call using tp_asv_new():
460 *
461 * |[
462 * tp_base_client_take_handler_filter (client,
463 * tp_asv_new (
464 * TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
465 * TP_IFACE_CHANNEL_TYPE_TEXT,
466 * TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
467 * TP_HANDLE_TYPE_CONTACT,
468 * ...));
469 * ]|
470 *
471 * Since: 0.11.6
472 */
473 void
474 tp_base_client_take_handler_filter (TpBaseClient *self,
475 GHashTable *filter)
476 {
477 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
478
479 g_return_if_fail (TP_IS_BASE_CLIENT (self));
480 g_return_if_fail (!self->priv->registered);
481 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
482
483 self->priv->flags |= CLIENT_IS_HANDLER;
484 g_ptr_array_add (self->priv->handler_filters, filter);
485 }
486
487 /**
488 * tp_base_client_set_handler_bypass_approval:
489 * @self: a #TpBaseClient
490 * @bypass_approval: the value of the Handler.BypassApproval property
491 *
492 * Set whether the channels destined for this handler are automatically
493 * handled, without invoking approvers.
494 * (This is implemented by setting the value of its BypassApproval
495 * D-Bus property.)
496 *
497 * This method may only be called before tp_base_client_register() is
498 * called, and may only be called on objects whose class has called
499 * tp_base_client_implement_handle_channels().
500 *
501 * Since: 0.11.6
502 */
503 void
504 tp_base_client_set_handler_bypass_approval (TpBaseClient *self,
505 gboolean bypass_approval)
506 {
507 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
508
509 g_return_if_fail (TP_IS_BASE_CLIENT (self));
510 g_return_if_fail (!self->priv->registered);
511 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
512
513 self->priv->flags |= (CLIENT_IS_HANDLER | CLIENT_HANDLER_BYPASSES_APPROVAL);
514 }
515
516 /**
517 * tp_base_client_set_handler_request_notification:
518 * @self: a #TpBaseClient
519 *
520 * Indicate that @self is a Handler willing to be notified about requests for
521 * channels that it is likely to be asked to handle.
522 * That means the TpBaseClient::request-added and TpBaseClient::request-removed:
523 * signals will be fired and tp_base_client_get_pending_requests() will
524 * return the list of pending requests.
525 *
526 * This method may only be called before tp_base_client_register() is
527 * called, and may only be called on objects whose class has called
528 * tp_base_client_implement_handle_channels().
529 *
530 * Since: 0.11.6
531 */
532 void
533 tp_base_client_set_handler_request_notification (TpBaseClient *self)
534 {
535 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
536
537 g_return_if_fail (TP_IS_BASE_CLIENT (self));
538 g_return_if_fail (!self->priv->registered);
539 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
540
541 self->priv->flags |= (CLIENT_IS_HANDLER | CLIENT_HANDLER_WANTS_REQUESTS);
542 }
543
544 static void
545 _tp_base_client_add_handler_capability (TpBaseClient *self,
546 const gchar *token)
547 {
548 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
549
550 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
551
552 self->priv->flags |= CLIENT_IS_HANDLER;
553
554 g_assert (g_ptr_array_index (self->priv->handler_caps,
555 self->priv->handler_caps->len - 1) == NULL);
556 g_ptr_array_index (self->priv->handler_caps,
557 self->priv->handler_caps->len - 1) = g_strdup (token);
558 g_ptr_array_add (self->priv->handler_caps, NULL);
559 }
560
561 /**
562 * tp_base_client_add_handler_capability:
563 * @self: a client, which must not have been registered with
564 * tp_base_client_register() yet
565 * @token: a capability token as defined by the Telepathy D-Bus API
566 * Specification
567 *
568 * Add one capability token to this client, as if via
569 * tp_base_client_add_handler_capabilities().
570 *
571 * This method may only be called before tp_base_client_register() is
572 * called, and may only be called on objects whose class has called
573 * tp_base_client_implement_handle_channels().
574 *
575 * Since: 0.11.6
576 */
577 void
578 tp_base_client_add_handler_capability (TpBaseClient *self,
579 const gchar *token)
580 {
581 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
582
583 g_return_if_fail (TP_IS_BASE_CLIENT (self));
584 g_return_if_fail (!self->priv->registered);
585 g_return_if_fail (cls->priv->handle_channels_impl != NULL);
586
587 _tp_base_client_add_handler_capability (self, token);
588 }
589
590 /**
591 * tp_base_client_add_handler_capabilities:
592 * @self: a client, which must not have been registered with
593 * tp_base_client_register() yet
594 * @tokens: (array zero-terminated=1) (element-type utf8): capability
595 * tokens as defined by the Telepathy D-Bus API Specification
596 *
597 * Add several capability tokens to this client. These are used to signal
598 * that Telepathy connection managers should advertise certain capabilities
599 * to other contacts, such as the ability to receive audio/video calls using
600 * particular streaming protocols and codecs.
601 *
602 * This method may only be called before tp_base_client_register() is
603 * called, and may only be called on objects whose class has called
604 * tp_base_client_implement_handle_channels().
605 *
606 * Since: 0.11.6
607 */
608 void
609 tp_base_client_add_handler_capabilities (TpBaseClient *self,
610 const gchar * const *tokens)
611 {
612 const gchar * const *iter;
613
614 g_return_if_fail (TP_IS_BASE_CLIENT (self));
615 g_return_if_fail (!self->priv->registered);
616
617 if (tokens == NULL)
618 return;
619
620 for (iter = tokens; *iter != NULL; iter++)
621 _tp_base_client_add_handler_capability (self, *iter);
622 }
623
624 /**
625 * tp_base_client_add_handler_capabilities_varargs: (skip)
626 * @self: a client, which must not have been registered with
627 * tp_base_client_register() yet
628 * @first_token: a capability token from the Telepathy D-Bus API Specification
629 * @...: more tokens, ending with %NULL
630 *
631 * Convenience C API equivalent to calling
632 * tp_base_client_add_handler_capability() for each capability token.
633 *
634 * This method may only be called before tp_base_client_register() is
635 * called, and may only be called on objects whose class has called
636 * tp_base_client_implement_handle_channels().
637 *
638 * Since: 0.11.6
639 */
640 void
641 tp_base_client_add_handler_capabilities_varargs (TpBaseClient *self,
642 const gchar *first_token, ...)
643 {
644 va_list ap;
645 const gchar *token = first_token;
646
647 g_return_if_fail (TP_IS_BASE_CLIENT (self));
648 g_return_if_fail (!self->priv->registered);
649
650 va_start (ap, first_token);
651
652 for (token = first_token; token != NULL; token = va_arg (ap, gchar *))
653 _tp_base_client_add_handler_capability (self, token);
654
655 va_end (ap);
656 }
657
658 /**
347659 * tp_base_client_register:
348660 * @self: a #TpBaseClient, which must not have been registered with
349661 * tp_base_client_register() yet
364676 tp_base_client_register (TpBaseClient *self,
365677 GError **error)
366678 {
679 GHashTable *clients;
680
367681 g_return_val_if_fail (TP_IS_BASE_CLIENT (self), FALSE);
368682 g_return_val_if_fail (!self->priv->registered, FALSE);
369683 /* Client should at least be an Observer, Approver or Handler */
383697
384698 self->priv->registered = TRUE;
385699
700 if (!(self->priv->flags & CLIENT_IS_HANDLER))
701 return TRUE;
702
703 /* Client is an handler */
704 self->priv->libdbus = dbus_connection_ref (
705 dbus_g_connection_get_connection (
706 tp_proxy_get_dbus_connection (self->priv->dbus)));
707
708 /* one ref per TpBaseClient, released in tp_base_client_unregister() */
709 if (!dbus_connection_allocate_data_slot (&clients_slot))
710 ERROR ("Out of memory");
711
712 clients = dbus_connection_get_data (self->priv->libdbus, clients_slot);
713
714 if (clients == NULL)
715 {
716 /* Map DBusConnection to the self->priv->my_chans hash table owned by
717 * the client using this DBusConnection.
718
719 * borrowed client path => borrowed (GHashTable *) */
720 clients = g_hash_table_new (g_str_hash, g_str_equal);
721
722 dbus_connection_set_data (self->priv->libdbus, clients_slot, clients,
723 (DBusFreeFunction) g_hash_table_unref);
724 }
725
726 g_hash_table_insert (clients, self->priv->object_path, self->priv->my_chans);
727
386728 return TRUE;
729 }
730
731 /**
732 * tp_base_client_get_pending_requests:
733 * @self: a #TpBaseClient
734 *
735 * Only works if tp_base_client_set_handler_request_notification() has been
736 * called.
737 * Returns the list of requests @self is likely be asked to handle.
738 *
739 * Returns: (transfer container) (element-type Tp.ChannelRequest): a #GList
740 * of #TpChannelRequest
741 *
742 * Since: 0.11.6
743 */
744 GList *
745 tp_base_client_get_pending_requests (TpBaseClient *self)
746 {
747 g_return_val_if_fail (self->priv->flags & CLIENT_IS_HANDLER, NULL);
748
749 return g_list_copy (self->priv->pending_requests);
750 }
751
752 /**
753 * tp_base_client_get_handled_channels:
754 * @self: a #TpBaseClient
755 *
756 * Returns the set of channels currently handled by this base client or by any
757 * other #TpBaseClient with which it shares a unique name.
758 *
759 * Returns: (transfer container) (element-type Tp.Channel): the handled
760 * channels
761 *
762 * Since: 0.11.6
763 */
764 GList *
765 tp_base_client_get_handled_channels (TpBaseClient *self)
766 {
767 GList *result = NULL;
768 GHashTable *clients;
769 GHashTableIter iter;
770 gpointer value;
771 GHashTable *set;
772
773 g_return_val_if_fail (self->priv->flags & CLIENT_IS_HANDLER, NULL);
774
775 if (clients_slot == -1)
776 return NULL;
777
778 set = g_hash_table_new (g_str_hash, g_str_equal);
779
780 clients = dbus_connection_get_data (self->priv->libdbus, clients_slot);
781
782 g_hash_table_iter_init (&iter, clients);
783 while (g_hash_table_iter_next (&iter, NULL, &value))
784 {
785 GHashTable *chans = value;
786
787 tp_g_hash_table_update (set, chans, NULL, NULL);
788 }
789
790 result = g_hash_table_get_values (set);
791 g_hash_table_unref (set);
792
793 return result;
387794 }
388795
389796 static void
401808 (GDestroyNotify) g_hash_table_unref);
402809 self->priv->handler_caps = g_ptr_array_new_with_free_func (g_free);
403810 g_ptr_array_add (self->priv->handler_caps, NULL);
811
812 self->priv->my_chans = g_hash_table_new_full (g_str_hash, g_str_equal,
813 NULL, NULL);
404814 }
405815
406816 static void
410820 void (*dispose) (GObject *) =
411821 G_OBJECT_CLASS (tp_base_client_parent_class)->dispose;
412822
823 tp_base_client_unregister (self);
824
413825 if (self->priv->dbus != NULL)
414826 {
415827 g_object_unref (self->priv->dbus);
420832 {
421833 g_object_unref (self->priv->account_mgr);
422834 self->priv->account_mgr = NULL;
835 }
836
837 g_list_foreach (self->priv->pending_requests, (GFunc) g_object_unref, NULL);
838 g_list_free (self->priv->pending_requests);
839 self->priv->pending_requests = NULL;
840
841 if (self->priv->my_chans != NULL)
842 {
843 g_hash_table_unref (self->priv->my_chans);
844 self->priv->my_chans = NULL;
423845 }
424846
425847 if (dispose != NULL)
6061028 g_value_set_boxed (value, self->priv->approver_filters);
6071029 break;
6081030
1031 case DP_HANDLER_CHANNEL_FILTER:
1032 g_value_set_boxed (value, self->priv->handler_filters);
1033 break;
1034
1035 case DP_BYPASS_APPROVAL:
1036 g_value_set_boolean (value,
1037 (self->priv->flags & CLIENT_HANDLER_BYPASSES_APPROVAL) != 0);
1038 break;
1039
1040 case DP_CAPABILITIES:
1041 /* this is already NULL-terminated */
1042 g_value_set_boxed (value, (GStrv) self->priv->handler_caps->pdata);
1043 break;
1044
1045 case DP_HANDLED_CHANNELS:
1046 {
1047 GList *channels = tp_base_client_get_handled_channels (self);
1048 GList *iter;
1049 GPtrArray *arr = g_ptr_array_sized_new (g_list_length (channels));
1050
1051 for (iter = channels; iter != NULL; iter = iter->next)
1052 g_ptr_array_add (arr,
1053 g_strdup (tp_proxy_get_object_path (iter->data)));
1054
1055 g_value_take_boxed (value, arr);
1056 g_list_free (channels);
1057 }
1058 break;
1059
6091060 case DP_OBSERVER_RECOVER:
6101061 g_value_set_boolean (value,
6111062 (self->priv->flags & CLIENT_OBSERVER_RECOVER) != 0);
6221073 GParamSpec *param_spec;
6231074 static TpDBusPropertiesMixinPropImpl client_properties[] = {
6241075 { "Interfaces", GINT_TO_POINTER (DP_INTERFACES) },
1076 { NULL }
1077 };
1078 static TpDBusPropertiesMixinPropImpl handler_properties[] = {
1079 { "HandlerChannelFilter",
1080 GINT_TO_POINTER (DP_HANDLER_CHANNEL_FILTER) },
1081 { "BypassApproval",
1082 GINT_TO_POINTER (DP_BYPASS_APPROVAL) },
1083 { "Capabilities",
1084 GINT_TO_POINTER (DP_CAPABILITIES) },
1085 { "HandledChannels",
1086 GINT_TO_POINTER (DP_HANDLED_CHANNELS) },
6251087 { NULL }
6261088 };
6271089 static TpDBusPropertiesMixinPropImpl approver_properties[] = {
6431105 observer_properties },
6441106 { TP_IFACE_CLIENT_APPROVER, tp_base_client_get_dbus_properties, NULL,
6451107 approver_properties },
1108 { TP_IFACE_CLIENT_HANDLER, tp_base_client_get_dbus_properties, NULL,
1109 handler_properties },
6461110 { NULL }
6471111 };
6481112 GObjectClass *object_class = G_OBJECT_CLASS (cls);
7021166 g_object_class_install_property (object_class, PROP_UNIQUIFY_NAME,
7031167 param_spec);
7041168
1169 /**
1170 * TpBaseClient::request-added:
1171 * @self: a #TpBaseClient
1172 * @account: the #TpAccount on which the request was made
1173 * having %TP_ACCOUNT_FEATURE_CORE prepared if possible
1174 * @request: a #TpChannelRequest having its object-path defined but
1175 * is not guaranteed to be prepared.
1176 *
1177 * Emitted when a channels have been requested, and that if the
1178 * request is successful, they will probably be handled by this Handler.
1179 *
1180 * This signal is only fired if
1181 * tp_base_client_set_handler_request_notification() has been called
1182 * on @self previously.
1183 *
1184 * Since: 0.11.6
1185 */
1186 signals[SIGNAL_REQUEST_ADDED] = g_signal_new (
1187 "request-added", G_OBJECT_CLASS_TYPE (cls),
1188 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
1189 0,
1190 NULL, NULL,
1191 _tp_marshal_VOID__OBJECT_OBJECT,
1192 G_TYPE_NONE, 2,
1193 TP_TYPE_ACCOUNT, TP_TYPE_CHANNEL_REQUEST);
1194
1195 /**
1196 * TpBaseClient::request-removed:
1197 * @self: a #TpBaseClient
1198 * @request: the #TpChannelRequest being removed
1199 * @error: the name of the D-Bus error with which the request failed.
1200 * @message: any message supplied with the D-Bus error.
1201 *
1202 * Emitted when a request has failed and should be disregarded.
1203 *
1204 * This signal is only fired if
1205 * tp_base_client_set_handler_request_notification() has been called
1206 * on @self previously.
1207 *
1208 * Since: 0.11.6
1209 */
1210 signals[SIGNAL_REQUEST_REMOVED] = g_signal_new (
1211 "request-removed", G_OBJECT_CLASS_TYPE (cls),
1212 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
1213 0,
1214 NULL, NULL,
1215 _tp_marshal_VOID__OBJECT_STRING_STRING,
1216 G_TYPE_NONE, 3,
1217 TP_TYPE_CHANNEL_REQUEST, G_TYPE_STRING, G_TYPE_STRING);
1218
7051219 cls->dbus_properties_class.interfaces = prop_ifaces;
7061220 tp_dbus_properties_mixin_class_init (object_class,
7071221 G_STRUCT_OFFSET (TpBaseClientClass, dbus_properties_class));
10921606 #undef IMPLEMENT
10931607 }
10941608
1609 static void
1610 chan_invalidated_cb (TpChannel *channel,
1611 guint domain,
1612 gint code,
1613 gchar *message,
1614 TpBaseClient *self)
1615 {
1616 DEBUG ("Channel %s has been invalidated", tp_proxy_get_object_path (channel));
1617
1618 g_hash_table_remove (self->priv->my_chans, tp_proxy_get_object_path (
1619 channel));
1620 }
1621
1622 static void
1623 ctx_done_cb (TpHandleChannelsContext *context,
1624 TpBaseClient *self)
1625 {
1626 guint i;
1627
1628 for (i = 0; i < context->channels->len; i++)
1629 {
1630 TpChannel *channel = g_ptr_array_index (context->channels, i);
1631
1632 if (tp_proxy_get_invalidated (channel) == NULL)
1633 {
1634 g_hash_table_insert (self->priv->my_chans,
1635 (gchar *) tp_proxy_get_object_path (channel),
1636 g_object_ref (channel));
1637
1638 tp_g_signal_connect_object (channel, "invalidated",
1639 G_CALLBACK (chan_invalidated_cb), self, 0);
1640 }
1641 }
1642 }
1643
1644 static void
1645 handle_channels_context_prepare_cb (GObject *source,
1646 GAsyncResult *result,
1647 gpointer user_data)
1648 {
1649 TpBaseClient *self = user_data;
1650 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
1651 TpHandleChannelsContext *ctx = TP_HANDLE_CHANNELS_CONTEXT (source);
1652 GError *error = NULL;
1653 GList *channels_list, *requests_list;
1654
1655 if (!_tp_handle_channels_context_prepare_finish (ctx, result, &error))
1656 {
1657 DEBUG ("Failed to prepare TpHandleChannelsContext: %s", error->message);
1658 tp_handle_channels_context_fail (ctx, error);
1659 g_error_free (error);
1660 return;
1661 }
1662
1663 channels_list = ptr_array_to_list (ctx->channels);
1664 requests_list = ptr_array_to_list (ctx->requests_satisfied);
1665
1666 tp_g_signal_connect_object (ctx, "done", G_CALLBACK (ctx_done_cb),
1667 self, 0);
1668
1669 cls->priv->handle_channels_impl (self, ctx->account, ctx->connection,
1670 channels_list, requests_list, ctx->user_action_time, ctx);
1671
1672 g_list_free (channels_list);
1673 g_list_free (requests_list);
1674
1675 if (_tp_handle_channels_context_get_state (ctx) ==
1676 TP_OBSERVE_CHANNELS_CONTEXT_STATE_NONE)
1677 {
1678 error = g_error_new (TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
1679 "Implementation of HandledChannels in %s didn't call "
1680 "tp_handle_channels_context_{accept,fail,delay}",
1681 G_OBJECT_TYPE_NAME (self));
1682
1683 CRITICAL ("%s", error->message);
1684
1685 tp_handle_channels_context_fail (ctx, error);
1686 g_error_free (error);
1687 }
1688 }
1689
1690 static TpChannelRequest *
1691 find_request_by_path (TpBaseClient *self,
1692 const gchar *path)
1693 {
1694 GList *l;
1695
1696 for (l = self->priv->pending_requests; l != NULL; l = g_list_next (l))
1697 {
1698 TpChannelRequest *request = l->data;
1699
1700 if (!tp_strdiff (tp_proxy_get_object_path (request), path))
1701 return request;
1702 }
1703
1704 return NULL;
1705 }
1706
1707 static void
1708 _tp_base_client_handle_channels (TpSvcClientHandler *iface,
1709 const gchar *account_path,
1710 const gchar *connection_path,
1711 const GPtrArray *channels_arr,
1712 const GPtrArray *requests_arr,
1713 guint64 user_action_time,
1714 GHashTable *handler_info,
1715 DBusGMethodInvocation *context)
1716 {
1717 TpBaseClient *self = TP_BASE_CLIENT (iface);
1718 TpHandleChannelsContext *ctx;
1719 TpBaseClientClass *cls = TP_BASE_CLIENT_GET_CLASS (self);
1720 GError *error = NULL;
1721 TpAccount *account = NULL;
1722 TpConnection *connection = NULL;
1723 GPtrArray *channels = NULL, *requests = NULL;
1724 guint i;
1725
1726 if (!(self->priv->flags & CLIENT_IS_HANDLER))
1727 {
1728 /* Pretend that the method is not implemented if we are not supposed to
1729 * be an Handler. */
1730 tp_dbus_g_method_return_not_implemented (context);
1731 return;
1732 }
1733
1734 if (cls->priv->handle_channels_impl == NULL)
1735 {
1736 DEBUG ("class %s does not implement HandleChannels",
1737 G_OBJECT_TYPE_NAME (self));
1738
1739 tp_dbus_g_method_return_not_implemented (context);
1740 return;
1741 }
1742
1743 if (channels_arr->len == 0)
1744 {
1745 g_set_error (&error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1746 "Channels should contain at least one channel");
1747 DEBUG ("%s", error->message);
1748 goto out;
1749 }
1750
1751 account = tp_account_manager_ensure_account (self->priv->account_mgr,
1752 account_path);
1753
1754 connection = tp_account_ensure_connection (account, connection_path);
1755 if (connection == NULL)
1756 {
1757 DEBUG ("Failed to create TpConnection");
1758 goto out;
1759 }
1760
1761 channels = g_ptr_array_sized_new (channels_arr->len);
1762 g_ptr_array_set_free_func (channels, g_object_unref);
1763 for (i = 0; i < channels_arr->len; i++)
1764 {
1765 const gchar *chan_path;
1766 GHashTable *chan_props;
1767 TpChannel *channel;
1768
1769 tp_value_array_unpack (g_ptr_array_index (channels_arr, i), 2,
1770 &chan_path, &chan_props);
1771
1772 channel = tp_channel_new_from_properties (connection,
1773 chan_path, chan_props, &error);
1774 if (channel == NULL)
1775 {
1776 DEBUG ("Failed to create TpChannel: %s", error->message);
1777 goto out;
1778 }
1779
1780 g_ptr_array_add (channels, channel);
1781 }
1782
1783 requests = g_ptr_array_sized_new (requests_arr->len);
1784 g_ptr_array_set_free_func (requests, g_object_unref);
1785 for (i = 0; i < requests_arr->len; i++)
1786 {
1787 const gchar *req_path = g_ptr_array_index (requests_arr, i);
1788 TpChannelRequest *request;
1789
1790 request = find_request_by_path (self, req_path);
1791 if (request != NULL)
1792 {
1793 g_object_ref (request);
1794 }
1795 else
1796 {
1797 request = tp_channel_request_new (self->priv->dbus, req_path, NULL,
1798 &error);
1799 if (request == NULL)
1800 {
1801 DEBUG ("Failed to create TpChannelRequest: %s", error->message);
1802 goto out;
1803 }
1804 }
1805
1806 g_ptr_array_add (requests, request);
1807 }
1808
1809 ctx = _tp_handle_channels_context_new (account, connection, channels,
1810 requests, user_action_time, handler_info, context);
1811
1812 _tp_handle_channels_context_prepare_async (ctx,
1813 handle_channels_context_prepare_cb, self);
1814
1815 g_object_unref (ctx);
1816
1817 out:
1818 if (channels != NULL)
1819 g_ptr_array_unref (channels);
1820
1821 if (requests != NULL)
1822 g_ptr_array_unref (requests);
1823
1824 if (error == NULL)
1825 return;
1826
1827 dbus_g_method_return_error (context, error);
1828 g_error_free (error);
1829 }
1830
1831 static void
1832 handler_iface_init (gpointer g_iface,
1833 gpointer unused G_GNUC_UNUSED)
1834 {
1835 #define IMPLEMENT(x) tp_svc_client_handler_implement_##x (\
1836 g_iface, _tp_base_client_##x)
1837 IMPLEMENT (handle_channels);
1838 #undef IMPLEMENT
1839 }
1840
1841 typedef struct
1842 {
1843 TpBaseClient *self;
1844 TpChannelRequest *request;
1845 } channel_request_prepare_account_ctx;
1846
1847 static channel_request_prepare_account_ctx *
1848 channel_request_prepare_account_ctx_new (TpBaseClient *self,
1849 TpChannelRequest *request)
1850 {
1851 channel_request_prepare_account_ctx *ctx = g_slice_new (
1852 channel_request_prepare_account_ctx);
1853
1854 ctx->self = g_object_ref (self);
1855 ctx->request = g_object_ref (request);
1856 return ctx;
1857 }
1858
1859 static void
1860 channel_request_prepare_account_ctx_free (
1861 channel_request_prepare_account_ctx *ctx)
1862 {
1863 g_object_unref (ctx->self);
1864 g_object_unref (ctx->request);
1865
1866 g_slice_free (channel_request_prepare_account_ctx, ctx);
1867 }
1868
1869 static void
1870 channel_request_account_prepare_cb (GObject *account,
1871 GAsyncResult *result,
1872 gpointer user_data)
1873 {
1874 channel_request_prepare_account_ctx *ctx = user_data;
1875 GError *error = NULL;
1876
1877 if (!tp_proxy_prepare_finish (account, result, &error))
1878 {
1879 DEBUG ("Failed to prepare account: %s", error->message);
1880 g_error_free (error);
1881 }
1882
1883 g_signal_emit (ctx->self, signals[SIGNAL_REQUEST_ADDED], 0, account,
1884 ctx->request);
1885
1886 channel_request_prepare_account_ctx_free (ctx);
1887 }
1888
1889 static void
1890 _tp_base_client_add_request (TpSvcClientInterfaceRequests *iface,
1891 const gchar *path,
1892 GHashTable *properties,
1893 DBusGMethodInvocation *context)
1894 {
1895 TpBaseClient *self = TP_BASE_CLIENT (iface);
1896 TpChannelRequest *request;
1897 TpAccount *account;
1898 GError *error = NULL;
1899 GQuark account_features[] = { TP_ACCOUNT_FEATURE_CORE, 0 };
1900 channel_request_prepare_account_ctx *ctx;
1901
1902 request = tp_channel_request_new (self->priv->dbus, path, properties, &error);
1903 if (request == NULL)
1904 {
1905 DEBUG ("Failed to create TpChannelRequest: %s", error->message);
1906
1907 dbus_g_method_return_error (context, error);
1908 g_error_free (error);
1909 return;
1910 }
1911
1912 path = tp_asv_get_object_path (properties, TP_PROP_CHANNEL_REQUEST_ACCOUNT);
1913 if (path == NULL)
1914 {
1915 error = g_error_new_literal (TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1916 "Mandatory 'Account' property is missing");
1917
1918 DEBUG ("%s", error->message);
1919
1920 dbus_g_method_return_error (context, error);
1921 g_error_free (error);
1922 return;
1923 }
1924
1925 account = tp_account_manager_ensure_account (self->priv->account_mgr,
1926 path);
1927
1928 self->priv->pending_requests = g_list_append (self->priv->pending_requests,
1929 request);
1930
1931 ctx = channel_request_prepare_account_ctx_new (self, request);
1932
1933 tp_proxy_prepare_async (account, account_features,
1934 channel_request_account_prepare_cb, ctx);
1935
1936 tp_svc_client_interface_requests_return_from_add_request (context);
1937 }
1938
1939 static void
1940 _tp_base_client_remove_request (TpSvcClientInterfaceRequests *iface,
1941 const gchar *path,
1942 const gchar *error,
1943 const gchar *reason,
1944 DBusGMethodInvocation *context)
1945 {
1946 TpBaseClient *self = TP_BASE_CLIENT (iface);
1947 TpChannelRequest *request;
1948
1949 request = find_request_by_path (self, path);
1950 if (request == NULL)
1951 {
1952 GError err = { TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
1953 "Uknown ChannelRequest" };
1954
1955 dbus_g_method_return_error (context, &err);
1956 return;
1957 }
1958
1959 self->priv->pending_requests = g_list_remove (self->priv->pending_requests,
1960 request);
1961
1962 g_signal_emit (self, signals[SIGNAL_REQUEST_REMOVED], 0, request,
1963 error, reason);
1964
1965 tp_svc_client_interface_requests_return_from_remove_request (context);
1966 }
1967
1968 static void
1969 requests_iface_init (gpointer g_iface,
1970 gpointer unused G_GNUC_UNUSED)
1971 {
1972 #define IMPLEMENT(x) tp_svc_client_interface_requests_implement_##x (\
1973 g_iface, _tp_base_client_##x)
1974 IMPLEMENT (add_request);
1975 IMPLEMENT (remove_request);
1976 #undef IMPLEMENT
1977 }
1978
10951979 /**
10961980 * tp_base_client_implement_observe_channels:
10971981 * @klass: the #TpBaseClientClass of the object
11632047 {
11642048 cls->priv->add_dispatch_operation_impl = impl;
11652049 }
2050
2051 /**
2052 * tp_base_client_implement_handle_channels:
2053 * @klass: the #TpBaseClientClass of the object
2054 * @impl: the #TpBaseClientClassHandleChannelsImpl function implementing
2055 * HandleCHannels()
2056 *
2057 * Called by subclasses to define the actual implementation of the
2058 * HandleChannels() D-Bus method.
2059 *
2060 * Since: 0.11.6
2061 */
2062 void
2063 tp_base_client_implement_handle_channels (TpBaseClientClass *cls,
2064 TpBaseClientClassHandleChannelsImpl impl)
2065 {
2066 cls->priv->handle_channels_impl = impl;
2067 }
2068
2069 /**
2070 * tp_base_client_unregister:
2071 * @self: a client, which may already have been registered with
2072 * tp_base_client_register(), or not
2073 *
2074 * Remove this client object from D-Bus, if tp_base_client_register()
2075 * has already been called.
2076 *
2077 * If the object is not registered, this method may be called, but has
2078 * no effect.
2079 *
2080 * Releasing the last reference to the object also has the same effect
2081 * as calling this method, but this method should be preferred, as it
2082 * has more deterministic behaviour.
2083 *
2084 * If the object still exists, tp_base_client_register() may be used to
2085 * attempt to register it again.
2086 *
2087 * Since: 0.11.6
2088 */
2089 void
2090 tp_base_client_unregister (TpBaseClient *self)
2091 {
2092 GError *error = NULL;
2093 GHashTable *clients;
2094
2095 if (!self->priv->registered)
2096 return;
2097
2098 if (!tp_dbus_daemon_release_name (self->priv->dbus, self->priv->bus_name,
2099 &error))
2100 {
2101 WARNING ("Failed to release bus name (%s): %s", self->priv->bus_name,
2102 error->message);
2103
2104 g_error_free (error);
2105 }
2106
2107 tp_dbus_daemon_unregister_object (self->priv->dbus, self);
2108
2109 clients = dbus_connection_get_data (self->priv->libdbus, clients_slot);
2110 if (clients != NULL)
2111 g_hash_table_remove (clients, self->priv->object_path);
2112
2113 dbus_connection_unref (self->priv->libdbus);
2114 self->priv->libdbus = NULL;
2115
2116 dbus_connection_free_data_slot (&clients_slot);
2117
2118 self->priv->registered = FALSE;
2119 }
2525
2626 #include <telepathy-glib/account.h>
2727 #include <telepathy-glib/add-dispatch-operation-context.h>
28 #include <telepathy-glib/handle-channels-context.h>
2829 #include <telepathy-glib/observe-channels-context.h>
2930 #include <telepathy-glib/channel-dispatch-operation.h>
3031 #include <telepathy-glib/connection.h>
8081 void tp_base_client_implement_add_dispatch_operation (TpBaseClientClass *klass,
8182 TpBaseClientClassAddDispatchOperationImpl impl);
8283
84 typedef void (*TpBaseClientClassHandleChannelsImpl) (
85 TpBaseClient *client,
86 TpAccount *account,
87 TpConnection *connection,
88 GList *channels,
89 GList *requests_satisfied,
90 gint64 user_action_time,
91 TpHandleChannelsContext *context);
92
93 void tp_base_client_implement_handle_channels (TpBaseClientClass *klass,
94 TpBaseClientClassHandleChannelsImpl impl);
95
8396 /* setup functions which can only be called before register() */
8497
8598 void tp_base_client_add_observer_filter (TpBaseClient *self,
96109 void tp_base_client_take_approver_filter (TpBaseClient *self,
97110 GHashTable *filter);
98111
112 void tp_base_client_be_a_handler (TpBaseClient *self);
113
114 void tp_base_client_add_handler_filter (TpBaseClient *self,
115 GHashTable *filter);
116 void tp_base_client_take_handler_filter (TpBaseClient *self,
117 GHashTable *filter);
118 void tp_base_client_set_handler_bypass_approval (TpBaseClient *self,
119 gboolean bypass_approval);
120
121 void tp_base_client_set_handler_request_notification (TpBaseClient *self);
122
123 void tp_base_client_add_handler_capability (TpBaseClient *self,
124 const gchar *token);
125 void tp_base_client_add_handler_capabilities (TpBaseClient *self,
126 const gchar * const *tokens);
127 void tp_base_client_add_handler_capabilities_varargs (TpBaseClient *self,
128 const gchar *first_token, ...) G_GNUC_NULL_TERMINATED;
129
130 /* future, potentially (currently in spec as a draft):
131 void tp_base_client_set_handler_related_conferences_bypass_approval (
132 TpBaseClient *self, gboolean bypass_approval);
133 */
134
99135 gboolean tp_base_client_register (TpBaseClient *self,
100136 GError **error);
101137
102138 const gchar *tp_base_client_get_bus_name (TpBaseClient *self);
103139
104140 const gchar *tp_base_client_get_object_path (TpBaseClient *self);
141
142 /* Normal methods, can be called at any time */
143
144 GList *tp_base_client_get_pending_requests (TpBaseClient *self);
145 GList *tp_base_client_get_handled_channels (TpBaseClient *self);
146
147 void tp_base_client_unregister (TpBaseClient *self);
105148
106149 #define TP_TYPE_BASE_CLIENT \
107150 (tp_base_client_get_type ())
27052705 GHashTable *details,
27062706 TpConnectionStatusReason reason)
27072707 {
2708 GHashTable *dup = NULL;
2708 GHashTable *dup_ = NULL;
27092709
27102710 g_return_if_fail (TP_IS_BASE_CONNECTION (self));
27112711 g_return_if_fail (tp_dbus_check_valid_interface_name (error_name, NULL));
27122712
27132713 if (details == NULL)
27142714 {
2715 dup = g_hash_table_new (g_str_hash, g_str_equal);
2716 details = dup;
2715 dup_ = g_hash_table_new (g_str_hash, g_str_equal);
2716 details = dup_;
27172717 }
27182718
27192719 tp_svc_connection_emit_connection_error (self, error_name, details);
27202720 tp_base_connection_change_status (self, TP_CONNECTION_STATUS_DISCONNECTED,
27212721 reason);
27222722
2723 if (dup != NULL)
2724 g_hash_table_destroy (dup);
2723 if (dup_ != NULL)
2724 g_hash_table_destroy (dup_);
27252725 }
27262726
27272727 /**
667667 {
668668 GArray *added, *remote_pending;
669669 GArray empty_array = { NULL, 0 };
670 TpIntSetIter iter = TP_INTSET_ITER_INIT (self->priv->group_local_pending);
670 TpIntSetFastIter iter;
671 TpHandle handle;
672
673 tp_intset_fast_iter_init (&iter, self->priv->group_local_pending);
671674
672675 added = tp_intset_to_array (self->priv->group_members);
673676 remote_pending = tp_intset_to_array (self->priv->group_remote_pending);
675678 g_signal_emit_by_name (self, "group-members-changed", "",
676679 added, &empty_array, &empty_array, remote_pending, 0, 0);
677680
678 while (tp_intset_iter_next (&iter))
679 {
680 TpHandle handle;
681 while (tp_intset_fast_iter_next (&iter, &handle))
682 {
681683 GArray local_pending = { (gchar *) &handle, 1 };
682684 TpHandle actor;
683685 TpChannelGroupChangeReason reason;
684686 const gchar *message;
685687
686 handle = iter.element;
687688 tp_channel_group_get_local_pending_info (self, handle, &actor, &reason,
688689 &message);
689690
16291629 /**
16301630 * TpChannel::group-members-changed-detailed:
16311631 * @self: a channel
1632 * @added: (type GLib.Array): a #GArray of #guint containing the full
1633 * members added
1634 * @removed: (type GLib.Array): a #GArray of #guint containing the members
1635 * (full, local-pending or remote-pending) removed
1636 * @local_pending: (type GLib.Array): a #GArray of #guint containing the
1637 * local-pending members added
1638 * @remote_pending: (type GLib.Array): a #GArray of #guint containing the
1639 * remote-pending members added
1632 * @added: (type GLib.Array) (element-type uint): a #GArray of #guint
1633 * containing the full members added
1634 * @removed: (type GLib.Array) (element-type uint): a #GArray of #guint
1635 * containing the members (full, local-pending or remote-pending) removed
1636 * @local_pending: (type GLib.Array) (element-type uint): a #GArray of
1637 * #guint containing the local-pending members added
1638 * @remote_pending: (type GLib.Array) (element-type uint): a #GArray of
1639 * #guint containing the remote-pending members added
16401640 * @details: (type GLib.HashTable): (element-type utf8 GObject.Value):
16411641 * a #GHashTable mapping (gchar *) to #GValue containing details
16421642 * about the change, as described in the specification of the
17581758 {
17591759 TpChannel *ret = NULL;
17601760 TpProxy *conn_proxy = (TpProxy *) conn;
1761 gchar *dup = NULL;
17621761
17631762 g_return_val_if_fail (TP_IS_CONNECTION (conn), NULL);
17641763 g_return_val_if_fail (object_path != NULL, NULL);
18021801 NULL));
18031802
18041803 finally:
1805 g_free (dup);
18061804
18071805 return ret;
18081806 }
534534 * tp_connection_request_handles()
535535 * @n_handles: the number of IDs that were passed to
536536 * tp_connection_request_handles() on success, or 0 on failure
537 * @handles: (array length=n_handles): the @n_handles handles corresponding to
538 * @ids, in the same order, or %NULL on failure
537 * @handles: (element-type uint) (array length=n_handles): the @n_handles
538 * handles corresponding to @ids, in the same order, or %NULL on failure
539539 * @ids: a copy of the array of @n_handles IDs that was passed to
540540 * tp_connection_request_handles() on success, or %NULL on failure
541541 * @error: %NULL on success, or an error on failure
4949 TpCapabilities *capabilities;
5050
5151 TpAvatarRequirements *avatar_requirements;
52 GArray *avatar_request_queue;
53 guint avatar_request_idle_id;
5254
5355 TpProxyPendingCall *introspection_call;
5456 unsigned fetching_rcc:1;
5759 unsigned ready:1;
5860 unsigned tracking_aliases_changed:1;
5961 unsigned tracking_avatar_updated:1;
62 unsigned tracking_avatar_retrieved:1;
6063 unsigned tracking_presences_changed:1;
6164 unsigned tracking_presence_update:1;
6265 unsigned tracking_location_changed:1;
10391039 {
10401040 g_hash_table_unref (self->priv->connection_error_details);
10411041 self->priv->connection_error_details = NULL;
1042 }
1043
1044 if (self->priv->avatar_request_queue != NULL)
1045 {
1046 g_array_free (self->priv->avatar_request_queue, TRUE);
1047 self->priv->avatar_request_queue = NULL;
1048 }
1049
1050 if (self->priv->avatar_request_idle_id != 0)
1051 {
1052 g_source_remove (self->priv->avatar_request_idle_id);
1053 self->priv->avatar_request_idle_id = 0;
10421054 }
10431055
10441056 ((GObjectClass *) tp_connection_parent_class)->finalize (object);
1818 */
1919
2020 #include <telepathy-glib/contact.h>
21
22 #include <errno.h>
2123
2224 #include <telepathy-glib/capabilities-internal.h>
2325 #include <telepathy-glib/dbus.h>
2830 #define DEBUG_FLAG TP_DEBUG_CONTACTS
2931 #include "telepathy-glib/connection-internal.h"
3032 #include "telepathy-glib/debug-internal.h"
31
3233
3334 /**
3435 * SECTION:contact
8990 * @TP_CONTACT_FEATURE_LOCATION: #TpContact:location (available since 0.11.1)
9091 * @TP_CONTACT_FEATURE_CAPABILITIES: #TpContact:capabilities
9192 * (available since 0.11.3)
93 * @TP_CONTACT_FEATURE_AVATAR_DATA: #TpContact:avatar-file and
94 * #TpContact:avatar-mime-type. Implies %TP_CONTACT_FEATURE_AVATAR_TOKEN
95 * (available since 0.11.6)
9296 * @NUM_TP_CONTACT_FEATURES: 1 higher than the highest TpContactFeature
9397 * supported by this version of telepathy-glib
9498 *
120124 PROP_IDENTIFIER,
121125 PROP_ALIAS,
122126 PROP_AVATAR_TOKEN,
127 PROP_AVATAR_FILE,
128 PROP_AVATAR_MIME_TYPE,
123129 PROP_PRESENCE_TYPE,
124130 PROP_PRESENCE_STATUS,
125131 PROP_PRESENCE_MESSAGE,
127133 PROP_CAPABILITIES,
128134 N_PROPS
129135 };
130
131136
132137 /* The API allows for more than 32 features, but this implementation does
133138 * not. We can easily expand this later. */
137142 CONTACT_FEATURE_FLAG_PRESENCE = 1 << TP_CONTACT_FEATURE_PRESENCE,
138143 CONTACT_FEATURE_FLAG_LOCATION = 1 << TP_CONTACT_FEATURE_LOCATION,
139144 CONTACT_FEATURE_FLAG_CAPABILITIES = 1 << TP_CONTACT_FEATURE_CAPABILITIES,
145 CONTACT_FEATURE_FLAG_AVATAR_DATA = 1 << TP_CONTACT_FEATURE_AVATAR_DATA,
140146 } ContactFeatureFlags;
141147
142148 struct _TpContactPrivate {
151157
152158 /* avatars */
153159 gchar *avatar_token;
160 GFile *avatar_file;
161 gchar *avatar_mime_type;
154162
155163 /* presence */
156164 TpConnectionPresenceType presence_type;
305313 return self->priv->avatar_token;
306314 }
307315
316 /**
317 * tp_contact_get_avatar_file:
318 * @self: a contact
319 *
320 * Return the contact's avatar file. This remains valid until the main loop
321 * is re-entered; if the caller requires a #GFile that will persist for
322 * longer than that, it must be reffed with g_object_ref().
323 *
324 * Returns: (transfer none): the same #GFile as the #TpContact:avatar-file property
325 * (possibly %NULL)
326 *
327 * Since: 0.11.6
328 */
329 GFile *
330 tp_contact_get_avatar_file (TpContact *self)
331 {
332 g_return_val_if_fail (self != NULL, NULL);
333
334 return self->priv->avatar_file;
335 }
336
337 /**
338 * tp_contact_get_avatar_mime_type:
339 * @self: a contact
340 *
341 * Return the contact's avatar MIME type. This remains valid until the main loop
342 * is re-entered; if the caller requires a string that will persist for
343 * longer than that, it must be copied with g_strdup().
344 *
345 * Returns: the same MIME type as the #TpContact:avatar-mime-type property
346 * (possibly %NULL)
347 *
348 * Since: 0.11.6
349 */
350 const gchar *
351 tp_contact_get_avatar_mime_type (TpContact *self)
352 {
353 g_return_val_if_fail (self != NULL, NULL);
354
355 return self->priv->avatar_mime_type;
356 }
308357
309358 /**
310359 * tp_contact_get_presence_type:
465514 self->priv->capabilities = NULL;
466515 }
467516
517 if (self->priv->avatar_file != NULL)
518 {
519 g_object_unref (self->priv->avatar_file);
520 self->priv->avatar_file = NULL;
521 }
522
468523 ((GObjectClass *) tp_contact_parent_class)->dispose (object);
469524 }
470525
477532 g_free (self->priv->identifier);
478533 g_free (self->priv->alias);
479534 g_free (self->priv->avatar_token);
535 g_free (self->priv->avatar_mime_type);
480536 g_free (self->priv->presence_status);
481537 g_free (self->priv->presence_message);
482538
515571
516572 case PROP_AVATAR_TOKEN:
517573 g_value_set_string (value, self->priv->avatar_token);
574 break;
575
576 case PROP_AVATAR_FILE:
577 g_value_set_object (value, self->priv->avatar_file);
578 break;
579
580 case PROP_AVATAR_MIME_TYPE:
581 g_value_set_string (value, self->priv->avatar_mime_type);
518582 break;
519583
520584 case PROP_PRESENCE_TYPE:
646710 NULL,
647711 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
648712 g_object_class_install_property (object_class, PROP_AVATAR_TOKEN,
713 param_spec);
714
715 /**
716 * TpContact:avatar-file:
717 *
718 * #GFile to the latest cached avatar image, or %NULL if this contact has
719 * no avatar, or if the avatar data is not yet retrieved.
720 *
721 * When #TpContact:avatar-token changes, this property is not updated
722 * immediately, but will be updated when the new avatar data is retrieved and
723 * stored in cache. Until then, the file will keep its old value of the latest
724 * cached avatar image.
725 *
726 * This is set to %NULL if %TP_CONTACT_FEATURE_AVATAR_DATA is not set on this
727 * contact. Note that setting %TP_CONTACT_FEATURE_AVATAR_DATA will also
728 * implicitly set %TP_CONTACT_FEATURE_AVATAR_TOKEN.
729 *
730 * Since: 0.11.6
731 */
732 param_spec = g_param_spec_object ("avatar-file",
733 "Avatar file",
734 "File to the latest cached avatar image, or %NULL",
735 G_TYPE_FILE,
736 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
737 g_object_class_install_property (object_class, PROP_AVATAR_FILE,
738 param_spec);
739
740 /**
741 * TpContact:avatar-mime-type:
742 *
743 * MIME type of the latest cached avatar image, or %NULL if this contact has
744 * no avatar, or if the avatar data is not yet retrieved.
745 *
746 * This is always the MIME type of the image given by #TpContact:avatar-file.
747 *
748 * Since: 0.11.6
749 */
750 param_spec = g_param_spec_string ("avatar-mime-type",
751 "Avatar MIME type",
752 "MIME type of the latest cached avatar image, or %NULL",
753 NULL,
754 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
755 g_object_class_install_property (object_class, PROP_AVATAR_MIME_TYPE,
649756 param_spec);
650757
651758 /**
18351942 }
18361943 }
18371944
1945 static gboolean
1946 build_avatar_filename (TpConnection *connection,
1947 const gchar *avatar_token,
1948 gboolean create_dir,
1949 gchar **ret_filename,
1950 gchar **ret_mime_filename)
1951 {
1952 gchar *protocol;
1953 gchar *cm_name;
1954 gchar *dir;
1955 gchar *token_escaped;
1956 gboolean success = TRUE;
1957
1958 if (!tp_connection_parse_object_path (connection, &protocol, &cm_name))
1959 return FALSE;
1960
1961 token_escaped = tp_escape_as_identifier (avatar_token);
1962 dir = g_build_filename (g_get_user_cache_dir (),
1963 "telepathy", "avatars", cm_name, protocol, NULL);
1964
1965 if (create_dir)
1966 {
1967 if (g_mkdir_with_parents (dir, 0700) == -1)
1968 {
1969 DEBUG ("Error creating avatar cache dir: %s", g_strerror (errno));
1970 success = FALSE;
1971 goto out;
1972 }
1973 }
1974
1975 if (ret_filename != NULL)
1976 *ret_filename = g_strconcat (dir, G_DIR_SEPARATOR_S, token_escaped, NULL);
1977
1978 if (ret_mime_filename != NULL)
1979 *ret_mime_filename = g_strconcat (dir, G_DIR_SEPARATOR_S, token_escaped,
1980 ".mime", NULL);
1981
1982 out:
1983
1984 g_free (protocol);
1985 g_free (cm_name);
1986 g_free (dir);
1987 g_free (token_escaped);
1988
1989 return success;
1990 }
1991
1992 static void contact_set_avatar_token (TpContact *self, const gchar *new_token,
1993 gboolean request);
1994
1995 static void
1996 contact_avatar_retrieved (TpConnection *connection,
1997 guint handle,
1998 const gchar *token,
1999 const GArray *avatar,
2000 const gchar *mime_type,
2001 gpointer user_data G_GNUC_UNUSED,
2002 GObject *weak_object G_GNUC_UNUSED)
2003 {
2004 TpContact *self = _tp_connection_lookup_contact (connection, handle);
2005 gchar *filename;
2006 gchar *mime_filename;
2007 GError *error = NULL;
2008
2009 if (!build_avatar_filename (connection, token, TRUE, &filename,
2010 &mime_filename))
2011 return;
2012
2013 /* Save avatar in cache, even if the contact is unknown, to avoid as much as
2014 * possible future avatar requests */
2015 if (!g_file_set_contents (filename, avatar->data, avatar->len, &error))
2016 {
2017 DEBUG ("Failed to store avatar in cache (%s): %s", filename,
2018 error ? error->message : "No error message");
2019 g_clear_error (&error);
2020 goto out;
2021 }
2022 if (!g_file_set_contents (mime_filename, mime_type, -1, &error))
2023 {
2024 DEBUG ("Failed to store MIME type in cache (%s): %s", mime_filename,
2025 error ? error->message : "No error message");
2026 g_clear_error (&error);
2027 goto out;
2028 }
2029
2030 DEBUG ("Contact#%u avatar stored in cache: %s, %s", handle, filename,
2031 mime_type);
2032
2033 if (self == NULL)
2034 goto out;
2035
2036 /* Update the avatar token if a newer one is given */
2037 contact_set_avatar_token (self, token, FALSE);
2038
2039 if (self->priv->avatar_file != NULL)
2040 g_object_unref (self->priv->avatar_file);
2041 self->priv->avatar_file = g_file_new_for_path (filename);
2042
2043 g_free (self->priv->avatar_mime_type);
2044 self->priv->avatar_mime_type = g_strdup (mime_type);
2045
2046 g_object_notify ((GObject *) self, "avatar-file");
2047 g_object_notify ((GObject *) self, "avatar-mime-type");
2048
2049 out:
2050 g_free (filename);
2051 g_free (mime_filename);
2052 }
2053
2054 static gboolean
2055 connection_avatar_request_idle_cb (gpointer user_data)
2056 {
2057 TpConnection *connection = user_data;
2058
2059 DEBUG ("Request %d avatars", connection->priv->avatar_request_queue->len);
2060
2061 tp_cli_connection_interface_avatars_call_request_avatars (connection, -1,
2062 connection->priv->avatar_request_queue, NULL, NULL, NULL, NULL);
2063
2064 g_array_free (connection->priv->avatar_request_queue, TRUE);
2065 connection->priv->avatar_request_queue = NULL;
2066 connection->priv->avatar_request_idle_id = 0;
2067
2068 return FALSE;
2069 }
2070
2071 static void
2072 contact_update_avatar_data (TpContact *self)
2073 {
2074 TpConnection *connection;
2075 gchar *filename = NULL;
2076 gchar *mime_filename = NULL;
2077
2078 /* If token is NULL, it means that CM doesn't know the token. In that case we
2079 * have to request the avatar data to get the token. This happens with XMPP
2080 * for offline contacts. We don't want to bypass the avatar cache, so we won't
2081 * update avatar. */
2082 if (self->priv->avatar_token == NULL)
2083 return;
2084
2085 /* If token is empty (""), it means the contact has no avatar. */
2086 if (tp_str_empty (self->priv->avatar_token))
2087 {
2088 if (self->priv->avatar_file != NULL)
2089 g_object_unref (self->priv->avatar_file);
2090 self->priv->avatar_file = NULL;
2091
2092 g_free (self->priv->avatar_mime_type);
2093 self->priv->avatar_mime_type = NULL;
2094
2095 DEBUG ("contact#%u has no avatar", self->priv->handle);
2096
2097 g_object_notify ((GObject *) self, "avatar-file");
2098 g_object_notify ((GObject *) self, "avatar-mime-type");
2099
2100 return;
2101 }
2102
2103 /* We have a token, search in cache... */
2104 if (build_avatar_filename (self->priv->connection, self->priv->avatar_token,
2105 FALSE, &filename, &mime_filename))
2106 {
2107 if (g_file_test (filename, G_FILE_TEST_EXISTS))
2108 {
2109 GError *error = NULL;
2110
2111 if (self->priv->avatar_file != NULL)
2112 g_object_unref (self->priv->avatar_file);
2113 self->priv->avatar_file = g_file_new_for_path (filename);
2114
2115 g_free (self->priv->avatar_mime_type);
2116 if (!g_file_get_contents (mime_filename, &self->priv->avatar_mime_type,
2117 NULL, &error))
2118 {
2119 DEBUG ("Error reading avatar MIME type (%s): %s", mime_filename,
2120 error ? error->message : "No error message");
2121 self->priv->avatar_mime_type = NULL;
2122 g_clear_error (&error);
2123 }
2124
2125 DEBUG ("contact#%u avatar found in cache: %s, %s",
2126 self->priv->handle, filename, self->priv->avatar_mime_type);
2127
2128 g_object_notify ((GObject *) self, "avatar-file");
2129 g_object_notify ((GObject *) self, "avatar-mime_type");
2130
2131 goto out;
2132 }
2133 }
2134
2135 /* Not found in cache, queue this contact. We do this to group contacts
2136 * for the AvatarRequest call */
2137 connection = self->priv->connection;
2138 if (connection->priv->avatar_request_queue == NULL)
2139 connection->priv->avatar_request_queue = g_array_new (FALSE, FALSE,
2140 sizeof (TpHandle));
2141
2142 g_array_append_val (connection->priv->avatar_request_queue,
2143 self->priv->handle);
2144
2145 if (connection->priv->avatar_request_idle_id == 0)
2146 connection->priv->avatar_request_idle_id = g_idle_add (
2147 connection_avatar_request_idle_cb, connection);
2148
2149 out:
2150
2151 g_free (filename);
2152 g_free (mime_filename);
2153 }
2154
2155 static void
2156 contacts_bind_to_avatar_retrieved (TpConnection *connection)
2157 {
2158 if (!connection->priv->tracking_avatar_retrieved)
2159 {
2160 connection->priv->tracking_avatar_retrieved = TRUE;
2161
2162 tp_cli_connection_interface_avatars_connect_to_avatar_retrieved
2163 (connection, contact_avatar_retrieved, NULL, NULL, NULL, NULL);
2164 }
2165 }
2166
2167 static void
2168 contacts_get_avatar_data (ContactsContext *c)
2169 {
2170 guint i;
2171
2172 g_assert (c->handles->len == c->contacts->len);
2173
2174 contacts_bind_to_avatar_retrieved (c->connection);
2175
2176 for (i = 0; i < c->contacts->len; i++)
2177 {
2178 TpContact *contact = g_ptr_array_index (c->contacts, i);
2179
2180 if ((contact->priv->has_features & CONTACT_FEATURE_FLAG_AVATAR_DATA) == 0)
2181 {
2182 contact->priv->has_features |= CONTACT_FEATURE_FLAG_AVATAR_DATA;
2183 contact_update_avatar_data (contact);
2184 }
2185 }
2186
2187 contacts_context_continue (c);
2188 }
2189
2190 static void
2191 contact_set_avatar_token (TpContact *self, const gchar *new_token,
2192 gboolean request)
2193 {
2194 if (!tp_strdiff (self->priv->avatar_token, new_token))
2195 return;
2196
2197 DEBUG ("contact#%u token is %s", self->priv->handle, new_token);
2198
2199 self->priv->has_features |= CONTACT_FEATURE_FLAG_AVATAR_TOKEN;
2200 g_free (self->priv->avatar_token);
2201 self->priv->avatar_token = g_strdup (new_token);
2202 g_object_notify ((GObject *) self, "avatar-token");
2203
2204 if (request && tp_contact_has_feature (self, TP_CONTACT_FEATURE_AVATAR_DATA))
2205 contact_update_avatar_data (self);
2206 }
2207
18382208 static void
18392209 contacts_avatar_updated (TpConnection *connection,
18402210 TpHandle handle,
18442214 {
18452215 TpContact *contact = _tp_connection_lookup_contact (connection, handle);
18462216
1847 DEBUG ("contact#%u token is %s", handle, new_token);
1848
1849 if (contact == NULL)
1850 return;
1851
1852 contact->priv->has_features |= CONTACT_FEATURE_FLAG_AVATAR_TOKEN;
1853 g_free (contact->priv->avatar_token);
1854 contact->priv->avatar_token = g_strdup (new_token);
1855 g_object_notify ((GObject *) contact, "avatar-token");
2217 if (contact != NULL)
2218 contact_set_avatar_token (contact, new_token, TRUE);
18562219 }
18572220
18582221
19942357 #endif
19952358 }
19962359
1997 if ((feature_flags & CONTACT_FEATURE_FLAG_AVATAR_TOKEN) != 0 &&
1998 !contacts_context_supports_iface (context,
1999 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS) &&
2000 tp_proxy_has_interface_by_id (context->connection,
2360 if (tp_proxy_has_interface_by_id (context->connection,
20012361 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS))
20022362 {
2003 g_queue_push_tail (&context->todo, contacts_get_avatar_tokens);
2363 if ((feature_flags & CONTACT_FEATURE_FLAG_AVATAR_TOKEN) != 0 &&
2364 !contacts_context_supports_iface (context,
2365 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS))
2366 g_queue_push_tail (&context->todo, contacts_get_avatar_tokens);
2367
2368 /* There is no contact attribute for avatar data, always use the
2369 * slow path for it. */
2370 if ((feature_flags & CONTACT_FEATURE_FLAG_AVATAR_DATA) != 0)
2371 g_queue_push_tail (&context->todo, contacts_get_avatar_data);
20042372 }
20052373
20062374 if ((feature_flags & CONTACT_FEATURE_FLAG_LOCATION) != 0 &&
21622530 s = tp_asv_get_string (asv, TP_TOKEN_CONNECTION_INTERFACE_AVATARS_TOKEN);
21632531
21642532 if (s != NULL)
2165 contacts_avatar_updated (connection, contact->priv->handle, s,
2166 NULL, NULL);
2533 contact_set_avatar_token (contact, s, TRUE);
21672534
21682535 boxed = tp_asv_get_boxed (asv,
21692536 TP_TOKEN_CONNECTION_INTERFACE_SIMPLE_PRESENCE_PRESENCE,
23032670 }
23042671
23052672 return contacts;
2673 }
2674
2675 static gboolean
2676 get_feature_flags (guint n_features,
2677 const TpContactFeature *features,
2678 ContactFeatureFlags *flags)
2679 {
2680 ContactFeatureFlags feature_flags = 0;
2681 guint i;
2682
2683 for (i = 0; i < n_features; i++)
2684 {
2685 g_return_val_if_fail (features[i] < NUM_TP_CONTACT_FEATURES, FALSE);
2686 feature_flags |= (1 << features[i]);
2687 }
2688
2689 /* Force AVATAR_TOKEN if we have AVATAR_DATA */
2690 if ((feature_flags & CONTACT_FEATURE_FLAG_AVATAR_DATA) != 0)
2691 feature_flags |= CONTACT_FEATURE_FLAG_AVATAR_TOKEN;
2692
2693 *flags = feature_flags;
2694
2695 return TRUE;
23062696 }
23072697
23082698 /**
23582748 g_return_if_fail (n_features == 0 || features != NULL);
23592749 g_return_if_fail (callback != NULL);
23602750
2361 for (i = 0; i < n_features; i++)
2362 {
2363 g_return_if_fail (features[i] < NUM_TP_CONTACT_FEATURES);
2364 feature_flags |= (1 << features[i]);
2365 }
2751 if (!get_feature_flags (n_features, features, &feature_flags))
2752 return;
23662753
23672754 context = contacts_context_new (self, n_handles, feature_flags,
23682755 CB_BY_HANDLE, user_data, destroy, weak_object);
24772864 g_return_if_fail (contacts[i]->priv->connection == self);
24782865 }
24792866
2480 for (i = 0; i < n_features; i++)
2481 {
2482 g_return_if_fail (features[i] < NUM_TP_CONTACT_FEATURES);
2483 feature_flags |= (1 << features[i]);
2484 }
2867 if (!get_feature_flags (n_features, features, &feature_flags))
2868 return;
24852869
24862870 context = contacts_context_new (self, n_contacts, feature_flags,
24872871 CB_UPGRADE, user_data, destroy, weak_object);
26893073 g_return_if_fail (n_features == 0 || features != NULL);
26903074 g_return_if_fail (callback != NULL);
26913075
2692 for (i = 0; i < n_features; i++)
2693 {
2694 g_return_if_fail (features[i] < NUM_TP_CONTACT_FEATURES);
2695 feature_flags |= (1 << features[i]);
2696 }
3076 if (!get_feature_flags (n_features, features, &feature_flags))
3077 return;
26973078
26983079 context = contacts_context_new (self, n_ids, feature_flags,
26993080 CB_BY_ID, user_data, destroy, weak_object);
2121 #define __TP_CONTACT_H__
2222
2323 #include <glib-object.h>
24 #include <gio/gio.h>
2425
2526 #include <telepathy-glib/capabilities.h>
2627 #include <telepathy-glib/connection.h>
5859 TP_CONTACT_FEATURE_PRESENCE,
5960 TP_CONTACT_FEATURE_LOCATION,
6061 TP_CONTACT_FEATURE_CAPABILITIES,
61 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_CAPABILITIES + 1)
62 TP_CONTACT_FEATURE_AVATAR_DATA,
63 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_AVATAR_DATA + 1)
6264 } TpContactFeature;
6365
6466 /* Basic functionality, always available */
8385
8486 /* TP_CONTACT_FEATURE_CAPABILITIES */
8587 TpCapabilities *tp_contact_get_capabilities (TpContact *self);
88
89 /* TP_CONTACT_FEATURE_AVATAR_DATA */
90 GFile *tp_contact_get_avatar_file (TpContact *self);
91 const gchar *tp_contact_get_avatar_mime_type (TpContact *self);
8692
8793 typedef void (*TpConnectionContactsByHandleCb) (TpConnection *connection,
8894 guint n_contacts, TpContact * const *contacts,
589589 }
590590
591591 /**
592 * tp_g_value_slice_new_bytes:
592 * tp_g_value_slice_new_bytes: (skip)
593593 * @length: number of bytes to copy
594594 * @bytes: location of an array of bytes to be copied (this may be %NULL
595595 * if and only if length is 0)
620620 }
621621
622622 /**
623 * tp_g_value_slice_new_take_bytes:
623 * tp_g_value_slice_new_take_bytes: (skip)
624624 * @bytes: a non-NULL #GArray of guchar, ownership of which will be taken by
625625 * the #GValue
626626 *
642642 }
643643
644644 /**
645 * tp_g_value_slice_new_object_path:
645 * tp_g_value_slice_new_object_path: (skip)
646646 * @path: a valid D-Bus object path which will be copied
647647 *
648648 * Slice-allocate a #GValue containing an object path, using
662662 }
663663
664664 /**
665 * tp_g_value_slice_new_static_object_path:
665 * tp_g_value_slice_new_static_object_path: (skip)
666666 * @path: a valid D-Bus object path which must remain valid forever
667667 *
668668 * Slice-allocate a #GValue containing an object path, using
682682 }
683683
684684 /**
685 * tp_g_value_slice_new_take_object_path:
685 * tp_g_value_slice_new_take_object_path: (skip)
686686 * @path: a valid D-Bus object path which will be freed with g_free() by the
687687 * returned #GValue (the caller must own it before calling this function, but
688688 * no longer owns it after this function returns)
554554 handle = g_array_index (contacts, TpHandle, i);
555555
556556 if ((mixin->group_flags & TP_CHANNEL_GROUP_FLAG_CAN_ADD) == 0 &&
557 !tp_handle_set_is_member (mixin->members, handle) &&
557558 !tp_handle_set_is_member (mixin->local_pending, handle))
558559 {
559560 DEBUG ("handle %u cannot be added to members without "
718719 {
719720 DEBUG ("handle %u is not a current or pending member",
720721 handle);
721
722 g_set_error (error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
723 "handle %u is not a current or pending member", handle);
724
725 return FALSE;
722 /* skip this handle during the second pass */
723 g_array_index (contacts, TpHandle, i) = 0;
726724 }
727725 }
728726
730728 for (i = 0; i < contacts->len; i++)
731729 {
732730 handle = g_array_index (contacts, TpHandle, i);
731
732 if (handle == 0)
733 continue;
733734
734735 if (mixin_cls->priv->remove_with_reason != NULL)
735736 {
0 /*
1 * object for HandleChannels calls context (internal)
2 *
3 * Copyright (C) 2009 Collabora Ltd. <http://www.collabora.co.uk/>
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_HANDLE_CHANNELS_CONTEXT_INTERNAL_H__
21 #define __TP_HANDLE_CHANNELS_CONTEXT_INTERNAL_H__
22
23 #include <dbus/dbus-glib.h>
24
25 #include <telepathy-glib/account.h>
26 #include <telepathy-glib/handle-channels-context.h>
27
28 G_BEGIN_DECLS
29
30 typedef enum
31 {
32 TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE,
33 TP_HANDLE_CHANNELS_CONTEXT_STATE_DONE,
34 TP_HANDLE_CHANNELS_CONTEXT_STATE_FAILED,
35 TP_HANDLE_CHANNELS_CONTEXT_STATE_DELAYED,
36 } TpHandleChannelsContextState;
37
38 struct _TpHandleChannelsContext {
39 /*<private>*/
40 GObject parent;
41 TpHandleChannelsContextPrivate *priv;
42
43 TpAccount *account;
44 TpConnection *connection;
45 /* array of reffed TpChannel */
46 GPtrArray *channels;
47 /* array of reffed TpChannelRequest */
48 GPtrArray *requests_satisfied;
49 guint64 user_action_time;
50 GHashTable *handler_info;
51 };
52
53 TpHandleChannelsContext * _tp_handle_channels_context_new (
54 TpAccount *account,
55 TpConnection *connection,
56 GPtrArray *channels,
57 GPtrArray *requests_satisfied,
58 guint64 user_action_time,
59 GHashTable *handler_info,
60 DBusGMethodInvocation *dbus_context);
61
62 TpHandleChannelsContextState _tp_handle_channels_context_get_state
63 (TpHandleChannelsContext *self);
64
65 void _tp_handle_channels_context_prepare_async (
66 TpHandleChannelsContext *self,
67 GAsyncReadyCallback callback,
68 gpointer user_data);
69
70 gboolean _tp_handle_channels_context_prepare_finish (
71 TpHandleChannelsContext *self,
72 GAsyncResult *result,
73 GError **error);
74
75 G_END_DECLS
76
77 #endif
0 /*
1 * object for HandleChannels calls context
2 *
3 * Copyright © 2010 Collabora Ltd.
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 /**
21 * SECTION: handle-channels-context
22 * @title: TpHandleChannelsContext
23 * @short_description: context of a Handler.HandleChannels() call
24 *
25 * Object used to represent the context of a Handler.HandleChannels()
26 * D-Bus call on a #TpBaseClient.
27 *
28 * Since: 0.11.6
29 */
30
31 /**
32 * TpHandleChannelsContext:
33 *
34 * Data structure representing the context of a Handler.HandleChannels()
35 * call.
36 *
37 * Since: 0.11.6
38 */
39
40 /**
41 * TpHandleChannelsContextClass:
42 *
43 * The class of a #TpHandleChannelsContext.
44 *
45 * Since: 0.11.6
46 */
47
48 #include "telepathy-glib/handle-channels-context.h"
49 #include "telepathy-glib/handle-channels-context-internal.h"
50
51 #include <telepathy-glib/channel.h>
52 #include <telepathy-glib/dbus.h>
53 #include <telepathy-glib/gtypes.h>
54
55 #define DEBUG_FLAG TP_DEBUG_CLIENT
56 #include "telepathy-glib/debug-internal.h"
57 #include "telepathy-glib/_gen/signals-marshal.h"
58
59 struct _TpHandleChannelsContextClass {
60 /*<private>*/
61 GObjectClass parent_class;
62 };
63
64 G_DEFINE_TYPE(TpHandleChannelsContext,
65 tp_handle_channels_context, G_TYPE_OBJECT)
66
67 enum {
68 PROP_ACCOUNT = 1,
69 PROP_CONNECTION,
70 PROP_CHANNELS,
71 PROP_REQUESTS_SATISFIED,
72 PROP_USER_ACTION_TIME,
73 PROP_HANDLER_INFO,
74 PROP_DBUS_CONTEXT,
75 N_PROPS
76 };
77
78 enum {
79 SIGNAL_DONE,
80 N_SIGNALS
81 };
82
83 static guint signals[N_SIGNALS] = { 0 };
84
85 struct _TpHandleChannelsContextPrivate
86 {
87 TpHandleChannelsContextState state;
88 GSimpleAsyncResult *result;
89 DBusGMethodInvocation *dbus_context;
90
91 /* Number of calls we are waiting they return. Once they have all returned
92 * the context is considered as prepared */
93 guint num_pending;
94 };
95
96 static void
97 tp_handle_channels_context_init (TpHandleChannelsContext *self)
98 {
99 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
100 TP_TYPE_HANDLE_CHANNELS_CONTEXT,
101 TpHandleChannelsContextPrivate);
102
103 self->priv->state = TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE;
104 }
105
106 static void
107 tp_handle_channels_context_dispose (GObject *object)
108 {
109 TpHandleChannelsContext *self = TP_HANDLE_CHANNELS_CONTEXT (
110 object);
111 void (*dispose) (GObject *) =
112 G_OBJECT_CLASS (tp_handle_channels_context_parent_class)->dispose;
113
114 if (self->priv->state == TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE ||
115 self->priv->state == TP_HANDLE_CHANNELS_CONTEXT_STATE_DELAYED)
116 {
117 GError error = { TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
118 "Disposing the TpHandleChannelsContext" };
119
120 WARNING ("Disposing a context in the %s state",
121 self->priv->state == TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE ?
122 "none": "delayed");
123
124 tp_handle_channels_context_fail (self, &error);
125 }
126
127 if (self->account != NULL)
128 {
129 g_object_unref (self->account);
130 self->account = NULL;
131 }
132
133 if (self->connection != NULL)
134 {
135 g_object_unref (self->connection);
136 self->connection = NULL;
137 }
138
139 if (self->channels != NULL)
140 {
141 g_ptr_array_foreach (self->channels, (GFunc) g_object_unref, NULL);
142 g_ptr_array_unref (self->channels);
143 self->channels = NULL;
144 }
145
146 if (self->requests_satisfied != NULL)
147 {
148 g_ptr_array_foreach (self->requests_satisfied, (GFunc) g_object_unref,
149 NULL);
150 g_ptr_array_unref (self->requests_satisfied);
151 self->requests_satisfied = NULL;
152 }
153
154 if (self->handler_info != NULL)
155 {
156 g_hash_table_unref (self->handler_info);
157 self->handler_info = NULL;
158 }
159
160 if (self->priv->result != NULL)
161 {
162 g_object_unref (self->priv->result);
163 self->priv->result = NULL;
164 }
165
166 if (dispose != NULL)
167 dispose (object);
168 }
169
170 static void
171 tp_handle_channels_context_get_property (GObject *object,
172 guint property_id,
173 GValue *value,
174 GParamSpec *pspec)
175 {
176 TpHandleChannelsContext *self = TP_HANDLE_CHANNELS_CONTEXT (
177 object);
178
179 switch (property_id)
180 {
181 case PROP_ACCOUNT:
182 g_value_set_object (value, self->account);
183 break;
184
185 case PROP_CONNECTION:
186 g_value_set_object (value, self->connection);
187 break;
188
189 case PROP_CHANNELS:
190 g_value_set_boxed (value, self->channels);
191 break;
192
193 case PROP_REQUESTS_SATISFIED:
194 g_value_set_boxed (value, self->requests_satisfied);
195 break;
196
197 case PROP_USER_ACTION_TIME:
198 g_value_set_int64 (value, self->user_action_time);
199 break;
200
201 case PROP_HANDLER_INFO:
202 g_value_set_boxed (value, self->handler_info);
203 break;
204
205 default:
206 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
207 break;
208 }
209 }
210
211 static void
212 tp_handle_channels_context_set_property (GObject *object,
213 guint property_id,
214 const GValue *value,
215 GParamSpec *pspec)
216 {
217 TpHandleChannelsContext *self = TP_HANDLE_CHANNELS_CONTEXT (
218 object);
219
220 switch (property_id)
221 {
222 case PROP_ACCOUNT:
223 self->account = g_value_dup_object (value);
224 break;
225
226 case PROP_CONNECTION:
227 self->connection = g_value_dup_object (value);
228 break;
229
230 case PROP_CHANNELS:
231 self->channels = g_value_dup_boxed (value);
232 g_ptr_array_foreach (self->channels, (GFunc) g_object_ref, NULL);
233 break;
234
235 case PROP_REQUESTS_SATISFIED:
236 self->requests_satisfied = g_value_dup_boxed (value);
237 g_ptr_array_foreach (self->requests_satisfied, (GFunc) g_object_ref,
238 NULL);
239 break;
240
241 case PROP_USER_ACTION_TIME:
242 self->user_action_time = g_value_get_int64 (value);
243 break;
244
245 case PROP_HANDLER_INFO:
246 self->handler_info = g_value_dup_boxed (value);
247 break;
248
249 case PROP_DBUS_CONTEXT:
250 self->priv->dbus_context = g_value_get_pointer (value);
251 break;
252
253 default:
254 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
255 break;
256 }
257 }
258
259 static void
260 tp_handle_channels_context_constructed (GObject *object)
261 {
262 TpHandleChannelsContext *self = TP_HANDLE_CHANNELS_CONTEXT (
263 object);
264 void (*chain_up) (GObject *) =
265 ((GObjectClass *)
266 tp_handle_channels_context_parent_class)->constructed;
267
268 if (chain_up != NULL)
269 chain_up (object);
270
271 g_assert (self->account != NULL);
272 g_assert (self->connection != NULL);
273 g_assert (self->channels != NULL);
274 g_assert (self->requests_satisfied != NULL);
275 g_assert (self->handler_info != NULL);
276 g_assert (self->priv->dbus_context != NULL);
277 }
278
279 static void
280 tp_handle_channels_context_class_init (
281 TpHandleChannelsContextClass *cls)
282 {
283 GObjectClass *object_class = G_OBJECT_CLASS (cls);
284 GParamSpec *param_spec;
285
286 g_type_class_add_private (cls, sizeof (TpHandleChannelsContextPrivate));
287
288 object_class->get_property = tp_handle_channels_context_get_property;
289 object_class->set_property = tp_handle_channels_context_set_property;
290 object_class->constructed = tp_handle_channels_context_constructed;
291 object_class->dispose = tp_handle_channels_context_dispose;
292
293 /**
294 * TpHandleChannelsContext:account:
295 *
296 * A #TpAccount object representing the Account of the DispatchOperation
297 * that has been passed to HandleChannels.
298 * Read-only except during construction.
299 *
300 * This property can't be %NULL.
301 *
302 * Since: 0.11.6
303 */
304 param_spec = g_param_spec_object ("account", "TpAccount",
305 "The TpAccount of the context",
306 TP_TYPE_ACCOUNT,
307 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
308 g_object_class_install_property (object_class, PROP_ACCOUNT,
309 param_spec);
310
311 /**
312 * TpHandleChannelsContext:connection:
313 *
314 * A #TpConnection object representing the Connection of the DispatchOperation
315 * that has been passed to HandleChannels.
316 * Read-only except during construction.
317 *
318 * This property can't be %NULL.
319 *
320 * Since: 0.11.6
321 */
322 param_spec = g_param_spec_object ("connection", "TpConnection",
323 "The TpConnection of the context",
324 TP_TYPE_CONNECTION,
325 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
326 g_object_class_install_property (object_class, PROP_CONNECTION,
327 param_spec);
328
329 /**
330 * TpHandleChannelsContext:channels:
331 *
332 * A #GPtrArray containing #TpChannel objects representing the channels
333 * that have been passed to HandleChannels.
334 * Read-only except during construction.
335 *
336 * This property can't be %NULL.
337 *
338 * Since: 0.11.6
339 */
340 param_spec = g_param_spec_boxed ("channels", "GPtrArray of TpChannel",
341 "The TpChannels that have been passed to HandleChannels",
342 G_TYPE_PTR_ARRAY,
343 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
344 g_object_class_install_property (object_class, PROP_CHANNELS,
345 param_spec);
346
347 /**
348 * TpHandleChannelsContext:requests-satisfied:
349 *
350 * A #GPtrArray containing #TpChannelRequest objects representing the
351 * requests that have been passed to HandleChannels.
352 * Read-only except during construction.
353 *
354 * This property can't be %NULL.
355 *
356 * Since: 0.11.6
357 */
358 param_spec = g_param_spec_boxed ("requests-satisfied",
359 "GPtrArray of TpChannelRequest",
360 "The TpChannelRequest that has been passed to "
361 "HandleChannels",
362 G_TYPE_PTR_ARRAY,
363 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
364 g_object_class_install_property (object_class, PROP_REQUESTS_SATISFIED,
365 param_spec);
366
367 /**
368 * TpHandleChannelsContext:user-action-time:
369 *
370 * The User_Action_Time that have been passed to HandleChannels.
371 * Read-only except during construction.
372 *
373 * If 0, the action doesn't involve any user action. Clients
374 * SHOULD avoid stealing focus when presenting the channel.
375 *
376 * If #G_MAXINT64: clients SHOULD behave as though the user
377 * action happened at the current time, e.g. a client MAY
378 * request that its window gains focus.
379 *
380 * Since: 0.11.6
381 */
382 param_spec = g_param_spec_int64 ("user-action-time",
383 "User action time",
384 "The User_Action_Time that has been passed to HandleChannels",
385 0, G_MAXINT64, 0,
386 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
387 g_object_class_install_property (object_class, PROP_USER_ACTION_TIME,
388 param_spec);
389
390 /**
391 * TpHandleChannelsContext:handler-info:
392 *
393 * A #GHashTable where the keys are string and values are GValue instances.
394 * It represents the Handler_info hash table that has been passed to
395 * HandleChannels.
396 *
397 * This property can't be %NULL.
398 *
399 * Since: 0.11.6
400 */
401 param_spec = g_param_spec_boxed ("handler-info", "Handler info",
402 "The Handler that has been passed to ObserveChannels",
403 TP_HASH_TYPE_STRING_VARIANT_MAP,
404 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
405 g_object_class_install_property (object_class, PROP_HANDLER_INFO,
406 param_spec);
407
408 /**
409 * TpHandleChannelsContext:dbus-context: (skip)
410 *
411 * The #DBusGMethodInvocation representing the D-Bus context of the
412 * HandleChannels call.
413 * Can only be written during construction.
414 *
415 * Since: 0.11.6
416 */
417 param_spec = g_param_spec_pointer ("dbus-context", "D-Bus context",
418 "The DBusGMethodInvocation associated with the HandleChannels call",
419 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
420 g_object_class_install_property (object_class, PROP_DBUS_CONTEXT,
421 param_spec);
422
423 /**
424 * TpHandleChannelsContext::done:
425 * @self: a #TpHandleChannelsContext
426 *
427 * Emitted when tp_handle_channels_context_accept has been called on @self.
428 *
429 * Since: 0.11.6
430 */
431 signals[SIGNAL_DONE] = g_signal_new (
432 "done", G_OBJECT_CLASS_TYPE (cls),
433 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
434 0,
435 NULL, NULL,
436 _tp_marshal_VOID__VOID,
437 G_TYPE_NONE, 0);
438
439 }
440
441 TpHandleChannelsContext * _tp_handle_channels_context_new (
442 TpAccount *account,
443 TpConnection *connection,
444 GPtrArray *channels,
445 GPtrArray *requests_satisfied,
446 guint64 user_action_time,
447 GHashTable *handler_info,
448 DBusGMethodInvocation *dbus_context)
449 {
450 return g_object_new (TP_TYPE_HANDLE_CHANNELS_CONTEXT,
451 "account", account,
452 "connection", connection,
453 "channels", channels,
454 "requests-satisfied", requests_satisfied,
455 "user-action-time", user_action_time,
456 "handler-info", handler_info,
457 "dbus-context", dbus_context,
458 NULL);
459 }
460
461 /**
462 * tp_handle_channels_context_accept:
463 * @self: a #TpHandleChannelsContext
464 *
465 * Called by #TpBaseClientClassAddDispatchOperationImpl when it's done so
466 * the D-Bus method can return.
467 *
468 * Since: 0.11.6
469 */
470 void
471 tp_handle_channels_context_accept (TpHandleChannelsContext *self)
472 {
473 g_return_if_fail (self->priv->state ==
474 TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE
475 || self->priv->state == TP_HANDLE_CHANNELS_CONTEXT_STATE_DELAYED);
476 g_return_if_fail (self->priv->dbus_context != NULL);
477
478 self->priv->state = TP_HANDLE_CHANNELS_CONTEXT_STATE_DONE;
479 dbus_g_method_return (self->priv->dbus_context);
480
481 self->priv->dbus_context = NULL;
482
483 g_signal_emit (self, signals[SIGNAL_DONE], 0);
484 }
485
486 /**
487 * tp_handle_channels_context_fail:
488 * @self: a #TpHandleChannelsContext
489 * @error: the error to return from the method
490 *
491 * Called by #TpBaseClientClassAddDispatchOperationImpl to raise a D-Bus error.
492 *
493 * Since: 0.11.6
494 */
495 void
496 tp_handle_channels_context_fail (TpHandleChannelsContext *self,
497 const GError *error)
498 {
499 g_return_if_fail (self->priv->state ==
500 TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE
501 || self->priv->state == TP_HANDLE_CHANNELS_CONTEXT_STATE_DELAYED);
502 g_return_if_fail (self->priv->dbus_context != NULL);
503
504 self->priv->state = TP_HANDLE_CHANNELS_CONTEXT_STATE_FAILED;
505 dbus_g_method_return_error (self->priv->dbus_context, error);
506
507 self->priv->dbus_context = NULL;
508 }
509
510 /**
511 * tp_handle_channels_context_delay:
512 * @self: a #TpHandleChannelsContext
513 *
514 * Called by #TpBaseClientClassAddDispatchOperationImpl to indicate that it
515 * implements the method in an async way. The caller must take a reference
516 * to the #TpHandleChannelsContext before calling this function, and
517 * is responsible for calling either
518 * tp_handle_channels_context_accept() or
519 * tp_handle_channels_context_fail() later.
520 *
521 * Since: 0.11.6
522 */
523 void
524 tp_handle_channels_context_delay (TpHandleChannelsContext *self)
525 {
526 g_return_if_fail (self->priv->state ==
527 TP_HANDLE_CHANNELS_CONTEXT_STATE_NONE);
528
529 self->priv->state = TP_HANDLE_CHANNELS_CONTEXT_STATE_DELAYED;
530 }
531
532 TpHandleChannelsContextState
533 _tp_handle_channels_context_get_state (
534 TpHandleChannelsContext *self)
535 {
536 return self->priv->state;
537 }
538
539 static gboolean
540 context_is_prepared (TpHandleChannelsContext *self)
541 {
542 return self->priv->num_pending == 0;
543 }
544
545 static void
546 context_check_prepare (TpHandleChannelsContext *self)
547 {
548 if (!context_is_prepared (self))
549 return;
550
551 /* is prepared */
552 g_simple_async_result_complete (self->priv->result);
553
554 g_object_unref (self->priv->result);
555 self->priv->result = NULL;
556 }
557
558 static void
559 account_prepare_cb (GObject *source,
560 GAsyncResult *result,
561 gpointer user_data)
562 {
563 TpHandleChannelsContext *self = user_data;
564 GError *error = NULL;
565
566 if (self->priv->result == NULL)
567 goto out;
568
569 if (!tp_proxy_prepare_finish (source, result, &error))
570 {
571 DEBUG ("Failed to prepare account: %s", error->message);
572 g_error_free (error);
573 }
574
575 self->priv->num_pending--;
576 context_check_prepare (self);
577
578 out:
579 g_object_unref (self);
580 }
581
582 static void
583 conn_prepare_cb (GObject *source,
584 GAsyncResult *result,
585 gpointer user_data)
586 {
587 TpHandleChannelsContext *self = user_data;
588 GError *error = NULL;
589
590 if (self->priv->result == NULL)
591 goto out;
592
593 if (!tp_proxy_prepare_finish (source, result, &error))
594 {
595 DEBUG ("Failed to prepare connection: %s", error->message);
596 g_error_free (error);
597 }
598
599 self->priv->num_pending--;
600 context_check_prepare (self);
601
602 out:
603 g_object_unref (self);
604 }
605
606 static void
607 channel_prepare_cb (GObject *source,
608 GAsyncResult *result,
609 gpointer user_data)
610 {
611 TpHandleChannelsContext *self = user_data;
612 GError *error = NULL;
613
614 if (self->priv->result == NULL)
615 goto out;
616
617 if (!tp_proxy_prepare_finish (source, result, &error))
618 {
619 DEBUG ("Failed to prepare channel: %s", error->message);
620
621 g_error_free (error);
622 }
623
624 self->priv->num_pending--;
625 context_check_prepare (self);
626
627 out:
628 g_object_unref (self);
629 }
630
631 static void
632 context_prepare (TpHandleChannelsContext *self)
633 {
634 GQuark account_features[] = { TP_ACCOUNT_FEATURE_CORE, 0 };
635 GQuark conn_features[] = { TP_CONNECTION_FEATURE_CORE, 0 };
636 GQuark channel_features[] = { TP_CHANNEL_FEATURE_CORE, 0 };
637 guint i;
638
639 self->priv->num_pending = 2;
640
641 tp_proxy_prepare_async (self->account, account_features,
642 account_prepare_cb, g_object_ref (self));
643
644 tp_proxy_prepare_async (self->connection, conn_features,
645 conn_prepare_cb, g_object_ref (self));
646
647 for (i = 0; i < self->channels->len; i++)
648 {
649 TpChannel *channel = g_ptr_array_index (self->channels, i);
650
651 self->priv->num_pending++;
652
653 tp_proxy_prepare_async (channel, channel_features,
654 channel_prepare_cb, g_object_ref (self));
655 }
656 }
657
658 void
659 _tp_handle_channels_context_prepare_async (
660 TpHandleChannelsContext *self,
661 GAsyncReadyCallback callback,
662 gpointer user_data)
663 {
664 g_return_if_fail (TP_IS_HANDLE_CHANNELS_CONTEXT (self));
665 /* This is only used once, by TpBaseClient, so for simplicity, we only
666 * allow one asynchronous preparation */
667 g_return_if_fail (self->priv->result == NULL);
668
669 self->priv->result = g_simple_async_result_new (G_OBJECT (self),
670 callback, user_data, _tp_handle_channels_context_prepare_async);
671
672 context_prepare (self);
673 }
674
675 gboolean
676 _tp_handle_channels_context_prepare_finish (
677 TpHandleChannelsContext *self,
678 GAsyncResult *result,
679 GError **error)
680 {
681 GSimpleAsyncResult *simple;
682
683 g_return_val_if_fail (TP_IS_HANDLE_CHANNELS_CONTEXT (self), FALSE);
684 g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
685
686 simple = G_SIMPLE_ASYNC_RESULT (result);
687
688 if (g_simple_async_result_propagate_error (simple, error))
689 return FALSE;
690
691 g_return_val_if_fail (g_simple_async_result_is_valid (result,
692 G_OBJECT (self), _tp_handle_channels_context_prepare_async),
693 FALSE);
694
695 return TRUE;
696 }
0 /*
1 * object for HandleChannels calls context
2 *
3 * Copyright © 2010 Collabora Ltd.
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_HANDLE_CHANNELS_CONTEXT_H__
21 #define __TP_HANDLE_CHANNELS_CONTEXT_H__
22
23 #include <gio/gio.h>
24 #include <glib-object.h>
25
26 G_BEGIN_DECLS
27
28 typedef struct _TpHandleChannelsContext TpHandleChannelsContext;
29 typedef struct _TpHandleChannelsContextClass \
30 TpHandleChannelsContextClass;
31 typedef struct _TpHandleChannelsContextPrivate \
32 TpHandleChannelsContextPrivate;
33
34 GType tp_handle_channels_context_get_type (void);
35
36 #define TP_TYPE_HANDLE_CHANNELS_CONTEXT \
37 (tp_handle_channels_context_get_type ())
38 #define TP_HANDLE_CHANNELS_CONTEXT(obj) \
39 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TYPE_HANDLE_CHANNELS_CONTEXT, \
40 TpHandleChannelsContext))
41 #define TP_HANDLE_CHANNELS_CONTEXT_CLASS(klass) \
42 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TYPE_HANDLE_CHANNELS_CONTEXT, \
43 TpHandleChannelsContextClass))
44 #define TP_IS_HANDLE_CHANNELS_CONTEXT(obj) \
45 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TYPE_HANDLE_CHANNELS_CONTEXT))
46 #define TP_IS_HANDLE_CHANNELS_CONTEXT_CLASS(klass) \
47 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TYPE_HANDLE_CHANNELS_CONTEXT))
48 #define TP_HANDLE_CHANNELS_CONTEXT_GET_CLASS(obj) \
49 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TYPE_HANDLE_CHANNELS_CONTEXT, \
50 TpHandleChannelsContextClass))
51
52 void tp_handle_channels_context_accept (
53 TpHandleChannelsContext *self);
54
55 void tp_handle_channels_context_fail (
56 TpHandleChannelsContext *self,
57 const GError *error);
58
59 void tp_handle_channels_context_delay (
60 TpHandleChannelsContext *self);
61
62 G_END_DECLS
63
64 #endif
3232
3333 /* Forward declaration because it's in the HandleRepo API */
3434
35 /**
36 * TpHandleSet:
37 *
38 * A set of handles. This is similar to a #TpIntSet (and implemented using
39 * one), but adding a handle to the set also references it.
40 */
35 #define TP_TYPE_HANDLE_SET (tp_handle_set_get_type ())
36 GType tp_handle_set_get_type (void);
37
4138 typedef struct _TpHandleSet TpHandleSet;
4239
4340 /* Handle repository abstract interface */
5047
5148 #define TP_IS_HANDLE_REPO_IFACE(obj) \
5249 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
53 TP_TYPE_HANDLE_REPO_IFACE)
50 TP_TYPE_HANDLE_REPO_IFACE))
5451
5552 #define TP_HANDLE_REPO_IFACE_GET_CLASS(obj) \
5653 (G_TYPE_INSTANCE_GET_INTERFACE ((obj), \
124121
125122 TpHandleSet * tp_handle_set_new (TpHandleRepoIface *repo)
126123 G_GNUC_WARN_UNUSED_RESULT;
124 TpHandleSet *tp_handle_set_copy (const TpHandleSet *other)
125 G_GNUC_WARN_UNUSED_RESULT;
126 void tp_handle_set_clear (TpHandleSet *set);
127127 void tp_handle_set_destroy (TpHandleSet *set);
128128
129129 TpIntSet *tp_handle_set_peek (TpHandleSet *set) G_GNUC_WARN_UNUSED_RESULT;
130130
131131 void tp_handle_set_add (TpHandleSet *set, TpHandle handle);
132132 gboolean tp_handle_set_remove (TpHandleSet *set, TpHandle handle);
133 gboolean tp_handle_set_is_member (TpHandleSet *set, TpHandle handle);
133 gboolean tp_handle_set_is_member (const TpHandleSet *set, TpHandle handle);
134134
135135 void tp_handle_set_foreach (TpHandleSet *set, TpHandleSetMemberFunc func,
136136 gpointer userdata);
137137
138 int tp_handle_set_size (TpHandleSet *set);
139 GArray *tp_handle_set_to_array (TpHandleSet *set) G_GNUC_WARN_UNUSED_RESULT;
138 gboolean tp_handle_set_is_empty (const TpHandleSet *set);
139 int tp_handle_set_size (const TpHandleSet *set);
140 GArray *tp_handle_set_to_array (const TpHandleSet *set)
141 G_GNUC_WARN_UNUSED_RESULT;
140142
141143 TpIntSet *tp_handle_set_update (TpHandleSet *set, const TpIntSet *add)
142144 G_GNUC_WARN_UNUSED_RESULT;
2828
2929 #include <telepathy-glib/intset.h>
3030
31 /**
32 * TpHandleSet:
33 *
34 * A set of handles. This is similar to a #TpIntSet (and implemented using
35 * one), but adding a handle to the set also references it.
36 */
3137 struct _TpHandleSet
3238 {
3339 TpHandleRepoIface *repo;
3541 };
3642
3743 /**
44 * TP_TYPE_HANDLE_SET:
45 *
46 * The boxed type of a #TpHandleSet.
47 *
48 * Since: 0.11.6
49 */
50
51 GType
52 tp_handle_set_get_type (void)
53 {
54 static GType type = 0;
55
56 if (G_UNLIKELY (type == 0))
57 {
58 type = g_boxed_type_register_static (
59 g_intern_static_string ("TpHandleSet"),
60 (GBoxedCopyFunc) tp_handle_set_copy,
61 (GBoxedFreeFunc) tp_handle_set_destroy);
62 }
63
64 return type;
65 }
66
67 /**
3868 * tp_handle_set_new:
3969 * @repo: #TpHandleRepoIface that holds the handles to be reffed by this set
4070 *
73103 tp_handle_set_foreach (set, freer, NULL);
74104 tp_intset_destroy (set->intset);
75105 g_slice_free (TpHandleSet, set);
106 }
107
108 /**
109 * tp_handle_set_clear:
110 * @set:#TpHandleSet to clear
111 *
112 * Remove every handle from @set, releasing the references it holds.
113 *
114 * Since: 0.11.6
115 */
116 void
117 tp_handle_set_clear (TpHandleSet *set)
118 {
119 tp_handle_set_foreach (set, freer, NULL);
120 g_assert (tp_handle_set_is_empty (set));
121 }
122
123 /**
124 * tp_handle_set_is_empty:
125 * @set:#TpHandleSet to check
126 *
127 * Return the same thing as <code>(tp_handle_set_size (set) == 0)</code>,
128 * but calculated more efficiently.
129 *
130 * Returns: %TRUE if the set has no members
131 *
132 * Since: 0.11.6
133 */
134 gboolean
135 tp_handle_set_is_empty (const TpHandleSet *set)
136 {
137 return tp_intset_is_empty (set->intset);
76138 }
77139
78140 /**
149211 *
150212 */
151213 gboolean
152 tp_handle_set_is_member (TpHandleSet *set, TpHandle handle)
214 tp_handle_set_is_member (const TpHandleSet *set,
215 TpHandle handle)
153216 {
154217 return tp_intset_is_member (set->intset, handle);
155218 }
197260 * Returns: the number of handles in this set
198261 */
199262 int
200 tp_handle_set_size (TpHandleSet *set)
263 tp_handle_set_size (const TpHandleSet *set)
201264 {
202265 return tp_intset_size (set->intset);
203266 }
212275 * in the set
213276 */
214277 GArray *
215 tp_handle_set_to_array (TpHandleSet *set)
278 tp_handle_set_to_array (const TpHandleSet *set)
216279 {
217280 g_return_val_if_fail (set != NULL, NULL);
218281
224287 {
225288 TpHandleSet *set = (TpHandleSet *) data;
226289 tp_handle_ref (set->repo, handle);
290 }
291
292 /**
293 * tp_handle_set_copy:
294 * @other: another handle set
295 *
296 * Creates a new #TpHandleSet with the same contents as @other.
297 *
298 * Returns: a new set
299 *
300 * Since: 0.11.6
301 */
302 TpHandleSet *
303 tp_handle_set_copy (const TpHandleSet *other)
304 {
305 TpHandleSet *set;
306
307 g_return_val_if_fail (other != NULL, NULL);
308
309 set = g_slice_new0 (TpHandleSet);
310 set->repo = other->repo;
311 set->intset = tp_intset_copy (other->intset);
312 tp_intset_foreach (set->intset, ref_one, set);
313 return set;
227314 }
228315
229316 /**
1212 $(srcdir)/connection-manager.c $(srcdir)/connection-manager.h \
1313 $(srcdir)/channel.c $(srcdir)/channel.h \
1414 $(srcdir)/handle.c $(srcdir)/handle.h \
15 $(srcdir)/handle-channels-context.c $(srcdir)/handle-channels-context.h \
1516 $(srcdir)/dbus-daemon.c $(srcdir)/dbus-daemon.h \
1617 $(srcdir)/interfaces.c $(srcdir)/interfaces.h \
1718 $(srcdir)/intset.c $(srcdir)/intset.h \
2223 $(srcdir)/debug.c $(srcdir)/debug.h \
2324 $(srcdir)/base-client.c $(srcdir)/base-client.h \
2425 $(srcdir)/simple-approver.c $(srcdir)/simple-approver.h \
26 $(srcdir)/simple-handler.c $(srcdir)/simple-handler.h \
2527 $(srcdir)/simple-observer.c $(srcdir)/simple-observer.h \
2628 $(srcdir)/dbus-properties-mixin.c $(srcdir)/dbus-properties-mixin.h \
2729 $(srcdir)/channel-dispatch-operation.c $(srcdir)/channel-dispatch-operation.h \
4143 $(INTROSPECTION_FILES)
4244 $(AM_V_GEN)$(INTROSPECTION_SCANNER) -v \
4345 --namespace TelepathyGLib \
44 --nsversion=$(VERSION) \
46 --nsversion=0.12 \
4547 --strip-prefix=tp \
4648 -I$(top_builddir) \
4749 -I$(top_srcdir) \
2727 * @see_also: #TpHandleSet
2828 *
2929 * A #TpIntSet is a set of unsigned integers, implemented as a
30 * dynamically-allocated bitfield.
30 * dynamically-allocated sparse bitfield.
3131 */
3232
3333 #include <telepathy-glib/intset.h>
34 #include <telepathy-glib/util.h>
3435
3536 #include <string.h>
3637 #include <glib.h>
3738
38 #define DEFAULT_SIZE 16
39 #define DEFAULT_INCREMENT 8
40 #define DEFAULT_INCREMENT_LOG2 3
39 /* On platforms with 64-bit pointers we could pack 64 bits into the values,
40 * if count_bits32() is replaced with a 64-bit version. This doesn't work
41 * yet. */
42 #undef USE_64_BITS
43
44 #ifdef USE_64_BITS
45 # define BITFIELD_BITS 64
46 # define BITFIELD_LOG2_BITS 6
47 #else
48 # define BITFIELD_BITS 32
49 # define BITFIELD_LOG2_BITS 5
50 #endif
51
52 tp_verify (1 << BITFIELD_LOG2_BITS == BITFIELD_BITS);
53 tp_verify (sizeof (gpointer) >= sizeof (gsize));
54 #define LOW_MASK (BITFIELD_BITS - 1)
55 #define HIGH_PART(x) (x & ~LOW_MASK)
56 #define LOW_PART(x) (x & LOW_MASK)
4157
4258 /**
4359 * TP_TYPE_INTSET:
8096 *
8197 * A structure representing iteration over a set of integers. Must be
8298 * initialized with either TP_INTSET_ITER_INIT() or tp_intset_iter_init().
99 *
100 * Since 0.11.6, consider using #TpIntSetFastIter if iteration in
101 * numerical order is not required.
102 *
83103 */
84104 /* (public, see header) */
85105
97117 * /<!-- -->* ... do something with iter ... *<!-- -->/
98118 * }
99119 * </programlisting></informalexample>
120 *
121 * Since 0.11.6, consider using #TpIntSetFastIter if iteration in
122 * numerical order is not required.
123 *
100124 */
101125 /* (macro, see header) */
102126
126150
127151 struct _TpIntSet
128152 {
129 guint32 *bits;
130 guint size;
153 /* HIGH_PART(n) => bitfield where bit LOW_PART(n) is set if n is present.
154 *
155 * For instance, when using 32-bit values, the set { 5, 23 } is represented
156 * by the map { 0 => (1 << 23 | 1 << 5) }, and the set { 1, 32, 42 } is
157 * represented by the map { 0 => (1 << 1), 32 => (1 << 10 | 1 << 0) }. */
158 GHashTable *table;
159 guint largest_ever;
131160 };
132161
133 static TpIntSet *
134 _tp_intset_new_with_size (guint size)
135 {
136 TpIntSet *set = g_slice_new (TpIntSet);
137 set->size = MAX (size, DEFAULT_SIZE);
138 set->bits = g_new0 (guint32, set->size);
139 return set;
162 /*
163 * Update @set's largest_ever member to be at least as large as everything
164 * that could be encoded in the hash table key @key.
165 *
166 * We could use g_bit_nth_msf (value, BITFIELD_BITS) instead of LOW_MASK if we
167 * wanted to get largest_ever exactly right, but we just need something
168 * reasonable to make TpIntSetIter terminate early, and carrying on for up to
169 * BITFIELD_BITS extra iterations isn't a problem.
170 */
171 static inline void
172 intset_update_largest_ever (TpIntSet *set,
173 gpointer key)
174 {
175 guint upper_bound = GPOINTER_TO_UINT (key) | LOW_MASK;
176
177 if (set->largest_ever < upper_bound)
178 set->largest_ever = upper_bound;
140179 }
141180
142181 /**
143182 * tp_intset_sized_new:
144 * @size: 1 more than the largest integer you expect to store
145 *
146 * Allocate an integer set just large enough to store the given number of bits,
147 * rounded up as necessary.
148 *
149 * The set will still expand automatically if you store larger integers;
150 * this is just an optimization to avoid wasting memory (if the set is too
151 * large) or time (if the set is too small and needs reallocation).
183 * @size: ignored (it was previously 1 more than the largest integer you
184 * expect to store)
185 *
186 * Allocate a new integer set.
152187 *
153188 * Returns: a new, empty integer set to be destroyed with tp_intset_destroy()
154189 */
155190 TpIntSet *
156 tp_intset_sized_new (guint size)
157 {
158 /* convert from a size in bits to a size in 32-bit words */
159 if (G_UNLIKELY (size == 0))
160 size = 1;
161 else
162 size = ((size - 1) >> 5) + 1;
163
164 return _tp_intset_new_with_size (size);
191 tp_intset_sized_new (guint size G_GNUC_UNUSED)
192 {
193 return tp_intset_new ();
165194 }
166195
167196 /**
168197 * tp_intset_new:
169198 *
170 * Allocate a new integer set with a default memory allocation.
199 * Allocate a new integer set.
171200 *
172201 * Returns: a new, empty integer set to be destroyed with tp_intset_destroy()
173202 */
174203 TpIntSet *
175204 tp_intset_new ()
176205 {
177 return _tp_intset_new_with_size (DEFAULT_SIZE);
206 TpIntSet *set = g_slice_new (TpIntSet);
207
208 set->table = g_hash_table_new (NULL, NULL);
209 set->largest_ever = 0;
210 return set;
178211 }
179212
180213 /**
191224 TpIntSet *
192225 tp_intset_new_containing (guint element)
193226 {
194 TpIntSet *ret = tp_intset_sized_new (element + 1);
227 TpIntSet *ret = tp_intset_new ();
195228
196229 tp_intset_add (ret, element);
197230
209242 {
210243 g_return_if_fail (set != NULL);
211244
212 g_free (set->bits);
245 g_hash_table_destroy (set->table);
213246 g_slice_free (TpIntSet, set);
214247 }
215248
224257 {
225258 g_return_if_fail (set != NULL);
226259
227 memset (set->bits, 0, set->size * sizeof (guint32));
260 g_hash_table_remove_all (set->table);
228261 }
229262
230263 /**
235268 * Add an integer into a TpIntSet.
236269 */
237270 void
238 tp_intset_add (TpIntSet *set, guint element)
239 {
240 guint offset;
241 guint newsize;
271 tp_intset_add (TpIntSet *set,
272 guint element)
273 {
274 gpointer key = GSIZE_TO_POINTER ((gsize) HIGH_PART (element));
275 gsize bit = LOW_PART (element);
276 gpointer old_value, new_value;
242277
243278 g_return_if_fail (set != NULL);
244279
245 offset = element >> 5;
246
247 if (offset >= set->size)
248 {
249 newsize = ((offset>>DEFAULT_INCREMENT_LOG2) +1 ) << DEFAULT_INCREMENT_LOG2;
250 set->bits = g_renew (guint32, set->bits, newsize);
251 memset (set->bits + set->size, 0,
252 sizeof (guint32) * (newsize - set->size));
253 set->size = newsize;
254 g_assert (offset<newsize);
255 }
256 set->bits[offset] = set->bits[offset] | (1<<(element & 0x1f));
280 old_value = g_hash_table_lookup (set->table, key);
281 new_value = GSIZE_TO_POINTER (GPOINTER_TO_SIZE (old_value) | (1 << bit));
282
283 if (old_value != new_value)
284 g_hash_table_insert (set->table, key, new_value);
285
286 if (element > set->largest_ever)
287 set->largest_ever = element;
257288 }
258289
259290 /**
266297 * Returns: %TRUE if @element was previously in @set
267298 */
268299 gboolean
269 tp_intset_remove (TpIntSet *set, guint element)
270 {
271 guint offset;
272 guint mask;
300 tp_intset_remove (TpIntSet *set,
301 guint element)
302 {
303 gpointer key = GSIZE_TO_POINTER ((gsize) HIGH_PART (element));
304 gsize bit = LOW_PART (element);
305 gpointer old_value, new_value;
273306
274307 g_return_val_if_fail (set != NULL, FALSE);
275308
276 offset = element >> 5;
277 mask = 1 << (element & 0x1f);
278 if (offset >= set->size)
279 return FALSE;
280 else if (!(set->bits[offset] & mask))
281 return FALSE;
282 else
283 {
284 set->bits[offset] &= ~mask;
309 old_value = g_hash_table_lookup (set->table, key);
310 new_value = GSIZE_TO_POINTER (GPOINTER_TO_SIZE (old_value) & ~ (1 << bit));
311
312 if (old_value != new_value)
313 {
314 if (new_value == NULL)
315 g_hash_table_remove (set->table, key);
316 else
317 g_hash_table_insert (set->table, key, new_value);
318
285319 return TRUE;
286320 }
321
322 return FALSE;
287323 }
288324
289325 static inline gboolean
290 _tp_intset_is_member (const TpIntSet *set, guint element)
291 {
292 guint offset;
293
294 offset = element >> 5;
295 if (offset >= set->size)
296 return FALSE;
297 else
298 return (set->bits[offset] & (1 << (element & 0x1f))) != 0;
326 _tp_intset_is_member (const TpIntSet *set,
327 guint element)
328 {
329 gpointer key = GSIZE_TO_POINTER ((gsize) HIGH_PART (element));
330 gsize bit = LOW_PART (element);
331 gpointer value;
332
333 value = g_hash_table_lookup (set->table, key);
334 return ((GPOINTER_TO_SIZE (value) & (1 << bit)) != 0);
299335 }
300336
301337 /**
321357 * @func: @TpIntFunc to use to iterate the set
322358 * @userdata: user data to pass to each call of @func
323359 *
324 * Call @func(element, @userdata) for each element of @set.
360 * Call @func(element, @userdata) for each element of @set, in order.
325361 */
326362
327363 void
328 tp_intset_foreach (const TpIntSet *set, TpIntFunc func, gpointer userdata)
329 {
330 guint i, j;
364 tp_intset_foreach (const TpIntSet *set,
365 TpIntFunc func,
366 gpointer userdata)
367 {
368 gsize high_part, low_part;
331369
332370 g_return_if_fail (set != NULL);
333371 g_return_if_fail (func != NULL);
334372
335 for (i = 0; i < set->size; i++)
336 {
337 if (set->bits[i])
338 for (j = 0; j < 32; j++)
339 {
340 if (set->bits[i] & 1 << j)
341 func (i * 32 + j, userdata);
342 }
343 }
344 }
345
373 for (high_part = 0;
374 high_part <= set->largest_ever;
375 high_part += BITFIELD_BITS)
376 {
377 gsize entry = GPOINTER_TO_SIZE (g_hash_table_lookup (set->table,
378 GSIZE_TO_POINTER (high_part)));
379
380 if (entry == 0)
381 continue;
382
383 for (low_part = 0; low_part < BITFIELD_BITS; low_part++)
384 {
385 if (entry & (1 << low_part))
386 {
387 func (high_part + low_part, userdata);
388 }
389 }
390 }
391 }
346392
347393 static void
348394 addint (guint i, gpointer data)
357403 *
358404 * <!--Returns: says it all-->
359405 *
360 * Returns: a GArray of guint (which must be freed by the caller) containing
406 * Returns: (element-type uint): a GArray of guint (which must be freed by the caller) containing
361407 * the same integers as @set.
362408 */
363409 GArray *
377423
378424 /**
379425 * tp_intset_from_array:
380 * @array: An array of guint
426 * @array: (element-type uint): An array of guint
381427 *
382428 * <!--Returns: says it all-->
383429 *
388434 tp_intset_from_array (const GArray *array)
389435 {
390436 TpIntSet *set;
391 guint max, i;
437 guint i;
392438
393439 g_return_val_if_fail (array != NULL, NULL);
394440
395 /* look at the 1st, last and middle values in the array to get an
396 * approximation of the largest */
397 max = 0;
398 if (array->len > 0)
399 max = g_array_index (array, guint, 0);
400 if (array->len > 1)
401 max = MAX (max, g_array_index (array, guint, array->len - 1));
402 if (array->len > 2)
403 max = MAX (max, g_array_index (array, guint, (array->len - 1) >> 1));
404 set = _tp_intset_new_with_size (1 + (max >> 5));
441 set = tp_intset_new ();
405442
406443 for (i = 0; i < array->len; i++)
407444 {
411448 return set;
412449 }
413450
451 /* these magic numbers would need adjusting for 64-bit storage */
452 tp_verify (BITFIELD_BITS == 32);
453
454 static inline guint
455 count_bits32 (guint32 n)
456 {
457 n = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111);
458 return ((n + (n >> 3)) & 030707070707) % 63;
459 }
414460
415461 /**
416462 * tp_intset_size:
424470 guint
425471 tp_intset_size (const TpIntSet *set)
426472 {
427 guint i, count = 0;
428 guint32 n;
473 guint count = 0;
474 gpointer entry;
475 GHashTableIter iter;
429476
430477 g_return_val_if_fail (set != NULL, 0);
431478
432 for (i = 0; i < set->size; i++)
433 {
434 n = set->bits[i];
435 n = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111);
436 count += ((n + (n >> 3)) & 030707070707) % 63;
479 g_hash_table_iter_init (&iter, (GHashTable *) set->table);
480
481 while (g_hash_table_iter_next (&iter, NULL, &entry))
482 {
483 count += count_bits32 (GPOINTER_TO_SIZE (entry));
437484 }
438485
439486 return count;
440487 }
441488
489 /**
490 * tp_intset_is_empty:
491 * @set: a set of integers
492 *
493 * Return the same thing as <code>(tp_intset_size (set) == 0)</code>,
494 * but calculated more efficiently.
495 *
496 * Returns: %TRUE if @set is empty
497 *
498 * Since: 0.11.6
499 */
500 gboolean
501 tp_intset_is_empty (const TpIntSet *set)
502 {
503 g_return_val_if_fail (set != NULL, TRUE);
504 return (g_hash_table_size (set->table) == 0);
505 }
442506
443507 /**
444508 * tp_intset_is_equal:
451515 */
452516
453517 gboolean
454 tp_intset_is_equal (const TpIntSet *left, const TpIntSet *right)
455 {
456 const TpIntSet *large, *small;
457 guint i;
518 tp_intset_is_equal (const TpIntSet *left,
519 const TpIntSet *right)
520 {
521 gpointer key, value;
522 GHashTableIter iter;
458523
459524 g_return_val_if_fail (left != NULL, FALSE);
460525 g_return_val_if_fail (right != NULL, FALSE);
461526
462 if (left->size > right->size)
463 {
464 large = left;
465 small = right;
466 }
467 else
468 {
469 large = right;
470 small = left;
471 }
472
473 for (i = 0; i < small->size; i++)
474 {
475 if (large->bits[i] != small->bits[i])
476 return FALSE;
477 }
478
479 for (i = small->size; i < large->size; i++)
480 {
481 if (large->bits[i] != 0)
482 return FALSE;
527 if (g_hash_table_size (left->table) != g_hash_table_size (right->table))
528 return FALSE;
529
530 g_hash_table_iter_init (&iter, (GHashTable *) left->table);
531
532 while (g_hash_table_iter_next (&iter, &key, &value))
533 {
534 if (g_hash_table_lookup (right->table, key) != value)
535 {
536 return FALSE;
537 }
483538 }
484539
485540 return TRUE;
499554 TpIntSet *
500555 tp_intset_copy (const TpIntSet *orig)
501556 {
557 gpointer key, value;
558 GHashTableIter iter;
502559 TpIntSet *ret;
503560
504561 g_return_val_if_fail (orig != NULL, NULL);
505562
506 ret = _tp_intset_new_with_size (orig->size);
507 memcpy (ret->bits, orig->bits, (ret->size * sizeof (guint32)));
563 ret = tp_intset_new ();
564
565 g_hash_table_iter_init (&iter, (GHashTable *) orig->table);
566
567 while (g_hash_table_iter_next (&iter, &key, &value))
568 {
569 intset_update_largest_ever (ret, key);
570 g_hash_table_insert (ret->table, key, value);
571 }
508572
509573 return ret;
510574 }
525589 TpIntSet *
526590 tp_intset_intersection (const TpIntSet *left, const TpIntSet *right)
527591 {
528 const TpIntSet *large, *small;
592 gpointer key, value;
593 GHashTableIter iter;
529594 TpIntSet *ret;
530 guint i;
531
532 g_return_val_if_fail (left != NULL, NULL);
533 g_return_val_if_fail (right != NULL, NULL);
534
535 if (left->size > right->size)
536 {
537 large = left;
538 small = right;
539 }
540 else
541 {
542 large = right;
543 small = left;
544 }
545
546 ret = tp_intset_copy (small);
547
548 for (i = 0; i < ret->size; i++)
549 {
550 ret->bits[i] &= large->bits[i];
595
596 ret = tp_intset_new ();
597
598 g_hash_table_iter_init (&iter, (GHashTable *) left->table);
599
600 while (g_hash_table_iter_next (&iter, &key, &value))
601 {
602 gsize v = GPOINTER_TO_SIZE (value);
603
604 v &= GPOINTER_TO_SIZE (g_hash_table_lookup (right->table, key));
605
606 if (v != 0)
607 {
608 intset_update_largest_ever (ret, key);
609 g_hash_table_insert (ret->table, key, GSIZE_TO_POINTER (v));
610 }
551611 }
552612
553613 return ret;
569629 TpIntSet *
570630 tp_intset_union (const TpIntSet *left, const TpIntSet *right)
571631 {
572 const TpIntSet *large, *small;
632 gpointer key, value;
633 GHashTableIter iter;
573634 TpIntSet *ret;
574 guint i;
575
576 g_return_val_if_fail (left != NULL, NULL);
577 g_return_val_if_fail (right != NULL, NULL);
578
579 if (left->size > right->size)
580 {
581 large = left;
582 small = right;
583 }
584 else
585 {
586 large = right;
587 small = left;
588 }
589
590 ret = tp_intset_copy (large);
591
592 for (i = 0; i < small->size; i++)
593 {
594 ret->bits[i] |= small->bits[i];
635
636 ret = tp_intset_copy (left);
637
638 g_hash_table_iter_init (&iter, (GHashTable *) right->table);
639
640 while (g_hash_table_iter_next (&iter, &key, &value))
641 {
642 gsize v = GPOINTER_TO_SIZE (value);
643
644 intset_update_largest_ever (ret, key);
645 v |= GPOINTER_TO_SIZE (g_hash_table_lookup (ret->table, key));
646 g_hash_table_insert (ret->table, key, GSIZE_TO_POINTER (v));
595647 }
596648
597649 return ret;
614666 tp_intset_difference (const TpIntSet *left, const TpIntSet *right)
615667 {
616668 TpIntSet *ret;
617 guint i;
669 gpointer key, value;
670 GHashTableIter iter;
618671
619672 g_return_val_if_fail (left != NULL, NULL);
620673 g_return_val_if_fail (right != NULL, NULL);
621674
622675 ret = tp_intset_copy (left);
623676
624 for (i = 0; i < MIN (right->size, left->size); i++)
625 {
626 ret->bits[i] &= ~right->bits[i];
677 g_hash_table_iter_init (&iter, (GHashTable *) right->table);
678
679 while (g_hash_table_iter_next (&iter, &key, &value))
680 {
681 gsize v = GPOINTER_TO_SIZE (value);
682 v = (GPOINTER_TO_SIZE (g_hash_table_lookup (ret->table, key))) & ~v;
683
684 /* No need to update largest_ever here - we're only deleting members. */
685
686 if (v == 0)
687 g_hash_table_remove (ret->table, key);
688 else
689 g_hash_table_insert (ret->table, key, GSIZE_TO_POINTER (v));
627690 }
628691
629692 return ret;
645708 TpIntSet *
646709 tp_intset_symmetric_difference (const TpIntSet *left, const TpIntSet *right)
647710 {
648 const TpIntSet *large, *small;
649711 TpIntSet *ret;
650 guint i;
712 gpointer key, value;
713 GHashTableIter iter;
651714
652715 g_return_val_if_fail (left != NULL, NULL);
653716 g_return_val_if_fail (right != NULL, NULL);
654717
655 if (left->size > right->size)
656 {
657 large = left;
658 small = right;
659 }
660 else
661 {
662 large = right;
663 small = left;
664 }
665
666 ret = tp_intset_copy (large);
667
668 for (i = 0; i < small->size; i++)
669 {
670 ret->bits[i] ^= small->bits[i];
718 ret = tp_intset_copy (left);
719
720 g_hash_table_iter_init (&iter, (GHashTable *) right->table);
721
722 while (g_hash_table_iter_next (&iter, &key, &value))
723 {
724 gsize v = GPOINTER_TO_SIZE (value);
725 v = v ^ GPOINTER_TO_SIZE (g_hash_table_lookup (ret->table, key));
726
727 /* No need to update largest_ever here - we're only deleting members. */
728
729 if (v == 0)
730 g_hash_table_remove (ret->table, key);
731 else
732 g_hash_table_insert (ret->table, key, GSIZE_TO_POINTER (v));
671733 }
672734
673735 return ret;
718780 * printf ("%u is in the intset\n", iter.element);
719781 * }
720782 * </programlisting></informalexample>
783 *
784 * Since 0.11.6, consider using #TpIntSetFastIter if iteration in
785 * numerical order is not required.
721786 *
722787 * Returns: %TRUE if (@iter->element) has been advanced
723788 */
744809 return TRUE;
745810 }
746811 }
747 while (iter->element < (iter->set->size << 5)
748 && iter->element != (guint)(-1));
812 while (iter->element < iter->set->largest_ever &&
813 iter->element != (guint)(-1));
749814 return FALSE;
750815 }
816
817 /**
818 * TpIntSetFastIter:
819 *
820 * An opaque structure representing iteration in undefined order over a set of
821 * integers. Must be initialized with tp_intset_fast_iter_init().
822 *
823 * Usage is similar to #GHashTableIter:
824 *
825 * <informalexample><programlisting>
826 * TpIntSetFastIter iter;
827 * guint element;
828 *
829 * tp_intset_fast_iter_init (&amp;iter, intset);
830 *
831 * while (tp_intset_fast_iter_next (&amp;iter, &amp;element))
832 * {
833 * printf ("%u is in the intset\n", element);
834 * }
835 * </programlisting></informalexample>
836 *
837 * Since: 0.11.6
838 */
839
840 typedef struct {
841 GHashTableIter hash_iter;
842 gboolean ok;
843 gsize high_part;
844 gsize bitfield;
845 } RealFastIter;
846
847 tp_verify (sizeof (TpIntSetFastIter) >= sizeof (RealFastIter));
848
849 /**
850 * tp_intset_fast_iter_init:
851 * @iter: an iterator
852 * @set: a set
853 *
854 * Initialize @iter to iterate over @set in arbitrary order. @iter will become
855 * invalid if @set is modified.
856 *
857 * Since: 0.11.6
858 */
859 void
860 tp_intset_fast_iter_init (TpIntSetFastIter *iter,
861 const TpIntSet *set)
862 {
863 RealFastIter *real = (RealFastIter *) iter;
864 g_return_if_fail (set != NULL);
865 g_return_if_fail (set->table != NULL);
866
867 g_hash_table_iter_init (&real->hash_iter, (GHashTable *) set->table);
868 real->bitfield = 0;
869 real->high_part = 0;
870 real->ok = TRUE;
871 }
872
873 /**
874 * tp_intset_fast_iter_next:
875 * @iter: an iterator
876 * @output: a location to store a new integer, in arbitrary order
877 *
878 * Advances @iter and retrieves the integer it now points to. Iteration
879 * is not necessarily in numerical order.
880 *
881 * Returns: %FALSE if the end of the set has been reached
882 *
883 * Since: 0.11.6
884 */
885 gboolean
886 tp_intset_fast_iter_next (TpIntSetFastIter *iter,
887 guint *output)
888 {
889 RealFastIter *real = (RealFastIter *) iter;
890 guint low_part;
891
892 if (!real->ok)
893 return FALSE;
894
895 if (real->bitfield == 0)
896 {
897 gpointer k, v;
898
899 real->ok = g_hash_table_iter_next (&real->hash_iter, &k, &v);
900
901 if (!real->ok)
902 return FALSE;
903
904 real->high_part = GPOINTER_TO_SIZE (k);
905 real->bitfield = GPOINTER_TO_SIZE (v);
906 g_assert (real->bitfield != 0);
907 }
908
909 for (low_part = 0; low_part < BITFIELD_BITS; low_part++)
910 {
911 if (real->bitfield & (1 << low_part))
912 {
913 /* clear the bit so we won't return it again */
914 real->bitfield -= (1 << low_part);
915
916 if (output != NULL)
917 *output = real->high_part | low_part;
918
919 return TRUE;
920 }
921 }
922
923 g_assert_not_reached ();
924 }
4949 GArray *tp_intset_to_array (const TpIntSet *set) G_GNUC_WARN_UNUSED_RESULT;
5050 TpIntSet *tp_intset_from_array (const GArray *array) G_GNUC_WARN_UNUSED_RESULT;
5151
52 gboolean tp_intset_is_empty (const TpIntSet *set) G_GNUC_WARN_UNUSED_RESULT;
5253 guint tp_intset_size (const TpIntSet *set) G_GNUC_WARN_UNUSED_RESULT;
5354
5455 gboolean tp_intset_is_equal (const TpIntSet *left, const TpIntSet *right)
9697
9798 gboolean tp_intset_iter_next (TpIntSetIter *iter);
9899
100 typedef struct {
101 /*<private>*/
102 gpointer _dummy[16];
103 } TpIntSetFastIter;
104
105 void tp_intset_fast_iter_init (TpIntSetFastIter *iter,
106 const TpIntSet *set);
107
108 gboolean tp_intset_fast_iter_next (TpIntSetFastIter *iter,
109 guint *output);
110
99111 G_END_DECLS
100112
101113 #endif /*__TP_INTSET_H__*/
19221922 {
19231923 GPtrArray *arrays = g_ptr_array_sized_new (g_queue_get_length (
19241924 mixin->priv->pending));
1925 GList *link;
1925 GList *l;
19261926 GType type = dbus_g_type_get_collection ("GPtrArray",
19271927 TP_HASH_TYPE_MESSAGE_PART);
19281928
1929 for (link = g_queue_peek_head_link (mixin->priv->pending);
1930 link != NULL;
1931 link = g_list_next (link))
1929 for (l = g_queue_peek_head_link (mixin->priv->pending);
1930 l != NULL;
1931 l = g_list_next (l))
19321932 {
1933 TpMessage *msg = link->data;
1933 TpMessage *msg = l->data;
19341934
19351935 g_ptr_array_add (arrays, g_boxed_copy (type, msg->parts));
19361936 }
876876 G_OBJECT_GET_CLASS (obj));
877877 GPtrArray *prop_arr;
878878 GValue prop_list = { 0, };
879 TpIntSetIter iter = TP_INTSET_ITER_INIT (props);
879 TpIntSetFastIter iter;
880880 guint len = tp_intset_size (props);
881 guint prop_id;
881882
882883 if (len == 0)
883884 {
891892 "%s: emitting properties changed for propert%s:\n",
892893 G_STRFUNC, (len > 1) ? "ies" : "y");
893894
894 while (tp_intset_iter_next (&iter))
895 tp_intset_fast_iter_init (&iter, props);
896
897 while (tp_intset_fast_iter_next (&iter, &prop_id))
895898 {
896899 GValue prop_val = { 0, };
897 guint prop_id = iter.element;
898900
899901 g_value_init (&prop_val, TP_STRUCT_TYPE_PROPERTY_VALUE);
900902 g_value_take_boxed (&prop_val,
943945 G_OBJECT_GET_CLASS (obj));
944946 GPtrArray *prop_arr;
945947 GValue prop_list = { 0, };
946 TpIntSetIter iter = TP_INTSET_ITER_INIT (props);
948 TpIntSetFastIter iter;
947949 guint len = tp_intset_size (props);
950 guint prop_id;
948951
949952 if (len == 0)
950953 {
958961 "%s: emitting properties flags changed for propert%s:\n",
959962 G_STRFUNC, (len > 1) ? "ies" : "y");
960963
961 while (tp_intset_iter_next (&iter))
964 tp_intset_fast_iter_init (&iter, props);
965
966 while (tp_intset_fast_iter_next (&iter, &prop_id))
962967 {
963968 GValue prop_val = { 0, };
964 guint prop_id = iter.element;
965969 guint prop_flags;
966970
967971 prop_flags = mixin->properties[prop_id].flags;
4141 void _tp_proxy_set_feature_prepared (TpProxy *self,
4242 GQuark feature,
4343 gboolean succeeded);
44 void _tp_proxy_set_features_failed (TpProxy *self,
45 const GError *error);
4446
4547 #endif
151151 gboolean tp_proxy_prepare_finish (gpointer self,
152152 GAsyncResult *result,
153153 GError **error);
154 void _tp_proxy_set_features_failed (TpProxy *self,
155 const GError *error);
156154
157155 G_END_DECLS
158156
99 VOID:UINT,UINT,UINT,STRING,POINTER
1010 VOID:OBJECT,BOOLEAN
1111 VOID:OBJECT,UINT,INT,STRING
12 VOID:OBJECT,OBJECT
13 VOID:OBJECT,STRING,STRING
14 VOID:VOID
0 /*
1 * Simple implementation of an Handler
2 *
3 * Copyright © 2010 Collabora Ltd.
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 /**
21 * SECTION: simple-handler
22 * @title: TpSimpleHandler
23 * @short_description: a subclass of #TpBaseClient implementing
24 * a simple Handler
25 *
26 * This class makes it easier to write #TpSvcClient implementing the
27 * TpSvcClientHandler interface.
28 *
29 * A typical simple handler would look liks this:
30 * |[
31 * static void
32 * my_handle_channels (TpSimpleHandler *self,
33 * TpAccount *account,
34 * TpConnection *connection,
35 * GList *channels,
36 * GList *requests_satisfied,
37 * gint64 user_action_time,
38 * GList *requests,
39 * TpHandleChannelsContext *context,
40 * gpointer user_data)
41 * {
42 * /<!-- -->* start handling the channels here *<!-- -->/
43 *
44 * tp_handle_channels_context_accept (context);
45 * }
46 *
47 * client = tp_simple_handler_new (dbus, FALSE, FALSE, "MyHandler", FALSE,
48 * my_handle_channels, user_data);
49 *
50 * tp_base_client_take_handler_filter (client, tp_asv_new (
51 * TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
52 * TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
53 * NULL));
54 *
55 * tp_base_client_register (client, NULL);
56 * ]|
57 *
58 * See examples/client/text-handler.c for a complete example.
59 *
60 * Since: 0.11.6
61 */
62
63 /**
64 * TpSimpleHandler:
65 *
66 * Data structure representing a simple Handler implementation.
67 *
68 * Since: 0.11.6
69 */
70
71 /**
72 * TpSimpleHandlerClass:
73 *
74 * The class of a #TpSimpleHandler.
75 *
76 * Since: 0.11.6
77 */
78
79 /**
80 * TpSimpleHandlerHandleChannelsImpl:
81 * @self: a #TpSimpleHandler instance
82 * @account: a #TpAccount having %TP_ACCOUNT_FEATURE_CORE prepared if possible
83 * @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
84 * if possible
85 * @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
86 * all having %TP_CHANNEL_FEATURE_CORE prepared if possible
87 * @requests_satisfied: (element-type TelepathyGLib.ChannelRequest): a #GList of
88 * #TpChannelRequest having their object-path defined but are not guaranteed
89 * to be prepared.
90 * @user_action_time: the time at which user action occurred, or 0 if this
91 * channel is to be handled for some reason not involving user action.
92 * @context: a #TpHandleChannelsContext representing the context of this
93 * D-Bus call
94 * @user_data: arbitrary user-supplied data passed to tp_simple_handler_new()
95 *
96 * Signature of the implementation of the HandleChannels method.
97 *
98 * This function must call either tp_handle_channels_context_accept(),
99 * tp_handle_channels_context_delay() or tp_handle_channels_context_fail()
100 * on @context before it returns.
101 *
102 * Since: 0.11.6
103 */
104
105 #include "telepathy-glib/simple-handler.h"
106
107 #define DEBUG_FLAG TP_DEBUG_CLIENT
108 #include "telepathy-glib/debug-internal.h"
109
110 G_DEFINE_TYPE(TpSimpleHandler, tp_simple_handler, TP_TYPE_BASE_CLIENT)
111
112 enum {
113 PROP_BYPASS_APPROVAL = 1,
114 PROP_REQUESTS,
115 PROP_CALLBACK,
116 PROP_USER_DATA,
117 PROP_DESTROY,
118 N_PROPS
119 };
120
121 struct _TpSimpleHandlerPrivate
122 {
123 TpSimpleHandlerHandleChannelsImpl callback;
124 gpointer user_data;
125 GDestroyNotify destroy;
126 };
127
128 static void
129 tp_simple_handler_init (TpSimpleHandler *self)
130 {
131 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TYPE_SIMPLE_HANDLER,
132 TpSimpleHandlerPrivate);
133 }
134
135 static void
136 tp_simple_handler_set_property (GObject *object,
137 guint property_id,
138 const GValue *value,
139 GParamSpec *pspec)
140 {
141 TpBaseClient *base = TP_BASE_CLIENT (object);
142 TpSimpleHandler *self = TP_SIMPLE_HANDLER (object);
143
144 switch (property_id)
145 {
146 case PROP_BYPASS_APPROVAL:
147 tp_base_client_set_handler_bypass_approval (base,
148 g_value_get_boolean (value));
149 break;
150
151 case PROP_REQUESTS:
152 if (g_value_get_boolean (value))
153 tp_base_client_set_handler_request_notification (base);
154 break;
155
156 case PROP_CALLBACK:
157 self->priv->callback = g_value_get_pointer (value);
158 break;
159
160 case PROP_USER_DATA:
161 self->priv->user_data = g_value_get_pointer (value);
162 break;
163
164 case PROP_DESTROY:
165 self->priv->destroy = g_value_get_pointer (value);
166 break;
167
168 default:
169 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
170 break;
171 }
172 }
173
174 static void
175 tp_simple_handler_constructed (GObject *object)
176 {
177 TpSimpleHandler *self = TP_SIMPLE_HANDLER (object);
178 void (*chain_up) (GObject *) =
179 ((GObjectClass *) tp_simple_handler_parent_class)->constructed;
180
181 g_assert (self->priv->callback != NULL);
182
183 if (chain_up != NULL)
184 chain_up (object);
185 }
186
187 static void
188 tp_simple_handler_dispose (GObject *object)
189 {
190 TpSimpleHandler *self = TP_SIMPLE_HANDLER (object);
191 void (*dispose) (GObject *) =
192 G_OBJECT_CLASS (tp_simple_handler_parent_class)->dispose;
193
194 if (self->priv->destroy != NULL)
195 {
196 self->priv->destroy (self->priv->user_data);
197 self->priv->destroy = NULL;
198 }
199
200 if (dispose != NULL)
201 dispose (object);
202 }
203
204 static void
205 handle_channels (
206 TpBaseClient *client,
207 TpAccount *account,
208 TpConnection *connection,
209 GList *channels,
210 GList *requests_satisfied,
211 gint64 user_action_time,
212 TpHandleChannelsContext *context)
213 {
214 TpSimpleHandler *self = TP_SIMPLE_HANDLER (client);
215
216 self->priv->callback (self, account, connection, channels,
217 requests_satisfied, user_action_time, context, self->priv->user_data);
218 }
219
220 static void
221 tp_simple_handler_class_init (TpSimpleHandlerClass *cls)
222 {
223 GObjectClass *object_class = G_OBJECT_CLASS (cls);
224 TpBaseClientClass *base_clt_cls = TP_BASE_CLIENT_CLASS (cls);
225 GParamSpec *param_spec;
226
227 g_type_class_add_private (cls, sizeof (TpSimpleHandlerPrivate));
228
229 object_class->set_property = tp_simple_handler_set_property;
230 object_class->constructed = tp_simple_handler_constructed;
231 object_class->dispose = tp_simple_handler_dispose;
232
233 /**
234 * TpSimpleHandler:bypass-approval:
235 *
236 * The value of the Handler.BypassApproval D-Bus property.
237 *
238 * Since: 0.11.6
239 */
240 param_spec = g_param_spec_boolean ("bypass-approval", "bypass approval",
241 "Handler.BypassApproval",
242 FALSE,
243 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
244 g_object_class_install_property (object_class, PROP_BYPASS_APPROVAL,
245 param_spec);
246
247 /**
248 * TpSimpleHandler:requests:
249 *
250 * If %TRUE, the Handler will implement the Requests interface
251 *
252 * Since: 0.11.6
253 */
254 param_spec = g_param_spec_boolean ("requests", "requests",
255 "Requests",
256 FALSE,
257 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
258 g_object_class_install_property (object_class, PROP_REQUESTS,
259 param_spec);
260
261 /**
262 * TpSimpleHandler:callback:
263 *
264 * The TpSimpleHandlerHandleChannelsImpl callback implementing the
265 * HandleChannels D-Bus method.
266 *
267 * This property can't be %NULL.
268 *
269 * Since: 0.11.6
270 */
271 param_spec = g_param_spec_pointer ("callback",
272 "Callback",
273 "Function called when HandleChannels is called",
274 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
275 g_object_class_install_property (object_class, PROP_CALLBACK,
276 param_spec);
277
278 /**
279 * TpSimpleHandler:user-data:
280 *
281 * The user-data pointer passed to the callback implementing the
282 * HandleChannels D-Bus method.
283 *
284 * Since: 0.11.6
285 */
286 param_spec = g_param_spec_pointer ("user-data", "user data",
287 "pointer passed as user-data when HandleChannels is called",
288 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
289 g_object_class_install_property (object_class, PROP_USER_DATA,
290 param_spec);
291
292 /**
293 * TpSimpleHandler:destroy:
294 *
295 * The #GDestroyNotify function called to free the user-data pointer when
296 * the #TpSimpleHandler is destroyed.
297 *
298 * Since: 0.11.6
299 */
300 param_spec = g_param_spec_pointer ("destroy", "destroy",
301 "function called to destroy the user-data when destroying the handler",
302 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
303 g_object_class_install_property (object_class, PROP_DESTROY,
304 param_spec);
305
306 tp_base_client_implement_handle_channels (base_clt_cls, handle_channels);
307 }
308
309 /**
310 * tp_simple_handler_new:
311 * @dbus: a #TpDBusDaemon object, may not be %NULL
312 * @bypass_approval: the value of the Handler.BypassApproval D-Bus property
313 * (see tp_base_client_set_handler_bypass_approval() for details)
314 * @requests: if this handler implement Requests (see
315 * tp_base_client_set_handler_request_notification() for details)
316 * @name: the name of the Handler (see #TpBaseClient:name: for details)
317 * @unique: the value of the TpBaseClient:uniquify-name: property
318 * @callback: the function called when HandleChannels is called
319 * @user_data: arbitrary user-supplied data passed to @callback
320 * @destroy: called with the user_data as argument, when the #TpSimpleHandler
321 * is destroyed
322 *
323 * Convenient function to create a new #TpSimpleHandler instance.
324 *
325 * Returns: (type TelepathyGLib.SimpleHandler): a new #TpSimpleHandler
326 *
327 * Since: 0.11.6
328 */
329 TpBaseClient *
330 tp_simple_handler_new (TpDBusDaemon *dbus,
331 gboolean bypass_approval,
332 gboolean requests,
333 const gchar *name,
334 gboolean unique,
335 TpSimpleHandlerHandleChannelsImpl callback,
336 gpointer user_data,
337 GDestroyNotify destroy)
338 {
339 return g_object_new (TP_TYPE_SIMPLE_HANDLER,
340 "dbus-daemon", dbus,
341 "bypass-approval", bypass_approval,
342 "requests", requests,
343 "name", name,
344 "uniquify-name", unique,
345 "callback", callback,
346 "user-data", user_data,
347 "destroy", destroy,
348 NULL);
349 }
0 /*
1 * Simple implementation of an Handler
2 *
3 * Copyright © 2010 Collabora Ltd.
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_SIMPLE_HANDLER_H__
21 #define __TP_SIMPLE_HANDLER_H__
22
23 #include <dbus/dbus-glib.h>
24 #include <glib-object.h>
25
26 #include <telepathy-glib/base-client.h>
27
28 G_BEGIN_DECLS
29
30 typedef struct _TpSimpleHandler TpSimpleHandler;
31 typedef struct _TpSimpleHandlerClass TpSimpleHandlerClass;
32 typedef struct _TpSimpleHandlerPrivate TpSimpleHandlerPrivate;
33
34 struct _TpSimpleHandlerClass {
35 /*<private>*/
36 TpBaseClientClass parent_class;
37 GCallback _padding[7];
38 };
39
40 struct _TpSimpleHandler {
41 /*<private>*/
42 TpBaseClient parent;
43 TpSimpleHandlerPrivate *priv;
44 };
45
46 GType tp_simple_handler_get_type (void);
47
48 #define TP_TYPE_SIMPLE_HANDLER \
49 (tp_simple_handler_get_type ())
50 #define TP_SIMPLE_HANDLER(obj) \
51 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TYPE_SIMPLE_HANDLER, \
52 TpSimpleHandler))
53 #define TP_SIMPLE_HANDLER_CLASS(klass) \
54 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TYPE_SIMPLE_HANDLER, \
55 TpSimpleHandlerClass))
56 #define TP_IS_SIMPLE_HANDLER(obj) \
57 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TYPE_SIMPLE_HANDLER))
58 #define TP_IS_SIMPLE_HANDLER_CLASS(klass) \
59 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TYPE_SIMPLE_HANDLER))
60 #define TP_SIMPLE_HANDLER_GET_CLASS(obj) \
61 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TYPE_SIMPLE_HANDLER, \
62 TpSimpleHandlerClass))
63
64 typedef void (*TpSimpleHandlerHandleChannelsImpl) (
65 TpSimpleHandler *self,
66 TpAccount *account,
67 TpConnection *connection,
68 GList *channels,
69 GList *requests_satisfied,
70 gint64 user_action_time,
71 TpHandleChannelsContext *context,
72 gpointer user_data);
73
74 TpBaseClient * tp_simple_handler_new (TpDBusDaemon *dbus,
75 gboolean bypass_approval,
76 gboolean requests,
77 const gchar *name,
78 gboolean unique,
79 TpSimpleHandlerHandleChannelsImpl callback,
80 gpointer user_data,
81 GDestroyNotify destroy);
82
83 G_END_DECLS
84
85 #endif
4545 #include <telepathy-glib/handle.h>
4646 #include <telepathy-glib/contact.h>
4747 #include <telepathy-glib/debug.h>
48 #include <telepathy-glib/simple-approver.h>
49 #include <telepathy-glib/simple-handler.h>
4850 #include <telepathy-glib/simple-observer.h>
4951
5052 #include <telepathy-glib/svc-generic.h>
0 Version: TELEPATHY_GLIB_0.11.6
1 Extends: TELEPATHY_GLIB_0.11.5
2 Release: 0.11.6
3
4 tp_account_get_changing_presence
5 tp_base_client_add_handler_capabilities
6 tp_base_client_add_handler_capabilities_varargs
7 tp_base_client_add_handler_capability
8 tp_base_client_add_handler_filter
9 tp_base_client_be_a_handler
10 tp_base_client_get_handled_channels
11 tp_base_client_get_pending_requests
12 tp_base_client_implement_handle_channels
13 tp_base_client_set_handler_bypass_approval
14 tp_base_client_set_handler_request_notification
15 tp_base_client_take_handler_filter
16 tp_base_client_unregister
17 tp_cli_channel_dispatch_operation_call_handle_with_time
18 tp_cli_channel_interface_dtmf_call_multiple_tones
19 tp_cli_channel_interface_dtmf_connect_to_sending_tones
20 tp_cli_channel_interface_dtmf_connect_to_stopped_tones
21 tp_cli_channel_interface_dtmf_run_multiple_tones
22 tp_contact_get_avatar_file
23 tp_contact_get_avatar_mime_type
24 tp_handle_channels_context_accept
25 tp_handle_channels_context_delay
26 tp_handle_channels_context_fail
27 tp_handle_channels_context_get_type
28 tp_handle_set_clear
29 tp_handle_set_copy
30 tp_handle_set_get_type
31 tp_handle_set_is_empty
32 tp_intset_fast_iter_init
33 tp_intset_fast_iter_next
34 tp_intset_is_empty
35 tp_simple_handler_get_type
36 tp_simple_handler_new
37 tp_svc_channel_dispatch_operation_implement_handle_with_time
38 tp_svc_channel_interface_dtmf_emit_sending_tones
39 tp_svc_channel_interface_dtmf_emit_stopped_tones
40 tp_svc_channel_interface_dtmf_implement_multiple_tones
290290 PACKAGE_VERSION = @PACKAGE_VERSION@
291291 PATH_SEPARATOR = @PATH_SEPARATOR@
292292 PKG_CONFIG = @PKG_CONFIG@
293 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
294 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
293295 PYTHON = @PYTHON@
294296 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
295297 PYTHON_PLATFORM = @PYTHON_PLATFORM@
1717 test-connection-handles \
1818 test-connection-inject-bug16307 \
1919 test-connection-getinterfaces-failure \
20 test-contact-lists \
2021 test-contacts \
2122 test-contacts-bug-19101 \
2223 test-contacts-mixin \
3839 test-self-handle \
3940 test-self-presence \
4041 test-simple-approver \
42 test-simple-handler \
4143 test-simple-observer \
4244 test-text-mixin \
4345 test-text-respawn \
8890
8991 test_connection_SOURCES = connection.c
9092
93 test_contact_lists_SOURCES = contact-lists.c
94 test_contact_lists_LDADD = \
95 $(LDADD) \
96 $(top_builddir)/examples/cm/contactlist/libexample-cm-contactlist.la
97
9198 test_connection_bug_18845_SOURCES = connection-bug-18845.c
9299
93100 test_connection_handles_SOURCES = connection-handles.c
170177 test_simple_observer_SOURCES = simple-observer.c
171178
172179 test_simple_approver_SOURCES = simple-approver.c
180
181 test_simple_handler_SOURCES = simple-handler.c
173182
174183 check_c_sources = *.c
175184 include $(top_srcdir)/tools/check-coding-style.mk
4545 test-connection-handles$(EXEEXT) \
4646 test-connection-inject-bug16307$(EXEEXT) \
4747 test-connection-getinterfaces-failure$(EXEEXT) \
48 test-contacts$(EXEEXT) test-contacts-bug-19101$(EXEEXT) \
49 test-contacts-mixin$(EXEEXT) test-contacts-slow-path$(EXEEXT) \
50 test-dbus$(EXEEXT) test-disconnection$(EXEEXT) \
51 test-error-enum$(EXEEXT) test-example-no-protocols$(EXEEXT) \
48 test-contact-lists$(EXEEXT) test-contacts$(EXEEXT) \
49 test-contacts-bug-19101$(EXEEXT) test-contacts-mixin$(EXEEXT) \
50 test-contacts-slow-path$(EXEEXT) test-dbus$(EXEEXT) \
51 test-disconnection$(EXEEXT) test-error-enum$(EXEEXT) \
52 test-example-no-protocols$(EXEEXT) \
5253 test-finalized-in-invalidated-handler$(EXEEXT) \
5354 test-get-interface-after-invalidate$(EXEEXT) \
5455 test-group-mixin$(EXEEXT) test-handle-repo$(EXEEXT) \
5758 test-long-connection-name$(EXEEXT) test-message-mixin$(EXEEXT) \
5859 test-params-cm$(EXEEXT) test-properties$(EXEEXT) \
5960 test-self-handle$(EXEEXT) test-self-presence$(EXEEXT) \
60 test-simple-approver$(EXEEXT) test-simple-observer$(EXEEXT) \
61 test-text-mixin$(EXEEXT) test-text-respawn$(EXEEXT) \
62 test-unsupported-interface$(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)
6364 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
6465 $(top_srcdir)/tools/check-coding-style.mk \
6566 $(top_srcdir)/tools/valgrind.mk
222223 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
223224 $(top_builddir)/tests/lib/libtp-glib-tests.la \
224225 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
226 am_test_contact_lists_OBJECTS = contact-lists.$(OBJEXT)
227 test_contact_lists_OBJECTS = $(am_test_contact_lists_OBJECTS)
228 test_contact_lists_DEPENDENCIES = $(am__DEPENDENCIES_2) \
229 $(top_builddir)/examples/cm/contactlist/libexample-cm-contactlist.la
225230 am_test_contacts_OBJECTS = contacts.$(OBJEXT)
226231 test_contacts_OBJECTS = $(am_test_contacts_OBJECTS)
227232 test_contacts_LDADD = $(LDADD)
374379 test_simple_approver_OBJECTS = $(am_test_simple_approver_OBJECTS)
375380 test_simple_approver_LDADD = $(LDADD)
376381 test_simple_approver_DEPENDENCIES = \
382 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
383 $(top_builddir)/tests/lib/libtp-glib-tests.la \
384 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
385 am_test_simple_handler_OBJECTS = simple-handler.$(OBJEXT)
386 test_simple_handler_OBJECTS = $(am_test_simple_handler_OBJECTS)
387 test_simple_handler_LDADD = $(LDADD)
388 test_simple_handler_DEPENDENCIES = \
377389 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
378390 $(top_builddir)/tests/lib/libtp-glib-tests.la \
379391 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
441453 $(test_connection_getinterfaces_failure_SOURCES) \
442454 $(test_connection_handles_SOURCES) \
443455 $(test_connection_inject_bug16307_SOURCES) \
444 $(test_contacts_SOURCES) $(test_contacts_bug_19101_SOURCES) \
456 $(test_contact_lists_SOURCES) $(test_contacts_SOURCES) \
457 $(test_contacts_bug_19101_SOURCES) \
445458 $(test_contacts_mixin_SOURCES) \
446459 $(test_contacts_slow_path_SOURCES) $(test_dbus_SOURCES) \
447460 $(test_disconnection_SOURCES) $(test_error_enum_SOURCES) \
456469 $(test_message_mixin_SOURCES) $(test_params_cm_SOURCES) \
457470 $(test_properties_SOURCES) $(nodist_test_properties_SOURCES) \
458471 $(test_self_handle_SOURCES) $(test_self_presence_SOURCES) \
459 $(test_simple_approver_SOURCES) \
472 $(test_simple_approver_SOURCES) $(test_simple_handler_SOURCES) \
460473 $(test_simple_observer_SOURCES) $(test_text_mixin_SOURCES) \
461474 $(test_text_respawn_SOURCES) \
462475 $(test_unsupported_interface_SOURCES)
474487 $(test_connection_getinterfaces_failure_SOURCES) \
475488 $(test_connection_handles_SOURCES) \
476489 $(test_connection_inject_bug16307_SOURCES) \
477 $(test_contacts_SOURCES) $(test_contacts_bug_19101_SOURCES) \
490 $(test_contact_lists_SOURCES) $(test_contacts_SOURCES) \
491 $(test_contacts_bug_19101_SOURCES) \
478492 $(test_contacts_mixin_SOURCES) \
479493 $(test_contacts_slow_path_SOURCES) $(test_dbus_SOURCES) \
480494 $(test_disconnection_SOURCES) $(test_error_enum_SOURCES) \
488502 $(test_message_mixin_SOURCES) $(test_params_cm_SOURCES) \
489503 $(test_properties_SOURCES) $(test_self_handle_SOURCES) \
490504 $(test_self_presence_SOURCES) $(test_simple_approver_SOURCES) \
491 $(test_simple_observer_SOURCES) $(test_text_mixin_SOURCES) \
492 $(test_text_respawn_SOURCES) \
505 $(test_simple_handler_SOURCES) $(test_simple_observer_SOURCES) \
506 $(test_text_mixin_SOURCES) $(test_text_respawn_SOURCES) \
493507 $(test_unsupported_interface_SOURCES)
494508 ETAGS = etags
495509 CTAGS = ctags
576590 PACKAGE_VERSION = @PACKAGE_VERSION@
577591 PATH_SEPARATOR = @PATH_SEPARATOR@
578592 PKG_CONFIG = @PKG_CONFIG@
593 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
594 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
579595 PYTHON = @PYTHON@
580596 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
581597 PYTHON_PLATFORM = @PYTHON_PLATFORM@
679695 $(top_builddir)/examples/cm/echo/libexample-cm-echo.la
680696
681697 test_connection_SOURCES = connection.c
698 test_contact_lists_SOURCES = contact-lists.c
699 test_contact_lists_LDADD = \
700 $(LDADD) \
701 $(top_builddir)/examples/cm/contactlist/libexample-cm-contactlist.la
702
682703 test_connection_bug_18845_SOURCES = connection-bug-18845.c
683704 test_connection_handles_SOURCES = connection-handles.c
684705 test_connection_error_SOURCES = connection-error.c
742763
743764 test_simple_observer_SOURCES = simple-observer.c
744765 test_simple_approver_SOURCES = simple-approver.c
766 test_simple_handler_SOURCES = simple-handler.c
745767 check_c_sources = *.c
746768 AM_CFLAGS = \
747769 $(ERROR_CFLAGS) \
892914 test-connection-inject-bug16307$(EXEEXT): $(test_connection_inject_bug16307_OBJECTS) $(test_connection_inject_bug16307_DEPENDENCIES)
893915 @rm -f test-connection-inject-bug16307$(EXEEXT)
894916 $(AM_V_CCLD)$(LINK) $(test_connection_inject_bug16307_OBJECTS) $(test_connection_inject_bug16307_LDADD) $(LIBS)
917 test-contact-lists$(EXEEXT): $(test_contact_lists_OBJECTS) $(test_contact_lists_DEPENDENCIES)
918 @rm -f test-contact-lists$(EXEEXT)
919 $(AM_V_CCLD)$(LINK) $(test_contact_lists_OBJECTS) $(test_contact_lists_LDADD) $(LIBS)
895920 test-contacts$(EXEEXT): $(test_contacts_OBJECTS) $(test_contacts_DEPENDENCIES)
896921 @rm -f test-contacts$(EXEEXT)
897922 $(AM_V_CCLD)$(LINK) $(test_contacts_OBJECTS) $(test_contacts_LDADD) $(LIBS)
955980 test-simple-approver$(EXEEXT): $(test_simple_approver_OBJECTS) $(test_simple_approver_DEPENDENCIES)
956981 @rm -f test-simple-approver$(EXEEXT)
957982 $(AM_V_CCLD)$(LINK) $(test_simple_approver_OBJECTS) $(test_simple_approver_LDADD) $(LIBS)
983 test-simple-handler$(EXEEXT): $(test_simple_handler_OBJECTS) $(test_simple_handler_DEPENDENCIES)
984 @rm -f test-simple-handler$(EXEEXT)
985 $(AM_V_CCLD)$(LINK) $(test_simple_handler_OBJECTS) $(test_simple_handler_LDADD) $(LIBS)
958986 test-simple-observer$(EXEEXT): $(test_simple_observer_OBJECTS) $(test_simple_observer_DEPENDENCIES)
959987 @rm -f test-simple-observer$(EXEEXT)
960988 $(AM_V_CCLD)$(LINK) $(test_simple_observer_OBJECTS) $(test_simple_observer_LDADD) $(LIBS)
9931021 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-handles.Po@am__quote@
9941022 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-inject-bug16307.Po@am__quote@
9951023 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection.Po@am__quote@
1024 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contact-lists.Po@am__quote@
9961025 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contacts-bug-19101.Po@am__quote@
9971026 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contacts-mixin.Po@am__quote@
9981027 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contacts-slow-path.Po@am__quote@
10141043 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/self-handle.Po@am__quote@
10151044 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/self-presence.Po@am__quote@
10161045 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-approver.Po@am__quote@
1046 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-handler.Po@am__quote@
10171047 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-observer.Po@am__quote@
10181048 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svc.Po@am__quote@
10191049 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-mixin.Po@am__quote@
66 * notice and this notice are preserved.
77 */
88
9 /* We include -internal headers of context to be able to easily access to
10 * their semi-private attributes (connection, account, channels, etc). */
911 #include <telepathy-glib/account-manager.h>
1012 #include <telepathy-glib/add-dispatch-operation-context-internal.h>
1113 #include <telepathy-glib/base-client.h>
1214 #include <telepathy-glib/client.h>
1315 #include <telepathy-glib/debug.h>
1416 #include <telepathy-glib/defs.h>
17 #include <telepathy-glib/handle-channels-context-internal.h>
1518 #include <telepathy-glib/observe-channels-context-internal.h>
1619 #include <telepathy-glib/proxy-subclass.h>
1720
4548
4649 GError *error /* initialized where needed */;
4750 GStrv interfaces;
51 gint wait;
4852 } Test;
4953
5054 #define ACCOUNT_PATH TP_ACCOUNT_OBJECT_PATH_BASE "what/ev/er"
264268
265269 g_assert_cmpint (g_hash_table_size (properties), == , 1);
266270
271 g_strfreev (test->interfaces);
267272 test->interfaces = g_strdupv ((GStrv) tp_asv_get_strv (
268273 properties, "Interfaces"));
269274
270275 out:
271276 g_main_loop_quit (test->mainloop);
277 }
278
279 static void
280 test_register (Test *test,
281 gconstpointer data G_GNUC_UNUSED)
282 {
283 tp_base_client_be_a_handler (test->base_client);
284
285 /* no-op as the client is not registered yet */
286 tp_base_client_unregister (test->base_client);
287
288 /* Client is not registered yet */
289 tp_cli_dbus_properties_call_get_all (test->client, -1,
290 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
291 g_main_loop_run (test->mainloop);
292
293 g_assert_error (test->error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN);
294 g_error_free (test->error);
295 test->error = NULL;
296
297 /* register the client */
298 tp_base_client_register (test->base_client, &test->error);
299 g_assert_no_error (test->error);
300
301 tp_cli_dbus_properties_call_get_all (test->client, -1,
302 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
303 g_main_loop_run (test->mainloop);
304
305 g_assert_no_error (test->error);
306
307 /* unregister the client */
308 tp_base_client_unregister (test->base_client);
309 test_proxy_run_until_dbus_queue_processed (test->client);
310
311 tp_cli_dbus_properties_call_get_all (test->client, -1,
312 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
313 g_main_loop_run (test->mainloop);
314
315 g_assert_error (test->error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN);
316 g_error_free (test->error);
317 test->error = NULL;
318
319 /* re-register the client */
320 tp_base_client_register (test->base_client, &test->error);
321 g_assert_no_error (test->error);
322
323 tp_cli_dbus_properties_call_get_all (test->client, -1,
324 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
325 g_main_loop_run (test->mainloop);
326
327 g_assert_no_error (test->error);
272328 }
273329
274330 /* Test Observer */
342398 }
343399
344400 out:
345 g_main_loop_quit (test->mainloop);
401 test->wait--;
402 if (test->wait <= 0)
403 g_main_loop_quit (test->mainloop);
346404 }
347405
348406 static void
464522 channels, "/", requests_satisified, info,
465523 no_return_cb, test, NULL, NULL);
466524
467 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service);
525 test_text_channel_null_close (test->text_chan_service);
468526
469527 g_main_loop_run (test->mainloop);
470528 g_assert_no_error (test->error);
606664 channels, CDO_PATH, properties,
607665 no_return_cb, test, NULL, NULL);
608666
609 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service_2);
667 test_text_channel_null_close (test->text_chan_service_2);
610668
611669 g_object_unref (test->text_chan_service_2);
612670 test->text_chan_service_2 = NULL;
632690 channels, CDO_PATH, properties,
633691 no_return_cb, test, NULL, NULL);
634692
635 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service);
636
693 test_text_channel_null_close (test->text_chan_service);
637694 g_object_unref (test->text_chan_service);
638695 test->text_chan_service = NULL;
639696
648705 g_hash_table_unref (properties);
649706 }
650707
708 /* Test Handler */
709 static void
710 get_handler_prop_cb (TpProxy *proxy,
711 GHashTable *properties,
712 const GError *error,
713 gpointer user_data,
714 GObject *weak_object)
715 {
716 Test *test = user_data;
717 GPtrArray *filters;
718 gboolean bypass;
719 gboolean valid;
720 const gchar * const * capabilities;
721 GPtrArray *handled;
722
723 if (error != NULL)
724 {
725 test->error = g_error_copy (error);
726 goto out;
727 }
728
729 g_assert_cmpint (g_hash_table_size (properties), == , 4);
730
731 filters = tp_asv_get_boxed (properties, "HandlerChannelFilter",
732 TP_ARRAY_TYPE_CHANNEL_CLASS_LIST);
733 check_filters (filters);
734
735 bypass = tp_asv_get_boolean (properties, "BypassApproval", &valid);
736 g_assert (valid);
737 g_assert (bypass);
738
739 capabilities = tp_asv_get_strv (properties, "Capabilities");
740 g_assert_cmpint (g_strv_length ((GStrv) capabilities), ==, 5);
741 g_assert (tp_strv_contains (capabilities, "badger"));
742 g_assert (tp_strv_contains (capabilities, "mushroom"));
743 g_assert (tp_strv_contains (capabilities, "snake"));
744 g_assert (tp_strv_contains (capabilities, "goat"));
745 g_assert (tp_strv_contains (capabilities, "pony"));
746
747 handled = tp_asv_get_boxed (properties, "HandledChannels",
748 TP_ARRAY_TYPE_OBJECT_PATH_LIST);
749 g_assert (handled != NULL);
750 g_assert_cmpint (handled->len, ==, 0);
751
752 out:
753 g_main_loop_quit (test->mainloop);
754 }
755
756 static void
757 channel_invalidated_cb (TpChannel *channel,
758 guint domain,
759 gint code,
760 gchar *message,
761 Test *test)
762 {
763 g_main_loop_quit (test->mainloop);
764 }
765
766 static void
767 test_handler (Test *test,
768 gconstpointer data G_GNUC_UNUSED)
769 {
770 GHashTable *filter;
771 const gchar *caps[] = { "mushroom", "snake", NULL };
772 GPtrArray *channels;
773 GPtrArray *requests_satisified;
774 GHashTable *info;
775 GList *chans;
776 SimpleClient *client_2;
777
778 filter = tp_asv_new (
779 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
780 NULL);
781
782 tp_base_client_add_handler_filter (test->base_client, filter);
783 g_hash_table_unref (filter);
784
785 tp_base_client_take_handler_filter (test->base_client, tp_asv_new (
786 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
787 TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
788 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
789 TP_HANDLE_TYPE_CONTACT,
790 NULL));
791
792 tp_base_client_set_handler_bypass_approval (test->base_client, TRUE);
793
794 tp_base_client_add_handler_capability (test->base_client, "badger");
795 tp_base_client_add_handler_capabilities (test->base_client, caps);
796 tp_base_client_add_handler_capabilities_varargs (test->base_client,
797 "goat", "pony", NULL);
798
799 tp_base_client_register (test->base_client, &test->error);
800 g_assert_no_error (test->error);
801
802 /* Check Client properties */
803 tp_cli_dbus_properties_call_get_all (test->client, -1,
804 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
805 g_main_loop_run (test->mainloop);
806
807 g_assert_no_error (test->error);
808 g_assert_cmpint (g_strv_length (test->interfaces), ==, 1);
809 g_assert (tp_strv_contains ((const gchar * const *) test->interfaces,
810 TP_IFACE_CLIENT_HANDLER));
811
812 /* Check Handler properties */
813 tp_cli_dbus_properties_call_get_all (test->client, -1,
814 TP_IFACE_CLIENT_HANDLER, get_handler_prop_cb, test, NULL, NULL);
815 g_main_loop_run (test->mainloop);
816 g_assert_no_error (test->error);
817
818 /* Call HandleChannels */
819 channels = g_ptr_array_sized_new (2);
820 add_channel_to_ptr_array (channels, test->text_chan);
821 add_channel_to_ptr_array (channels, test->text_chan_2);
822
823 requests_satisified = g_ptr_array_sized_new (0);
824 info = g_hash_table_new (NULL, NULL);
825
826 tp_proxy_add_interface_by_id (TP_PROXY (test->client),
827 TP_IFACE_QUARK_CLIENT_HANDLER);
828
829 tp_cli_client_handler_call_handle_channels (test->client, -1,
830 tp_proxy_get_object_path (test->account),
831 tp_proxy_get_object_path (test->connection),
832 channels, requests_satisified, 0, info,
833 no_return_cb, test, NULL, NULL);
834
835 g_main_loop_run (test->mainloop);
836 g_assert_no_error (test->error);
837
838 g_assert (test->simple_client->handle_channels_ctx != NULL);
839 g_assert (test->simple_client->handle_channels_ctx->account == test->account);
840
841 chans = tp_base_client_get_handled_channels (test->base_client);
842 g_assert_cmpuint (g_list_length (chans), ==, 2);
843 g_list_free (chans);
844
845 /* One of the channel is closed */
846 g_signal_connect (test->text_chan, "invalidated",
847 G_CALLBACK (channel_invalidated_cb), test);
848 test_text_channel_null_close (test->text_chan_service);
849 g_main_loop_run (test->mainloop);
850
851 chans = tp_base_client_get_handled_channels (test->base_client);
852 g_assert_cmpuint (g_list_length (chans), ==, 1);
853 g_list_free (chans);
854
855 /* Create another client sharing the same unique name */
856 client_2 = simple_client_new (test->dbus, "Test", TRUE);
857 tp_base_client_be_a_handler (TP_BASE_CLIENT (client_2));
858 tp_base_client_register (TP_BASE_CLIENT (client_2), &test->error);
859 g_assert_no_error (test->error);
860
861 chans = tp_base_client_get_handled_channels (TP_BASE_CLIENT (client_2));
862 g_assert_cmpuint (g_list_length (chans), ==, 1);
863 g_list_free (chans);
864
865 g_object_unref (client_2);
866
867 g_ptr_array_foreach (channels, free_channel_details, NULL);
868 g_ptr_array_free (channels, TRUE);
869 g_ptr_array_free (requests_satisified, TRUE);
870 g_hash_table_unref (info);
871 }
872
873 /* Test Requests interface on Handler */
874 static void
875 get_requests_prop_cb (TpProxy *proxy,
876 GHashTable *properties,
877 const GError *error,
878 gpointer user_data,
879 GObject *weak_object)
880 {
881 Test *test = user_data;
882
883 if (error != NULL)
884 {
885 test->error = g_error_copy (error);
886 goto out;
887 }
888
889 g_assert_cmpint (g_hash_table_size (properties), == , 0);
890
891 out:
892 g_main_loop_quit (test->mainloop);
893 }
894
895 static void
896 request_added_cb (TpBaseClient *client,
897 TpAccount *account,
898 TpChannelRequest *request,
899 Test *test)
900 {
901 GList *requests;
902
903 g_assert (TP_IS_CHANNEL_REQUEST (request));
904 g_assert (TP_IS_ACCOUNT (account));
905 g_assert (tp_proxy_is_prepared (account, TP_ACCOUNT_FEATURE_CORE));
906
907 requests = tp_base_client_get_pending_requests (test->base_client);
908 g_assert_cmpuint (g_list_length ((GList *) requests), ==, 1);
909 g_assert (requests->data == request);
910 g_list_free (requests);
911
912 test->wait--;
913 if (test->wait == 0)
914 g_main_loop_quit (test->mainloop);
915 }
916
917 static void
918 request_removed_cb (TpBaseClient *client,
919 TpChannelRequest *request,
920 const gchar *error,
921 const gchar *reason,
922 Test *test)
923 {
924 g_assert (TP_IS_CHANNEL_REQUEST (request));
925
926 test->wait--;
927 if (test->wait == 0)
928 g_main_loop_quit (test->mainloop);
929 }
930
931 static void
932 test_handler_requests (Test *test,
933 gconstpointer data G_GNUC_UNUSED)
934 {
935 GHashTable *properties;
936 GPtrArray *channels;
937 GPtrArray *requests_satisified;
938 GHashTable *info;
939 TpChannelRequest *request;
940 GList *requests;
941
942 tp_base_client_take_handler_filter (test->base_client, tp_asv_new (
943 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
944 TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
945 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
946 TP_HANDLE_TYPE_CONTACT,
947 NULL));
948
949 tp_base_client_set_handler_request_notification (test->base_client);
950
951 tp_base_client_register (test->base_client, &test->error);
952 g_assert_no_error (test->error);
953
954 /* Check Client properties */
955 tp_cli_dbus_properties_call_get_all (test->client, -1,
956 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
957 g_main_loop_run (test->mainloop);
958
959 g_assert_no_error (test->error);
960 g_assert_cmpint (g_strv_length (test->interfaces), ==, 2);
961 g_assert (tp_strv_contains ((const gchar * const *) test->interfaces,
962 TP_IFACE_CLIENT_HANDLER));
963 g_assert (tp_strv_contains ((const gchar * const *) test->interfaces,
964 TP_IFACE_CLIENT_INTERFACE_REQUESTS));
965
966 /* Check Requests properties */
967 tp_cli_dbus_properties_call_get_all (test->client, -1,
968 TP_IFACE_CLIENT_INTERFACE_REQUESTS, get_requests_prop_cb,
969 test, NULL, NULL);
970 g_main_loop_run (test->mainloop);
971 g_assert_no_error (test->error);
972
973 g_assert (tp_base_client_get_pending_requests (test->base_client) == NULL);
974
975 /* Call AddRequest */
976 properties = tp_asv_new (
977 TP_PROP_CHANNEL_REQUEST_ACCOUNT, DBUS_TYPE_G_OBJECT_PATH, ACCOUNT_PATH,
978 NULL);
979
980 tp_proxy_add_interface_by_id (TP_PROXY (test->client),
981 TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS);
982
983 g_signal_connect (test->base_client, "request-added",
984 G_CALLBACK (request_added_cb), test);
985
986 tp_cli_client_interface_requests_call_add_request (test->client, -1,
987 "/Request", properties,
988 no_return_cb, test, NULL, NULL);
989
990 test->wait = 2;
991 g_main_loop_run (test->mainloop);
992 g_assert_no_error (test->error);
993
994 requests = tp_base_client_get_pending_requests (test->base_client);
995 g_assert (requests != NULL);
996 g_list_free (requests);
997
998 /* Call HandleChannels */
999 channels = g_ptr_array_sized_new (2);
1000 add_channel_to_ptr_array (channels, test->text_chan);
1001
1002 requests_satisified = g_ptr_array_sized_new (1);
1003 g_ptr_array_add (requests_satisified, "/Request");
1004
1005 info = g_hash_table_new (NULL, NULL);
1006
1007 tp_proxy_add_interface_by_id (TP_PROXY (test->client),
1008 TP_IFACE_QUARK_CLIENT_HANDLER);
1009
1010 tp_cli_client_handler_call_handle_channels (test->client, -1,
1011 tp_proxy_get_object_path (test->account),
1012 tp_proxy_get_object_path (test->connection),
1013 channels, requests_satisified, 0, info,
1014 no_return_cb, test, NULL, NULL);
1015
1016 g_main_loop_run (test->mainloop);
1017 g_assert_no_error (test->error);
1018
1019 g_assert (test->simple_client->handle_channels_ctx != NULL);
1020 g_assert_cmpint (
1021 test->simple_client->handle_channels_ctx->requests_satisfied->len, ==, 1);
1022 request = g_ptr_array_index (
1023 test->simple_client->handle_channels_ctx->requests_satisfied, 0);
1024 requests = tp_base_client_get_pending_requests (test->base_client);
1025 g_assert (requests->data == request);
1026 g_list_free (requests);
1027
1028 /* Call RemoveRequest */
1029 g_signal_connect (test->base_client, "request-removed",
1030 G_CALLBACK (request_removed_cb), test);
1031
1032 tp_cli_client_interface_requests_call_remove_request (test->client, -1,
1033 "/Request", "Badger", "snake",
1034 no_return_cb, test, NULL, NULL);
1035
1036 test->wait = 2;
1037 g_main_loop_run (test->mainloop);
1038 g_assert_no_error (test->error);
1039
1040 g_assert (tp_base_client_get_pending_requests (test->base_client) == NULL);
1041
1042 g_hash_table_unref (properties);
1043 g_ptr_array_foreach (channels, free_channel_details, NULL);
1044 g_ptr_array_free (channels, TRUE);
1045 g_ptr_array_free (requests_satisified, TRUE);
1046 g_hash_table_unref (info);
1047 }
1048
6511049 int
6521050 main (int argc,
6531051 char **argv)
6591057 g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
6601058
6611059 g_test_add ("/base-client/basics", Test, NULL, setup, test_basics, teardown);
1060 g_test_add ("/base-client/register", Test, NULL, setup, test_register,
1061 teardown);
6621062 g_test_add ("/base-client/observer", Test, NULL, setup, test_observer,
6631063 teardown);
6641064 g_test_add ("/base-client/approver", Test, NULL, setup, test_approver,
6651065 teardown);
1066 g_test_add ("/base-client/handler", Test, NULL, setup, test_handler,
1067 teardown);
1068 g_test_add ("/base-client/handler-requests", Test, NULL, setup,
1069 test_handler_requests, teardown);
6661070
6671071 return g_test_run ();
6681072 }
171171
172172 static void test_dump_stream_events (Test *test)
173173 {
174 GSList *link;
174 GSList *l;
175175
176176 g_message ("Stream events (most recent first):");
177177
178 for (link = test->stream_events; link != NULL; link = link->next)
178 for (l = test->stream_events; l != NULL; l = l->next)
179179 {
180 StreamEvent *se = link->data;
180 StreamEvent *se = l->data;
181181
182182 switch (se->type)
183183 {
559559 test);
560560
561561 /* First channel disappears and so is lost */
562 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service);
562 test_text_channel_null_close (test->text_chan_service);
563563
564564 g_object_unref (test->text_chan_service);
565565 test->text_chan_service = NULL;
582582 g_signal_connect (test->cdo, "invalidated", G_CALLBACK (invalidated_cb),
583583 test);
584584
585 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service_2);
585 test_text_channel_null_close (test->text_chan_service_2);
586586
587587 g_object_unref (test->text_chan_service_2);
588588 test->text_chan_service_2 = NULL;
671671 tp_proxy_prepare_async (test->cdo, features, features_prepared_cb, test);
672672
673673 /* First channel disappears while preparing */
674 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service);
674 test_text_channel_null_close (test->text_chan_service);
675675
676676 g_object_unref (test->text_chan_service);
677677 test->text_chan_service = NULL;
722722 tp_proxy_prepare_async (test->cdo, features, features_not_prepared_cb, test);
723723
724724 /* The 2 channels are lost while preparing */
725 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service);
725 test_text_channel_null_close (test->text_chan_service);
726726
727727 g_object_unref (test->text_chan_service);
728728 test->text_chan_service = NULL;
730730 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
731731 test->text_chan);
732732
733 tp_dbus_daemon_unregister_object (test->dbus, test->text_chan_service_2);
733 test_text_channel_null_close (test->text_chan_service_2);
734734
735735 g_object_unref (test->text_chan_service_2);
736736 test->text_chan_service_2 = NULL;
0 /* Feature test for contact lists
1 *
2 * Copyright © 2007-2010 Collabora Ltd. <http://www.collabora.co.uk/>
3 * Copyright © 2007-2008 Nokia Corporation
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 <telepathy-glib/connection.h>
11
12 #include "examples/cm/contactlist/conn.h"
13 #include "tests/lib/util.h"
14
15 typedef struct {
16 TpDBusDaemon *dbus;
17 ExampleContactListConnection *service_conn;
18 TpBaseConnection *service_conn_as_base;
19 gchar *conn_name;
20 gchar *conn_path;
21 TpConnection *conn;
22
23 TpChannel *publish;
24 TpChannel *subscribe;
25 TpChannel *stored;
26
27 TpChannel *group;
28
29 TpHandleRepoIface *contact_repo;
30 TpHandle sjoerd;
31 TpHandle helen;
32 TpHandle wim;
33 TpHandle ninja;
34
35 GArray *arr;
36
37 GAsyncResult *prepare_result;
38 } Test;
39
40 static void
41 setup (Test *test,
42 gconstpointer data)
43 {
44 GError *error = NULL;
45 GQuark features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
46
47 g_type_init ();
48 tp_debug_set_flags ("all");
49 test->dbus = test_dbus_daemon_dup_or_die ();
50
51 test->service_conn = test_object_new_static_class (
52 EXAMPLE_TYPE_CONTACT_LIST_CONNECTION,
53 "account", "me@example.com",
54 "simulation-delay", 0,
55 "protocol", "example-contact-list",
56 NULL);
57 test->service_conn_as_base = TP_BASE_CONNECTION (test->service_conn);
58 g_assert (test->service_conn != NULL);
59 g_assert (test->service_conn_as_base != NULL);
60
61 g_assert (tp_base_connection_register (test->service_conn_as_base, "example",
62 &test->conn_name, &test->conn_path, &error));
63 g_assert_no_error (error);
64
65 test->contact_repo = tp_base_connection_get_handles (
66 test->service_conn_as_base, TP_HANDLE_TYPE_CONTACT);
67
68 test->conn = tp_connection_new (test->dbus, test->conn_name, test->conn_path,
69 &error);
70 g_assert (test->conn != NULL);
71 g_assert_no_error (error);
72 tp_cli_connection_call_connect (test->conn, -1, NULL, NULL, NULL, NULL);
73 test_proxy_run_until_prepared (test->conn, features);
74
75 g_assert (tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_CORE));
76 g_assert (tp_proxy_is_prepared (test->conn,
77 TP_CONNECTION_FEATURE_CONNECTED));
78
79 test->sjoerd = tp_handle_ensure (test->contact_repo, "sjoerd@example.com",
80 NULL, NULL);
81 g_assert (test->sjoerd != 0);
82 test->helen = tp_handle_ensure (test->contact_repo, "helen@example.com",
83 NULL, NULL);
84 g_assert (test->helen != 0);
85 test->wim = tp_handle_ensure (test->contact_repo, "wim@example.com",
86 NULL, NULL);
87 g_assert (test->wim != 0);
88 test->ninja = tp_handle_ensure (test->contact_repo, "ninja@example.com",
89 NULL, NULL);
90 g_assert (test->ninja != 0);
91
92 test->arr = g_array_new (FALSE, FALSE, sizeof (TpHandle));
93 }
94
95 static void
96 teardown (Test *test,
97 gconstpointer data)
98 {
99 TpConnection *conn;
100 gboolean ok;
101 GError *error = NULL;
102
103 g_array_free (test->arr, TRUE);
104
105 tp_handle_unref (test->contact_repo, test->sjoerd);
106 tp_handle_unref (test->contact_repo, test->helen);
107 tp_handle_unref (test->contact_repo, test->wim);
108 tp_handle_unref (test->contact_repo, test->ninja);
109
110 test_clear_object (&test->conn);
111 test_clear_object (&test->publish);
112 test_clear_object (&test->subscribe);
113 test_clear_object (&test->stored);
114 test_clear_object (&test->group);
115
116 /* make a new TpConnection just to disconnect the underlying Connection,
117 * so we don't leak it */
118 conn = tp_connection_new (test->dbus, test->conn_name, test->conn_path,
119 &error);
120 g_assert (conn != NULL);
121 g_assert_no_error (error);
122 ok = tp_cli_connection_run_disconnect (conn, -1, &error, NULL);
123 g_assert (ok);
124 g_assert_no_error (error);
125 g_assert (!tp_connection_run_until_ready (conn, FALSE, &error, NULL));
126 g_assert_error (error, TP_ERRORS, TP_ERROR_CANCELLED);
127 g_clear_error (&error);
128
129 test->service_conn_as_base = NULL;
130 g_object_unref (test->service_conn);
131 g_free (test->conn_name);
132 g_free (test->conn_path);
133
134 g_object_unref (test->dbus);
135 test->dbus = NULL;
136 }
137
138 static TpChannel *
139 test_ensure_channel (Test *test,
140 guint channel_type,
141 const gchar *id)
142 {
143 GError *error = NULL;
144 GHashTable *asv, *props;
145 gchar *path;
146 TpChannel *ret;
147
148 asv = tp_asv_new (
149 TP_PROP_CHANNEL_CHANNEL_TYPE,
150 G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST,
151 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
152 G_TYPE_UINT, channel_type,
153 TP_PROP_CHANNEL_TARGET_ID,
154 G_TYPE_STRING, id,
155 NULL);
156 tp_cli_connection_interface_requests_run_ensure_channel (test->conn, -1,
157 asv, NULL, &path, &props, &error, NULL);
158 g_assert_no_error (error);
159 ret = tp_channel_new_from_properties (test->conn, path, props,
160 &error);
161 g_assert (ret != NULL);
162 g_assert_no_error (error);
163 g_free (path);
164 g_hash_table_unref (props);
165 g_hash_table_unref (asv);
166
167 test_proxy_run_until_prepared (ret, NULL);
168 return ret;
169 }
170
171 static void
172 test_nothing (Test *test,
173 gconstpointer nil G_GNUC_UNUSED)
174 {
175 /* this is actually a valuable test - it ensures that shutting down the
176 * CM before the contact list has been retrieved works! */
177 }
178
179 static void
180 test_initial_channels (Test *test,
181 gconstpointer nil G_GNUC_UNUSED)
182 {
183 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
184 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST,
185 "subscribe");
186 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
187
188 g_assert_cmpuint (
189 tp_intset_size (tp_channel_group_get_members (test->publish)), ==, 4);
190 g_assert_cmpuint (
191 tp_intset_size (tp_channel_group_get_local_pending (test->publish)),
192 ==, 2);
193 g_assert_cmpuint (
194 tp_intset_size (tp_channel_group_get_remote_pending (test->publish)),
195 ==, 0);
196 g_assert (tp_intset_is_member (tp_channel_group_get_members (test->publish),
197 test->sjoerd));
198 g_assert (tp_intset_is_member (
199 tp_channel_group_get_local_pending (test->publish),
200 test->wim));
201
202 g_assert_cmpuint (
203 tp_intset_size (tp_channel_group_get_members (test->subscribe)), ==, 4);
204 g_assert_cmpuint (
205 tp_intset_size (tp_channel_group_get_local_pending (test->subscribe)),
206 ==, 0);
207 g_assert_cmpuint (
208 tp_intset_size (tp_channel_group_get_remote_pending (test->subscribe)),
209 ==, 2);
210 g_assert (tp_intset_is_member (
211 tp_channel_group_get_members (test->subscribe),
212 test->sjoerd));
213 g_assert (tp_intset_is_member (
214 tp_channel_group_get_remote_pending (test->subscribe),
215 test->helen));
216
217 g_assert_cmpuint (
218 tp_intset_size (tp_channel_group_get_members (test->stored)), ==, 8);
219 g_assert_cmpuint (
220 tp_intset_size (tp_channel_group_get_local_pending (test->stored)),
221 ==, 0);
222 g_assert_cmpuint (
223 tp_intset_size (tp_channel_group_get_remote_pending (test->stored)),
224 ==, 0);
225 g_assert (tp_intset_is_member (tp_channel_group_get_members (test->stored),
226 test->sjoerd));
227
228 g_assert (!tp_intset_is_member (tp_channel_group_get_members (test->publish),
229 test->ninja));
230 g_assert (!tp_intset_is_member (tp_channel_group_get_members (
231 test->subscribe),
232 test->ninja));
233 g_assert (!tp_intset_is_member (tp_channel_group_get_members (test->stored),
234 test->ninja));
235 }
236
237 static void
238 test_accept_publish_request (Test *test,
239 gconstpointer nil G_GNUC_UNUSED)
240 {
241 GError *error = NULL;
242
243 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
244
245 g_assert_cmpuint (
246 tp_intset_size (tp_channel_group_get_local_pending (test->publish)),
247 ==, 2);
248 g_assert (tp_intset_is_member (
249 tp_channel_group_get_local_pending (test->publish),
250 test->wim));
251
252 g_array_append_val (test->arr, test->wim);
253 tp_cli_channel_interface_group_run_add_members (test->publish,
254 -1, test->arr, "", &error, NULL);
255 g_assert_no_error (error);
256
257 /* by the time the method returns, we should have had the
258 * change-notification, too */
259 g_assert_cmpuint (
260 tp_intset_size (tp_channel_group_get_local_pending (test->publish)),
261 ==, 1);
262 g_assert (tp_intset_is_member (
263 tp_channel_group_get_members (test->publish),
264 test->wim));
265 g_assert (!tp_intset_is_member (
266 tp_channel_group_get_local_pending (test->publish),
267 test->wim));
268 }
269
270 static void
271 test_reject_publish_request (Test *test,
272 gconstpointer nil G_GNUC_UNUSED)
273 {
274 GError *error = NULL;
275
276 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
277
278 g_assert (tp_intset_is_member (
279 tp_channel_group_get_local_pending (test->publish),
280 test->wim));
281 g_assert (!tp_intset_is_member (
282 tp_channel_group_get_members (test->publish),
283 test->wim));
284
285 g_array_append_val (test->arr, test->wim);
286 tp_cli_channel_interface_group_run_remove_members (test->publish,
287 -1, test->arr, "", &error, NULL);
288
289 /* by the time the method returns, we should have had the
290 * removal-notification, too */
291 g_assert_cmpuint (
292 tp_intset_size (tp_channel_group_get_local_pending (test->publish)),
293 ==, 1);
294 g_assert (!tp_intset_is_member (
295 tp_channel_group_get_members (test->publish),
296 test->wim));
297 g_assert (!tp_intset_is_member (
298 tp_channel_group_get_local_pending (test->publish),
299 test->wim));
300 }
301
302 static void
303 test_add_to_publish_invalid (Test *test,
304 gconstpointer nil G_GNUC_UNUSED)
305 {
306 GError *error = NULL;
307
308 /* Unilaterally adding a member to the publish channel doesn't work. */
309
310 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
311
312 g_assert (!tp_intset_is_member (
313 tp_channel_group_get_local_pending (test->publish),
314 test->ninja));
315
316 g_array_append_val (test->arr, test->ninja);
317 tp_cli_channel_interface_group_run_add_members (test->publish,
318 -1, test->arr, "", &error, NULL);
319 g_assert_error (error, TP_ERRORS, TP_ERROR_PERMISSION_DENIED);
320 g_clear_error (&error);
321
322 g_assert (!tp_intset_is_member (
323 tp_channel_group_get_local_pending (test->publish),
324 test->ninja));
325 }
326
327 static void
328 test_add_to_publish_no_op (Test *test,
329 gconstpointer nil G_GNUC_UNUSED)
330 {
331 GError *error = NULL;
332
333 /* Adding a member to the publish channel when they're already there is
334 * valid. */
335
336 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
337
338 g_assert (tp_intset_is_member (
339 tp_channel_group_get_members (test->publish),
340 test->sjoerd));
341
342 g_array_append_val (test->arr, test->sjoerd);
343 tp_cli_channel_interface_group_run_add_members (test->publish,
344 -1, test->arr, "", &error, NULL);
345 g_assert_no_error (error);
346
347 g_assert (tp_intset_is_member (
348 tp_channel_group_get_members (test->publish),
349 test->sjoerd));
350 }
351
352 static void
353 test_remove_from_publish (Test *test,
354 gconstpointer nil G_GNUC_UNUSED)
355 {
356 GError *error = NULL;
357
358 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
359
360 g_assert_cmpuint (
361 tp_intset_size (tp_channel_group_get_members (test->publish)),
362 ==, 4);
363 g_assert (tp_intset_is_member (
364 tp_channel_group_get_members (test->publish),
365 test->sjoerd));
366
367 g_array_append_val (test->arr, test->sjoerd);
368 tp_cli_channel_interface_group_run_remove_members (test->publish,
369 -1, test->arr, "", &error, NULL);
370 g_assert_no_error (error);
371
372 /* by the time the method returns, we should have had the
373 * removal-notification, too */
374 g_assert (!tp_intset_is_member (
375 tp_channel_group_get_members (test->publish),
376 test->sjoerd));
377
378 /* the contact re-requests our presence after a short delay */
379 while (!tp_intset_is_member (
380 tp_channel_group_get_local_pending (test->publish),
381 test->sjoerd))
382 g_main_context_iteration (NULL, TRUE);
383
384 g_assert (!tp_intset_is_member (
385 tp_channel_group_get_members (test->publish),
386 test->sjoerd));
387 g_assert (tp_intset_is_member (
388 tp_channel_group_get_local_pending (test->publish),
389 test->sjoerd));
390 }
391
392 static void
393 test_remove_from_publish_no_op (Test *test,
394 gconstpointer nil G_GNUC_UNUSED)
395 {
396 GError *error = NULL;
397
398 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
399
400 g_assert_cmpuint (
401 tp_intset_size (tp_channel_group_get_members (test->publish)),
402 ==, 4);
403 g_assert (!tp_intset_is_member (
404 tp_channel_group_get_members (test->publish),
405 test->ninja));
406
407 g_array_append_val (test->arr, test->ninja);
408 tp_cli_channel_interface_group_run_remove_members (test->publish,
409 -1, test->arr, "", &error, NULL);
410 g_assert_no_error (error);
411 }
412
413 static void
414 test_add_to_stored (Test *test,
415 gconstpointer nil G_GNUC_UNUSED)
416 {
417 GError *error = NULL;
418
419 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
420 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
421 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST,
422 "subscribe");
423
424 g_assert_cmpuint (
425 tp_intset_size (tp_channel_group_get_members (test->stored)),
426 ==, 8);
427 g_assert (!tp_intset_is_member (
428 tp_channel_group_get_members (test->stored),
429 test->ninja));
430
431 g_array_append_val (test->arr, test->ninja);
432 tp_cli_channel_interface_group_run_add_members (test->stored,
433 -1, test->arr, "", &error, NULL);
434 g_assert_no_error (error);
435
436 /* by the time the method returns, we should have had the
437 * change-notification, too */
438 g_assert_cmpuint (
439 tp_intset_size (tp_channel_group_get_members (test->stored)),
440 ==, 9);
441 g_assert (tp_intset_is_member (
442 tp_channel_group_get_members (test->stored),
443 test->ninja));
444
445 g_assert (!tp_intset_is_member (
446 tp_channel_group_get_members (test->subscribe),
447 test->ninja));
448 g_assert (!tp_intset_is_member (
449 tp_channel_group_get_members (test->publish),
450 test->ninja));
451 }
452
453 static void
454 test_add_to_stored_no_op (Test *test,
455 gconstpointer nil G_GNUC_UNUSED)
456 {
457 GError *error = NULL;
458
459 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
460
461 g_assert_cmpuint (
462 tp_intset_size (tp_channel_group_get_members (test->stored)),
463 ==, 8);
464 g_assert (tp_intset_is_member (
465 tp_channel_group_get_members (test->stored),
466 test->sjoerd));
467
468 g_array_append_val (test->arr, test->sjoerd);
469 tp_cli_channel_interface_group_run_add_members (test->stored,
470 -1, test->arr, "", &error, NULL);
471 g_assert_no_error (error);
472 }
473
474 static void
475 test_remove_from_stored (Test *test,
476 gconstpointer nil G_GNUC_UNUSED)
477 {
478 GError *error = NULL;
479
480 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
481 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
482 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST,
483 "subscribe");
484
485 g_assert (tp_intset_is_member (
486 tp_channel_group_get_members (test->stored),
487 test->sjoerd));
488
489 g_array_append_val (test->arr, test->sjoerd);
490 tp_cli_channel_interface_group_run_remove_members (test->stored,
491 -1, test->arr, "", &error, NULL);
492 g_assert_no_error (error);
493
494 /* by the time the method returns, we should have had the
495 * removal-notification, too */
496 g_assert (!tp_intset_is_member (
497 tp_channel_group_get_members (test->stored),
498 test->sjoerd));
499 g_assert (!tp_intset_is_member (
500 tp_channel_group_get_members (test->subscribe),
501 test->sjoerd));
502 g_assert (!tp_intset_is_member (
503 tp_channel_group_get_members (test->publish),
504 test->sjoerd));
505 }
506
507 static void
508 test_remove_from_stored_no_op (Test *test,
509 gconstpointer nil G_GNUC_UNUSED)
510 {
511 GError *error = NULL;
512
513 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
514
515 g_assert_cmpuint (
516 tp_intset_size (tp_channel_group_get_members (test->stored)),
517 ==, 8);
518 g_assert (!tp_intset_is_member (
519 tp_channel_group_get_members (test->stored),
520 test->ninja));
521
522 g_array_append_val (test->arr, test->ninja);
523 tp_cli_channel_interface_group_run_remove_members (test->stored,
524 -1, test->arr, "", &error, NULL);
525 g_assert_no_error (error);
526 }
527
528 static void
529 test_accept_subscribe_request (Test *test,
530 gconstpointer nil G_GNUC_UNUSED)
531 {
532 GError *error = NULL;
533
534 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "subscribe");
535 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
536 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
537
538 g_assert_cmpuint (
539 tp_intset_size (tp_channel_group_get_members (test->subscribe)),
540 ==, 4);
541 g_assert (!tp_intset_is_member (
542 tp_channel_group_get_members (test->subscribe),
543 test->ninja));
544 g_assert (!tp_intset_is_member (
545 tp_channel_group_get_remote_pending (test->subscribe),
546 test->ninja));
547
548 /* the example CM's fake contacts accept requests that contain "please" */
549 g_array_append_val (test->arr, test->ninja);
550 tp_cli_channel_interface_group_run_add_members (test->subscribe,
551 -1, test->arr, "Please may I see your presence?", &error, NULL);
552 g_assert_no_error (error);
553
554 /* by the time the method returns, we should have had the
555 * change-notification, too */
556 g_assert (tp_intset_is_member (
557 tp_channel_group_get_remote_pending (test->subscribe),
558 test->ninja));
559 g_assert (tp_intset_is_member (
560 tp_channel_group_get_members (test->stored),
561 test->ninja));
562 g_assert (!tp_intset_is_member (
563 tp_channel_group_get_remote_pending (test->stored),
564 test->ninja));
565
566 /* after a short delay, the contact accepts our request */
567 while (tp_intset_is_member (
568 tp_channel_group_get_remote_pending (test->subscribe),
569 test->ninja))
570 g_main_context_iteration (NULL, TRUE);
571
572 g_assert (tp_intset_is_member (
573 tp_channel_group_get_members (test->subscribe),
574 test->ninja));
575 g_assert (!tp_intset_is_member (
576 tp_channel_group_get_remote_pending (test->subscribe),
577 test->ninja));
578
579 /* the contact also requests our presence after a short delay */
580 while (!tp_intset_is_member (
581 tp_channel_group_get_local_pending (test->publish),
582 test->ninja))
583 g_main_context_iteration (NULL, TRUE);
584
585 g_assert (!tp_intset_is_member (
586 tp_channel_group_get_members (test->publish),
587 test->ninja));
588 g_assert (tp_intset_is_member (
589 tp_channel_group_get_local_pending (test->publish),
590 test->ninja));
591 }
592
593 static void
594 test_reject_subscribe_request (Test *test,
595 gconstpointer nil G_GNUC_UNUSED)
596 {
597 GError *error = NULL;
598
599 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "subscribe");
600 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
601
602 g_assert_cmpuint (
603 tp_intset_size (tp_channel_group_get_members (test->subscribe)),
604 ==, 4);
605 g_assert (!tp_intset_is_member (
606 tp_channel_group_get_members (test->subscribe),
607 test->ninja));
608 g_assert (!tp_intset_is_member (
609 tp_channel_group_get_remote_pending (test->subscribe),
610 test->ninja));
611
612 /* the example CM's fake contacts reject requests that don't contain
613 * "please" */
614 g_array_append_val (test->arr, test->ninja);
615 tp_cli_channel_interface_group_run_add_members (test->subscribe,
616 -1, test->arr, "I demand to see your presence", &error, NULL);
617 g_assert_no_error (error);
618
619 /* by the time the method returns, we should have had the
620 * change-notification, too */
621 g_assert (tp_intset_is_member (
622 tp_channel_group_get_remote_pending (test->subscribe),
623 test->ninja));
624 g_assert (tp_intset_is_member (
625 tp_channel_group_get_members (test->stored),
626 test->ninja));
627 g_assert (!tp_intset_is_member (
628 tp_channel_group_get_remote_pending (test->stored),
629 test->ninja));
630
631 /* after a short delay, the contact rejects our request. Say please! */
632 while (tp_intset_is_member (
633 tp_channel_group_get_remote_pending (test->subscribe),
634 test->ninja))
635 g_main_context_iteration (NULL, TRUE);
636
637 g_assert (!tp_intset_is_member (
638 tp_channel_group_get_members (test->subscribe),
639 test->ninja));
640 g_assert (!tp_intset_is_member (
641 tp_channel_group_get_remote_pending (test->subscribe),
642 test->ninja));
643
644 /* the ninja is still on the stored list */
645 g_assert (tp_intset_is_member (
646 tp_channel_group_get_members (test->stored),
647 test->ninja));
648 g_assert (!tp_intset_is_member (
649 tp_channel_group_get_remote_pending (test->stored),
650 test->ninja));
651 }
652
653 static void
654 test_remove_from_subscribe (Test *test,
655 gconstpointer nil G_GNUC_UNUSED)
656 {
657 GError *error = NULL;
658
659 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "subscribe");
660 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
661
662 g_assert_cmpuint (
663 tp_intset_size (tp_channel_group_get_members (test->subscribe)),
664 ==, 4);
665 g_assert (tp_intset_is_member (
666 tp_channel_group_get_members (test->subscribe),
667 test->sjoerd));
668
669 g_array_append_val (test->arr, test->sjoerd);
670 tp_cli_channel_interface_group_run_remove_members (test->subscribe,
671 -1, test->arr, "", &error, NULL);
672 g_assert_no_error (error);
673
674 /* by the time the method returns, we should have had the
675 * removal-notification, too */
676 g_assert (!tp_intset_is_member (
677 tp_channel_group_get_members (test->subscribe),
678 test->sjoerd));
679 g_assert (tp_intset_is_member (
680 tp_channel_group_get_members (test->stored),
681 test->sjoerd));
682 }
683
684 static void
685 test_remove_from_subscribe_pending (Test *test,
686 gconstpointer nil G_GNUC_UNUSED)
687 {
688 GError *error = NULL;
689
690 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "subscribe");
691 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
692
693 g_assert_cmpuint (
694 tp_intset_size (tp_channel_group_get_remote_pending (test->subscribe)),
695 ==, 2);
696 g_assert (tp_intset_is_member (
697 tp_channel_group_get_remote_pending (test->subscribe),
698 test->helen));
699
700 g_array_append_val (test->arr, test->helen);
701 tp_cli_channel_interface_group_run_remove_members (test->subscribe,
702 -1, test->arr, "", &error, NULL);
703 g_assert_no_error (error);
704
705 /* by the time the method returns, we should have had the
706 * removal-notification, too */
707 g_assert (!tp_intset_is_member (
708 tp_channel_group_get_members (test->subscribe),
709 test->helen));
710 g_assert (!tp_intset_is_member (
711 tp_channel_group_get_remote_pending (test->subscribe),
712 test->helen));
713 g_assert (tp_intset_is_member (
714 tp_channel_group_get_members (test->stored),
715 test->helen));
716 }
717
718 static void
719 test_remove_from_subscribe_no_op (Test *test,
720 gconstpointer nil G_GNUC_UNUSED)
721 {
722 GError *error = NULL;
723
724 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "subscribe");
725
726 g_assert_cmpuint (
727 tp_intset_size (tp_channel_group_get_members (test->subscribe)),
728 ==, 4);
729 g_assert (!tp_intset_is_member (
730 tp_channel_group_get_members (test->subscribe),
731 test->ninja));
732
733 g_array_append_val (test->arr, test->ninja);
734 tp_cli_channel_interface_group_run_remove_members (test->subscribe,
735 -1, test->arr, "", &error, NULL);
736 g_assert_no_error (error);
737 }
738
739 static void
740 test_add_to_group (Test *test,
741 gconstpointer nil G_GNUC_UNUSED)
742 {
743 GError *error = NULL;
744
745 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
746 "Cambridge");
747 test->stored = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "stored");
748 test->publish = test_ensure_channel (test, TP_HANDLE_TYPE_LIST, "publish");
749 test->subscribe = test_ensure_channel (test, TP_HANDLE_TYPE_LIST,
750 "subscribe");
751
752 g_assert_cmpuint (
753 tp_intset_size (tp_channel_group_get_members (test->group)),
754 ==, 4);
755 g_assert (!tp_intset_is_member (
756 tp_channel_group_get_members (test->group),
757 test->ninja));
758
759 g_array_append_val (test->arr, test->ninja);
760 tp_cli_channel_interface_group_run_add_members (test->group,
761 -1, test->arr, "", &error, NULL);
762 g_assert_no_error (error);
763
764 /* by the time the method returns, we should have had the
765 * change-notification, too */
766 g_assert_cmpuint (
767 tp_intset_size (tp_channel_group_get_members (test->group)),
768 ==, 5);
769 g_assert (tp_intset_is_member (
770 tp_channel_group_get_members (test->group),
771 test->ninja));
772
773 g_assert (tp_intset_is_member (
774 tp_channel_group_get_members (test->stored),
775 test->ninja));
776 g_assert (!tp_intset_is_member (
777 tp_channel_group_get_members (test->subscribe),
778 test->ninja));
779 g_assert (!tp_intset_is_member (
780 tp_channel_group_get_members (test->publish),
781 test->ninja));
782 }
783
784 static void
785 test_add_to_group_no_op (Test *test,
786 gconstpointer nil G_GNUC_UNUSED)
787 {
788 GError *error = NULL;
789
790 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
791 "Cambridge");
792
793 g_assert (tp_intset_is_member (
794 tp_channel_group_get_members (test->group),
795 test->sjoerd));
796
797 g_array_append_val (test->arr, test->sjoerd);
798 tp_cli_channel_interface_group_run_add_members (test->group,
799 -1, test->arr, "", &error, NULL);
800 g_assert_no_error (error);
801 }
802
803 static void
804 test_remove_from_group (Test *test,
805 gconstpointer nil G_GNUC_UNUSED)
806 {
807 GError *error = NULL;
808
809 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
810 "Cambridge");
811
812 g_assert (tp_intset_is_member (
813 tp_channel_group_get_members (test->group),
814 test->sjoerd));
815
816 g_array_append_val (test->arr, test->sjoerd);
817 tp_cli_channel_interface_group_run_remove_members (test->group,
818 -1, test->arr, "", &error, NULL);
819 g_assert_no_error (error);
820
821 /* by the time the method returns, we should have had the
822 * removal-notification, too */
823 g_assert (!tp_intset_is_member (
824 tp_channel_group_get_members (test->group),
825 test->sjoerd));
826 }
827
828 static void
829 test_remove_from_group_no_op (Test *test,
830 gconstpointer nil G_GNUC_UNUSED)
831 {
832 GError *error = NULL;
833
834 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
835 "Cambridge");
836
837 g_assert (!tp_intset_is_member (
838 tp_channel_group_get_members (test->group),
839 test->ninja));
840
841 g_array_append_val (test->arr, test->ninja);
842 tp_cli_channel_interface_group_run_remove_members (test->group,
843 -1, test->arr, "", &error, NULL);
844 g_assert_no_error (error);
845 }
846
847 static void
848 test_remove_group (Test *test,
849 gconstpointer nil G_GNUC_UNUSED)
850 {
851 GError *error = NULL;
852
853 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
854 "Cambridge");
855
856 g_assert (!tp_intset_is_empty (
857 tp_channel_group_get_members (test->group)));
858
859 tp_cli_channel_run_close (test->group, -1, &error, NULL);
860 g_assert_error (error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE);
861 }
862
863 static void
864 test_remove_group_non_empty (Test *test,
865 gconstpointer nil G_GNUC_UNUSED)
866 {
867 GError *error = NULL;
868
869 test->group = test_ensure_channel (test, TP_HANDLE_TYPE_GROUP,
870 "people who understand const in C");
871
872 g_assert (tp_intset_is_empty (
873 tp_channel_group_get_members (test->group)));
874
875 tp_cli_channel_run_close (test->group, -1, &error, NULL);
876 g_assert_no_error (error);
877 }
878
879 int
880 main (int argc,
881 char **argv)
882 {
883 g_test_init (&argc, &argv, NULL);
884
885 g_test_add ("/contact-lists/nothing",
886 Test, NULL, setup, test_nothing, teardown);
887
888 g_test_add ("/contact-lists/initial-channels",
889 Test, NULL, setup, test_initial_channels, teardown);
890 g_test_add ("/contact-lists/accept-publish-request",
891 Test, NULL, setup, test_accept_publish_request, teardown);
892 g_test_add ("/contact-lists/reject-publish-request",
893 Test, NULL, setup, test_reject_publish_request, teardown);
894 g_test_add ("/contact-lists/add-to-publish/invalid",
895 Test, NULL, setup, test_add_to_publish_invalid, teardown);
896 g_test_add ("/contact-lists/add-to-publish/no-op",
897 Test, NULL, setup, test_add_to_publish_no_op, teardown);
898 g_test_add ("/contact-lists/remove-from-publish",
899 Test, NULL, setup, test_remove_from_publish, teardown);
900 g_test_add ("/contact-lists/remove-from-publish/no-op",
901 Test, NULL, setup, test_remove_from_publish_no_op, teardown);
902 g_test_add ("/contact-lists/add-to-stored",
903 Test, NULL, setup, test_add_to_stored, teardown);
904 g_test_add ("/contact-lists/add-to-stored/no-op",
905 Test, NULL, setup, test_add_to_stored_no_op, teardown);
906 g_test_add ("/contact-lists/remove-from-stored",
907 Test, NULL, setup, test_remove_from_stored, teardown);
908 g_test_add ("/contact-lists/remove-from-stored/no-op",
909 Test, NULL, setup, test_remove_from_stored_no_op, teardown);
910 g_test_add ("/contact-lists/accept-subscribe-request",
911 Test, NULL, setup, test_accept_subscribe_request, teardown);
912 g_test_add ("/contact-lists/reject-subscribe-request",
913 Test, NULL, setup, test_reject_subscribe_request, teardown);
914 g_test_add ("/contact-lists/remove-from-subscribe",
915 Test, NULL, setup, test_remove_from_subscribe, teardown);
916 g_test_add ("/contact-lists/remove-from-subscribe/pending",
917 Test, NULL, setup, test_remove_from_subscribe_pending, teardown);
918 g_test_add ("/contact-lists/remove-from-subscribe/no-op",
919 Test, NULL, setup, test_remove_from_subscribe_no_op, teardown);
920
921 g_test_add ("/contact-lists/add-to-group",
922 Test, NULL, setup, test_add_to_group, teardown);
923 g_test_add ("/contact-lists/add-to-group/no-op",
924 Test, NULL, setup, test_add_to_group_no_op, teardown);
925 g_test_add ("/contact-lists/remove-from-group",
926 Test, NULL, setup, test_remove_from_group, teardown);
927 g_test_add ("/contact-lists/remove-from-group/no-op",
928 Test, NULL, setup, test_remove_from_group_no_op, teardown);
929 g_test_add ("/contact-lists/remove-group",
930 Test, NULL, setup, test_remove_group, teardown);
931 g_test_add ("/contact-lists/remove-group/non-empty",
932 Test, NULL, setup, test_remove_group_non_empty, teardown);
933
934 return g_test_run ();
935 }
88 *
99 * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/>
1010 * Copyright (C) 2008 Nokia Corporation
11 * Copyright (C) 2007 Will Thompson
1112 *
1213 * Copying and distribution of this file, with or without modification,
1314 * are permitted in any medium without royalty provided the copyright
1415 * notice and this notice are preserved.
1516 */
17 #include <stdio.h>
18 #include <string.h>
19 #include <glib/gstdio.h>
1620
1721 #include <telepathy-glib/connection.h>
1822 #include <telepathy-glib/contact.h>
6670 for (i = 0; i < n_contacts; i++)
6771 {
6872 TpContact *contact = contacts[i];
73 GFile *avatar_file;
74 gchar *avatar_uri = NULL;
75
76 avatar_file = tp_contact_get_avatar_file (contact);
77 if (avatar_file != NULL)
78 avatar_uri = g_file_get_uri (avatar_file);
6979
7080 DEBUG ("contact #%u: %p", i, contact);
7181 DEBUG ("contact #%u alias: %s", i, tp_contact_get_alias (contact));
7282 DEBUG ("contact #%u avatar token: %s", i,
7383 tp_contact_get_avatar_token (contact));
84 DEBUG ("contact #%u avatar MIME type: %s", i,
85 tp_contact_get_avatar_mime_type (contact));
86 DEBUG ("contact #%u avatar file: %s", i,
87 avatar_uri);
7488 DEBUG ("contact #%u presence type: %u", i,
7589 tp_contact_get_presence_type (contact));
7690 DEBUG ("contact #%u presence status: %s", i,
7892 DEBUG ("contact #%u presence message: %s", i,
7993 tp_contact_get_presence_message (contact));
8094 g_ptr_array_add (result->contacts, g_object_ref (contact));
95
96 g_free (avatar_uri);
8197 }
8298 }
8399 else
94110 Result *result = r;
95111
96112 g_main_loop_quit (result->loop);
113 }
114
115 static void
116 prepare_avatar_requirements_cb (GObject *object,
117 GAsyncResult *res,
118 gpointer user_data)
119 {
120 TpConnection *connection = TP_CONNECTION (object);
121 Result *result = user_data;
122
123 if (tp_proxy_prepare_finish (connection, res, &result->error))
124 {
125 TpAvatarRequirements *req;
126
127 req = tp_connection_get_avatar_requirements (connection);
128 g_assert (req != NULL);
129 g_assert (req->supported_mime_types != NULL);
130 g_assert_cmpstr (req->supported_mime_types[0], ==, "image/png");
131 g_assert (req->supported_mime_types[1] == NULL);
132 g_assert_cmpuint (req->minimum_width, ==, 1);
133 g_assert_cmpuint (req->minimum_height, ==, 2);
134 g_assert_cmpuint (req->recommended_width, ==, 3);
135 g_assert_cmpuint (req->recommended_height, ==, 4);
136 g_assert_cmpuint (req->maximum_width, ==, 5);
137 g_assert_cmpuint (req->maximum_height, ==, 6);
138 g_assert_cmpuint (req->maximum_bytes, ==, 7);
139 }
140
141 finish (result);
142 }
143
144 static void
145 test_avatar_requirements (TpConnection *client_conn)
146 {
147 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
148 GQuark features[] = { TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS, 0 };
149
150 g_message (G_STRFUNC);
151
152 tp_proxy_prepare_async (TP_PROXY (client_conn), features,
153 prepare_avatar_requirements_cb, &result);
154 g_main_loop_run (result.loop);
155
156 g_assert_no_error (result.error);
157 g_main_loop_unref (result.loop);
158 }
159
160 static GFile *
161 create_contact_with_fake_avatar (ContactsConnection *service_conn,
162 TpConnection *client_conn,
163 const gchar *id)
164 {
165 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
166 TpHandleRepoIface *service_repo = tp_base_connection_get_handles (
167 (TpBaseConnection *) service_conn, TP_HANDLE_TYPE_CONTACT);
168 TpContactFeature features[] = { TP_CONTACT_FEATURE_AVATAR_DATA };
169 const gchar avatar_data[] = "fake-avatar-data";
170 const gchar avatar_token[] = "fake-avatar-token";
171 const gchar avatar_mime_type[] = "fake-avatar-mime-type";
172 TpContact *contact;
173 TpHandle handle;
174 GArray *array;
175 GFile *avatar_file;
176 gchar *content = NULL;
177
178 handle = tp_handle_ensure (service_repo, id, NULL, NULL);
179 array = g_array_new (FALSE, FALSE, sizeof (gchar));
180 g_array_append_vals (array, avatar_data, strlen (avatar_data) + 1);
181
182 contacts_connection_change_avatar_data (service_conn, handle, array,
183 avatar_mime_type, avatar_token);
184
185 tp_connection_get_contacts_by_handle (client_conn,
186 1, &handle,
187 G_N_ELEMENTS (features), features,
188 by_handle_cb,
189 &result, finish, NULL);
190 g_main_loop_run (result.loop);
191 g_assert_no_error (result.error);
192
193 contact = g_ptr_array_index (result.contacts, 0);
194 if (tp_contact_get_avatar_file (contact) == NULL)
195 {
196 g_signal_connect_swapped (contact, "notify::avatar-file",
197 G_CALLBACK (finish), &result);
198 g_main_loop_run (result.loop);
199 }
200
201 g_assert_cmpstr (tp_contact_get_avatar_mime_type (contact), ==,
202 avatar_mime_type);
203 g_assert_cmpstr (tp_contact_get_avatar_token (contact), ==, avatar_token);
204
205 avatar_file = tp_contact_get_avatar_file (contact);
206 g_assert (avatar_file != NULL);
207 g_file_load_contents (avatar_file, NULL, &content, NULL, NULL, &result.error);
208 g_assert_no_error (result.error);
209 g_assert_cmpstr (content, ==, avatar_data);
210 g_free (content);
211
212 /* Keep avatar_file alive after contact destruction */
213 g_object_ref (avatar_file);
214
215 g_object_unref (contact);
216 g_array_free (result.invalid, TRUE);
217 g_ptr_array_free (result.contacts, TRUE);
218 g_main_loop_unref (result.loop);
219
220 tp_handle_unref (service_repo, handle);
221 g_array_unref (array);
222
223 return avatar_file;
224 }
225
226 static void
227 avatar_retrieved_cb (TpConnection *connection,
228 guint handle,
229 const gchar *token,
230 const GArray *avatar,
231 const gchar *mime_type,
232 gpointer user_data,
233 GObject *weak_object)
234 {
235 gboolean *called = user_data;
236
237 *called = TRUE;
238 }
239
240 /* From telepathy-haze, with permission */
241 static gboolean
242 haze_remove_directory (const gchar *path)
243 {
244 const gchar *child_path;
245 GDir *dir = g_dir_open (path, 0, NULL);
246 gboolean ret = TRUE;
247
248 if (!dir)
249 return FALSE;
250
251 while (ret && (child_path = g_dir_read_name (dir)))
252 {
253 gchar *child_full_path = g_build_filename (path, child_path, NULL);
254
255 if (g_file_test (child_full_path, G_FILE_TEST_IS_DIR))
256 {
257 if (!haze_remove_directory (child_full_path))
258 ret = FALSE;
259 }
260 else
261 {
262 DEBUG ("deleting %s", child_full_path);
263
264 if (g_unlink (child_full_path))
265 ret = FALSE;
266 }
267
268 g_free (child_full_path);
269 }
270
271 g_dir_close (dir);
272
273 if (ret)
274 {
275 DEBUG ("deleting %s", path);
276 ret = !g_rmdir (path);
277 }
278
279 return ret;
280 }
281
282 #define RAND_STR_LEN 6
283
284 static void
285 test_avatar_data (ContactsConnection *service_conn,
286 TpConnection *client_conn)
287 {
288 static const gchar letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
289 gchar rand_str[RAND_STR_LEN + 1];
290 gchar *dir;
291 guint i;
292 gboolean avatar_retrieved_called;
293 GError *error = NULL;
294 GFile *file1, *file2;
295 TpProxySignalConnection *signal_id;
296
297 g_message (G_STRFUNC);
298
299 /* Make sure g_get_user_cache_dir() returns a tmp directory, to not mess up
300 * user's cache dir.
301 * FIXME: Replace this with g_mkdtemp once it gets added to GLib.
302 * See GNOME bug #118563 */
303 for (i = 0; i < RAND_STR_LEN; i++)
304 rand_str[i] = letters[g_random_int_range (0, strlen (letters))];
305 rand_str[RAND_STR_LEN] = '\0';
306 dir = g_build_filename (g_get_tmp_dir (), rand_str, NULL);
307 g_assert (g_mkdir (dir, 0700) == 0);
308 g_setenv ("XDG_CACHE_HOME", dir, TRUE);
309 g_assert_cmpstr (g_get_user_cache_dir (), ==, dir);
310
311 /* Check if AvatarRetrieved gets called */
312 signal_id = tp_cli_connection_interface_avatars_connect_to_avatar_retrieved (
313 client_conn, avatar_retrieved_cb, &avatar_retrieved_called, NULL, NULL,
314 &error);
315 g_assert_no_error (error);
316
317 /* First time we create a contact, avatar should not be in cache, so
318 * AvatarRetrived should be called */
319 avatar_retrieved_called = FALSE;
320 file1 = create_contact_with_fake_avatar (service_conn, client_conn,
321 "fake-id1");
322 g_assert (avatar_retrieved_called);
323
324 /* Second time we create a contact, avatar should be in cache now, so
325 * AvatarRetrived should NOT be called */
326 avatar_retrieved_called = FALSE;
327 file2 = create_contact_with_fake_avatar (service_conn, client_conn,
328 "fake-id2");
329 g_assert (!avatar_retrieved_called);
330
331 g_assert (g_file_equal (file1, file2));
332 g_assert (haze_remove_directory (dir));
333
334 tp_proxy_signal_connection_disconnect (signal_id);
335 g_object_unref (file1);
336 g_object_unref (file2);
337 g_free (dir);
97338 }
98339
99340 static void
13141555 test_features (service_conn, client_conn);
13151556 test_upgrade (service_conn, client_conn);
13161557 test_by_id (client_conn);
1558 test_avatar_requirements (client_conn);
1559 test_avatar_data (service_conn, client_conn);
13171560
13181561 /* test if TpContact fallbacks to connection's capabilities if
13191562 * ContactCapabilities is not implemented. */
0 /* Tests of TpSimpleHandler
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/simple-handler.h>
10 #include <telepathy-glib/client.h>
11 #include <telepathy-glib/debug.h>
12 #include <telepathy-glib/defs.h>
13 #include <telepathy-glib/proxy-subclass.h>
14
15 #include "tests/lib/util.h"
16 #include "tests/lib/simple-account.h"
17 #include "tests/lib/simple-conn.h"
18 #include "tests/lib/textchan-null.h"
19
20 typedef struct {
21 GMainLoop *mainloop;
22 TpDBusDaemon *dbus;
23
24 /* Service side objects */
25 TpBaseClient *simple_handler;
26 TpBaseConnection *base_connection;
27 SimpleAccount *account_service;
28 TestTextChannelNull *text_chan_service;
29
30 /* Client side objects */
31 TpClient *client;
32 TpConnection *connection;
33 TpAccount *account;
34 TpChannel *text_chan;
35
36 GError *error /* initialized where needed */;
37 } Test;
38
39 #define ACCOUNT_PATH TP_ACCOUNT_OBJECT_PATH_BASE "what/ev/er"
40
41 static void
42 setup (Test *test,
43 gconstpointer data)
44 {
45 gchar *chan_path;
46 TpHandle handle;
47 TpHandleRepoIface *contact_repo;
48
49 test->mainloop = g_main_loop_new (NULL, FALSE);
50 test->dbus = test_dbus_daemon_dup_or_die ();
51
52 test->error = NULL;
53
54 /* Claim AccountManager bus-name (needed as we're going to export an Account
55 * object). */
56 tp_dbus_daemon_request_name (test->dbus,
57 TP_ACCOUNT_MANAGER_BUS_NAME, FALSE, &test->error);
58 g_assert_no_error (test->error);
59
60 /* Create service-side Account object */
61 test->account_service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT,
62 NULL);
63 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
64 test->account_service);
65
66 /* Create client-side Account object */
67 test->account = tp_account_new (test->dbus, ACCOUNT_PATH, NULL);
68 g_assert (test->account != NULL);
69
70 /* Create (service and client sides) connection objects */
71 test_create_and_connect_conn (SIMPLE_TYPE_CONNECTION, "me@test.com",
72 &test->base_connection, &test->connection);
73
74 /* Create service-side text channel object */
75 chan_path = g_strdup_printf ("%s/Channel",
76 tp_proxy_get_object_path (test->connection));
77
78 contact_repo = tp_base_connection_get_handles (test->base_connection,
79 TP_HANDLE_TYPE_CONTACT);
80 g_assert (contact_repo != NULL);
81
82 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
83 g_assert_no_error (test->error);
84
85 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
86 test_object_new_static_class (
87 TEST_TYPE_TEXT_CHANNEL_NULL,
88 "connection", test->base_connection,
89 "object-path", chan_path,
90 "handle", handle,
91 NULL));
92
93 /* Create client-side text channel object */
94 test->text_chan = tp_channel_new (test->connection, chan_path, NULL,
95 TP_HANDLE_TYPE_CONTACT, handle, &test->error);
96 g_assert_no_error (test->error);
97
98 tp_handle_unref (contact_repo, handle);
99
100 g_free (chan_path);
101 }
102
103 static void
104 teardown (Test *test,
105 gconstpointer data)
106 {
107 g_clear_error (&test->error);
108
109 g_object_unref (test->simple_handler);
110 g_object_unref (test->client);
111
112 tp_dbus_daemon_unregister_object (test->dbus, test->account_service);
113 g_object_unref (test->account_service);
114
115 tp_dbus_daemon_release_name (test->dbus, TP_ACCOUNT_MANAGER_BUS_NAME,
116 &test->error);
117 g_assert_no_error (test->error);
118
119 g_object_unref (test->dbus);
120 test->dbus = NULL;
121 g_main_loop_unref (test->mainloop);
122 test->mainloop = NULL;
123
124 g_object_unref (test->account);
125
126 g_object_unref (test->text_chan_service);
127 g_object_unref (test->text_chan);
128
129 tp_cli_connection_run_disconnect (test->connection, -1, &test->error, NULL);
130 g_assert_no_error (test->error);
131
132 g_object_unref (test->connection);
133 g_object_unref (test->base_connection);
134 }
135
136 static void
137 create_simple_handler (Test *test,
138 gboolean bypass_approval,
139 gboolean requests,
140 TpSimpleHandlerHandleChannelsImpl impl)
141 {
142 /* Create service-side Client object */
143 test->simple_handler = test_object_new_static_class (TP_TYPE_SIMPLE_HANDLER,
144 "dbus-daemon", test->dbus,
145 "bypass-approval", bypass_approval,
146 "requests", requests,
147 "name", "MySimpleHandler",
148 "uniquify-name", FALSE,
149 "callback", impl,
150 "user-data", test,
151 "destroy", NULL,
152 NULL);
153 g_assert (test->simple_handler != NULL);
154
155 /* Create client-side Client object */
156 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
157 "dbus-daemon", test->dbus,
158 "bus-name", tp_base_client_get_bus_name (test->simple_handler),
159 "object-path", tp_base_client_get_object_path (test->simple_handler),
160 NULL);
161
162 g_assert (test->client != NULL);
163 }
164
165 static void
166 get_client_prop_cb (TpProxy *proxy,
167 GHashTable *properties,
168 const GError *error,
169 gpointer user_data,
170 GObject *weak_object)
171 {
172 Test *test = user_data;
173 const gchar * const *interfaces;
174
175 if (error != NULL)
176 {
177 test->error = g_error_copy (error);
178 goto out;
179 }
180
181 g_assert_cmpint (g_hash_table_size (properties), == , 1);
182
183 interfaces = tp_asv_get_strv (properties, "Interfaces");
184 g_assert_cmpint (g_strv_length ((GStrv) interfaces), ==, 2);
185 g_assert (tp_strv_contains (interfaces, TP_IFACE_CLIENT_HANDLER));
186 g_assert (tp_strv_contains (interfaces, TP_IFACE_CLIENT_INTERFACE_REQUESTS));
187
188 out:
189 g_main_loop_quit (test->mainloop);
190 }
191
192 static void
193 check_filters (GPtrArray *filters)
194 {
195 GHashTable *filter;
196
197 g_assert (filters != NULL);
198 g_assert_cmpuint (filters->len, ==, 2);
199
200 filter = g_ptr_array_index (filters, 0);
201 g_assert_cmpuint (g_hash_table_size (filter), ==, 1);
202 g_assert_cmpstr (tp_asv_get_string (filter, TP_PROP_CHANNEL_CHANNEL_TYPE), ==,
203 TP_IFACE_CHANNEL_TYPE_TEXT);
204
205 filter = g_ptr_array_index (filters, 1);
206 g_assert_cmpuint (g_hash_table_size (filter), ==, 2);
207 g_assert_cmpstr (tp_asv_get_string (filter, TP_PROP_CHANNEL_CHANNEL_TYPE), ==,
208 TP_IFACE_CHANNEL_TYPE_STREAM_TUBE);
209 g_assert_cmpuint (tp_asv_get_uint32 (filter,
210 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL), ==, TP_HANDLE_TYPE_CONTACT);
211 }
212
213 static void
214 get_handler_prop_cb (TpProxy *proxy,
215 GHashTable *properties,
216 const GError *error,
217 gpointer user_data,
218 GObject *weak_object)
219 {
220 Test *test = user_data;
221 GPtrArray *filters;
222 gboolean bypass;
223 gboolean valid;
224 const gchar * const * capabilities;
225 GPtrArray *handled;
226
227 if (error != NULL)
228 {
229 test->error = g_error_copy (error);
230 goto out;
231 }
232
233 g_assert_cmpint (g_hash_table_size (properties), == , 4);
234
235 filters = tp_asv_get_boxed (properties, "HandlerChannelFilter",
236 TP_ARRAY_TYPE_CHANNEL_CLASS_LIST);
237 check_filters (filters);
238
239 bypass = tp_asv_get_boolean (properties, "BypassApproval", &valid);
240 g_assert (valid);
241 g_assert (bypass);
242
243 capabilities = tp_asv_get_strv (properties, "Capabilities");
244 g_assert_cmpint (g_strv_length ((GStrv) capabilities), ==, 0);
245
246 handled = tp_asv_get_boxed (properties, "HandledChannels",
247 TP_ARRAY_TYPE_OBJECT_PATH_LIST);
248 g_assert (handled != NULL);
249 g_assert_cmpint (handled->len, ==, 0);
250
251 out:
252 g_main_loop_quit (test->mainloop);
253 }
254
255 static void
256 handle_channels_success (
257 TpSimpleHandler *handler,
258 TpAccount *account,
259 TpConnection *connection,
260 GList *channels,
261 GList *requests_satisified,
262 gint64 user_action_time,
263 TpHandleChannelsContext *context,
264 gpointer user_data)
265 {
266 tp_handle_channels_context_accept (context);
267 }
268
269 static void
270 test_properties (Test *test,
271 gconstpointer data G_GNUC_UNUSED)
272 {
273 create_simple_handler (test, TRUE, TRUE, handle_channels_success);
274
275 tp_base_client_take_handler_filter (test->simple_handler, tp_asv_new (
276 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
277 NULL));
278
279 tp_base_client_take_handler_filter (test->simple_handler, tp_asv_new (
280 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
281 TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
282 TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
283 TP_HANDLE_TYPE_CONTACT,
284 NULL));
285
286 tp_base_client_register (test->simple_handler, &test->error);
287 g_assert_no_error (test->error);
288
289 /* Check Client properties */
290 tp_cli_dbus_properties_call_get_all (test->client, -1,
291 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
292
293 g_main_loop_run (test->mainloop);
294 g_assert_no_error (test->error);
295
296 /* Check Handler properties */
297 tp_cli_dbus_properties_call_get_all (test->client, -1,
298 TP_IFACE_CLIENT_HANDLER, get_handler_prop_cb, test, NULL, NULL);
299
300 g_main_loop_run (test->mainloop);
301 g_assert_no_error (test->error);
302 }
303
304 static void
305 no_return_cb (TpClient *proxy,
306 const GError *error,
307 gpointer user_data,
308 GObject *weak_object)
309 {
310 Test *test = user_data;
311
312 g_clear_error (&test->error);
313
314 if (error != NULL)
315 {
316 test->error = g_error_copy (error);
317 goto out;
318 }
319
320 out:
321 g_main_loop_quit (test->mainloop);
322 }
323
324 static void
325 add_channel_to_ptr_array (GPtrArray *arr,
326 TpChannel *channel)
327 {
328 GValueArray *tmp;
329
330 g_assert (arr != NULL);
331 g_assert (channel != NULL);
332
333 tmp = tp_value_array_build (2,
334 DBUS_TYPE_G_OBJECT_PATH, tp_proxy_get_object_path (channel),
335 TP_HASH_TYPE_STRING_VARIANT_MAP, tp_channel_borrow_immutable_properties (
336 channel),
337 G_TYPE_INVALID);
338
339 g_ptr_array_add (arr, tmp);
340 }
341
342 static void
343 free_channel_details (gpointer data,
344 gpointer user_data)
345 {
346 g_boxed_free (TP_STRUCT_TYPE_CHANNEL_DETAILS, data);
347 }
348
349 static void
350 call_handle_channels (Test *test)
351 {
352 GPtrArray *channels, *requests_satisified;
353 GHashTable *info;
354
355 channels = g_ptr_array_sized_new (1);
356 add_channel_to_ptr_array (channels, test->text_chan);
357
358 requests_satisified = g_ptr_array_sized_new (0);
359 info = g_hash_table_new (NULL, NULL);
360
361 tp_proxy_add_interface_by_id (TP_PROXY (test->client),
362 TP_IFACE_QUARK_CLIENT_HANDLER);
363
364 tp_cli_client_handler_call_handle_channels (test->client, -1,
365 tp_proxy_get_object_path (test->account),
366 tp_proxy_get_object_path (test->connection),
367 channels, requests_satisified, 0, info,
368 no_return_cb, test, NULL, NULL);
369
370 g_main_loop_run (test->mainloop);
371
372 g_ptr_array_foreach (channels, free_channel_details, NULL);
373 g_ptr_array_free (channels, TRUE);
374 g_ptr_array_free (requests_satisified, TRUE);
375 g_hash_table_unref (info);
376 }
377
378 /* HandleChannels returns immediately */
379 static void
380 test_success (Test *test,
381 gconstpointer data G_GNUC_UNUSED)
382 {
383 create_simple_handler (test, FALSE, FALSE, handle_channels_success);
384
385 tp_base_client_take_handler_filter (test->simple_handler,
386 g_hash_table_new (NULL, NULL));
387
388 tp_base_client_register (test->simple_handler, &test->error);
389 g_assert_no_error (test->error);
390
391 call_handle_channels (test);
392 g_assert_no_error (test->error);
393 }
394
395 /* HandleChannels returns in an async way */
396 static gboolean
397 accept_idle_cb (gpointer data)
398 {
399 TpHandleChannelsContext *context = data;
400
401 tp_handle_channels_context_accept (context);
402 g_object_unref (context);
403 return FALSE;
404 }
405
406 static void
407 handle_channels_async (
408 TpSimpleHandler *handler,
409 TpAccount *account,
410 TpConnection *connection,
411 GList *channels,
412 GList *requests_satisified,
413 gint64 user_action_time,
414 TpHandleChannelsContext *context,
415 gpointer user_data)
416 {
417 g_idle_add (accept_idle_cb, g_object_ref (context));
418
419 tp_handle_channels_context_delay (context);
420 }
421
422 static void
423 test_delayed (Test *test,
424 gconstpointer data G_GNUC_UNUSED)
425 {
426 create_simple_handler (test, FALSE, FALSE, handle_channels_async);
427
428 tp_base_client_take_handler_filter (test->simple_handler,
429 g_hash_table_new (NULL, NULL));
430
431 tp_base_client_register (test->simple_handler, &test->error);
432 g_assert_no_error (test->error);
433
434 call_handle_channels (test);
435 g_assert_no_error (test->error);
436 }
437
438 /* HandleChannels fails */
439 static void
440 handle_channels_fail (
441 TpSimpleHandler *handler,
442 TpAccount *account,
443 TpConnection *connection,
444 GList *channels,
445 GList *requests_satisified,
446 gint64 user_action_time,
447 TpHandleChannelsContext *context,
448 gpointer user_data)
449 {
450 GError error = { TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
451 "No HandleChannels for you!" };
452
453 tp_handle_channels_context_fail (context, &error);
454 }
455
456 static void
457 test_fail (Test *test,
458 gconstpointer data G_GNUC_UNUSED)
459 {
460 create_simple_handler (test, FALSE, FALSE, handle_channels_fail);
461
462 tp_base_client_take_handler_filter (test->simple_handler,
463 g_hash_table_new (NULL, NULL));
464
465 tp_base_client_register (test->simple_handler, &test->error);
466 g_assert_no_error (test->error);
467
468 call_handle_channels (test);
469 g_assert_error (test->error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE);
470 }
471
472 int
473 main (int argc,
474 char **argv)
475 {
476 g_type_init ();
477 tp_debug_set_flags ("all");
478
479 g_test_init (&argc, &argv, NULL);
480 g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
481
482 g_test_add ("/simple-handler/properties", Test, NULL, setup, test_properties,
483 teardown);
484 g_test_add ("/simple-handler/success", Test, NULL, setup, test_success,
485 teardown);
486 g_test_add ("/simple-handler/delayed", Test, NULL, setup, test_delayed,
487 teardown);
488 g_test_add ("/simple-handler/fail", Test, NULL, setup, test_fail,
489 teardown);
490
491 return g_test_run ();
492 }
00 #include <glib.h>
11 #include <telepathy-glib/intset.h>
22 #include <telepathy-glib/util.h>
3
4 static void
5 iterate_in_order (TpIntSet *set)
6 {
7 TpIntSetIter iter;
8 guint n = 0;
9 gint64 prev = (guint) -1;
10
11 tp_intset_iter_init (&iter, set);
12
13 while (tp_intset_iter_next (&iter))
14 {
15 g_assert (tp_intset_is_member (set, iter.element));
16
17 if (prev != (guint) -1)
18 g_assert_cmpuint (iter.element, >, prev);
19
20 prev = iter.element;
21 n++;
22 }
23
24 g_assert_cmpuint (n, ==, tp_intset_size (set));
25 }
26
27 static void
28 iterate_fast (TpIntSet *set)
29 {
30 TpIntSetFastIter iter;
31 guint n = 0;
32 guint i;
33
34 tp_intset_fast_iter_init (&iter, set);
35
36 while (tp_intset_fast_iter_next (&iter, &i))
37 {
38 g_assert (tp_intset_is_member (set, i));
39 n++;
40 }
41
42 g_assert_cmpuint (n, ==, tp_intset_size (set));
43 }
44
45 static void
46 test_iteration (TpIntSet *set)
47 {
48 iterate_fast (set);
49 iterate_in_order (set);
50 }
351
452 int main (int argc, char **argv)
553 {
1462
1563 g_type_init ();
1664
65 g_assert (tp_intset_is_empty (set1));
66 g_assert_cmpuint (tp_intset_size (set1), ==, 0);
67
1768 tp_intset_add (set1, 0);
1869
1970 tp_intset_add (set1, 2);
2475 tp_intset_add (set1, 1024);
2576 tp_intset_add (set1, 32);
2677
27 g_assert (tp_intset_size (set1) == 7);
78 g_assert (!tp_intset_is_empty (set1));
79 g_assert_cmpuint (tp_intset_size (set1), ==, 7);
2880
2981 g_assert (tp_intset_is_member (set1, 2));
3082 g_assert (tp_intset_is_member (set1, 5));
3890
3991 tp_intset_remove (set1, 8);
4092 tp_intset_remove (set1, 1024);
41 g_assert (tp_intset_size (set1) == 5);
93 g_assert_cmpuint (tp_intset_size (set1), ==, 5);
94
95 test_iteration (set1);
4296
4397 tp_intset_destroy (set1);
4498
54108 tp_intset_add (a, NUM_B);
55109 tp_intset_add (a, NUM_C);
56110 tp_intset_add (a, NUM_D);
111 test_iteration (a);
57112
58113 g_assert (tp_intset_is_equal (a, a));
59114
63118 tp_intset_add (b, NUM_E);
64119 tp_intset_add (b, NUM_F);
65120
121 test_iteration (b);
66122 g_assert (tp_intset_is_equal (b, b));
67123 g_assert (!tp_intset_is_equal (a, b));
68124
76132
77133 ab_union = tp_intset_union (a, b);
78134 g_assert (tp_intset_is_equal (ab_union, ab_expected_union));
135 test_iteration (ab_union);
79136 tp_intset_destroy (ab_union);
80137 tp_intset_destroy (ab_expected_union);
81138 ab_union = NULL;
86143 tp_intset_add (ab_expected_inter, NUM_D);
87144
88145 ab_inter = tp_intset_intersection (a, b);
146 test_iteration (ab_inter);
89147 g_assert (tp_intset_is_equal (ab_inter, ab_expected_inter));
90148 tp_intset_destroy (ab_inter);
91149 tp_intset_destroy (ab_expected_inter);
97155 tp_intset_add (a_expected_diff_b, NUM_B);
98156
99157 a_diff_b = tp_intset_difference (a, b);
158 test_iteration (a_diff_b);
100159 g_assert (tp_intset_is_equal (a_diff_b, a_expected_diff_b));
101160 tp_intset_destroy (a_diff_b);
102161 tp_intset_destroy (a_expected_diff_b);
108167 tp_intset_add (b_expected_diff_a, NUM_F);
109168
110169 b_diff_a = tp_intset_difference (b, a);
170 test_iteration (b_diff_a);
111171 g_assert (tp_intset_is_equal (b_diff_a, b_expected_diff_a));
112172 tp_intset_destroy (b_diff_a);
113173 tp_intset_destroy (b_expected_diff_a);
121181 tp_intset_add (ab_expected_symmdiff, NUM_F);
122182
123183 ab_symmdiff = tp_intset_symmetric_difference (a, b);
184 test_iteration (ab_symmdiff);
124185 g_assert (tp_intset_is_equal (ab_symmdiff, ab_expected_symmdiff));
125186 tp_intset_destroy (ab_symmdiff);
126187 tp_intset_destroy (ab_expected_symmdiff);
153214
154215 g_assert (copy != a);
155216 g_assert (tp_intset_is_equal (copy, a));
217 test_iteration (copy);
156218 g_boxed_free (TP_TYPE_INTSET, copy);
157219
158220 /* a is owned by value now, so don't free it explicitly */
176176 PACKAGE_VERSION = @PACKAGE_VERSION@
177177 PATH_SEPARATOR = @PATH_SEPARATOR@
178178 PKG_CONFIG = @PKG_CONFIG@
179 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
180 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
179181 PYTHON = @PYTHON@
180182 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
181183 PYTHON_PLATFORM = @PYTHON_PLATFORM@
2424 static void init_avatars (gpointer, gpointer);
2525 static void init_location (gpointer, gpointer);
2626 static void init_contact_caps (gpointer, gpointer);
27 static void conn_avatars_properties_getter (GObject *object, GQuark interface,
28 GQuark name, GValue *value, gpointer getter_data);
2729
2830 G_DEFINE_TYPE_WITH_CODE (ContactsConnection,
2931 contacts_connection,
4749
4850 /* type definition stuff */
4951
52 static const char *mime_types[] = { "image/png", NULL };
53 static TpDBusPropertiesMixinPropImpl conn_avatars_properties[] = {
54 { "MinimumAvatarWidth", GUINT_TO_POINTER (1), NULL },
55 { "MinimumAvatarHeight", GUINT_TO_POINTER (2), NULL },
56 { "RecommendedAvatarWidth", GUINT_TO_POINTER (3), NULL },
57 { "RecommendedAvatarHeight", GUINT_TO_POINTER (4), NULL },
58 { "MaximumAvatarWidth", GUINT_TO_POINTER (5), NULL },
59 { "MaximumAvatarHeight", GUINT_TO_POINTER (6), NULL },
60 { "MaximumAvatarBytes", GUINT_TO_POINTER (7), NULL },
61 /* special-cased - it's the only one with a non-guint value */
62 { "SupportedAvatarMIMETypes", NULL, NULL },
63 { NULL }
64 };
65
5066 enum
5167 {
5268 N_SIGNALS
5672 {
5773 /* TpHandle => gchar * */
5874 GHashTable *aliases;
59 /* TpHandle => gchar * */
60 GHashTable *avatar_tokens;
75 /* TpHandle => AvatarData */
76 GHashTable *avatars;
6177 /* TpHandle => ContactsConnectionPresenceStatusIndex */
6278 GHashTable *presence_statuses;
6379 /* TpHandle => gchar * */
6884 GHashTable *capabilities;
6985 };
7086
87 typedef struct
88 {
89 GArray *data;
90 gchar *mime_type;
91 gchar *token;
92 } AvatarData;
93
94 static AvatarData *
95 avatar_data_new (GArray *data,
96 const gchar *mime_type,
97 const gchar *token)
98 {
99 AvatarData *a;
100
101 a = g_slice_new (AvatarData);
102 a->data = data ? g_array_ref (data) : NULL;
103 a->mime_type = g_strdup (mime_type);
104 a->token = g_strdup (token);
105
106 return a;
107 }
108
109 static void
110 avatar_data_free (gpointer data)
111 {
112 AvatarData *a = data;
113
114 if (a != NULL)
115 {
116 if (a->data != NULL)
117 g_array_unref (a->data);
118 g_free (a->mime_type);
119 g_free (a->token);
120 g_slice_free (AvatarData, a);
121 }
122 }
123
71124 static void
72125 free_rcc_list (GPtrArray *rccs)
73126 {
81134 ContactsConnectionPrivate);
82135 self->priv->aliases = g_hash_table_new_full (g_direct_hash, g_direct_equal,
83136 NULL, g_free);
84 self->priv->avatar_tokens = g_hash_table_new_full (g_direct_hash,
85 g_direct_equal, NULL, g_free);
137 self->priv->avatars = g_hash_table_new_full (g_direct_hash,
138 g_direct_equal, NULL, avatar_data_free);
86139 self->priv->presence_statuses = g_hash_table_new_full (g_direct_hash,
87140 g_direct_equal, NULL, NULL);
88141 self->priv->presence_messages = g_hash_table_new_full (g_direct_hash,
100153
101154 tp_contacts_mixin_finalize (object);
102155 g_hash_table_destroy (self->priv->aliases);
103 g_hash_table_destroy (self->priv->avatar_tokens);
156 g_hash_table_destroy (self->priv->avatars);
104157 g_hash_table_destroy (self->priv->presence_statuses);
105158 g_hash_table_destroy (self->priv->presence_messages);
106159 g_hash_table_destroy (self->priv->locations);
148201 for (i = 0; i < contacts->len; i++)
149202 {
150203 TpHandle handle = g_array_index (contacts, guint, i);
151 const gchar *token = g_hash_table_lookup (self->priv->avatar_tokens,
204 AvatarData *a = g_hash_table_lookup (self->priv->avatars,
152205 GUINT_TO_POINTER (handle));
153206
154 if (token != NULL)
207 if (a != NULL && a->token != NULL)
155208 {
156209 tp_contacts_mixin_set_contact_attribute (attributes, handle,
157210 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token",
158 tp_g_value_slice_new_string (token));
211 tp_g_value_slice_new_string (a->token));
159212 }
160213 }
161214 }
344397 TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES,
345398 TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
346399 NULL };
400 static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
401 { TP_IFACE_CONNECTION_INTERFACE_AVATARS,
402 conn_avatars_properties_getter,
403 NULL,
404 conn_avatars_properties,
405 },
406 { NULL }
407 };
347408
348409 object_class->constructed = constructed;
349410 object_class->finalize = finalize;
360421 my_set_own_status, my_statuses);
361422
362423 tp_presence_mixin_simple_presence_init_dbus_properties (object_class);
424
425 klass->properties_class.interfaces = prop_interfaces;
426 tp_dbus_properties_mixin_class_init (object_class,
427 G_STRUCT_OFFSET (ContactsConnectionClass, properties_class));
363428 }
364429
365430 void
451516 for (i = 0; i < n; i++)
452517 {
453518 DEBUG ("contact#%u -> %s", handles[i], tokens[i]);
454 g_hash_table_insert (self->priv->avatar_tokens,
455 GUINT_TO_POINTER (handles[i]), g_strdup (tokens[i]));
519 g_hash_table_insert (self->priv->avatars,
520 GUINT_TO_POINTER (handles[i]), avatar_data_new (NULL, NULL, tokens[i]));
456521 tp_svc_connection_interface_avatars_emit_avatar_updated (self,
457522 handles[i], tokens[i]);
458523 }
524 }
525
526 void
527 contacts_connection_change_avatar_data (ContactsConnection *self,
528 TpHandle handle,
529 GArray *data,
530 const gchar *mime_type,
531 const gchar *token)
532 {
533 g_hash_table_insert (self->priv->avatars,
534 GUINT_TO_POINTER (handle), avatar_data_new (data, mime_type, token));
535
536 tp_svc_connection_interface_avatars_emit_avatar_updated (self,
537 handle, token);
459538 }
460539
461540 void
639718 for (i = 0; i < contacts->len; i++)
640719 {
641720 TpHandle handle = g_array_index (contacts, TpHandle, i);
642 const gchar *token = g_hash_table_lookup (self->priv->avatar_tokens,
721 AvatarData *a = g_hash_table_lookup (self->priv->avatars,
643722 GUINT_TO_POINTER (handle));
644723
645 if (token == NULL)
724 if (a == NULL || a->token == NULL)
646725 {
647726 /* we're expected to do a round-trip to the server to find out
648727 * their token, so we have to give some sort of result. Assume
649728 * no avatar, here */
650 token = "";
651 g_hash_table_insert (self->priv->avatar_tokens,
652 GUINT_TO_POINTER (handle), g_strdup (token));
729 a = avatar_data_new (NULL, NULL, "");
730 g_hash_table_insert (self->priv->avatars,
731 GUINT_TO_POINTER (handle), a);
653732 tp_svc_connection_interface_avatars_emit_avatar_updated (self,
654 handle, token);
733 handle, a->token);
655734 }
656735
657736 g_hash_table_insert (result, GUINT_TO_POINTER (handle),
658 (gchar *) token);
737 a->token);
659738 }
660739
661740 tp_svc_connection_interface_avatars_return_from_get_known_avatar_tokens (
690769 for (i = 0; i < contacts->len; i++)
691770 {
692771 TpHandle handle = g_array_index (contacts, TpHandle, i);
693 const gchar *token = g_hash_table_lookup (self->priv->avatar_tokens,
772 AvatarData *a = g_hash_table_lookup (self->priv->avatars,
694773 GUINT_TO_POINTER (handle));
774 const gchar *token = a ? a->token : NULL;
695775
696776 g_hash_table_insert (result, GUINT_TO_POINTER (handle),
697777 (gchar *) (token != NULL ? token : ""));
700780 tp_svc_connection_interface_avatars_return_from_get_known_avatar_tokens (
701781 context, result);
702782 g_hash_table_destroy (result);
783 }
784
785 static void
786 my_request_avatars (TpSvcConnectionInterfaceAvatars *avatars,
787 const GArray *contacts,
788 DBusGMethodInvocation *context)
789 {
790 ContactsConnection *self = CONTACTS_CONNECTION (avatars);
791 TpBaseConnection *base = TP_BASE_CONNECTION (avatars);
792 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
793 TP_HANDLE_TYPE_CONTACT);
794 GError *error = NULL;
795 guint i;
796
797 TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
798
799 if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error))
800 {
801 dbus_g_method_return_error (context, error);
802 g_error_free (error);
803 return;
804 }
805
806 for (i = 0; i < contacts->len; i++)
807 {
808 TpHandle handle = g_array_index (contacts, TpHandle, i);
809 AvatarData *a = g_hash_table_lookup (self->priv->avatars,
810 GUINT_TO_POINTER (handle));
811
812 if (a != NULL)
813 tp_svc_connection_interface_avatars_emit_avatar_retrieved (self, handle,
814 a->token, a->data, a->mime_type);
815 }
816
817 tp_svc_connection_interface_avatars_return_from_request_avatars (context);
818 }
819
820 static void
821 conn_avatars_properties_getter (GObject *object,
822 GQuark interface,
823 GQuark name,
824 GValue *value,
825 gpointer getter_data)
826 {
827 GQuark q_mime_types = g_quark_from_static_string (
828 "SupportedAvatarMIMETypes");
829
830 if (name == q_mime_types)
831 {
832 g_value_set_static_boxed (value, mime_types);
833 }
834 else
835 {
836 g_value_set_uint (value, GPOINTER_TO_UINT (getter_data));
837 }
703838 }
704839
705840 static void
714849 IMPLEMENT(get_avatar_tokens);
715850 IMPLEMENT(get_known_avatar_tokens);
716851 /* IMPLEMENT(request_avatar); */
717 /* IMPLEMENT(request_avatars); */
852 IMPLEMENT(request_avatars);
718853 /* IMPLEMENT(set_avatar); */
719854 /* IMPLEMENT(clear_avatar); */
720855 #undef IMPLEMENT
2929
3030 TpPresenceMixinClass presence_mixin;
3131 TpContactsMixinClass contacts_mixin;
32 TpDBusPropertiesMixinClass properties_class;
3233 };
3334
3435 struct _ContactsConnection {
7980
8081 void contacts_connection_change_avatar_tokens (ContactsConnection *self,
8182 guint n, const TpHandle *handles, const gchar * const *tokens);
83
84 void contacts_connection_change_avatar_data (ContactsConnection *self,
85 TpHandle handle,
86 GArray *data,
87 const gchar *mime_type,
88 const gchar *token);
8289
8390 void contacts_connection_change_locations (ContactsConnection *self,
8491 guint n,
133133 }
134134
135135 static void
136 simple_handle_channels (TpBaseClient *client,
137 TpAccount *account,
138 TpConnection *connection,
139 GList *channels,
140 GList *requests_satisfied,
141 gint64 user_action_time,
142 TpHandleChannelsContext *context)
143 {
144 SimpleClient *self = SIMPLE_CLIENT (client);
145 GList *l;
146
147 if (self->handle_channels_ctx != NULL)
148 {
149 g_object_unref (self->handle_channels_ctx);
150 self->handle_channels_ctx = NULL;
151 }
152
153 g_assert (TP_IS_ACCOUNT (account));
154 g_assert (tp_proxy_is_prepared (account, TP_ACCOUNT_FEATURE_CORE));
155
156 g_assert (TP_IS_CONNECTION (connection));
157 g_assert (tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CORE));
158
159 g_assert_cmpuint (g_list_length (channels), >, 0);
160 for (l = channels; l != NULL; l = g_list_next (l))
161 {
162 TpChannel *channel = l->data;
163
164 g_assert (TP_IS_CHANNEL (channel));
165 g_assert (tp_proxy_is_prepared (channel, TP_CHANNEL_FEATURE_CORE) ||
166 tp_proxy_get_invalidated (channel) != NULL);
167 }
168
169 for (l = requests_satisfied; l != NULL; l = g_list_next (l))
170 {
171 TpChannelRequest *request = l->data;
172
173 g_assert (TP_IS_CHANNEL_REQUEST (request));
174 }
175
176 self->handle_channels_ctx = g_object_ref (context);
177 tp_handle_channels_context_accept (context);
178 }
179
180 static void
136181 simple_client_init (SimpleClient *self)
137182 {
138183 }
156201 self->add_dispatch_ctx = NULL;
157202 }
158203
204 if (self->handle_channels_ctx != NULL)
205 {
206 g_object_unref (self->handle_channels_ctx);
207 self->handle_channels_ctx = NULL;
208 }
209
159210 if (dispose != NULL)
160211 dispose (object);
161212 }
173224
174225 tp_base_client_implement_add_dispatch_operation (base_class,
175226 simple_add_dispatch_operation);
227
228 tp_base_client_implement_handle_channels (base_class,
229 simple_handle_channels);
176230 }
177231
178232 SimpleClient *
2727
2828 TpObserveChannelsContext *observe_ctx;
2929 TpAddDispatchOperationContext *add_dispatch_ctx;
30 TpHandleChannelsContext *handle_channels_ctx;
3031 };
3132
3233 GType simple_client_get_type (void);
204204 }
205205 }
206206
207 void
208 test_text_channel_null_close (TestTextChannelNull *self)
209 {
210 if (!self->priv->closed)
211 {
212 self->priv->closed = TRUE;
213 tp_svc_channel_emit_closed (self);
214 tp_dbus_daemon_unregister_object (
215 tp_base_connection_get_dbus_daemon (self->priv->conn), self);
216 }
217 }
218
207219 static void
208220 dispose (GObject *object)
209221 {
213225 return;
214226
215227 self->priv->disposed = TRUE;
216
217 if (!self->priv->closed)
218 {
219 tp_svc_channel_emit_closed (self);
220 }
228 test_text_channel_null_close (self);
221229
222230 ((GObjectClass *) test_text_channel_null_parent_class)->dispose (object);
223231 }
443451 {
444452 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (iface);
445453
446 if (!self->priv->closed)
447 {
448 self->priv->closed = TRUE;
449 tp_svc_channel_emit_closed (self);
450 }
451
454 test_text_channel_null_close (self);
452455 tp_svc_channel_return_from_close (context);
453456 }
454457
127127 (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
128128 TestPropsGroupTextChannelClass))
129129
130 void test_text_channel_null_close (TestTextChannelNull *self);
131
130132 G_END_DECLS
131133
132134 #endif /* #ifndef __TEST_TEXT_CHANNEL_NULL_H__ */
88 */
99
1010 #include "tests/lib/util.h"
11
12 void
13 test_proxy_run_until_prepared (gpointer proxy,
14 const GQuark *features)
15 {
16 GError *error = NULL;
17
18 test_proxy_run_until_prepared_or_failed (proxy, features, &error);
19 g_assert_no_error (error);
20 }
21
22 static void
23 prepared_cb (GObject *object,
24 GAsyncResult *res,
25 gpointer user_data)
26 {
27 GAsyncResult **result = user_data;
28
29 *result = g_object_ref (res);
30 }
31
32 gboolean
33 test_proxy_run_until_prepared_or_failed (gpointer proxy,
34 const GQuark *features,
35 GError **error)
36 {
37 GAsyncResult *result = NULL;
38
39 tp_proxy_prepare_async (proxy, features, prepared_cb, &result);
40 /* not synchronous */
41 g_assert (result == NULL);
42
43 while (result == NULL)
44 g_main_context_iteration (NULL, TRUE);
45
46 return tp_proxy_prepare_finish (proxy, result, error);
47 }
1148
1249 static void
1350 conn_ready_cb (TpConnection *conn G_GNUC_UNUSED,
2222
2323 TpHandle test_connection_run_request_contact_handle (TpConnection *connection,
2424 const gchar *id);
25
26 void test_proxy_run_until_prepared (gpointer proxy,
27 const GQuark *features);
28 gboolean test_proxy_run_until_prepared_or_failed (gpointer proxy,
29 const GQuark *features,
30 GError **error);
2531
2632 void test_connection_run_until_ready (TpConnection *conn);
2733 void test_connection_manager_run_until_ready (TpConnectionManager *cm);
143143 PACKAGE_VERSION = @PACKAGE_VERSION@
144144 PATH_SEPARATOR = @PATH_SEPARATOR@
145145 PKG_CONFIG = @PKG_CONFIG@
146 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
147 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
146148 PYTHON = @PYTHON@
147149 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
148150 PYTHON_PLATFORM = @PYTHON_PLATFORM@
140140 PACKAGE_VERSION = @PACKAGE_VERSION@
141141 PATH_SEPARATOR = @PATH_SEPARATOR@
142142 PKG_CONFIG = @PKG_CONFIG@
143 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
144 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
143145 PYTHON = @PYTHON@
144146 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
145147 PYTHON_PLATFORM = @PYTHON_PLATFORM@